Este tutorial irá orientá-lo sobre como implantar um canister na Internet Computer que pode enviar e receber Bitcoin.
Vamos contar com o exemplo "Basic Bitcoin" no repositório de exemplos, que alavanca internamente o ECDSA API e o Bitcoin API da Internet Computer.
Implantação
Clone o repositório
examples
git clone https://github.com/dfinity/examples
Vá para o exemplo
basic_bitcoin
na linguagem de sua escolha
# Para motoko
cd examples/motoko/basic_bitcoin
# Para rust
cd examples/rust/basic_bitcoin
Inicialize o git submodules
git submodule update --init --recursive
Faça deploy do exemplo da Internet Computer. Estamos inicializando o canister com a
variant { Testnet }
, de modo que o canister conecte-se à testnet da Bitcoin.
dfx deploy --network=ic basic_bitcoin --argument '(variant { Testnet })'
DICA
Para fazer deploy na Internet Computer são necessários os Cycles
. Você pode ler mais sobre ciclos aqui. Você também pode obter cycles grátis na Faucet Cycles.
Se bem-sucedido, você vai obter um output que se parece com isto:
Deploying: basic_bitcoin
Building canisters...
...
Deployed canisters.
URLs:
Candid:
basic_bitcoin: https://a4gq6-oaaaa-aaaab-qaa4q-cai.raw.ic0.app/?id=<YOUR-CANISTER-ID>
Seu canister está ativo e pronto para ser usado! Você pode interagir com ele usando ou a linha de comando ou a Candid UI (User Interface - interface do usuário), que é o link que você vê no output acima.
Gerando um Endereço Bitcoin
A Bitcoin possui diferentes tipos de endereço (ex.: P2PKH, P2SH). A maioria desses endereços pode ser gerada de uma chave pública ECDSA. O código de exemplo mostra como sua canister pode gerar um endereço P2PKH usando a API ecdsa_public_key.
Na UI Candid do seu canister, clique no botão "Call" abaixo de get_p2pkh_address
para gerar um endereço P2PKH Bitcoin:
Ou, se você prefere usar linha de comando:
dfx canister --network=ic call basic_bitcoin get_p2pkh_address
NOTA
O endereço Bitcoin que você vê será diferente daquele acima, porque a chave pública ECDSA que seu canister recupera é única.
Estamos gerando um endereço testnet Bitcoin, que só pode ser usado para enviar/receber Bitcoin na testnet Bitcoin.
Recebendo Bitcoin
Agora que seu canister está implantado e você tem um endereço Bitcoin, é hora de receber alguns Bitcoins testnet. Você pode usar uma das faucets da Bitcoin, como esta, para receber alguns bitcoins.
Entre com seu endereço e clique em "Send testnet bitcoins". No exemplo abaixo, o canister vai receber 0.0001 BTC test.
Uma vez que a transação tenha pelo menos uma confirmação,o que pode levar alguns minutos, você poderá vê-la no saldo do seu canister.
Verificando Seu Saldo Bitcoin
Você pode verificar o saldo de um endereço da Bitcoin usando o endpoint get_balance
no seu canister.
Na UI Candid, cole no endereço do seu canister e clique em "Call":
Alternativamente, faça call usando a linha de comando:
dfx canister --network=ic call basic_bitcoin get_balance '("mheyfRsAQ1XrjtzjfU1cCH2B6G1KmNarNL")'
A verificação do saldo de um endereço Bitcoin depende do API bitcoin_get_balance.
Enviando Bitcoin
Você pode enviar Bitcoin usando o endpoint send
no seu canister.
Na UI Candid, acrescente a um endereço de destino um valor para ser enviado. No exemplo abaixo, estamos enviando 4,321 Satoshi (0.00004321 BTC) de volta para a faucet testnet.
Por meio de linha de comando, a mesma chamada pareceria assim:
dfx canister --network=ic call basic_bitcoin send '(record { destination_address = "tb1ql7w62elx9ucw4pj5lgw4l028hmuw80sndtntxt"; amount_in_satoshi = 4321; })'
O endpoint send
é capaz de enviar Bitcoin:
Obtendo os percentis das taxas mais recentes na rede Bitcoin utilizando a API bitcoin_get_current_fee_percentiles.
Obtendo suas saídas de transação não gastas (UTXOs), usando a API bitcoin_get_utxos.
Construindo uma transação, usando alguns dos UTXOs da etapa 2 como entrada e o endereço de destino e valor a ser enviado como saída. Os percentis de taxa obtidos do passo 1 são usados para definir uma taxa apropriada.
Assinando as entradas da transação usando a API sign_with_ecdsa.
Enviando a transação assinada para a rede Bitcoin utilizando a API bitcoin_send_transaction.
O endpoint send
retorna a identificação da transação que foi enviada para a rede. Você pode rastrear o status desta transação usando um explorador de blocos. Uma vez que a transação tenha pelo menos uma confirmação, você deverá ser capaz de vê-la em seu saldo atual.
Este artigo é da Internet Computer e foi traduzido por Fátima Lima. Seu original pode ser lido aqui.
Oldest comments (0)