
Ce référentiel comprend un exemple de mise en œuvre d’un jeton non fongible contrat qui utilise quasi-contrat-normes et simulation essais.
Si vous utilisez Gitpod, vous pouvez ignorer cette étape.
- Assurez-vous que Rust est installé selon les conditions préalables dans
near-sdk-rs
. - S’assurer proche-cli est installé.
La source de ce contrat est en nft/lib.rs
. Il fournit des méthodes pour gérer l’accès aux jetons, transférer les jetons, vérifier l’accès et obtenir le propriétaire du jeton. Notez qu’une exploration plus approfondie à l’intérieur des macros de rouille est nécessaire pour voir comment le NonFungibleToken
contrat est mis en œuvre.
Exécutez ce qui suit, et nous construirons notre projet de rouille via cargo. Cela générera nos binaires WASM dans notre res/
annuaire. C’est le contrat intelligent que nous déploierons plus tard sur la blockchain NEAR.
./build.sh
Nous avons des tests qui peuvent être exécutés. Ce qui suit exécutera simplement nos tests simples pour vérifier que notre code de contrat fonctionne.
cargo test -- --nocapture
Les tests de simulation les plus complexes ne sont pas exécutés avec cette commande, mais nous pouvons les trouver dans tests/sim
.
Déploiement le plus rapide
Vous pouvez créer et déployer ce contrat intelligent sur un compte de développement. Comptes de développement sont des comptes générés automatiquement pour aider à développer et à tester des contrats intelligents. S’il vous plaît voir le Déploiement standard section pour créer un compte plus personnalisé sur lequel déployer.
near dev-deploy --wasmFile res/non_fungible_token.wasm --helperUrl https://near-contract-helper.onrender.com
Dans les coulisses, il s’agit de créer un compte et de déployer un contrat sur celui-ci. Sur la console, remarquez un message comme :
Déploiement terminé sur dev-1234567890123
Dans ce cas, le compte est dev-1234567890123
. Un fichier a été créé contenant une paire de clés du compte, situé à neardev/dev-account
. Pour faciliter les prochaines étapes, nous allons définir une variable d’environnement contenant cet identifiant de compte de développement et l’utiliser lors du copier/coller des commandes. Exécutez cette commande sur la variable d’environnement :
source neardev/dev-account.env
Vous pouvez savoir si la variable d’environnement est correctement définie si votre ligne de commande affiche le nom du compte après cette commande :
echo $CONTRACT_NAME
La commande suivante initialise le contrat en utilisant le new
méthode:
near call $CONTRACT_NAME new_default_meta '{"owner_id": "'$CONTRACT_NAME'"}' --accountId $CONTRACT_NAME
Pour afficher les métadonnées NFT :
near view $CONTRACT_NAME nft_metadata
Déploiement standard
Ce contrat intelligent sera déployé sur votre compte NEAR. Pour cet exemple, veuillez créer un nouveau compte NEAR. Étant donné que NEAR permet de mettre à niveau les contrats sur le même compte, les fonctions d’initialisation doivent être effacées. Si vous souhaitez exécuter cet exemple sur un compte NEAR sur lequel des contrats antérieurs ont été déployés, veuillez utiliser le near-cli
commander near delete
, puis recréez-le dans Wallet. Pour créer (ou recréer) un compte, veuillez suivre les instructions dans Portefeuille de test ou (PROCHE Portefeuille si nous utilisons mainnet
).
Dans la racine du projet, connectez-vous à votre compte nouvellement créé avec near-cli
en suivant les instructions après cette commande.
near login
Pour rendre ce tutoriel plus facile à copier/coller, nous allons définir une variable d’environnement pour notre identifiant de compte. Dans la commande ci-dessous, remplacez MY_ACCOUNT_NAME
avec le nom de compte avec lequel nous venons de nous connecter, y compris le .testnet
(ou .near
pour mainnet
):
ID=MY_ACCOUNT_NAME
Nous pouvons savoir si la variable d’environnement est correctement définie si notre ligne de commande affiche le nom du compte après cette commande :
echo $ID
Nous pouvons maintenant déployer le contrat compilé dans cet exemple sur votre compte :
near deploy --wasmFile res/non_fungible_token.wasm --accountId $ID
Le contrat NFT doit être initialisé avant utilisation. Plus d’informations sur les métadonnées sur ‘nomicon.io’. Mais pour l’instant, nous allons initialiser avec les métadonnées par défaut.
near call $ID new_default_meta '{"owner_id": "'$ID'"}' --accountId $ID
Nous pourrons voir nos métadonnées juste après :
near view $ID nft_metadata
Alors, frappons notre premier jeton. Cela créera un NFT basé sur Olympus Mons où il n’existe qu’une seule copie :
near call $ID nft_mint '{"token_id": "0", "receiver_id": "'$ID'", "token_metadata": { "title": "Olympus Mons", "description": "Tallest mountain in charted solar system", "media": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Olympus_Mons_alt.jpg/1024px-Olympus_Mons_alt.jpg", "copies": 1}}' --accountId $ID --deposit 10
Créons un compte sur lequel transférer notre jeton fraîchement créé. Ce compte sera un sous-compte du compte NEAR avec lequel nous nous sommes connectés à l’origine via near login
.
near create-account alice.$ID --masterAccount $ID --initialBalance 10
Vérification du compte d’Alice pour les jetons :
near view $ID nft_tokens_for_owner '{"account_id": "'alice.$ID'"}'
Ensuite, nous transférerons le NFT sur le compte d’Alice. Il faut joindre exactement 1 yoctoNEAR de dépôt :
near call $ID nft_transfer '{"token_id": "0", "receiver_id": "alice.'$ID'", "memo": "transfer ownership"}' --accountId $ID --deposit 0.000000000000000000000001
La vérification du compte d’Alice nous montre qu’elle a le jeton Olympus Mons.
- La valeur d’équilibre maximale est limitée par U128 (2**128 – 1).
- Les appels JSON doivent transmettre U128 en tant que chaîne de base 10. Par exemple « 100 ».
- Cela n’inclut pas la fonctionnalité d’entiercement, car ft_transfer_call fournit une approche supérieure. Un système d’entiercement peut, bien sûr, être ajouté en tant que contrat distinct ou fonctionnalité supplémentaire au sein de ce contrat.
Actuellement, AssemblyScript n’est pas pris en charge pour cet exemple. Une ancienne version se trouve dans le Exemple NEP4, mais cela n’est pas recommandé car il est obsolète et ne respecte pas les normes actuellement définies par le NEAR SDK.