Zum Inhalt

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:

Rust
// 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:

TypeScript
// 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.

TypeScript
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:

TypeScript
// 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:

Transfer Alphpaca

Transfer Alphpaca

Transfer Alphpaca

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.

unverified Token

unverified Token

Derzeit ist ein Pull Request erforderlich, um die Token-Metadaten zur Token-Liste hinzuzufügen.