mirror of
				https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line.git
				synced 2025-10-31 18:37:36 +00:00 
			
		
		
		
	Review 10_1
This commit is contained in:
		
							parent
							
								
									fd345a450f
								
							
						
					
					
						commit
						161ad35fb5
					
				| @ -1,10 +1,10 @@ | ||||
| # 10.1: Entendendo a Fundação do P2SH | ||||
| # 10.1: Compreendendo a Fundação do P2SH | ||||
| 
 | ||||
| Sabemos que os scripts do Bitcoin podem ser usados para controlar o resgate dos UTXOs. A próxima etapa é criar os nossos próprios scripts... Mas isso requer uma técnica muito específica. | ||||
| Sabemos que os scripts do Bitcoin podem ser usados para controlar o resgate dos UTXOs. A próxima etapa é criar os nossos próprios scripts... mas isso requer uma técnica muito específica. | ||||
| 
 | ||||
| ## Conhecendo os Padrões do Bitcoin | ||||
| 
 | ||||
| Aqui está a pegadinha sobre como usar scripts do Bitcoin: Por razões de segurança, a maioria dos nós do Bitcoin aceitará apenas seis tipos de transações de Bitcoin, ditas como "padrão". | ||||
| Aqui está a pegadinha sobre como usar scripts do Bitcoin: Por razões de segurança, a maioria dos nodes do Bitcoin aceitará apenas seis tipos de transações de Bitcoin, ditas como "padrão". | ||||
| 
 | ||||
| * __Pay to Public Key (P2PK)__ - O tipo de transação mais antiga e obsoleta (```<pubKey> OP_CHECKSIG```) que foi substituída por uma mais segura, a P2PKH. | ||||
| * __Pay to Public Key Hash (P2PKH)__ - Uma transação padrão (```OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG```) que paga para o hash de uma chave pública. | ||||
| @ -17,9 +17,9 @@ Então, como podemos descrever um script mais complexo do Bitcoin? A resposta es | ||||
| 
 | ||||
| > :warning: **AVISO DE VERSÃO:** Os Scripts P2SH somente se tornaram padrão à partir do Bitcoin Core 0.10.0. Antes disso, apenas os scripts do tipo P2SH Multisigs eram permitidos. | ||||
| 
 | ||||
| ## Compreendendo o script P2SH | ||||
| ## Compreendendo o Script P2SH | ||||
| 
 | ||||
| Você já viu uma transação P2SH quando criou uma multisig na seção [§6.1: Enviando uma Transação com Multisig](06_1_Sending_a_Transaction_to_a_Multisig.md). Embora o multisig seja um dos tipos de transação padrão, o ```bitcoin-cli``` simplifica o uso dos multisigs, incorporando-os às transações P2SH, conforme descrito mais detalhadamente na seção [§10.4: Scripting a Multisig](10_4_Scripting_a_Multisig.md). | ||||
| Você já viu uma transação P2SH quando criou um multisig na seção [§6.1: Enviando uma Transação com Multisig](06_1_Sending_a_Transaction_to_a_Multisig.md). Embora o multisig seja um dos tipos de transação padrão, o ```bitcoin-cli``` simplifica o uso dos multisigs, incorporando-os às transações P2SH, conforme descrito mais detalhadamente na seção [§10.4: Programando um Multisig](10_4_Scripting_a_Multisig.md). | ||||
| 
 | ||||
| Então, vamos olhar mais uma vez para o ```scriptPubKey``` daquela transação multisig P2SH: | ||||
| ``` | ||||
| @ -36,13 +36,13 @@ Então, vamos olhar mais uma vez para o ```scriptPubKey``` daquela transação m | ||||
| 
 | ||||
| O script de bloqueio tem uma aparência bastante simples: ```OP_HASH160 a5d106eb8ee51b23cf60d8bd98bc285695f233f3 OP_EQUAL```. Como de costume, há um grande bloco de dados no meio. Este é um hash de outro script de bloqueio que está oculto (```redeemScript```) que só será revelado quando os fundos forem resgatados. Em outras palavras, o script de bloqueio padrão para um endereço P2SH é: ```OP_HASH160 <redeemScriptHash> OP_EQUAL```. | ||||
| 
 | ||||
| > :book: *** O que é um redemScript? *** Cada transação P2SH carrega a impressão digital de um script de bloqueio que fica oculto como um hash de 20 bytes. Quando uma transação P2SH é resgatada, o ```redeemScript``` completo (sem o hash) é incluído como parte do ```scriptSig```. O Bitcoin garantirá que o ```redeemScript``` corresponda ao hash. Então, ele realmente executa o ```redeemScript``` para ver se os fundos podem ser gastos (ou não). | ||||
| > :book: ***O que é um redeemScript?*** Cada transação P2SH carrega a impressão digital de um script de bloqueio que fica oculto como um hash de 20 bytes. Quando uma transação P2SH é resgatada, o ```redeemScript``` completo (sem o hash) é incluído como parte do ```scriptSig```. O Bitcoin garantirá que o ```redeemScript``` corresponda ao hash. Então, ele realmente executa o ```redeemScript``` para ver se os fundos podem ser gastos (ou não). | ||||
| 
 | ||||
| Um dos elementos interessantes das transações P2SH é que nem o remetente nem o Blockchain sabem realmente o que é o ```redemScript```! Um remetente simplesmente envia para um endereço P2SH padronizado que é marcado com um prefixo "2" e, não se preocupa com a forma como o destinatário irá recuperar os fundos. | ||||
| Um dos elementos interessantes das transações P2SH é que nem o remetente nem o Blockchain sabem realmente o que é o ```redeemScript```! Um remetente simplesmente envia para um endereço P2SH padronizado que é marcado com um prefixo "2" e não se preocupa com a forma como o destinatário irá recuperar os fundos. | ||||
| 
 | ||||
| > :link: **TESTNET vs MAINNET:** Na testnet, o prefixo para endereços P2SH é ```2```, enquanto na mainnet, é ```3```. | ||||
| 
 | ||||
| ## Entendendo como construir um script P2SH | ||||
| ## Compreendendo Como Construir um Script P2SH | ||||
| 
 | ||||
| Como o script de bloqueio está visível para uma transação P2SH e é bem simples, criar uma transação desse tipo também é um tanto quanto fácil. Em teoria. Tudo o que precisamos fazer é criar uma transação cujo script de bloqueio inclua um hash de 20 bytes do ```redeemScript```. Esse hash é feito com o padrão ```OP_HASH160``` do Bitcoin. | ||||
| 
 | ||||
| @ -50,16 +50,16 @@ Como o script de bloqueio está visível para uma transação P2SH e é bem simp | ||||
| 
 | ||||
| No geral, quatro etapas são necessárias: | ||||
| 
 | ||||
| 1. Criar um script de bloqueio arbitrário com o script do Bitcoin; | ||||
| 1. Criar um script de bloqueio arbitrário com Bitcoin Script; | ||||
| 2. Criar uma versão serializada desse script de bloqueio; | ||||
| 3. Executar um hash SHA-256 nesses bytes serializados; | ||||
| 4. Executar um hash RIPEMD-160 nos resultados desse hash SHA-256. | ||||
| 
 | ||||
| Cada uma dessas etapas exige algum trabalho e, algumas delas podem ser bastante complexas. A boa notícia é que realmente não precisamos se preocupar com elas, porque são complexas o suficiente para que tenhamos  uma API que faz o serviço para nós, normalmente. | ||||
| Cada uma dessas etapas exige algum trabalho e algumas delas podem ser bastante complexas. A boa notícia é que realmente não precisamos nos preocupar com elas, porque são complexas o suficiente para que tenhamos uma API que faz o serviço para nós, normalmente. | ||||
| 
 | ||||
| Por enquanto, forneceremos apenas uma visão geral, para que entendamos o contexto da metodologia. Na seção [§10.2: Construindo a Estrutura de P2SH](10_2_Building_the_Structure_of_P2SH.md), forneceremos uma visão mais aprofundada da criação do script, caso queiramos entender a essência desse processo. | ||||
| Por enquanto, forneceremos apenas uma visão geral, para que entendamos o contexto da metodologia. Na seção [§10.2: Construindo a Estrutura do P2SH](10_2_Building_the_Structure_of_P2SH.md), forneceremos uma visão mais aprofundada da criação do script, caso queiramos entender a essência desse processo. | ||||
| 
 | ||||
| ## Entendendo como enviar uma transação do tipo P2SH | ||||
| ## Compreendendo Como Enviar uma Transação P2SH | ||||
| 
 | ||||
| Então, como enviamos nossa transação P2SH? Novamente, a teoria é muito simples: | ||||
| 
 | ||||
| @ -68,15 +68,15 @@ Então, como enviamos nossa transação P2SH? Novamente, a teoria é muito simpl | ||||
| 3. Usamos esse hex como nosso ```scriptPubKey```; | ||||
| 4. Criamos o resto da transação. | ||||
| 
 | ||||
| Infelizmente, este é lugar momento em que precisaremos usar às APIs, em grande parte porque o ```bitcoin-cli``` não fornece nenhum suporte para a criação de transações P2SH. Mas, podemos resgatá-las sem problema. | ||||
| Infelizmente, este é outro momento em que precisaremos usar APIs, em grande parte porque o ```bitcoin-cli``` não fornece nenhum suporte para a criação de transações P2SH. Mas, podemos resgatá-las sem problema. | ||||
| 
 | ||||
| ## Compreendendo Como Desbloquear uma Transação P2SH | ||||
| 
 | ||||
| ## Entendendo como desbloquear uma transação do tipo P2SH | ||||
|   | ||||
| O truque para resgatar uma transação P2SH é que o destinatário deve ter salvo o script secreto de bloqueio serializado que foi codificado para criar o endereço P2SH. Isso se chama ```redeemScript``` porque é o que o destinatário precisa para resgatar os fundos. | ||||
| 
 | ||||
| Um ```scriptSig``` de desbloqueio para uma transação P2SH tem o seguinte formato:``` ... dados ... <redeemScript>```. Os ```dados``` devem ser _somente_ dados que são colocados na pilha, não operadores. O [BIP 16](https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki) os chama de assinaturas, mas isso não é um requisito real. | ||||
| Um ```scriptSig``` de desbloqueio para uma transação P2SH tem o seguinte formato: ``` ... dados ... <redeemScript>```. Os ```dados``` devem ser _somente_ dados que são colocados na pilha, não operadores. O [BIP 16](https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki) os chama de assinaturas, mas isso não é um requisito real. | ||||
| 
 | ||||
| > :warning: **AVISO:** Embora assinaturas não sejam um requisito, um script P2SH na verdade não é muito seguro se não exigir pelo menos uma assinatura nas entradas. As razões para isso estão descritas na seção [§13.1: Escrevendo scripts de quebra-cabeças](13_1_Writing_Puzzle_Scripts.md). | ||||
| > :warning: **AVISO:** Embora assinaturas não sejam um requisito, um script P2SH na verdade não é muito seguro se não exigir pelo menos uma assinatura nas entradas. As razões para isso estão descritas na seção [§13.1: Escrevendo Scripts Quebra-Cabeças](13_1_Writing_Puzzle_Scripts.md). | ||||
| 
 | ||||
| Quando um UTXO é resgatado, ele é executado em duas rodadas de verificação: | ||||
| 
 | ||||
| @ -85,16 +85,16 @@ Quando um UTXO é resgatado, ele é executado em duas rodadas de verificação: | ||||
| 3. Em segundo lugar, o ```redeemScript``` é executado usando os dados anteriores que foram colocados na pilha; | ||||
| 4. Se a segunda rodada de verificação _também_ for bem-sucedida, o UTXO é desbloqueado. | ||||
| 
 | ||||
| Considerando que não podemos criar facilmente uma transação P2SH sem uma API, devemos ser capazes de resgatar facilmente uma transação P2SH com o ```bitcoin-cli```. Na verdade, já fizemos isso na seção [§6.2: Gastando uma Transação com Multsig] (06_2_Spending_a_Transaction_to_a_Multisig.md). O processo exato é descrito na seção [§10.6: Gastando uma transação P2SH](10_6_Spending_a_P2SH_Transaction.md), após terminarmos com todas as complexidades da criação de uma transação P2SH. | ||||
| Considerando que não podemos criar facilmente uma transação P2SH sem uma API, devemos ser capazes de resgatar facilmente uma transação P2SH com o ```bitcoin-cli```. Na verdade, já fizemos isso na seção [§6.2: Gastando uma Transação com Multisig](06_2_Spending_a_Transaction_to_a_Multisig.md). O processo exato é descrito na seção [§10.6: Gastando uma Transação P2SH](10_6_Spending_a_P2SH_Transaction.md), após terminarmos com todas as complexidades da criação de uma transação P2SH. | ||||
| 
 | ||||
| > :warning: **AVISO:** Podemos criar uma transação perfeitamente válida com um redemScript com o hash correto, mas se o redemScript não funcionar, ou não funcionar corretamente, os fundos serão perdidos para sempre. É por isso que é importantíssimo testar os Scripts, conforme discutido na seção [§9.3: Testando um Script no Bitcoin](09_3_Testing_a_Bitcoin_Script.md). | ||||
| > :warning: **AVISO:** Podemos criar uma transação perfeitamente válida com um redeemScript com o hash correto, mas se o redeemScript não funcionar, ou não funcionar corretamente, os fundos serão perdidos para sempre. É por isso que é importantíssimo testar os scripts, conforme discutido na seção [§9.3: Testando um Script no Bitcoin](09_3_Testing_a_Bitcoin_Script.md). | ||||
| 
 | ||||
| ## Resumo: Entendendo a Fundação do P2SH | ||||
| ## Resumo: Compreendendo a Fundação do P2SH | ||||
| 
 | ||||
| Os scripts arbitrários do Bitcoin não são o padrão neste sistema. No entanto, podemos incorporá-los em transações padrão usando o tipo de endereço P2SH. Precisamos apenas fazer um hash do nosso script como parte do script de bloqueio, então o revelamos e executamos como parte do script de desbloqueio. Contanto que  também possamos satisfazer o ```redeemScript```, o UTXO poderá ser gasto. | ||||
| Scripts arbitrários não são o padrão no Bitcoin. No entanto, podemos incorporá-los em transações padrão usando o tipo de endereço P2SH. Precisamos apenas fazer um hash do nosso script como parte do script de bloqueio, então o revelamos e executamos como parte do script de desbloqueio. Contanto que  também possamos satisfazer o ```redeemScript```, o UTXO poderá ser gasto. | ||||
| 
 | ||||
| > :fire: ***Qual é o poder do P2SH?*** Já sabemos o poder do script do Bitcoin, que nos permite criar Contratos Inteligentes mais complexos de todos os tipos. O P2SH é o que realmente libera esse poder, nos permitindo que  incluamos o Script arbitrário do Bitcoin em transações padrão. | ||||
| > :fire: ***Qual é o poder do P2SH?*** Já sabemos o poder do Bitcoin Script, que nos permite criar Contratos Inteligentes mais complexos de todos os tipos. O P2SH é o que realmente libera esse poder, nos permitindo que  incluamos o Script arbitrário do Bitcoin em transações padrão. | ||||
| 
 | ||||
| ## O que vem depois? | ||||
| ## O Que Vem Depois? | ||||
| 
 | ||||
| Vamos continuar "Incorporando Scripts em Transações P2SH no Bitcoin" na seção [§10.2: Construindo a Estrutura de P2SH](10_2_Building_the_Structure_of_P2SH.md). | ||||
| Vamos continuar "Incorporando Scripts em Transações P2SH no Bitcoin" na seção [§10.2: Construindo a Estrutura do P2SH](10_2_Building_the_Structure_of_P2SH.md). | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user