Sui é a cadeia do momento e, embora Move seja o Santo Graal para escrever contratos inteligentes em Sui, o suporte TypeScript é significativo. Você pode interagir e usar Sui e a maioria dos aplicativos DeFi no ecossistema com TypeScript.
Neste tutorial, ensinarei como interagir com a rede Sui via TypeScript. Você aprenderá como ler o estado do blockchain e gravar transações na cadeia a partir de seus programas TypeScript.
O único pré-requisito é que você precise de conhecimento básico de JS/TS para executar este tutorial sem problemas. Vou orientar você em todo o resto.
Primeiro, crie um novo projeto TypeScript em seu terminal e inicialize um novo projeto Node.js.
mkdir SuiTS cd SuiTS npm init -y
Instale o TypeScript como uma dependência de desenvolvimento, caso ainda não o tenha feito.
npm install typescript --save-dev npm install ts-node //runs TS without the need for transpiling
Agora, você pode inicializar um novo projeto TypeScript. Este comando criará um arquivo tsconfig.json com opções padrão que você pode personalizar para o seu projeto.
npx tsc --init
Abra o tsconfig.json e cole essas configurações.
{ "compilerOptions": { "target": "ES2020", "module": "CommonJS", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "types": ["node"], "resolveJsonModule": true }, "exclude": ["node_modules"], "scripts": { "build": "tsc", "start": "node dist/index.js" } }
Crie um diretório src onde você adicionará seus arquivos TypeScript.
mkdir src touch src/index.ts
Finalmente, instale o Sui TypeScript SDK com este comando.
npm i @mysten/sui.js
Está tudo pronto. Você pode começar a escrever programas TypeScript que interagem com o blockchain Sui.
Você deve se conectar a um blockchain Sui para interagir com a cadeia.
Primeiro, importe getFullnodeUrl e SuiClient do módulo cliente SDK.
import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';
Agora, dependendo da conexão desejada, você pode usar getFullnodeUrl para recuperar o URL completo do nó da testnet Sui, mainnet, localnet ou devnet; em seguida, use o SuiClient para conectar-se à instância do cliente.
import { getFullnodeUrl, SuiClient } from '@mysten/sui/client'; const rpcUrl = getFullnodeUrl('mainnet'); const client = new SuiClient({ url: rpcUrl });
Para testar sua conexão, você pode usar getLatestSuiSystemState para recuperar o estado mais recente da rede.
// index.ts import { getFullnodeUrl, SuiClient } from '@mysten/sui/client'; const rpcUrl = getFullnodeUrl("mainnet"); const client = new SuiClient({ url: rpcUrl }); async function getNetworkStatus() { const currentEpoch = await client.getLatestSuiSystemState(); console.log(currentEpoch) } getNetworkStatus();
Agora, transpile o código TypeScript para JavaScript e execute-o com este comando:
ts-node index.ts
Você deve esperar uma saída semelhante a esta ao executar o comando.
Criar uma carteira é outra operação popular que pode ser útil se você construir na Rede Sui.
Veja como gerar pares de chaves da carteira Sui e recuperar as chaves privadas e públicas do par de chaves.
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519'; import { getFullnodeUrl, SuiClient } from '@mysten/sui/client'; const rpcUrl = getFullnodeUrl("mainnet"); const client = new SuiClient({ url: rpcUrl }); // random Keypair const keypair = new Ed25519Keypair(); const publicKey = keypair.getPublicKey(); const privatekey = keypair.getSecretKey(); console.log(privatekey.toString()); console.log(publicKey.toSuiAddress());
A função Ed25519Keypair cria um novo par de chaves. Os métodos getPublicKey e getPrivateKey fornecem acesso às chaves pública e privada, respectivamente.
Aqui está a saída da string das chaves públicas e privadas que gerei com o programa:
suiprivkey1qq9r6rkysny207t5vr7m5025swh7w0wzra9p0553paprhn8zshqsx2rz64r New Sui Address: 0xbd46d7582ced464ef369114252704b10317436ef70f196a33fcf2c724991fcba
Estou financiando esta carteira com 0,25 Sui para o próximo conjunto de operações. Sinta-se à vontade para verificar e escanear a carteira. Não envie quaisquer fundos; é apenas uma carteira fictícia.
Você pode usar a função getCoins em sua instância do cliente para recuperar detalhes sobre as moedas em um endereço de carteira.
import { getFullnodeUrl, SuiClient } from '@mysten/sui/client'; // use getFullnodeUrl to define the Devnet RPC location const rpcUrl = getFullnodeUrl('mainnet'); // create a client connected to devnet const client = new SuiClient({ url: rpcUrl }); async function getOwnedCoins() { const coins = await client.getCoins({ owner: '0xbd46d7582ced464ef369114252704b10317436ef70f196a33fcf2c724991fcba', }); console.log(coins); } getOwnedCoins();
A função retorna detalhes apenas da moeda Sui e dos detalhes. A saída está em MIST, o token de gás Sui. 1 SUI equivale a 1 bilhão de MIST.
A função getAllCoins pode ser usada da mesma maneira para obter uma lista de todas as moedas em uma carteira.
async function getAllCoins() { // Get the list of owned coins (tokens) for the given owner address const ownedCoins = await client.getAllCoins({ owner: "0xbd46d7582ced464ef369114252704b10317436ef70f196a33fcf2c724991fcba" }); // Access the coin data const coins = ownedCoins.data; // Iterate through the coins and print their details for (const coin of coins) { console.log(`Coin Type: ${coin.coinType}`); console.log(`Coin Object ID: ${coin.coinObjectId}`); console.log(`Balance: ${coin.balance}`); console.log('--------------------'); } // If there is more data, handle pagination if (ownedCoins.hasNextPage) { console.log('More data available. Fetching next page...'); // You can handle the next page using ownedCoins.nextCursor if needed } } getAllCoins();
Para este exemplo, troquei um pouco de Sui por $FUD no Hop Aggregator, e aqui está o resultado após executar o programa.
Finalmente, a parte interessante é que você aprenderá a enviar transações no blockchain.
Vamos enviar alguns tokens $FUD para outra carteira. Isso funciona para qualquer moeda na Rede Sui.
import {getFullnodeUrl, SuiClient} from '@mysten/sui/client'; import {Ed25519Keypair} from '@mysten/sui/keypairs/ed25519'; import {Transaction} from '@mysten/sui/transactions'; // Set the RPC URL to connect to the Sui mainnet const rpcUrl = getFullnodeUrl("mainnet"); const client = new SuiClient({url: rpcUrl}); // Create the keypair using the private key const keypair = Ed25519Keypair.fromSecretKey("suiprivkey1qq9r6rkysny207t5vr7m5025swh7w0wzra9p0553paprhn8zshqsx2rz64r"); // FUD coin type const FUD_TYPE = '0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD'; async function sendFUD() { const tx = new Transaction(); // Fetch FUD coins owned by the sender const coins = await client.getCoins({owner: keypair.getPublicKey().toSuiAddress(), coinType: FUD_TYPE}); if (coins.data.length === 0) { console.log("No FUD coins found in the wallet."); return; } // Choose the first available FUD coin and split it for the transfer (adjust amount if needed) const [coin] = tx.splitCoins(coins.data[0].coinObjectId, [100000000]); tx.transferObjects([coin], '0xb0042cf2c5a16d0a240fc1391d570cd5fe06548f860583f1878c327db70f2a22'); const result = await client.signAndExecuteTransaction({signer: keypair, transaction: tx}); await client.waitForTransaction({digest: result.digest}); console.log("Transaction successful. Digest:", result.digest); } sendFUD().then(console.log).catch(console.error);
Primeiro, verifiquei se a carteira tinha algum $FUD e dividi para a transferência. Os tx.transferObjects transferem a moeda dividida para o endereço especificado.
Finalmente, você precisa assinar a transação com client.signAndExecuteTransaction e pode aguardar a transação com waitForTransaction para confirmar que a transação foi realizada
Você aprendeu a interagir com o blockchain Sui usando o SDK TypeScript oficial. Há muito que você pode desenvolver no Sui com seu conhecimento recém-adquirido, como construir carteiras e bots.
Você pode ir mais longe aprendendo como interagir com contratos Move no Sui para construir dApps mais sofisticados
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3