Explorando o explorador de blocos

8 minutos de leitura

Este artigo usa transações e endereços criados no artigo Testando o Decred na Testnet e depois movimentados nos artigos Enviando e recebendo DCRs via Decrediton e dcrwallet e dcrctl.

Os desenvolvedores do Decred fornecem um explorador de blocos para que qualquer usuário possa visualizar melhor a blockchain, pesquisar blocos, endereços de recebimento e transações. Para acessar o explorador de blocos da Testnet acesse https://testnet.decred.org e para o da Mainnet, https://mainnet.decred.org.

Nosso uso do explorador de blocos começará pelo último envio de DCRs feito no artigo dcrwallet e dcrctl. A partir daí vamos tentar reconstruir os eventos que ocorreram nos outros dois artigos mencionados. Para começar, acesse o explorador da Testnet.

Figura 1 - O campo de pesquisa do explorador de blocos da Testnet
Figura 1 - O campo de pesquisa do explorador de blocos da Testnet

Em seguida cole o txid da última transação feita, um envio de 0.05 DCR, e aperte Enter. O explorador mostrará um resumo da transação.

270bc9b154b1a7a16d4e651d4dc1d4954b79f8f8aa429c95f988803b6e08040d

Figura 2 - A transação de envio de 0.05 DCRs na Testnet
Figura 2 - A transação de envio de 0.05 DCRs na Testnet

Clique no ícone + à esquerda do txid, destacado em vermelho. O explorador expande a transação para mostrar mais detalhes como se pode ver na próxima figura. Destacado em vermelho, o endereço TsSR4yrDHNAAbt62uTntutroCAtnNBw9cUo (I1) foi usado para enviar 0.05 DCR para o endereço Tsn7ERfzp8y4B3kJ1MA3c167eWeZSHSZS28 (O1).

Na parte baixa da figura é possível ver a fee (taxa dos mineradores). A fee (F1) foi calculada da seguinte forma: o tamanho da transação é 251 bytes e a taxa está em 0.00100797 por 1000 bytes. Só precisamos de regra de três para calcular a taxa dessa transação.

(0.00100797 / 1000) * 251 = 0.00025300

O troco é calculado pegando a transação de entrada que será gasta (input), substraindo o que será gasto (output) e a fee paga aos mineradores.

Troco = Input - Output - Fee 0.04974700 DCR = 0.1 DCR - 0.05 DCR - 0.00025300 DCR

Repare que 0.04974700 DCR foram enviados para o endereço de troco TsaLvAJwAMD6Ez8KSVPSVQTDszBKijExkt5 (P1).

Figura 3 - Endereços de entrada e saída da transação
Figura 3 - Endereços de entrada e saída da transação

Só sabemos que o endereço (O1) é de Alice devido ao exercício do artigo dcrwallet e dcrctl, caso contrário não haveria como saber de quem é o endereço sem tentar correlacionar endereços de pagamento com compras no mundo real (endereços, identificadores pessoais, documentos, logs de websites, e-commerces, etc). Isso nem mesmo é possível na Testnet.

Figura 4 - Um diagrama demonstrando a transação da Figura 3
Figura 4 - Um diagrama demonstrando a transação da Figura 3

Clique no endereço destacado em vermelho na Figura 3.

O explorador mostra duas transações que envolvem esse endereço: 4a103798cdaee813f79254b421038edf3e555fe4ccdc8639cb6786a85eece475 e 270bc9b154b1a7a16d4e651d4dc1d4954b79f8f8aa429c95f988803b6e08040d, esta última que acaba de ser analisada.

Figura 5 - Transações onde um determinado endereço é entrada ou saída
Figura 5 - Transações onde um determinado endereço é entrada ou saída

Clique no ícone + à esquerda do txid da primeira transação. O explorador expande a transação. Agora o endereço aparece do lado direito, o lado das saídas. Isso significa que esse endereço TsSR4yrDHNAAbt62uTntutroCAtnNBw9cUo (O2) recebeu 0.1 DCR do endereço TsZMoEx4Ej9N3z5Dzzd7xw1215RcDxPtjUZ (I2), que está do lado esquerdo. O endereço (P2) foi usado para troco da transação.

Figura 6 - O endereço em questão aparece como saída na primeira transação
Figura 6 - O endereço em questão aparece como saída na primeira transação

As duas transações analisadas: Alice envia para Bob que devolve parte para Alice.

Figura 7 - O diagrama mostra ambas as transações analisadas
Figura 7 - O diagrama mostra ambas as transações analisadas

Role a tela para baixo e expanda a segunda transação clicando no ícone +. Como já foi visto anteriormente na Figura 3, nesta transação o endereço TsSR4yrDHNAAbt62uTntutroCAtnNBw9cUo está do lado esquerdo, o lado das entradas. Isso significa que, os recursos que foram ‘saída’ antes serão ‘entrada’ agora, sendo gastos parcialmente nessa transação. Clique no endereço da transação, destacado em vermelho.

Figura 8 - Na segunda transação o endereço aparece como entrada
Figura 8 - Na segunda transação o endereço aparece como entrada

O explorador mostra um resumo da transação na Figura 9. Agora o destaque em vermelho mostra o hash identificador do bloco. Clique nele.

Figura 9 - O resumo da transação mostra em qual bloco ela foi incluída
Figura 9 - O resumo da transação mostra em qual bloco ela foi incluída

O explorador mostra um resumo do bloco. Há três informações em destaque na figura a seguir: Block Reward é o prêmio pela criação do bloco pago aos mineradores (PoW + PoS); Voters mostra o número de tickets de PoS que foram sorteados e FreshStake mostra o número de novos tickets de PoS que foram adquiridos neste bloco.

Figura 10 - Um resumo do bloco #252997 da Testnet2
Figura 10 - Um resumo do bloco #252997 da Testnet2

Role a tela para baixo para ver as transações incluídas no bloco, mostradas na Figura 11. As primeiras transações mostram votos da mineração PoS. Logo abaixo do endereço de cada transação, uma caixa que diz “DCP0002&3: ABSTAIN” indica a abstenção em votar nas propostas DCP 0002 e DCP 0003.

Figura 11 - Três dos cinco votos minerados no bloco
Figura 11 - Três dos cinco votos minerados no bloco

Continue rolando a tela. Mais embaixo é possível ver um Ticket e a transação Coinbase.

Figura 12 - Mais dois tipos de transações incluídas no bloco
Figura 12 - Mais dois tipos de transações incluídas no bloco

A transação Coinbase mostra novas DCRs sendo criadas e tendo como saída o endereço TseH9wPe4bfRqS2qwceAyjzNGFrMAPgzkvB destacado em azul. Esse é o prêmio pela mineração PoW.

Figura 13 - A transação Coinbase mostra novas DCRs sendo criadas
Figura 13 - A transação Coinbase mostra novas DCRs sendo criadas

Continue rolando a tela até o final. A última transação é a que estamos analisando desde o início. Novamente, clique no ícone + à esquerda da transação.

Figura 14 - A última transação do bloco é o objeto de análise do início deste artigo
Figura 14 - A última transação do bloco é o objeto de análise do início deste artigo

A transação é expandida.

Figura 15 - Bob devolve 0.05 DCR para Alice
Figura 15 - Bob devolve 0.05 DCR para Alice

Clique no endereço de entrada da transação. Agora o explorador de blocos apresenta as transações que incluem esse endereço como entrada ou saída. O resumo da transação na Figura 16 mostra que o total recebido nesse endereço foi 0.1 DCR e esse também é o total enviado, totalizando duas transações com saldo 0 DCR.

As duas transações mencionadas vem logo a seguir. A segunda transação acabou de ser verificada. Clique no + à esquerda do txid da primeira transação.

Figura 16 - Transações que incluem o endereço `TsSR4yrDHNAAbt62uTntutroCAtnNBw9cUo`
Figura 16 - Transações que incluem o endereço TsSR4yrDHNAAbt62uTntutroCAtnNBw9cUo

Já falamos sobre o endereço destacado em vermelho. Vamos ao endereço laranja: é o endereço informado por Alice para receber os 2 DCRs do Faucet.

Figura 17 - Alice envia 0.1 DCR para Bob
Figura 17 - Alice envia 0.1 DCR para Bob

Figura 18 - A transação que depositou 2 DCRs vista no Decrediton de Alice
Figura 18 - A transação que depositou 2 DCRs vista no Decrediton de Alice

Agora, clique no endereço destacado em laranja. Serão mostradas duas transações onde esse endereço aparece como entrada ou saída. A segunda transação da lista foi analisada logo acima. Vamos então analisar a primeira transação. Clique no + à esquerda do txid.

Figura 19 - As transações relacionadas ao endereço usado por Alice para receber DCRs no Faucet
Figura 19 - As transações relacionadas ao endereço usado por Alice para receber DCRs no Faucet

A transação mostra o mesmo endereço (O3) destacado em laranja, como saída. Entre as entradas há apenas um endereço (I3), destacado em azul. Clique nesse endereço.

Figura 20 - A transação onde Alice recebeu 2 DCRs via Faucet
Figura 20 - A transação onde Alice recebeu 2 DCRs via Faucet

Esse é o endereço utilizado pelo faucet da Testnet. Foi dele que partiu a transação para a carteira de Alice. É um endereço muito utilizado, como se vê pelo resumo: 57220 transações com um saldo de 224.474 DCRs.

Juntando as três transações analisadas até agora temos o seguinte diagrama:

Figura 21 - Três transações analisadas
Figura 21 - Três transações analisadas

Figura 22 - Um resumo do endereço mostra o tamanho da movimentação e o saldo
Figura 22 - Um resumo do endereço mostra o tamanho da movimentação e o saldo

Uma curiosidade: ao rolar a tela para baixo é possível ver várias transações Coinbase para esse endereço. Assim, o endereço que deposita DCR através do Faucet da Testnet é um endereço de mineração da Testnet.

Resta ainda uma última transação a ser avaliada: Bob recebeu 0.2 DCR de Alice antes de enviar 0.05 DCR de volta.

Figura 23 - O endereço de troco de Alice está envolvido em mais uma transação
Figura 23 - O endereço de troco de Alice está envolvido em mais uma transação

Como podemos ver na Figura 24, o troco de Alice (P2) na Figura 17 foi usado como entrada (I4) para enviar 0.2 DCR (O4) para Bob, retornando para Alice 1.69949400 DCR (P4).

Figura 24 - O troco de Alice se torna input em um novo envio para Bob
Figura 24 - O troco de Alice se torna input em um novo envio para Bob

Com as quatro transações analisadas, temos agora o diagrama completo:

Figura 25 - As quatro transações analisadas
Figura 25 - As quatro transações analisadas

A ordem dos eventos:

  1. Transação 3: Faucet envia 2 DCR para Alice
  2. Transação 2: Alice envia 0.1 DCR para Bob
  3. Transação 4: Alice envia 0.2 DCR para Bob
  4. Transação 1: Bob envia 0.05 DCR para Alice

Bob lista todos os inputs não gastos na sua carteira:

$ ./dcrctl --testnet --wallet listunspent

[
  {
    "txid": "270bc9b154b1a7a16d4e651d4dc1d4954b79f8f8aa429c95f988803b6e08040d",
    "vout": 1,
    "tree": 0,
    "txtype": 0,
    "address": "TsaLvAJwAMD6Ez8KSVPSVQTDszBKijExkt5",
    "account": "default",
    "scriptPubKey": "76a9146646c16d3b1474037ede9af7ae137634105771bc88ac",
    "amount": 0.049747,
    "confirmations": 741,
    "spendable": true
  },
  {
    "txid": "b06008f559a90706ebf4dffea3848c2d96010cd97b559c4c1fccee7f063b80e6",
    "vout": 0,
    "tree": 0,
    "txtype": 0,
    "address": "TsXB3MndDeG6PToFw5PvBdHEJcMXCEBhG8y",
    "account": "default",
    "scriptPubKey": "76a91443803a23063e5cd2c53c1a00aee68605614dcbd388ac",
    "amount": 0.2,
    "confirmations": 782,
    "spendable": true
  }
]

Bob tem agora duas transações não gastas: 0.049747 DCR do troco (P1) e 0.2 DCR do envio de Alice (O4). O total disponível em sua carteira é a soma dessas transações não gastas: 0.249747 DCR.

$ ./dcrctl --testnet --wallet getbalance

{
  "balances": [
    {
      "accountname": "default",
      "immaturecoinbaserewards": 0,
      "immaturestakegeneration": 0,
      "lockedbytickets": 0,
      "spendable": 0.249747,
      "total": 0.249747,
      "unconfirmed": 0,
      "votingauthority": 0
    },
    {
      "accountname": "imported",
      "immaturecoinbaserewards": 0,
      "immaturestakegeneration": 0,
      "lockedbytickets": 0,
      "spendable": 0,
      "total": 0,
      "unconfirmed": 0,
      "votingauthority": 0
    }
  ],
  "blockhash": "00000000005db0859a57f11d7178e401b8fa9caf18997e6e9146b78bf3563b32"
}

Para listar as transações não gastas de Alice foram instalados dcrwallet e dcrctl, copiando o wallet.db do Decrediton. Alice lista todos os inputs não gastos na sua carteira:

$ ./dcrctl --testnet --wallet listunspent

[
  {
    "txid": "270bc9b154b1a7a16d4e651d4dc1d4954b79f8f8aa429c95f988803b6e08040d",
    "vout": 0,
    "tree": 0,
    "txtype": 0,
    "address": "Tsn7ERfzp8y4B3kJ1MA3c167eWeZSHSZS28",
    "account": "default",
    "scriptPubKey": "76a914e751b032642fa1adf0827a3904143dac71bff91788ac",
    "amount": 0.05,
    "confirmations": 2193,
    "spendable": true
  },
  {
    "txid": "b06008f559a90706ebf4dffea3848c2d96010cd97b559c4c1fccee7f063b80e6",
    "vout": 1,
    "tree": 0,
    "txtype": 0,
    "address": "TsZniNYpin7w8LwpfoWMEPKneBniWQiyH16",
    "account": "default",
    "scriptPubKey": "76a914602f9a9640f55142ac44a7cfe1133ed93d88599588ac",
    "amount": 1.699494,
    "confirmations": 2234,
    "spendable": true
  }
]

Alice tem agora duas transações não gastas: 1.699494 DCR do troco (P4) e 0.5 DCR do envio de Bob (O1). O total disponível em sua carteira é 1.749494 DCR.

$ ./dcrctl --testnet --wallet getbalance

{
  "balances": [
    {
      "accountname": "default",
      "immaturecoinbaserewards": 0,
      "immaturestakegeneration": 0,
      "lockedbytickets": 0,
      "spendable": 1.749494,
      "total": 1.749494,
      "unconfirmed": 0,
      "votingauthority": 0
    },
    {
      "accountname": "imported",
      "immaturecoinbaserewards": 0,
      "immaturestakegeneration": 0,
      "lockedbytickets": 0,
      "spendable": 0,
      "total": 0,
      "unconfirmed": 0,
      "votingauthority": 0
    }
  ],
  "blockhash": "000000000468583cd03ad278a17fd6f6596322e3f8eeba995140c92a8b706b15"
}