Como é que verifico os ativos na árvore Merkle da OKX? (Árvore de Merkle V2)

Publicado a 21/03/2023Atualizado a 12/04/2024Leitura de 9 minutos

Aplicável ao período de auditoria após março de 2023

O que é uma árvore de Merkle?

Uma Árvore de Merkle (ou Árvore de Hash) é uma estrutura de dados, que é normalmente uma árvore binária. Utiliza funções predefinidas para calcular o valor de hash de um nó de baixo para cima, até ao nó raiz superior da árvore.

Informação do nó

Cada nó da árvore armazena essa informação:

  • Valor de hash do nó
  • Montante da criptomoeda de um utilizador captado pelo instantâneo de auditoria (por exemplo, BTC, ETH, USDT)
    valor de hash,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"}
    be324cf06aee0616b4ec20c3,{"BTC":"1.023","ETH":"0","USDT":"20.2343322"}
    ### Regra de hash
  • Nós de folha (exceto nós de preenchimento)
    hash=SHA256(nonce+balances)
    O OKX atribuirá um __nonce__ único a cada utilizador, que pode ser encontrado na página de auditoria do utilizador; __balances__ é uma cadeia de carateres json composta pelos ativos e montantes dos utilizadores que foram capturados pela imagem de auditoria, por exemplo: {"BTC":"1.023","ETH":"0","USDT":"20.2343322"} (NOTA: é necessário eliminar os zeros à direita e manter 8 casas decimais de precisão) ### Nós Pais
    hash de um nó pai = SHA256(h1+h2+(h1 BTC amount+h2 BTC amount)+(h1 ETH amount+h2 ETH amount)+(h1 USDT amount+h2 USDT amount)+height)
    __h1__=Hash do nó filho esquerdo do nó atual, __h2__=Hash do nó filho direito do nó atual, __audit_id__=ID da auditoria atual, __height__=a altura do nó h1 (ou h2) Definição de altura: altura do nó folha inferior=1, altura de um nó pai=altura do seu nó filho + 1, o nó raiz tem a altura máxima

Regra de divisão do nó

Para proteger a privacidade dos clientes, o OKX dividirá aleatoriamente os ativos dos utilizadores em dois nós, com o intervalo aleatório entre 0 e 1. Por exemplo, se os ativos de um utilizador forem: {"BTC": "10.2", "ETH": "4", "USDT": "5"} e o número aleatório for 0,6, os ativos do utilizador serão divididos em 60% e 40%.
CT-web-POR-4
Durante a geração subsequente da árvore de Merkle, os nós de folha divididos serão aleatoriamente baralhados para os distribuir por diferentes posições na árvore.

Regra dos nós de preenchimento

Para construir uma árvore de Merkle completa (uma árvore binária completa), são necessários 2^n nós de folhas, mas os dados atuais podem não satisfazer esse requisito e também pode haver um número ímpar de dados. Nestas circunstâncias, se o nó k não tiver nós irmãos, será automaticamente gerado um nó irmão k' como nó de preenchimento, de tal forma que hash(k')=hash(k), e os montantes dos ativos serão definidos como 0 para todas as moedas.
por exemplo.

Hash saldos
h1 {"BTC": 1, "ETH": 1,"USDT": 1}
h2 {"BTC": 1, "ETH": 2,"USDT": 3}
h3 {"BTC": 1, "ETH": 2,"USDT": 4}
Neste exemplo, o nó de preenchimento h4=h3 e os saldos armazenados no nó são {"BTC": 0, "ETH": 0,"USDT": 0} , como mostra a Figura 1 (nó verde): ![CT-web-POR-5;;1124x336](//images.ctfassets.net/tofttmniq0qv/1zvnyvb7al1wwVYjpFWnzS/680b0bb32c5010e91e1a73ab80b54c72/CT-web-POR-5.JPEG)*Fotografia 1*
hash de um nó pai = SHA256(h1+h2+(h1 BTC amount+h2 BTC amount)+(h1 ETH amount+h2 ETH amount)+(h1 USDT amount+h2 USDT amount)+height)
Assim: h6 = SHA256(h3 + h4 + (1+0)+(2+0)+(4+0)+height) ## Como é que verifico se os meus ativos estão incluídos na árvore de Merkle do OKX? ### Teoria da verificação De acordo com a definição da árvore OKX Merkle, é possível calcular o valor de hash de um nó pai subindo a partir da base, utilizando os valores de hash dos seus nós filhos à esquerda e à direita. Eventualmente, obterá o valor hash do nó raiz. Pode então comparar este valor de hash calculado do nó de raiz com o valor obtido a partir do nó de raiz do caminho da árvore de Merkle. Se coincidirem, a verificação é bem sucedida; caso contrário, falha. Exemplo: ver a figura 1 e o texto abaixo, com base no nó próprio do utilizador h3 e no seu nó irmão h4, pode ser calculado o hash do seu nó pai h6 e, com base no nó irmão h5, pode ser calculado o hash do seu nó pai h7. Em seguida, comparar o valor hash de h7 com o valor recolhido no nó raiz do caminho da árvore de merkle e verificar se são idênticos para concluir o processo de verificação. Texto de dados do caminho da árvore de Merkle:
h7,3,{"BTC":"3","ETH":"5","USDT":"8"}
h6,2,{"BTC":"1","ETH":"2","USDT":"4"}
h5,2,{"BTC":"2","ETH":"3","USDT":"4"}
h4,1,{"BTC":"0","ETH":"0","USDT":"0"}
h3,1,{"BTC":"1","ETH":"2","USDT":"4"}
h2,1,{"BTC":"1","ETH":"2","USDT":"3"}
h1,1,{"BTC":"1","ETH":"1","USDT":"1"}
__Nota__: O OKX introduziu o instantâneo de ativos líquidos ao gerar a árvore de Merkle. Uma dívida (por exemplo, capital próprio negativo) será registada no instantâneo se o utilizador tiver pedido bens emprestados. Para mais informações, consultar e .

Passos de verificação

  1. Inicie sessão na sua [conta OKX] (https://www.okx.com/), vá a Ativos > Auditorias para ver as auditorias recentes, selecione Detalhes para ver os seus dados de auditoria.
    CT-web-POR-view audit detailsSelecionar Ativos e Ver detalhes para uma melhor compreensão da auditoria de dados

  2. Também pode verificar manualmente os seus ativos na árvore de Merkle selecionando Copiar dados
    CT-web-POR-copy dataSelecionar Copiar dados para o processo de verificação manual

  3. Abra o editor de texto (por exemplo, notebook), cole e guarde a cadeia de carateres json como um ficheiro json.

Fases operacionais

Mac: Abra o terminal, introduza o comando touch merkle_proof_file.json e, em seguida, será criado um ficheiro json. Por defeito, o ficheiro é guardado na secretária do sistema. Pode abrir o Finder e procurar por merkle_proof_file.json para encontrar este ficheiro. Abra este ficheiro json, cole os dados copiados e guarde-o.
Windows: Faça duplo clique para abrir um editor de texto (por exemplo, bloco de notas), cole os dados e guarde-os como um ficheiro json.
No nosso caso, nomeamos o ficheiro "merkle_proof_file.json". O texto json de dados do caminho da árvore de Merkle é mostrado como apresentado abaixo:
{
"hash": "7e5a588806ff1de23f81e3a092860de43367fb4ea5503a53d95a5bc36d77e0c2",
"nodes": [
{ "balances": { "BTC": "0.49997703", "ETH": "0", "USDT": "16.62437479" },
"hash": "4087972e6b4bd3897c19f76b94b27db8eaf19f0d27d1b73e18297c18c850c3c1"
},
{ "balances": { "BTC": "0.40002297", "ETH": "0", "USDT": "12.18752303" },
"hash": "da14bd34c8d933781b8ec20a7e16109d0d650306b049da52c755437c4f7ec5e5" }
],
"nonce": "b6f6ea7584742839791ab923f4f1980d7ca3ff7c5d3f3fd9cc2a18c598503553",
"totalBalances": { "BTC": "0.9", "ETH": "0", "USDT": "28.81189782" }
}

  1. Descarregar a "<a href="/prova-de-reservas/download?tab=liabilities" target="_blank">Arvore de Merkle completa" sob o relatório de responsabilidade e descompacte o ficheiro descarregado para obter um "ficheiro de árvore de Merkle completa".
    CT-web-POR-7Selecionar a transferência para obter o relatório

  2. Descarregar a ferramenta OKX open-source verification (MerkleValidator) 6. Guardar a ferramenta de verificação de fonte aberta OKX (MerkleValidator) e os dois ficheiros de dados (merkle_proof_file.json, full-liabilities-merkle-tree.txt) na mesma pasta. No nosso caso: colocamos a ferramenta e o ficheiro de dados na pasta Downloads, com o nome proof-of-reserves, como se mostra abaixo:
    CT-web-POR-8 7. Execute o comando e localize o diretório da pasta descarregada. No nosso caso, introduza o comando: cd ~/Downloads/proof-of-reserve

  3. Digite o comando abaixo e carregue no enter para iniciar a verificação:
    Mac
    ./MerkleValidator --merkle_file full-liabilities-merkle-tree.txt --user_info_file merkle_proof_file.json
    Windows
    MerkleValidator.exe --merkle_file full-liabilities-merkle-tree.txt --user_info_file merkle_proof_file.json
    Nota: Se estiver a utilizar o Mac e se deparar com a mensagem "não é possível abrir as ferramentas porque o programador não pode ser verificado", aceda a Preferências do sistema > Segurança e privacidade > Geral > Clique no cadeado para efetuar alterações > Permitir aplicações transferidas da App Store e programadores identificados

  4. Verificar o resultado
    Se a verificação for aprovada, o resultado A validação do caminho da árvore de Merkel foi aprovada será apresentado abaixo:
    CT-web-POR-9 Se a verificação falhar, o resultado A validação do caminho da árvore de Merkel falhou será mostrado abaixo:
    CT-web-POR-10 10. Também pode consultar o código da ferramenta de verificação de código aberto OKX (MerkleValidator) e definição de árvore de merkle OKX, escrever um programa para verificar se os seus ativos são capturados pela árvore de merkle construída a partir do instantâneo de auditoria, utilizando os dados do caminho da árvore de merkle recolhidos no passo 2. ## Aviso legal
    ESTE ARTIGO DEVE SER USADO SOMENTE PARA FINS INFORMATIVOS. REPRESENTA AS OPINIÕES DO(S) AUTOR(ES) E NÃO REPRESENTA AS OPINIÕES DA OKX. O SEU CONTEÚDO NÃO SE DESTINA A FORNECER (i) CONSULTORIA DE INVESTIMENTO OU RECOMENDAÇÃO DE INVESTIMENTO; (ii) OFERTA OU SOLICITAÇÃO PARA COMPRAR, VENDER OU MANTER ATIVOS DIGITAIS, OU (iii) CONSULTORIA FINANCEIRA, CONTABILÍSTICA, JURÍDICA OU TRIBUTÁRIA. ATIVOS DIGITAIS, INCLUINDO STABLECOINS AND NFTS, ENVOLVEM UM ALTO RISCO E PODEM SOFRER FORTES OSCILAÇÕES OU ATÉ PERDER TODO O SEU VALOR. CONSIDERE CUIDADOSAMENTE SE NEGOCIAR OU ACUMULAR ATIVOS DIGITAIS É ADEQUADO PARA SI TENDO EM CONTA A SUA CONDIÇÃO FINANCEIRA.