UNPKG

@fewcha/aptos

Version:
189 lines (159 loc) 6.12 kB
// Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 /* eslint-disable no-console */ import dotenv from "dotenv"; dotenv.config(); import { AptosClient, AptosAccount, FaucetClient, TokenClient, CoinClient, Network, Provider } from "aptos"; import { NODE_URL, FAUCET_URL } from "./common"; (async () => { // Create API and faucet clients. // :!:>section_1a const client = new AptosClient(NODE_URL); const faucetClient = new FaucetClient(NODE_URL, FAUCET_URL); // <:!:section_1a // Create client for working with the token module. // :!:>section_1b const tokenClient = new TokenClient(client); // <:!:section_1b // Create a coin client for checking account balances. const coinClient = new CoinClient(client); // Create accounts. // :!:>section_2 const alice = new AptosAccount(); const bob = new AptosAccount(); // <:!:section_2 console.log("=== network ==="); console.log(NODE_URL); // Print out account addresses. console.log("=== Addresses ==="); console.log(`Alice: ${alice.address()}`); console.log(`Bob: ${bob.address()}`); console.log(""); // Fund accounts. // :!:>section_3 await faucetClient.fundAccount(alice.address(), 100_000_000); await faucetClient.fundAccount(bob.address(), 100_000_000); // <:!:section_3 console.log("=== Initial Coin Balances ==="); console.log(`Alice: ${await coinClient.checkBalance(alice)}`); console.log(`Bob: ${await coinClient.checkBalance(bob)}`); console.log(""); console.log("=== Creating Collection and Token ==="); const collectionName = "Alice's"; const tokenName = "Alice's first token"; const tokenPropertyVersion = 0; const tokenId = { token_data_id: { creator: alice.address().hex(), collection: collectionName, name: tokenName, }, property_version: `${tokenPropertyVersion}`, }; // Create the collection. // :!:>section_4 const txnHash1 = await tokenClient.createCollection( alice, collectionName, "Alice's simple collection", "https://alice.com", ); // <:!:section_4 await client.waitForTransaction(txnHash1, { checkSuccess: true }); // Create a token in that collection. // :!:>section_5 const txnHash2 = await tokenClient.createToken( alice, collectionName, tokenName, "Alice's simple token", 1, "https://aptos.dev/img/nyan.jpeg", ); // <:!:section_5 await client.waitForTransaction(txnHash2, { checkSuccess: true }); // Print the collection data. // :!:>section_6 const collectionData = await tokenClient.getCollectionData(alice.address(), collectionName); console.log(`Alice's collection: ${JSON.stringify(collectionData, null, 4)}`); // <:!:section_6 // Get the token balance. // :!:>section_7 const aliceBalance1 = await tokenClient.getToken( alice.address(), collectionName, tokenName, `${tokenPropertyVersion}`, ); console.log(`Alice's token balance: ${aliceBalance1["amount"]}`); // <:!:section_7 // Get the token data. // :!:>section_8 const tokenData = await tokenClient.getTokenData(alice.address(), collectionName, tokenName); console.log(`Alice's token data: ${JSON.stringify(tokenData, null, 4)}`); // <:!:section_8 // Alice offers one token to Bob. console.log("\n=== Transferring the token to Bob ==="); // :!:>section_9 const txnHash3 = await tokenClient.offerToken( alice, bob.address(), alice.address(), collectionName, tokenName, 1, tokenPropertyVersion, ); // <:!:section_9 await client.waitForTransaction(txnHash3, { checkSuccess: true }); // Bob claims the token Alice offered him. // :!:>section_10 const txnHash4 = await tokenClient.claimToken( bob, alice.address(), alice.address(), collectionName, tokenName, tokenPropertyVersion, ); // <:!:section_10 await client.waitForTransaction(txnHash4, { checkSuccess: true }); // Print their balances. const aliceBalance2 = await tokenClient.getToken( alice.address(), collectionName, tokenName, `${tokenPropertyVersion}`, ); const bobBalance2 = await tokenClient.getTokenForAccount(bob.address(), tokenId); console.log(`Alice's token balance: ${aliceBalance2["amount"]}`); console.log(`Bob's token balance: ${bobBalance2["amount"]}`); console.log("\n=== Transferring the token back to Alice using MultiAgent ==="); // :!:>section_11 let txnHash5 = await tokenClient.directTransferToken( bob, alice, alice.address(), collectionName, tokenName, 1, tokenPropertyVersion, ); // <:!:section_11 await client.waitForTransaction(txnHash5, { checkSuccess: true }); // Print out their balances one last time. const aliceBalance3 = await tokenClient.getToken( alice.address(), collectionName, tokenName, `${tokenPropertyVersion}`, ); const bobBalance3 = await tokenClient.getTokenForAccount(bob.address(), tokenId); console.log(`Alice's token balance: ${aliceBalance3["amount"]}`); console.log(`Bob's token balance: ${bobBalance3["amount"]}`); const provider = new Provider(Network.DEVNET); console.log("\n=== Checking if indexer devnet chainId same as fullnode chainId ==="); const indexerLedgerInfo = await provider.getIndexerLedgerInfo(); const fullNodeChainId = await provider.getChainId(); console.log( `\n fullnode chain id is: ${fullNodeChainId}, indexer chain id is: ${indexerLedgerInfo.ledger_infos[0].chain_id}`, ); if (indexerLedgerInfo.ledger_infos[0].chain_id !== fullNodeChainId) { console.log(`\n fullnode chain id and indexer chain id are not synced, skipping rest of tests`); return; } console.log("\n=== Getting Alices's NFTs ==="); const aliceNfts = await provider.getAccountNFTs(alice.address().hex()); console.log(`Alice current token ownership: ${aliceNfts.current_token_ownerships[0].amount}. Should be 1`); console.log("\n=== Getting Bob's NFTs ==="); const bobNfts = await provider.getAccountNFTs(bob.address().hex()); console.log(`Bob current token ownership: ${bobNfts.current_token_ownerships.length}. Should be 0`); })();