UNPKG

@fewcha/aptos

Version:
131 lines (110 loc) 4.87 kB
/* eslint-disable no-console */ import { AptosClient, AptosAccount, FaucetClient, BCS, TxnBuilderTypes, Provider, Network, TokenClient } from "aptos"; import assert from "assert"; const NODE_URL = process.env.APTOS_NODE_URL || "https://fullnode.devnet.aptoslabs.com"; const FAUCET_URL = process.env.APTOS_FAUCET_URL || "https://faucet.devnet.aptoslabs.com"; export const aptosCoinStore = "0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin>"; const { AccountAddress, TypeTagStruct, EntryFunction, StructTag, TransactionPayloadEntryFunction, RawTransaction, ChainId, } = TxnBuilderTypes; /** * This code example demonstrates the process of moving test coins from one account to another. */ (async () => { const client = new AptosClient(NODE_URL); const faucetClient = new FaucetClient(NODE_URL, FAUCET_URL); const tokenClient = new TokenClient(client); // Generates key pair for a new account const account1 = new AptosAccount(); await faucetClient.fundAccount(account1.address(), 100_000_000); let resources = await client.getAccountResources(account1.address()); let accountResource = resources.find((r: any) => r.type === aptosCoinStore); let balance = parseInt((accountResource?.data as any).coin.value); assert(balance === 100_000_000); console.log(`account1 coins: ${balance}. Should be 100_000_000!`); const account2 = new AptosAccount(); // TS SDK support 3 types of transaction payloads: `EntryFunction`, `Script` and `Module`. // See https://aptos-labs.github.io/ts-sdk-doc/ for the details. const entryFunctionPayload = new TransactionPayloadEntryFunction( EntryFunction.natural( // Fully qualified module name, `AccountAddress::ModuleName` "0x1::aptos_account", // Module function "transfer", // The coin type to transfer [], // Arguments for function `transfer`: receiver account address and amount to transfer [BCS.bcsToBytes(AccountAddress.fromHex(account2.address())), BCS.bcsSerializeUint64(717)], ), ); const [{ sequence_number: sequenceNumber }, chainId] = await Promise.all([ client.getAccount(account1.address()), client.getChainId(), ]); // See class definiton here // https://aptos-labs.github.io/ts-sdk-doc/classes/TxnBuilderTypes.RawTransaction.html#constructor. const rawTxn = new RawTransaction( // Transaction sender account address AccountAddress.fromHex(account1.address()), BigInt(sequenceNumber), entryFunctionPayload, // Max gas unit to spend BigInt(10000), // Gas price per unit BigInt(100), // Expiration timestamp. Transaction is discarded if it is not executed within 10 seconds from now. BigInt(Math.floor(Date.now() / 1000) + 10), new ChainId(chainId), ); // Sign the raw transaction with account1's private key const bcsTxn = AptosClient.generateBCSTransaction(account1, rawTxn); const transactionRes = await client.submitSignedBCSTransaction(bcsTxn); await client.waitForTransaction(transactionRes.hash); resources = await client.getAccountResources(account2.address()); accountResource = resources.find((r: any) => r.type === aptosCoinStore); balance = parseInt((accountResource?.data as any).coin.value); assert(balance === 717); console.log(`account2 coins: ${balance}. Should be 717!`); 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("=== Creating account1's NFT Collection and Token ==="); const collectionName = "Alice's"; const tokenName = "Alice's first token"; // Create the collection. // :!:>section_4 const txnHash1 = await tokenClient.createCollection( account1, 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( account1, collectionName, tokenName, "Alice's simple token", 1, "https://aptos.dev/img/nyan.jpeg", ); // <:!:section_5 await client.waitForTransaction(txnHash2, { checkSuccess: true }); const nfts = await provider.getAccountNFTs(account1.address().hex()); console.log(`account1 current token ownership: ${nfts.current_token_ownerships[0].amount}. Should be 1`); })();