1. Histórico do Bitcoin
O Bitcoin adota um modelo de transação semelhante ao dinheiro (sistema de caixa), e seu método de pagamento é baseado em um modelo chamado UTXO, que é diferente do modelo tradicional baseado em saldo de conta. Por exemplo: No processo do modelo de contabilidade de contas do banco, quando A transfere 100 yuans para B, o banco registrará três etapas, que constituem um processo de transação. A primeira etapa é deduzir 100 yuans da conta de A. O ID do registro desta etapa é tid1. A segunda etapa é depositar 100 yuans na conta de B. O ID do registro desta etapa é tid2. A terceira etapa é registrar um registro de transferência, que vincula tid1 e tid2, indicando que a conta A diminui em 100 yuans e a conta B aumenta em 100 yuans. Desta forma, a relação de transferência entre A e B é registrada e pode ser consultada e rastreada futuramente. Agora, explicaremos o método de pagamento do Bitcoin através da introdução do UTXO e do modelo de pagamento.
UTXO
No blockchain Bitcoin, todos os saldos são armazenados em uma lista chamada “Unspent Transaction Output” (UTXO). Cada UTXO contém um determinado número de Bitcoins, bem como informações sobre os proprietários desses Bitcoins e indica se eles estão disponíveis. Pense nisso como um cheque com o nome do titular e, desde que o titular o assine, os direitos de uso podem ser transferidos para outra pessoa. Para um endereço específico, a soma de todos os valores UTXO é o saldo da carteira do endereço. Ao percorrer todos os UTXOs, podemos obter o saldo atual de cada endereço. Adicione o valor total de todos os UTXOs para obter todos os Bitcoins atualmente em circulação.
Na estrutura de transação Bitcoin, cada transação inclui diversas entradas e saídas, onde cada entrada é uma referência a um UTXO existente, e cada saída especifica um novo endereço de recebimento de fundos e o valor correspondente. Depois que uma transação é iniciada, o UTXO referenciado por sua parte de entrada é temporariamente bloqueado para evitar a reutilização até que a transação seja concluída. Somente quando a transação for empacotada com sucesso em um bloco pelos mineradores e confirmada pela rede, o status UTXO relacionado mudará. Especificamente, os UTXOs utilizados como entradas para a transação são removidos da lista UTXO, indicando que foram consumidos, enquanto as saídas da transação geram novos UTXOs e são adicionadas à lista UTXO. Pode-se entender que após a utilização do cheque-caixa antigo, ele se torna inválido e é gerado um novo cheque-caixa, cuja titularidade pertence ao novo titular.
Vale ressaltar que cada UTXO só pode ser utilizado uma vez em uma transação. Depois de consumido como entrada, ele é removido permanentemente da lista UTXO. Ao mesmo tempo, a saída recém-gerada é adicionada à lista como um novo UTXO. A lista de UTXOs muda constantemente e, à medida que cada novo bloco é criado, ela é atualizada de acordo. E, ao analisar o histórico de transações no blockchain, podemos reconstruir o estado da lista UTXO em qualquer momento.
Além disso, o valor total de entrada de uma transação geralmente excederá ligeiramente o valor total de saída. Essa diferença, chamada taxa de transação ou taxa de rede, é dada como incentivo aos mineradores responsáveis por empacotar as transações em blocos. O tamanho da taxa de rede é diretamente proporcional à complexidade da transação, portanto, uma transação com mais entradas e saídas geralmente exigirá uma taxa de rede mais elevada.
Agora, para compreender mais vividamente a estrutura de transação do Bitcoin, realizaremos uma análise aprofundada por meio de um exemplo específico. A estrutura de transação do Bitcoin é a seguinte, onde as duas variáveis vin e vout representam a “entrada” e a “saída” da transação Bitcoin, respectivamente. As transações Bitcoin não registram alterações de dados em formato de conta, como o modelo tradicional de saldo de conta, mas são representadas por entradas e saídas.
const std::vector<CTxIn> vin;const std::vector<CTxOut> vout;const int32_t nVersion;const uint32_t nLockTime;
Podemos selecionar aleatoriamente um registro de transação em blockchain.com para analisar. A figura abaixo mostra a transação com Hash ID 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Ele contém uma entrada e duas saídas.
Usando os comandos bitcoin-cli getrawtransaction e decoderawtransaction, podemos visualizar a estrutura subjacente da transação acima:
{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","sequence": 4294967295 }],"vout": [{"valor": 0,01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"},{"valor": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}
Na rede Bitcoin, a saída da transação contém duas informações importantes: o endereço (hash da chave pública) e o valor (em Bitcoins). Se a saída de uma transação não for usada na entrada de outras transações, a saída da transação será chamada de saída de transação não gasta (UTXO). Quem possui a chave privada correspondente à chave pública no UTXO tem o direito de usar (ou seja, gastar) este UTXO.
Vejamos as informações em "vin" no código acima. Ela indica que o UTXO gasto por esta transação vem da saída 0 (a saída de uma transação pode ser múltipla, o índice é do número inicial 0), podemos encontrar. o valor deste UTXO de transações históricas (por exemplo, 0,1), portanto nesta transação o usuário gastou 0,1 BTC, e o valor 0,1 não precisa ser escrito explicitamente na transação, mas através da pesquisa UTXO as informações são obtidas. O “vout” desta transação possui duas saídas. Essas duas saídas são dois novos UTXOs, correspondentes ao novo saldo e titular, até que outra transação os consuma como entrada.
Modelo de pagamento
Para entender melhor o modelo de pagamento da rede Bitcoin, utilizamos um exemplo para apresentar o processo de pagamento em que A paga a B uma quantia de n Bitcoins. A figura abaixo mostra o processo do usuário A enviando 3 Bitcoins para o usuário B.
Para o usuário A, antes de mais nada, é necessário determinar o conjunto de todos os UTXOs que ele possui, ou seja, todos os Bitcoins que o usuário A pode controlar;
A seleciona um ou mais UTXOs deste conjunto como entrada da transação. A soma dos valores dessas entradas é m (2+0,8+0,5=3,3 BTC), que é maior que o valor a ser pago n (3 BTC). );
O usuário A define duas saídas para a transação, uma saída é paga ao endereço de B, o valor é n (3 BTC) e a outra saída é paga ao próprio endereço de mudança de A, o valor é m-n-fee (3,3-3-0,001 = 0,299 BTC). A carteira de um usuário geralmente consiste em vários endereços. Geralmente, cada endereço é usado apenas uma vez e o troco é retornado para um novo endereço por padrão;
Depois que o minerador empacota a transação e a carrega na cadeia para confirmação, B pode receber as informações da transação. Como o tamanho do bloco tem um limite máximo (aproximadamente 1 MB), os mineradores priorizarão transações com altas taxas de transação (fee_rate=fee/size) para obter os maiores retornos de taxas. Podemos ver a situação das taxas de transação de mineração em tempo real no mempool. Se quisermos a confirmação mais rápida durante o processo de transferência, podemos escolher Alta Prioridade ou personalizar uma taxa de transação adequada;
2. Numeração e rastreamento de cong
O número total de Bitcoins é 21 milhões, e cada Bitcoin contém 10^8 Satoshi (Satoshi, Sat). Portanto, há um total de 21 milhões*10^8 satoshis na rede Bitcoin. O protocolo Ordinals distingue esses satoshis e dá a cada satoshi um número único. Esta seção apresentará como este protocolo numera exclusivamente cada Satoshi e como rastreia a conta à qual pertence. Além disso, também será introduzida a classificação de raridade do Satoshi.
Número de Satoshi
De acordo com o protocolo dos Ordinais, os satoshis são numerados com base na ordem em que são extraídos. A figura abaixo mostra a representação do 0º satoshi extraído no 0º bloco.
Existem muitas maneiras de expressar Satoshi:
Símbolo inteiro: Por exemplo, 2099994106992659, que representa o número de série atribuído ao satoshi de acordo com a ordem de mineração.
Notação decimal: Por exemplo, 3891094.16797, o primeiro número indica a altura do bloco onde o satoshi foi extraído e o segundo número indica o número do satoshi no bloco.
Símbolo de grau: por exemplo, 3°111094′214″16797‴, o primeiro número é o período, numerado a partir de 0, o segundo número é o índice do bloco da época da redução pela metade e o terceiro número é o índice do bloco durante a dificuldade período de ajuste, o último número é o índice de sat no bloco.
Símbolo de porcentagem: Por exemplo, 99,99971949060254% indica a posição do Satoshi no fornecimento de Bitcoin, expressa como uma porcentagem.
Nome: Por exemplo Satoshi. Um nome que codifica o número de sequência usando os caracteres de a a z.
Usaremos um exemplo para explicar como numerar Bitcoins recém-extraídos. Olhando para o bloco 795952 da blockchain Bitcoin, podemos ver que a primeira transação Tx 3a1f...b177 registra a recompensa do minerador (transação coinbase). Esta transação inclui os Bitcoins recém-extraídos, que são usados como recompensas de embalagem para os mineradores, bem como as taxas de manuseio pagas aos mineradores pelo iniciador da transação. Observando a entrada na figura abaixo, podemos descobrir que seu id UTXO consiste em uma string de 0s e a altura do bloco. O endereço de saída é o endereço da carteira do minerador e o valor é a soma das recompensas e taxas de manuseio acima.
Se olharmos mais detalhadamente a saída para os mineradores, podemos ver a distribuição de endereços, valores e satoshis contidos. Conforme mencionado anteriormente, estes incluem recompensas e taxas de mineração. Entre eles, a informação do número de sats verde 1941220000000000–1941220625000000 é o novo satoshi gerado pela recompensa de mineração, e os 712 registros de satoshi restantes correspondem a todas as taxas de manuseio no bloco.
Podemos verificar o número Sat 1941220000000000. O número do bloco é 795952 e a notação decimal (decimal) é 795952,0, o que significa que a altura do bloco de mineração deste Satoshi é 795952, o número de Satoshi neste bloco é 0 e a marca de raridade (raridade) subsequente é incomum. Nós Isso será explicado em detalhes em uma seção posterior.
A circulação de Cong
Como cada BTC é gerado por meio de recompensas de mineração, todos eles são rastreáveis. As contas Bitcoin usam o modelo UTXO. Suponha que o usuário A obtenha o 100º ao 110º satoshi por meio da mineração (10 satoshis são armazenados como um todo no mesmo UTXO com o ID adc123). Quando o usuário A deseja pagar 5 satoshis ao usuário B, ele opta por usar o ID abc123 como entrada da transação, dos quais 5 satoshis são dados ao usuário B e 5 satoshis são devolvidos ao usuário A como troco. Essas duas cópias de 5 satoshis são um todo e são armazenadas em dois UTXOs com IDs abc456 e abc789 respectivamente. O id UTXO acima e o número de satoshis são mostrados apenas como exemplos. Em situações reais, o número mínimo de satoshis enviados é limitado a 546 e o id UTXO não é expresso neste formulário.
Na transação acima, o caminho de circulação dos 10 satoshis do usuário A é:
A mineração produz 10 satoshis, numerados [100, 110). Isso significa que do 100º ao 109º satoshis são armazenados no UTXO com o id abc123, e seu proprietário é o usuário A.
Quando A transfere dinheiro, 10 satoshis são divididos em duas partes, cada uma com 5 satoshis. O princípio “primeiro a entrar, primeiro a sair” é usado aqui, ou seja, a ordem dos números dos satoshis é determinada de acordo com seu índice na saída da transação. Suponha que a ordem de saída seja primeiro o usuário A, depois o usuário B, então o número de sequência dos 5 satoshis restantes do usuário A é [100, 105), armazenado no UTXO com id abc456, e o número de sequência dos 5 satoshis do usuário B é [105, 110), armazenado no UTXO com id abc789.
Raridade (Raro Satoshi)
Como um desdobramento do protocolo Ordinals, a raridade dos satoshis pode ser definida com base na ordem em que são extraídos. Isso resultará em alguns satoshis especiais com raridades diferentes. Aqui estão os níveis de raridade de diferentes Satoshis:
comum: Qualquer satoshi, exceto o primeiro satoshi do bloco (a oferta total é de 2.100 trilhões)
incomum: primeiro satoshi em cada bloco (a oferta total é 6.929.999)
raro: primeiro satoshi a cada período de ajuste de dificuldade (oferta total 3437)
épico: o primeiro satoshi após cada redução pela metade (a oferta total é 32)
lendário: o primeiro satoshi de cada ciclo (suprimento total é 5)
mítico: o primeiro satoshi no bloco gênese (suprimento total é 1)
Este conceito de satoshis raros pode agregar mais interesse e valor ao ecossistema Bitcoin. Satoshis de diferentes raridades podem ter valores diferentes no mercado, atraindo colecionadores e investidores.
3. Método de inscrição
Os ordinais são significativamente diferentes dos NFTs em outras cadeias não Bitcoin. A principal diferença é que os metadados ordinais não são armazenados em um local específico. Em vez disso, esses metadados são incorporados aos dados da testemunha da transação (dados da testemunha, campo da testemunha), e é por isso que os chamamos de “inscrição”, porque esses dados são “gravados” no Bitcoin como uma inscrição em uma parte específica da transação. os dados são anexados a um Satoshi específico. Este processo de inscrição é implementado através de Segregated Witness (SegWit) e Pay-to-Taproot (P2TR), que inclui duas etapas: commit e revelação, que podem Qualquer forma de conteúdo (como texto, imagens ou vídeos) é inscrita no designado Satoshi. Apresentaremos outro método de armazenamento mais direto, OP_RETURN, a seguir e explicaremos por que ele não é usado como meio de inscrição. Ao mesmo tempo, apresentaremos o que são Segregated Witness e Pay-to-Taproot e quais as funções que desempenham na inscrição. Finalmente apresentaremos o método de inscrição.
OP_RETURE
Na versão 0.9 do cliente Bitcoin Core, o compromisso foi finalmente alcançado através da adoção do operador RETURN. **RETURN permite que os desenvolvedores adicionem 80 bytes de dados não relacionados a pagamento à saída da transação. **Ao contrário dos pseudo-pagamentos, RETURN cria uma saída explicitamente verificável e não consumível que não precisa ser armazenada em um conjunto UTXO. As saídas RETURN são registradas no blockchain. Elas consomem espaço em disco e aumentam o tamanho do blockchain. No entanto, elas não são armazenadas no conjunto UTXO, portanto, não expandirão o conjunto de memória UTXO e não aumentarão o número de nós completos. Custos de memória caros.
Embora OP_RETURN seja um meio muito simples de armazenar informações na blockchain Bitcoin, também é um método potencial de inscrição. Mas as limitações do OP_RETURN fazem com que ele enfrente alguns desafios ao lidar com o armazenamento de metadados. Em primeiro lugar, OP_RETURN só pode armazenar 80 bytes de dados. Para situações em que grandes quantidades de dados precisam ser armazenadas, esta limitação é obviamente insatisfatória. Em segundo lugar, os dados OP_RETURN são armazenados na parte de saída da transação. Embora esses dados não sejam armazenados no conjunto UTXO, eles ocupam o espaço de armazenamento do blockchain, levando a um aumento no tamanho do blockchain. Finalmente, usar OP_RETURN resulta em taxas de transação mais altas porque exige o pagamento de mais para lançar essas transações.
Testemunha Segregada
Por outro lado, o novo método fornecido pelo SegWit pode superar os problemas acima. SegWit é uma importante atualização de protocolo para Bitcoin. Foi proposta pelo desenvolvedor principal do Bitcoin, Pieter Wuille, em 2015 e foi finalmente adotada oficialmente na versão 0.16.0 em 2017. Segregado em Testemunha Segregada significa separação e isolamento. Testemunha é uma assinatura relacionada a uma transação. Portanto, o SegWit separa certos dados de assinatura da transação (dados de testemunha) da transação.
O principal benefício de separar assinaturas de dados relacionados a transações é reduzir o tamanho dos dados armazenados em um bloco Bitcoin. Isto tem capacidade extra por bloco para armazenar mais transações, o que também significa que a rede pode lidar com mais transações e os remetentes pagam taxas mais baixas. Tecnicamente falando, significa retirar as informações de assinatura do script (scriptSig) da estrutura básica (bloco base) e colocá-las em uma nova estrutura de dados. Os nós e mineradores que realizam o trabalho de verificação também verificarão a assinatura do script nesta nova estrutura de dados para garantir que a transação seja válida. A atualização do Segwit introduz um novo campo de testemunha nas saídas de transações para garantir privacidade e desempenho. Embora os dados de testemunhas não sejam projetados para armazenamento de dados, eles na verdade nos dão a oportunidade de armazenar coisas como metadados de inscrição. Usamos a figura a seguir para entender a Testemunha Segregada de forma mais vívida:
Raiz principal
P2TR é um tipo de saída de transação de Bitcoin que foi introduzido na atualização Taproot em 2021, que permite que diferentes condições de transação sejam armazenadas no blockchain de forma mais privada. Na inscrição dos Ordinais, o P2TR desempenha um papel vital. A inscrição incorpora essencialmente conteúdo de dados específico nas transações Bitcoin, e as atualizações do Taproot, especialmente P2TR, tornam essa incorporação de dados mais flexível e econômica.
Primeiro, devido à forma como os scripts Taproot são armazenados, podemos armazenar conteúdo de inscrição em scripts de despesas de caminho de script Taproot, que quase não têm restrições de conteúdo, ao mesmo tempo que recebemos descontos em dados de testemunhas, tornando o armazenamento de conteúdo de inscrição relativamente econômico. Como o consumo de scripts Taproot só pode ser feito a partir da saída Taproot já existente, o Inscription usa um processo de confirmação/revelação de dois estágios. Primeiro, na transação de commit, é criada uma saída Taproot que promete um script contendo o conteúdo da inscrição. Então, em uma transação de revelação, a saída criada pela transação de commit é consumida, revelando assim o conteúdo da inscrição na cadeia.
Essa abordagem reduz muito o consumo de recursos. Se o P2TR não for utilizado, as informações da testemunha serão armazenadas na saída da transação. Desta forma, enquanto esta saída não for consumida, as informações da testemunha ficarão sempre armazenadas no conjunto UTXO. Por outro lado, se P2TR for utilizado, as informações da testemunha não aparecerão na transação gerada durante a fase de commit, portanto não serão gravadas no conjunto UTXO. Somente quando este UTXO for consumido é que as informações da testemunha aparecerão na entrada da transação durante a fase de revelação. O P2TR permite que metadados sejam gravados no blockchain Bitcoin, mas nunca aparecem no conjunto UTXO. Como manter/modificar o conjunto UTXO requer mais recursos, esta abordagem pode economizar muitos recursos.
inscrição
O protocolo Ordinals aproveita o SegWit para relaxar o limite de tamanho do conteúdo gravado na rede Bitcoin, armazenando o conteúdo da inscrição nos dados testemunhas. Permitindo armazenar até 4 MB de metadados. Taproot facilita o armazenamento de dados arbitrários de testemunhas em transações Bitcoin, permitindo que o desenvolvedor do Ordinals, Casey Rodarmor, reaproveite opcodes antigos (OP_FALSE, OP_IF, OP_PUSH) no que ele descreve como “envelopes” para o que ele chama de armazenamento de “inscrição” Dados arbitrários.
O processo de fundição de inscrições consiste nas duas etapas a seguir:
Primeiro, você precisa criar uma transação de commit para a saída Taproot do script que contém o conteúdo da inscrição. O formato de armazenamento é Taproot, ou seja, a saída da transação anterior é P2TR (Pay-To-Taproot), e a entrada da próxima transação é incorporada em um formato específico no script Taproot testemunhado primeiro, a string ord é; empurrado para a pilha, para eliminar a ambigüidade de que a inscrição tinha outros usos. OP_PUSH 1 indica que o próximo push contém o tipo de conteúdo e OP_PUSH 0 indica que os push de dados subsequentes contêm o próprio conteúdo. Inscrições grandes devem usar vários envios de dados porque uma das poucas limitações do taproot é que um único envio de dados não pode ser maior que 520 bytes. Neste momento, os dados de inscrição foram mapeados para o UTXO da saída da transação, mas não foram tornados públicos.
Segundo, a saída criada pela transação de commit precisa ser consumida na transação de revelação. Nesta fase, uma transação é iniciada utilizando como entrada o UTXO correspondente àquela inscrição. Nessa altura, o conteúdo da inscrição correspondente foi divulgado para toda a Internet.
Através das duas etapas acima, o conteúdo da inscrição foi vinculado ao UTXO inscrito. De acordo com o posicionamento do Satoshi apresentado acima, a inscrição é realizada no primeiro Satoshi correspondente à entrada UTXO, e o conteúdo da inscrição é incluído na entrada da transação exibida. De acordo com a introdução à circulação e rastreamento de satoshis apresentada acima, estes satoshis gravados com conteúdo especial podem ser transferidos, comprados, vendidos, perdidos e recuperados. Deve-se observar que inscrições repetidas não são permitidas, caso contrário as inscrições subsequentes serão inválidas.
Explicaremos este processo em detalhes através do exemplo de gravação de uma pequena imagem BTC NFT. Este processo inclui principalmente as duas etapas de confirmação e revelação mencionadas anteriormente. Primeiro, vemos que o ID de hash da primeira transação é 2ddf9...f585c. Pode-se notar que o resultado desta transação não contém dados de testemunhas e não há informações de inscrição relevantes na página web.
A seguir, verificamos o registro do segundo estágio, cujo Hash ID é e7454...7c0e1. Aqui podemos ver a informação da inscrição dos Ordinais, que é o conteúdo da inscrição do testemunho. O endereço de entrada desta transação é o endereço de saída da transação anterior, e a saída 0,00000546BTC (546 Satoshi) é enviar este NFT para o seu próprio endereço. Ao mesmo tempo, também podemos encontrar o satoshi onde esta inscrição está localizada em Sat 1893640468329373.
Na carteira Bitcoin, podemos ver esse ativo. Se quisermos negociar este NFT, podemos enviá-lo diretamente para endereços de outras pessoas, ou seja, enviar este UTXO, completando assim a transferência da inscrição.
4. Carteira Bitcoin
Depois de entendermos o que é a ecologia dos Ordinais, a circulação dos satoshis e o conhecimento relacionado das inscrições, existem atualmente muitos cenários de aplicação, seja o surgimento do BRC-20, ORC-20, BRC-721, GBRC-721 e outros protocolos derivados relacionados, que exigem que tenhamos carteiras correspondentes para suportar e exibir informações de token ou pequenas imagens NFT. Nesta seção apresentaremos os conceitos e características dos diferentes endereços de carteira Bitcoin.
Os endereços Bitcoin começam com 1, 3 ou bc1. Assim como os endereços de e-mail, eles podem ser compartilhados com outros usuários de Bitcoin que podem usá-los para enviar Bitcoin diretamente para suas próprias carteiras. Do ponto de vista da segurança, os endereços Bitcoin não contêm nada sensível. Pode ser postado em qualquer lugar sem comprometer a segurança da sua conta. Ao contrário dos endereços de e-mail, novos endereços podem ser criados a qualquer momento, conforme necessário, e todos depositarão fundos diretamente na sua carteira. Na verdade, muitas carteiras modernas criam automaticamente um novo endereço para cada transação para maximizar a privacidade. Uma carteira é simplesmente uma coleção de endereços e chaves que desbloqueiam os fundos dentro dela. Primeiro precisamos saber como o endereço da carteira Bitcoin é gerado.
Chaves privadas e públicas do Bitcoin
Bitcoin usa curva elíptica Secp256k1 A "chave privada" é um número aleatório entre 1 e n-1 é um número grande (256 bits n é expresso em notação científica da seguinte forma:
Esse intervalo é extremamente grande e é quase impossível adivinharmos as chaves privadas de outras pessoas. Essa chave privada inteira aleatória pode ser representada por 256 bits e existem vários métodos de codificação. Se a chave privada no formato WIF ou compactado por WIF não estiver criptografada, o "número inteiro aleatório" original pode ser obtido decodificando-o. Outra forma é o BIP38, que propõe usar o algoritmo AES para criptografar a chave privada. A chave privada obtida por este método começa com o caractere 6P. Esse tipo de chave privada deve inserir uma senha antes de poder ser importada para várias carteiras Bitcoin. Isso é o que normalmente fazemos. Chaves privadas comumente usadas.
Em seguida, usaremos a fórmula da curva elíptica K = kG para gerar a chave pública Bitcoin K a partir da chave privada k G é o Ponto Base, que é um parâmetro de secp256k1. Podem ser obtidas as duas coordenadas de K, que são as duas expressões da chave pública, nomeadamente "Formato não comprimido" e "Formato comprimido".
A forma não compactada consiste em conectar diretamente as duas coordenadas x e y e, em seguida, adicionar um prefixo 0x04 na frente;
A forma compactada significa que quando y é um número par, a codificação é 02 x, e quando y é um número ímpar, a codificação é 03 x;
Endereço Bitcoin
Vários tipos de endereços Bitcoin são mostrados na figura abaixo. Existem quatro métodos de representação:
Referência: https://en.bitcoin.it/wiki/Invoice_address
1. Formato legado (P2PKH)
Exemplo: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u
Endereços começando com “1” são o formato de endereço original do Bitcoin e ainda são usados hoje. É calculado a partir da chave pública através do Hash, também conhecido como P2PKH, que é a abreviatura de Pay To PubKey Hash (pagamento ao hash da chave pública).
2. Formato SegWit aninhado (P2SH)
Exemplo: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN
O endereço começa com “3” e P2SH é a abreviatura de Pay To Script Hash, que suporta funções mais complexas do que endereços legados. O P2SH aninhado pega o endereço P2SH existente (começando com "3") e o encapsula com o endereço SegWit.
3. Formato SegWit nativo (Bech32)
Exemplo: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3
Endereços começando com bc1 são propostos em BIP0173, que são endereços SegWit nativos. O endereço codificado Bech32 é um formato de endereço desenvolvido especialmente para SegWit. Bech32 foi definido no BIP173 no final de 2017. Uma das principais características deste formato é que ele não diferencia maiúsculas de minúsculas (o endereço contém apenas 0-9, az), portanto, pode efetivamente evitar confusão ao inserir e é mais legível . Como são necessários menos caracteres no endereço, o endereço usa a codificação Base32 em vez da tradicional Base58, tornando os cálculos mais convenientes e eficientes. Os dados podem ser armazenados de forma mais compacta em códigos QR. Bech32 oferece maior segurança, código de detecção de erros de soma de verificação melhor otimizado e minimiza a chance de endereços inválidos.
Os próprios endereços Bech32 são compatíveis com SegWit. Nenhum espaço adicional é necessário para colocar o endereço SegWit no endereço P2SH, portanto, usando o endereço no formato Bech32, a taxa de manuseio será menor. Os endereços Bech32 têm várias vantagens sobre os endereços Base58 mais antigos (a codificação Base58Check é usada para codificar matrizes de bytes em Bitcoin em strings codificáveis por humanos): os códigos QR são menores, melhor à prova de erros, mais seguros; , por isso é mais fácil de ler, digitar e entender.
4. Formato raiz principal (P2TR)
Bech32 tem uma desvantagem: se o último caractere de um endereço for p, então inserir ou excluir qualquer número de caracteres q imediatamente antes de p não invalidará sua soma de verificação.
Para aliviar as deficiências acima do Bech32, o endereço Bech32m foi proposto no BIP0350:
Para endereços SegWit nativos da versão 0, use Bech32 anterior;
Para endereços SegWit nativos da versão 1 (ou superior), o novo Bech32m é usado.
Para endereços Bech32m, quando a versão é 1, eles sempre começam com bc1p (ou seja, endereços Taproot). Especificamente, assim como o SegWit nativo, uma carteira pode ser composta por uma frase inicial e uma frase secreta. Eles são usados para gerar chaves públicas e privadas estendidas usadas para derivar endereços para caminhos arbitrários em uma carteira determinística hierárquica. Armazena principalmente BRC-20 e BTC NFT, etc.


