Fungible Token
Fungible Token Standard
In Alephium können neue Tokens ausgegeben werden, wenn neue Verträge bereitgestellt werden. Die ID des neu ausgegebenen Tokens ist dieselbe wie die ID des Contracts, der es ausgibt. Sie können sich an diese Anleitung wenden, um Details darüber zu erfahren, wie Sie auf Alephium von Grund auf neue Tokens ausgeben können.
Tokens sind in der Regel mit Informationen wie
name
, decimals
, totalSupply
usw. verbunden. Das Ziel des Token-Standards
ist es, Einschränkungen für den Token-ausgebenden Contract festzulegen, damit es
für dApps und Wallets einfacher wird, Token-Typen zu erschließen und
Token-Informationen abzurufen.
Die Standard fungible-Token-Interface definiert Methoden zum Abrufen des name
, symbol
, decimals
sowie des
totalSupply
des Tokens. Sie ist auch mit der @std
-Annotation mit der ID #0001
versehen:
// Standard-Schnittstelle für fungible Tokens
@std(id = #0001)
Interface IFungibleToken {
pub fn getSymbol() -> ByteVec
pub fn getName() -> ByteVec
pub fn getDecimals() -> U256
pub fn getTotalSupply() -> U256
}
// Ein `TokenFaucet-Vertrag`, der die Schnittstelle `IFungibleToken` implementiert
Contract TokenFaucet(
symbol: ByteVec,
name: ByteVec,
decimals: U256,
supply: U256
) implements IFungibleToken {
pub fn getTotalSupply() -> U256 {
return supply
}
pub fn getSymbol() -> ByteVec {
return symbol
}
pub fn getName() -> ByteVec {
return name
}
pub fn getDecimals() -> U256 {
return decimals
}
}
Sobald ein Token-Contract die IFungibleToken-Schnittstelle implementiert,
wie der oben gezeigte TokenFaucet
-Contract, ermöglicht es dem SDK, Informationen auf eine standardisierte Weise abzurufen:
// Verwenden Sie das SDK, um Methoden einzeln aufzurufen
const getDecimalResult = await tokenFaucet.methods.getDecimals()
const getTotalSupplyResult = await tokenFaucet.methods.getTotalSupply()
const getNameResult = await tokenFaucet.methods.getName()
console.log("TokenFaucet name, decimals, totalSupply", getNameResult.returns, getDecimalResult.returns, getTotalSupplyResult.returns)
// Verwenden Sie das SDK, um alle mehreren Methoden gleichzeitig aufzurufen
const multicallResult = await tokenFaucet.multicall({
getDecimals: {},
getTotalSupply: {},
getName: {},
})
console.log("TokenFaucet name, decimals, totalSupply", multicallResult.getName.returns, multicallResult.getDecimal.returns, multicallResult.getTotalSupply.returns)
Tatsächlich bietet das SDK eine kanonische Möglichkeit, alle Metadaten für ein fungibles Token abzurufen.
const metadata = await web3.getCurrentNodeProvider().fetchFungibleTokenMetaData(tokenFaucet.contractId)
console.log("TokenFaucet name, decimals, totalSupply", metadata.name, metadata.decimals, metadata.totalSupply)
IFungibleToken ermöglicht es dem SDK auch, den Typ eines Tokens zu erraten, damit dApps und Wallets diese entsprechend behandeln können:
// Token-Typ erraten
const tokenType = await web3.getCurrentNodeProvider().guessStdTokenType(tokenFaucet.contractId)
expect(tokenType).toEqual('fungible')
// Token-Schnittstellen-ID erraten
const tokenInterfaceId = await web3.getCurrentNodeProvider().guessStdInterfaceId(tokenFaucet.contractId)
expect(tokenInterfaceId).toEqual('0001')
Für ein funktionierendes und vollständigeres Beispiel werfen Sie bitte einen Blick auf das NextJS-Template-Repository.
Wallet Unterstützung
Sowohl die Desktop Wallet als auch die Extension Wallet unterstützen fungible Tokens nativ.
Nachfolgend ein Beispiel für die Anzeige und Übertragung des PACA
Tokens mit der Extension-Wallet:
Token Liste
Neben den grundlegenden Informationen wie name
, symbol
und
decimals
usw., enthalten fungible Tokens in der Regel auch andere Metadaten
wie description
und logoURI
, damit dApps und Wallets Sie ordnungsgemäß
anzeigen können.
Das Ziel der Token-Liste ist es, eine Vertrauensquelle für die Token-ID und die Metadaten der bekannten Tokens im Alephium-Ökosystem zu sein, damit Wallets und dApps Benutzer vor nicht verifizierten Tokens warnen können. Hier sehen Sie, wie die Erweiterungsbrieftasche ein Token vor und nachdem es zur Token-Liste hinzugefügt wurde, anzeigt.
Derzeit ist ein Pull Request erforderlich, um die Token-Metadaten zur Token-Liste hinzuzufügen.