Pular para o conteúdo

Sua Primeira Transação

Transações são a maneira fundamental de alterar dados no blockchain Aptos. Pense nelas como enviar um pacote: você precisa especificar o que está enviando, para quem está indo, e então rastrear até que a entrega seja confirmada. Em termos de blockchain, transações permitem transferir moedas, chamar funções de contratos inteligentes e atualizar estado on-chain.

Este tutorial irá guiá-lo através da criação e envio de sua primeira transação no blockchain Aptos. Você aprenderá como:

  1. Configurar seu ambiente de desenvolvimento
  2. Criar contas de teste e financiá-las
  3. Construir uma transação para transferir moedas
  4. Simular a transação para estimar custos
  5. Assinar e enviar a transação
  6. Verificar se a transação foi executada com sucesso

Antes de podermos criar transações, precisamos configurar nosso ambiente de desenvolvimento com as ferramentas e SDKs necessários.

  1. Instalar o SDK TypeScript

    Instale o SDK TypeScript usando seu gerenciador de pacotes preferido:

    Terminal window
    npm install @aptos-labs/ts-sdk
  2. Criar um diretório de projeto

    Crie um novo diretório para seu projeto:

    Terminal window
    mkdir minha-primeira-transacao
    cd minha-primeira-transacao
  3. Criar um novo arquivo

    Crie um novo arquivo chamado transacao.ts:

    Terminal window
    touch transacao.ts

No blockchain, todas as transações devem vir de uma conta. Vamos criar duas contas de teste: uma para enviar moedas (Alice) e uma para recebê-las (Bob).

  1. Configurar o cliente

    Primeiro, precisamos inicializar o cliente Aptos que se conectará ao blockchain. Abra transacao.ts no seu editor e adicione:

    import {
    Account,
    Aptos,
    AptosConfig,
    Network,
    } from "@aptos-labs/ts-sdk";
    async function main() {
    // Inicializar o cliente Aptos
    const config = new AptosConfig({ network: Network.DEVNET });
    const aptos = new Aptos(config);
    console.log("Conectado ao devnet Aptos");
    // Mais código será adicionado aqui
    }
    main().catch(console.error);
  2. Gerar contas

    Adicione este código dentro da sua função main() para criar duas contas - Alice (remetente) e Bob (destinatário):

    // Gerar duas contas
    const alice = Account.generate();
    const bob = Account.generate();
    console.log("=== Endereços ===");
    console.log(`Endereço da Alice: ${alice.accountAddress}`);
    console.log(`Endereço do Bob: ${bob.accountAddress}`);
  3. Financiar as contas

    Adicione este código após gerar as contas para obter moedas de teste do faucet:

    // Financiar as contas com APT de teste do faucet devnet
    console.log("\n=== Financiando contas ===");
    await aptos.fundAccount({
    accountAddress: alice.accountAddress,
    amount: 100_000_000, // 1 APT = 100,000,000 octas
    });
    console.log("Contas financiadas com sucesso");
    // Verificar saldos iniciais
    const saldoAlice = await aptos.getAccountAPTAmount({
    accountAddress: alice.accountAddress,
    });
    const saldoBob = await aptos.getAccountAPTAmount({
    accountAddress: bob.accountAddress,
    });
    console.log(`Saldo da Alice: ${saldoAlice} octas`);
    console.log(`Saldo do Bob: ${saldoBob} octas`);
  1. Construir transação de transferência

    Adicione o seguinte código à sua função main() para criar uma transação que transfere 1 APT da Alice para o Bob:

    // Construir transação de transferência
    console.log("\n=== Construindo transação ===");
    const transacao = await aptos.transaction.build.simple({
    sender: alice.accountAddress,
    data: {
    function: "0x1::coin::transfer",
    typeArguments: ["0x1::aptos_coin::AptosCoin"],
    functionArguments: [bob.accountAddress, 100_000_000], // 1 APT
    },
    });
    console.log("Transação construída");
  2. Simular a transação

    Antes de enviar realmente, simule a transação para estimar taxas de gas:

    // Simular a transação
    console.log("\n=== Simulando transação ===");
    const resultadoSimulacao = await aptos.transaction.simulate.simple({
    signerPublicKey: alice.publicKey,
    transaction: transacao,
    });
    console.log("Resultado da simulação:", resultadoSimulacao[0]);
  3. Assinar e enviar a transação

    // Assinar e enviar a transação
    console.log("\n=== Enviando transação ===");
    const transacaoConfirmada = await aptos.transaction.signAndSubmitTransaction({
    signer: alice,
    transaction: transacao,
    });
    console.log("Hash da transação:", transacaoConfirmada.hash);
    // Aguardar confirmação da transação
    const transacaoExecutada = await aptos.waitForTransaction({
    transactionHash: transacaoConfirmada.hash,
    });
    console.log("Transação executada:", transacaoExecutada.success);

Finalmente, vamos verificar os saldos após a transferência:

// Verificar saldos finais
console.log("\n=== Saldos finais ===");
const saldoFinalAlice = await aptos.getAccountAPTAmount({
accountAddress: alice.accountAddress,
});
const saldoFinalBob = await aptos.getAccountAPTAmount({
accountAddress: bob.accountAddress,
});
console.log(`Saldo final da Alice: ${saldoFinalAlice} octas`);
console.log(`Saldo final do Bob: ${saldoFinalBob} octas`);

Execute o script no terminal:

Terminal window
npx ts-node transacao.ts

Ou compile TypeScript para JavaScript e execute:

Terminal window
npx tsc transacao.ts && node transacao.js
import {
Account,
Aptos,
AptosConfig,
Network,
} from "@aptos-labs/ts-sdk";
async function main() {
// Inicializar o cliente Aptos
const config = new AptosConfig({ network: Network.DEVNET });
const aptos = new Aptos(config);
console.log("Conectado ao devnet Aptos");
// Gerar duas contas
const alice = Account.generate();
const bob = Account.generate();
console.log("=== Endereços ===");
console.log(`Endereço da Alice: ${alice.accountAddress}`);
console.log(`Endereço do Bob: ${bob.accountAddress}`);
// Financiar contas
console.log("\n=== Financiando contas ===");
await aptos.fundAccount({
accountAddress: alice.accountAddress,
amount: 100_000_000,
});
console.log("Contas financiadas com sucesso");
// Verificar saldo inicial
const saldoAlice = await aptos.getAccountAPTAmount({
accountAddress: alice.accountAddress,
});
console.log(`Saldo da Alice: ${saldoAlice} octas`);
// Construir transação de transferência
console.log("\n=== Construindo transação ===");
const transacao = await aptos.transaction.build.simple({
sender: alice.accountAddress,
data: {
function: "0x1::coin::transfer",
typeArguments: ["0x1::aptos_coin::AptosCoin"],
functionArguments: [bob.accountAddress, 100_000_000],
},
});
// Assinar e enviar transação
console.log("\n=== Enviando transação ===");
const transacaoConfirmada = await aptos.transaction.signAndSubmitTransaction({
signer: alice,
transaction: transacao,
});
console.log("Hash da transação:", transacaoConfirmada.hash);
// Aguardar confirmação da transação
await aptos.waitForTransaction({
transactionHash: transacaoConfirmada.hash,
});
// Verificar saldos finais
console.log("\n=== Saldos finais ===");
const saldoFinalAlice = await aptos.getAccountAPTAmount({
accountAddress: alice.accountAddress,
});
const saldoFinalBob = await aptos.getAccountAPTAmount({
accountAddress: bob.accountAddress,
});
console.log(`Saldo final da Alice: ${saldoFinalAlice} octas`);
console.log(`Saldo final do Bob: ${saldoFinalBob} octas`);
}
main().catch(console.error);

Parabéns! Você criou e enviou com sucesso sua primeira transação Aptos. A seguir, experimente: