Aller au contenu

Jetons fongibles

Norme des jetons fongibles

Dans Alephium, de nouveaux jetons peuvent être émis lors du déploiement de nouveaux contrats. L'identifiant du jeton nouvellement émis est le même que l'identifiant du contrat qui l'émet. Vous pouvez vous référer à ce guide pour plus de détails sur la manière d'émettre des jetons sur Alephium à partir de zéro.

Les jetons sont généralement associés à des informations telles que name, decimals, totalSupply, etc. L'objectif de la norme des jetons est de mettre des contraintes sur le contrat émetteur de jetons afin qu'il soit plus facile pour les dApps et les portefeuilles de déduire les types de jetons et de récupérer les informations sur les jetons.

L'interface de jeton fongible standard définit des méthodes pour obtenir le name, symbol, decimals as well as the totalSupply du jeton. Elle est également annotée avec l'annotation @std et l'identifiant #0001:

Rust
// Interface standard pour les jetons fongibles
@std(id = #0001)
Interface IFungibleToken {
  pub fn getSymbol() -> ByteVec
  pub fn getName() -> ByteVec
  pub fn getDecimals() -> U256
  pub fn getTotalSupply() -> U256
}

// Un contrat `TokenFaucet` qui implémente l'interface `IFungibleToken`
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
    }
}

Une fois qu'un contrat de jeton implémente l'interface IFungibleToken , comme le contrat TokenFaucet montré ci-dessus, cela permet au SDK d'obtenir des informations de manière standard:

TypeScript
// Utiliser le SDK pour appeler les méthodes individuellement
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)

// Utiliser le SDK pour appeler toutes les méthodes en même temps
const multicallResult = await tokenFaucet.multicall({
  getDecimals: {},
  getTotalSupply: {},
  getName: {},
})
console.log("TokenFaucet name, decimals, totalSupply", multicallResult.getName.returns, multicallResult.getDecimal.returns, multicallResult.getTotalSupply.returns)

En effet, le SDK fournit un moyen canonique de récupérer toutes les métadonnées pour un jeton fongible.

TypeScript
const metadata = await web3.getCurrentNodeProvider().fetchFungibleTokenMetaData(tokenFaucet.contractId)
console.log("TokenFaucet name, decimals, totalSupply", metadata.name, metadata.decimals, metadata.totalSupply)

IFungibleToken permet également au SDK de deviner le type d'un jeton, de sorte que les dApps et les portefeuilles puissent les gérer respectivement.

TypeScript
// Deviner le type de jeton
const tokenType = await web3.getCurrentNodeProvider().guessStdTokenType(tokenFaucet.contractId)
expect(tokenType).toEqual('fungible')

// Deviner l'identifiant de l'interface du jeton
const tokenInterfaceId = await web3.getCurrentNodeProvider().guessStdInterfaceId(tokenFaucet.contractId)
expect(tokenInterfaceId).toEqual('0001')

Pour un exemple fonctionnel et plus complet, veuillez consulter le dépôt nextjs-template.

Support des portefeuilles

Le portefeuille de bureau et le portefeuille d'extension prennent en charge nativement les jetons fongibles.

Voici un exemple de l'affichage et du transfert du jeton PACA en utilisant un portefeuille d'extension :

Transfer Alphpaca

Transfer Alphpaca

Transfer Alphpaca

Liste des jetons

Outre les informations de base telles que name, symbol and decimals, etc., les jetons fongibles contiennent généralement d'autres métadonnées telles que description et logoURI afin que les dApps et les portefeuilles puissent les afficher correctement.

L'objectif de la liste de jetons est d'être une source de confiance pour l'identifiant et les métadonnées des jetons bien connus dans l'écosystème Alephium, afin que les portefeuilles et les dApps puissent avertir les utilisateurs des jetons non vérifiés. Voici comment le portefeuille d'extension affiche un jeton avant et après qu'il soit ajouté à la liste de jetons.

unverified Token

unverified Token

Actuellement, une demande de tirage est nécessaire pour ajouter les métadonnées du jeton à la liste de jetons.