- Criado por Igor Andrade, última alteração em 17/07/2018
Você está vendo a versão antiga da página. Ver a versão atual.
Comparar com o atual Ver Histórico da Página
« Anterior Versão 17 Próxima »
O Bitcoin (símbolo monetário: BTC ou XBT) é uma criptomoeda descentralizada que forma um sistema econômico alternativo e utiliza como base a Blockchain para realizar a verificar da sua base de dados distribuída.
Pré-requisitos
Antes de começar a seguir os passos do tutorial é preciso ter certeza de que se tem um ambiente minimamente preparado para reproduzir o exemplo. Abaixo estão os requisitos principais.
Requisitos:
- Projeto do tipo web criado. Caso haja dúvidas de como criar esse tipo de projeto acesse o link (Criando Projeto Web).
- Ter conhecimento básico sobre Bitcoin e Blockchain. Veja conteúdo a respeito nos links abaixo:
- Webinar do CronApp: Blockchain: Uma revolução em todos os setores.
- Bitcoin for beginners: The economics and use of Bitcoins e Bitcoin as a technology and network.
- Explain Bitcoin Like I’m Five.
Visão geral: exemplo
Nesse tutorial iremos criar uma pequena aplicação para criar uma carteira Bitcoin, obter informações dessa carteira e realizar transações entre carteiras. Utilizaremos uma rede Bitcoin de testes (Testnet) para adicionar fundos a uma dessas carteiras e realizar uma transação. (Figura 1).
Figura 1 - Aplicação gerada ao final desse tutorial.
Figura 2 - Modal para transação de fundos.
Como funciona a API
Quando criamos uma carteira em um rede Bitcoin são gerados: um arquivo *.wallet (carteira), que é a chave privada; uma chave pública e recebe uma parte da cadeia de blocos ou "livro-razão" da rede Bitcoin em um arquivo *.spvchain.
Quando vamos transferir recursos de uma carteira para outra, precisamos informar a chave privada da carteira que será debitada (equivalente ao número da conta e senha em um banco convencional) e a chave pública da carteira creditada (equivalente ao número da conta corrente).
Ao realizar a transação, uma chave hash única é gerada e disponibilizada na cadeia de blocos de toda a rede para que todos saibam, garantindo que a transação foi feita.
............................................................................................................
Criando a View da aplicação
Nessa aplicação teremos uma única tela e um modal que usaremos para realizar as transações. Vamos começar a trabalhar na tela principal, vamos utilizar a página home.view.html (Código Fonte / Principal / Código Fonte Cliente / views / logged / ), que já existe no projeto.
1. Editando os componentes
Arraste os seguintes componentes para a tela deixando como mostrado na Figura 1 e renomeie os rótulos de cada componente:
- Nome da Carteira (Entrada de texto): Usaremos para dar nomes as carteiras criadas, identificar o nome da carteira que iremos receber as informações ou a carteira que será debitada na transferência.
- Criar Carteira (Botão): Chama a função de bloco que criará uma carteira;
- Informações da Carteira (Botão): Chamar a função de bloco que retorna algumas informações sobre a carteira (itens 6, 7 e 8);
- Transferência (Botão): Abre o modal para realizar uma transação;
- Chave pública da Carteira (Entrada de texto): A chave pública da Carteira, esse é o endereço que será passado para as outras pessoas para que realizem transferência de Bitcoins;
- Saldo da Carteira (Satoshi) (Entrada de texto): Informa o saldo da carteira em valor Satoshi (menor unidade do BitCoin);
- Saldo da Carteira (tBTC) (Entrada de texto): Informa o saldo da carteira em valor tBTC (Bitcoin de teste);
Valor BTC e Satoshi
O valor Satoshi é a menor unidade do Bitcoin, assim como ocorre no real com o centavo. Porém, diferente do real que 100 centavos equivalem a R$1,00; no Bitcoin, 1 BTC equivale a 100.000.000 Satoshis.
Exemplo: 100,000 Satoshi = 0.00100000 ?
Se preferir, altere o nome dos identificadores dos campos de texto, facilitando nosso trabalho, já que vamos trabalhar com 6 campos (4 na tela e 2 no modal).
2. Criando o modal para transferência
Para gerar um modal no CronApp, basta clicar no simbolo "+" (Adicionar modal), como mostra na Figura 3.
Figura 3 - Criando um modal.
Arraste os componentes abaixo para modal, deixando como mostrado na Figura 2 e renomeie os rótulos de cada componente:
- Enviar Fundos (Texto): Adicionar no HEADER do modal;
- Chave da Carteira Creditada (Entrada de texto): Adicionar no BODY do moda para informar a chave pública da conta que iremos transferir;
- Valor (tBTC) (Entrada de texto): Adicionar no BODY do modal para o valor que será transferido em tBTC (Bitcoins de teste);
- Enviar (Botão): Adicionar no FOOTER do modal para chamar a função de bloco que irá transferir o valor de um carteira para outra.
Criando a função do lado Cliente
No lado Cliente vamos apenas criar um bloco que chamará a modal quando clicarmos no botão "Transferência".
1. Função que chama o modal
Clique com o botão direito do mouse na pasta Bloco de Programação ( localizada em "Código Fonte / Principal / Código Fonte Cliente / js /") e selecione Novo → Bloco de Programação. Ao abrir a janela "Novo", selecione a opção "Bloco de Programação Vazio" e Avance, em seguida adicione o nome do Arquivo e clique em finalizar. (Figura 4).
Figura 4 - Criando o bloco de programação para chamar o modal.
Para essa função de bloco de programação, renomeie para "AbrirModal", arraste o bloco "Exibir modal" (categoria Formulário) e selecione o Identificador do modal que criamos na nossa View. (Figura 5)
Figura 5 - Chamada do modal.
Criando as funções do lado Servidor
Vamos criar 3 funções de bloco de programação do lado Servidor: "CriarCarteira", que irá criar uma carteira na rede Bitcoin e retornar a chave pública, além dos arquivos *.wallet e *.spvchain; "ObterInformações", para retornar o saldo e a chave pública da carteira e a função "EnviarFundos', responsável por realizar transações entre carteiras.
1. Função Criar Carteira
Da mesma forma que criamos uma função do lado Cliente, iremos fazer do lado Servidor.
Clique com o botão direito do mouse na pasta Bloco de Programação ( localizada em "Código Fonte / Principal / Código Fonte Servidor /") e selecione Novo → Bloco de Programação. Ao abrir a janela "Novo", selecione a opção "Bloco de Programação Vazio" e Avance, em seguida adicione o nome do Arquivo ("Carteira") e clique em finalizar.
Renomeie a função para "CriarCarteira" (1), crie uma nova variável (categoria Variáveis) com o nome "novaCarteira" (2) e arraste o bloco "definir novaCarteira para" (3). (figura 6 - Fazer ainda).
Continuando os passos da Figura 6, arraste o bloco "Criar carteira" (categoria Blockchain Operation) e encaixe na variável que criamos acima: "novaCarteira" (4). Esse bloco recebe 3 parâmetros: o primeiro é o endereço onde serão salvos os arquivos *.wallet e *.spvchain, arrastamos o bloco "criar texto com" (categoria Texto) para concatenar o endereço local da aplicação usando o bloco "pasta da aplicação" (categoria Arquivo) e no segundo parâmetro do bloco "criar texto com", informe "/carteiras" com o bloco texto (categoria Texto), assim será criado um novo diretório chamado "carteira"; o próximo parâmetro é o nome da carteira que será informado pelo usuário no campo "Nome da Carteira", arrastamos o bloco "Obter valor do campo" e selecione o identificador desse campo (6), por fim, o último parâmetro é a rede Bitcoin na qual iremos trabalhar, para esse tutorial iremos utilizar a rede Testnet, então basta digitar "test" que a API do CronApp já reconhecerá que estamos tratando de um teste na rede Testnet (7).
O bloco "Criar Carteira" retorna, além dos arquivos já informados, o endereço da chave pública que será armazenada na variável "novaCarteira" que criamos. Vamos informar o endereço no campo "Chave pública da Carteira" arrastando o bloco "Alterar valor do campo" e selecionando o identificador do campo "Chave pública da carteira" no primeiro parâmetro e a variável "novaCarteira" no último parâmetro, como no passo 8 da figura 6.
2. Função Obter informações
O objetivo dessa função é retornar informações como o saldo e a chave pública de uma carteira, passando para isso o local do arquivo *.wallet e a rede Bitcoin.
Crie uma nova função arrastando o bloco "Para" (categoria Funções) e renomeie para "ObterInformações".
Crie 2 variáveis ("saldoCarteira" e "enderecoCarteira") como fizemos no passo anterior e arraste-os. Arraste também os blocos "Obter saldo" e "Obter o chave pública" (categoria Blockchain Operations) encaixando-os em suas respectivas variáveis. Os parâmetros dos 2 blocos são idênticos:
- Diretório: Arraste o bloco "criar texto com" (categoria Texto) para concatenar o bloco "pasta da aplicação" e "/carteiras";
- Nome do arquivo: Arraste o bloco "Obter valor do campo" selecionando o identificador do campo "Nome da Carteira" e
- Rede: Basta informar "test" ou informar uma rede Bitcoin real.
Agora vamos alimentar os campos na tela. Arraste 3 blocos "Alterar valor do campo" (categoria Formulário):
- No primeiro informe o identificador do campo "Chave pública da Carteira" e informe a variável "EnderecoCarteira" no parâmetro valor;
- No próximo bloco "Alterar valor do campo", arraste o identificador do campo "Saldo da Carteira (Satoshi)" e no parâmetro valor, arraste o bloco "Converter para texto" (categoria Conversão) e encaixe a variável "saldoCarteira" e
- Para o último bloco "Alterar valor do campo", informe o identificador do campo "Saldo da Carteira (Satoshi)" e para o parâmetro valor, vamos ter que fazer um cálculo para converter unidades Satoshi em Bitcoin, como explicamos acima. Arraste o bloco "Operações matemáticas" e selecione "÷" (divisão), arrastando para o campo dividendo os blocos "Converte para Double", "Converter para texto" (categoria Conversão) e a variável "saldoCarteira" e no campo divisor arraste o bloco "número" (categoria Matemática) informando o valor "100000000".
3. Função Enviar Fundos
O objetivo dessa função é realizar uma transação entre 2 carteiras Bitcoins.
Crie uma nova função arrastando o bloco "Para" (categoria Funções) e renomeie para "EnviarFundos".
Arraste o bloco "Enviar moedas" (categoria Blockchain Operations) que possui 5 parâmetros:
- Diretório: Arraste o bloco "criar texto com" para concatenar o bloco "pasta da aplicação" e o texto "/carteiras" informando o local onde estão os arquivo *.wallet;
- Nome do arquivo: Arraste o bloco "Obter valor do campo" selecionando o identificador do campo "Nome da Carteira", onde o usuário informou o nome da carteira;
- Rede: Basta informar "test" para usar a rede de teste (Testnet) ou informar uma rede Bitcoin real;
- Valor: Arraste o bloco "Obter valor do campo" selecionando o identificador do campo "Valor (tBTC)" do modal e
- Endereço: Arraste o bloco "Obter valor do campo" selecionando o identificador do campo "Chave da Carteira Creditada" do modal.
Essa função deve ficar como na Figura XX.
FIGURA XX
Chamando os eventos nos botões
De volta a página "home.view.html", precisamos chamar os evento que acabamos de criar nos botões da página. Para isso, selecione o botão "Criar Carteira" (1), na aba eventos (2) selecione a propriedade "Ao Clicar" (3), clique no botão "…" do campo "Selecione o Bloco de Programação" da janela "Events" (4) e selecione a função "CriarCarteira" (5).
Faça a mesma coisa para os outros botões: No botão "informações da Carteira" selecione a função "ObterInformações" e para o botão "Transferência", selecione a função do lado cliente "AbrirModal".
No dropdown dos Modais já adicionado/criado, selecione o moral que criamos anteriormente (como mostrado na figura 3), selecione o botão "Enviar" e chame o evento "EnviarFundos" (lado servidor).
FIGURA XX
Testando a Aplicação
Salve os arquivos alterados e execute a aplicação (F9) ou Debug (F11). Após abrir a aplicação, informe login e senha "admin" e confirme para acessar a página home.view.html.
1. Criação de Carteira
Primeiramente vamos ter que criar 2 carteiras para podermos testar a transferência. Informe o nome da primeira carteira no campo "Nome da Carteira", por exemplo "CarteiraEdson", e clique no botão "Criar Carteira". Após isso, deve ser exibido a chave pública no campo "Chave pública da Carteira" e serão criados 2 arquivos, ambos no diretório carteiras que criamos: "CarteiraEdson.spvchain" (parte do "livro razão" da rede P2P da Blockchain que é atualizada de tempos em tempos) e "CarteiraEdson.wallet" (chave privada da carteira) . (Figura XX).
Observação
Realizar alguma ação em uma rede Bitcoin não costuma ser tão rápido, já que estamos trabalhando com servidores descentralizados e os mesmos precisam confirmar a ação. Por isso é comum que uma ação demore alguns minutos para ser validada.
Na rede de teste (Testnet) esses procedimentos costumam ser mais demorados ainda, já que possuem poucas pessoas minerando dados e os mesmos não recebem recompensas por essas minerações, como ocorre nas redes oficiais.
Próximo passo é criar uma segunda carteira, informe um nome no campo "Nome da Carteira", por exemplo "CarteiraIgor" e clique em "Criar Carteira". O mesmo procedimento deve ocorrer, uma chave única no campo "Chave pública da Carteira" e mais 2 arquivos no diretório "carteiras": "CarteiraIgor.spvchain" e "CarteiraIgor.wallet".
2. Adicionando Bitcoins a uma carteira
Nesse momentos já temos 2 carteiras criadas, porém para testarmos uma transferência é necessário que alguma carteira possua fundos. Por isso vamos usar um site de testes para adicionar alguns Bitcoins a carteira que criamos.
Observação
Lembramos que esses Bitcoins adicionados não possuem nenhum valor monetário, já que se trata de uma rede de testes.
Acesse a aba Bitcoin Cash Faucet do site Bitcoin TestNet Sandbox informando a chave pública da carteira que deseja receber recursos, no nosso exemplo vamos utilizar a primeira carteira que criamos "CarteiraEdson", marque o checkbox do reCAPTCHA e clique em "Give me some coins" (Me dê algumas moedas). (Figura XX)
Após esse passo, uma janela de confirmação deve aparecer informando o hash da operação. (Figura YY)
Figura XX e YY - Adicionando alguns Bitcoins de testes a uma carteira e sua confirmação.
Se quiser verificar se a transação foi realizada, basta acessar o site Blocktrail, selecionar a área de desenvolvimento e no campo de pesquisa informar a chave pública da carteira, uma página será exibida com as informações das transações realizadas para essa carteira. (Figura XX)
Figura XX - Verificando a transação no site Blocktrail.
3. Testando o botão de informações da carteira
De volta ao nosso sistema, informe o nome da carteira que adicionamos Bitcoin pelo site Bitcoin TestNet Sandbox no campo "Nome da Carteira" e clique no botão "Informações da Carteira". O sistema deve exibir além da chave pública, o saldo em tBTC e Satoshi em seus respectivos campos.
ddd
- Sem rótulos