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
:
// 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:
// 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.
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.
// 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 :
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.
Actuellement, une demande de tirage est nécessaire pour ajouter les métadonnées du jeton à la liste de jetons.