Author

Topic: [Tutorial] Como "salvar" um texto na Blockchain do Bitcoin utilizando a Electrum (Read 245 times)

legendary
Activity: 2688
Merit: 2297
O texto tem que ser em HEX. Você está fazendo isso?

Não pode ser:
Code:
OP_RETURN sabota, 0

Sim, usei em HEX.. E pelo visto eu não fui o único que encontrei tal problema nessa versão: https://github.com/spesmilo/electrum/issues/6761
legendary
Activity: 2758
Merit: 6830
Caso alguém esteja com o mesmo problema.. Descobri que tem que clicar em 'Tools -> Pay to many' para dar certo..
O texto tem que ser em HEX. Você está fazendo isso?

Não pode ser:
Code:
OP_RETURN sabota, 0

edit: Só agora vi que tem "solução". Tongue
hero member
Activity: 1778
Merit: 882
No campo Pagar para (Pay To) você utilizará o seguinte código:

Code:
OP_RETURN seutexto, 0

Dando um feedback aqui..

Tentei aqui na versão 4.0.5 da Electrum e encontrei esse erro:



Caso alguém esteja com o mesmo problema.. Descobri que tem que clicar em 'Tools -> Pay to many' para dar certo..

Que estranho, @sabotag3x. Eu acho que isso deveria ser um "script", não deveria dar erro. Mas obrigado pelo feedback. Não lembro qual versão eu usei pra fazer o tutorial mas imagino que seja 3.x.x.

Edit: Cara, acabei de baixar a versão 4.0.9 aqui e testei na testnet e funcionou  Huh

Usei exatamente o exemplo que usei no tutorial. Não sei o que pode ter acontecido no seu caso.

Transação da testnet: https://live.blockcypher.com/btc-testnet/tx/4e046d1041ee5d4ebb8b0acc11977e33f472ce7af601eaf00127f13ab2d6cf2c/
legendary
Activity: 2688
Merit: 2297
No campo Pagar para (Pay To) você utilizará o seguinte código:

Code:
OP_RETURN seutexto, 0

Dando um feedback aqui..

Tentei aqui na versão 4.0.5 da Electrum e encontrei esse erro:



Caso alguém esteja com o mesmo problema.. Descobri que tem que clicar em 'Tools -> Pay to many' para dar certo..
hero member
Activity: 1498
Merit: 557
Como falei acima, essa seria uma solução "não obrigatória" para quem quiser escolher os números com os quais quer concorrer no sorteio.
Quem não tiver o conhecimento não é obrigado a fazer esse processo... só manda os BTC "de forma padrão" e recebe os números aleatórios Wink

Quem teria um bom trabalho e dor de cabeça para implementar a leitura dos números na blockchain é o @Adriano, ele deve me odiar toda vez que eu falo sobre isso.... Esses caras que querem comer o abacaxi mas mandam os outros descascar Grin
Ah mas assim não dá, se eu puder escolher só vai dar eu no pódio  Roll Eyes Grin brincadeiras a parte, acho que o maior problema em ter as duas formas seria justamente a sua validação. A menos que sinalizado pelo usuário, o Adriano teria de checar tx por tx para identificar se a escolha foi realizada manualmente ou não. Penso que o procedimento teria de ser estipulado por um processo padrão, seja ele com ou sem a inclusão dos "números customizados". Pode funcionar bem em pequena escala, mas em uma larga (bem possível em uma bull run, por exemplo) a tal dor de cabeça dele vai virar enxaqueca hehe

Poxa, vejam como a "surpresinha" da mega-sena Grin penso que a o processo deve ser o mais simples possível e, gradativamente, vamos pensando em incrementos que podem seguir como pilotos, justamente para que possamos testar a aderência Smiley
legendary
Activity: 2352
Merit: 1121
☢️ alegotardo™️
Exatamente @cryptobaboon:

A adesão nos sorteios gratuitos já não é grande, assim tendo que depositar com informação no bloco, creio que será difícil ter muitos adeptos nesse instante.

~~~

Como falei acima, essa seria uma solução "não obrigatória" para quem quiser escolher os números com os quais quer concorrer no sorteio.
Quem não tiver o conhecimento não é obrigado a fazer esse processo... só manda os BTC "de forma padrão" e recebe os números aleatórios Wink

Quem teria um bom trabalho e dor de cabeça para implementar a leitura dos números na blockchain é o @Adriano, ele deve me odiar toda vez que eu falo sobre isso.... Esses caras que querem comer o abacaxi mas mandam os outros descascar Grin
member
Activity: 97
Merit: 20
Exatamente @cryptobaboon:

A adesão nos sorteios gratuitos já não é grande, assim tendo que depositar com informação no bloco, creio que será difícil ter muitos adeptos nesse instante.

Entretanto o conhecimento necessário para fazer isso é muito legal de possuir. Ao meu ver isso alia o lúdico com o reforço na comunidade de nossa aba portuguesa e é ainda melhor que o sorteio gratuito no intuito de educar quem ainda não tem esse conhecimento da blockchain.

Assim que o BTC chegar no novo ATH, o fórum como um todo estará bombando, aí sim um sorteio desse será fácil de fazer...(imho)
hero member
Activity: 1498
Merit: 557

Nas minhas pesquisas, acabei me deparando com esse site e com outros mas aparentemente ele não está atualizando mais  Undecided

Pela altura dos blocos que ele mostra na página principal já tem umas 3 semanas que ele não está atualizando, infelizmente

Obrigado pelas correções, elas já foram feitas  Grin
Eita, loga, não tinha percebido a latência nos blocos, acredito que estejam com algum problema no parse da mainnet mesmo:



Digo isso porque na testnet está funfando que é uma beleza:




@Adriano, aqui eu havia comentado que esse tipo recurso poderia ser a solução para que os participantes escolhessem os números com que queriam participar daquele "seu" sorteio.

Teria como definir um padrão de texto, buscar ele na blockchain e se encontrado no OP_RETURN utiliza-lo no script?
Claro que o procedimento pode não ser muito prático para qualquer participante, mas aí fica opcional.... quem não conseguir ou quiser ariscar pode obtê-los automaticamente do script enquanto outros podem seguir esse tutorial e fazer suas escolhas.
Penso que para seguir utilizando o OP return um formato padrão teria de ser utilizado, dá para criar fácil um conversor baseado nas bibliotecas já existentes. Mas o que pega, acho eu, é justamente o "incremento na dificuldade" de fazer a operação. Penso que já não teremos a aderência dos sorteios gratuitos (por não envolverem qualquer montante, como já discutido no tópico original) e haveria aí, também, a contenção do usuário ao ficar em dúvida quanto a dificuldade do processo.

O tutorial é bem auto-explicativo e até um específico para a tx do sorteio poderia ser feito, mas acho que qualquer passo adicional que não o de uma simples transação pode, talvez, criar um agente dificultador par alguns usuários (mesmo que apenas teórico).
legendary
Activity: 2352
Merit: 1121
☢️ alegotardo™️
Poxa, é tão fácil assim escrever na blockchain do BTC?
E tem sites que cobram caro por esse tipo de serviço, claro que é algo bem mais sofisticado.

@Loganota, obrigado por nos trazer mais um tutorial de qualidade Wink

@Adriano, aqui eu havia comentado que esse tipo recurso poderia ser a solução para que os participantes escolhessem os números com que queriam participar daquele "seu" sorteio.

Teria como definir um padrão de texto, buscar ele na blockchain e se encontrado no OP_RETURN utiliza-lo no script?
Claro que o procedimento pode não ser muito prático para qualquer participante, mas aí fica opcional.... quem não conseguir ou quiser ariscar pode obtê-los automaticamente do script enquanto outros podem seguir esse tutorial e fazer suas escolhas.
hero member
Activity: 1778
Merit: 882
Aproveitando o ensejo, iniciei a postagem ontem com o link na cabeça e no desenrolar dela acabei me esquecendo de incluir o Coin Secrets! Um site dedicado justamente ao parse de informação do OP_RETURN, tanto para a testnet quanto para a mainnet. Fica a dica para os curiosos  Smiley

Nas minhas pesquisas, acabei me deparando com esse site e com outros mas aparentemente ele não está atualizando mais  Undecided

Pela altura dos blocos que ele mostra na página principal já tem umas 3 semanas que ele não está atualizando, infelizmente

Obrigado pelas correções, elas já foram feitas  Grin
hero member
Activity: 1498
Merit: 557
Ótima dica de como utilizar a escrita pétrea do BTC ao nosso próprio favor, loga! Já conhecia a manipulação do op e, infelizmente, foi o método utilizado para alguns animais incluírem direcionamentos para alguns conteúdos inúteis. Por favor, não sejam um deles...  Tongue

Ah, aproveitando que você deixou aberto para algumas correções, achei algumas de digitação apenas:

Quote
(...) [url = https: //tails.boum.org/] flash drive Tails [/ url] (...)
Quote
(...) 3222e79b5c94efcea7b8e1704e1bdd8fb9257baf7bbecf1a9bb5b5a5b8da094ad570dddc7754220 c2e2359081956d238ba24429639c90b2348f15f052617aabSalve essa linha (...)

ps: obviamente, já incluído no Guia! Obrigado por ajudar a engordar nossa massa de tutoriais por aqui, sempre muitíssimo bem vindos!! Cool


--EDIT--
Aproveitando o ensejo, iniciei a postagem ontem com o link na cabeça e no desenrolar dela acabei me esquecendo de incluir o Coin Secrets! Um site dedicado justamente ao parse de informação do OP_RETURN, tanto para a testnet quanto para a mainnet. Fica a dica para os curiosos  Smiley
hero member
Activity: 1778
Merit: 882
Este tutorial foi inspirado neste tópico aqui do zasad@, que por sua vez foi inspirado neste tópico aqui do igor72. Obrigado aos dois  Wink

Este tutorial consiste em utilizar o script OP_RETURN que possibilita que nós utilizemos para registrar até 80 bytes de informação "aleatória" em uma transação. O tutorial original ensina a como guardar a sua seed na blockchain do Bitcoin, vou fazer um tutorial primeiro de como guardar qualquer texto e depois faço uma breve tradução do procedimento indicado para salvar a seed.

1. Como gravar qualquer texto no OP_RETURN


Abra a sua carteira na Electrum e vá até a aba Enviar.

No campo Pagar para (Pay To) você utilizará o seguinte código:

Code:
OP_RETURN seutexto, 0

Lembre-se que o seu texto deverá estar em formato hexadecimal, então, o que devemos fazer é utilizar um "conversor" de String para Hexa como temos nesse site aqui: https://codebeautify.org/string-hex-converter

O texto que escolhi é "Ola Bitcointalk" que gerou o seguinte valor em hexadecimal:

Code:
4f6c6120426974636f696e54616c6b

Nosso campo "Pagar para" na Electrum será então:

Code:
OP_RETURN 4f6c6120426974636f696e54616c6b, 0

A fee você pode escolher como se fosse uma transação normal, o tempo de mineração será de acordo com a fee/byte que você escolher.


A transação para essa operação foi a seguinte:

https://blockstream.info/tx/48e619e4e5ae0e241f225fa528b159a54db319c1ca20244cda518a5c31a49be1?expand

Ao ver a sua transação em um blockexplorer, você verá no campo OP_RETURN (geralmente embaixo) o hexadecimal do seu texto, mas há exploradores como o blockstream.info que já identificam que o hex significa um texto e converte novamente para String, ficando então seu texto registrado para todo o sempre na Blockchain do Bitcoin. Como podem ver abaixo  Grin


Se não quiser fazer uma transação só pra isso, você pode enviar no meio de outras transações que fizer utilizando mais de uma saída na Electrum.

2. Tradução do Tópico ensinando a guardar a sua seed na blockchain


Este tutorial foi desenvolvido para linux com algumas ferramentas pré instaladas, se você baixá-las poderão utilizá-las no windows da mesma maneira

2.1Vamos encriptar a seed com openssl e obter uma string hexadecimal.

Todas as operações com a seed devem ser feitas utilizando um computador seguro. Supondo que eu não tivesse um, então eu desliguei fisicamente a internet e dei boot a partir de um flash drive Tails (esse é um dos sistemas linux mais seguros e anonimos para pen drive).

Crie um arquivo de texto seed.txt com a seed phrase (por exemplo: runway exist coconut cinnamon attack laptop oil wild yellow drink lawn cattle). Para diminuir o tamanho da linha, vou salvar apenas as 4 primeiras letras de cada palavra (isso é o suficiente para identificação) e remova os espaçoes. O resultado: (runwexiscococinnattalaptoil_wildyelldrinlawncatt) é salvo no arquivo. Na pasta que contem o arquivo, abra o terminal e rode o comando:
Code:
openssl enc -aes-256-cbc -in seed.txt -out enc.txt -nosalt -k bitcointalk -iter 21000000

Eu usei o password ruim "bitcointalk" como um exemplo, na realidade você precisa escolher um password bom e único, longo (pelo menos 12 caracteres), mas preferencialmente fácil de relembrar.
21000000 é o número de iterações da função pbkdf2, eu escolhi esse número tão alto porque eu posso relembrá-lo facilmente. Este parâmetro diminui muito o tempo para encoding / decoding (meu computador velho demorou quase 2 minutos), o que torna a força bruta não-realista e habilita usar um password não tão complicado. Então, nós obtivemos um arquivo com a seed encriptada, agora nós temos que obter uma sequência de bytes (dump).

Dê o comando:
Code:
xxd -ps -c 1000 enc.txt enc_hex.txt

-c 1000 - é o número de colunas, escolhido arbitrariamente (80 poderia ter sido usado). Sem esse valor, os dados será dividido por 32 bytes por linha, e nós precisamos de uma linha. Nós salvamos o arquivo enc_hex.txt para um pen drive USB ou no HD do computador, desligue o computador, remova o pen drive USB, ligue a internet e carregue o sistema operacional.

2.2 Nós temos que ter certeza que a transação com os dados encriptados são fáceis de encontrar posteriormente. Você pode fazer isso de diferentes maneiras, você pode somente escrevê-la. Mas eu tentei não escrever nada, e então eu escolhi a opção de criar um endereço a partir do hash da minha palavra / frase favorita e pesquisar o endereço no blockexplorer. Para isso, eu usei brainwallet (você pode usar qualquer outro), na linha "Brain Wallet Input" nós colocaremos uma palavra chave inesquecível, por exemplo, o nome da mulher amada, cachorro, etc. Segurança não é importante aqui, se essa chave privada for roubada, não há nenhum problema. Por exemplo, eu usei a palavra "bitcointalk" e obtive a private key L1AHAuRLxZ14PspT4UjooZa3Jx2Y9hcKfuQpC19b4AqHq8V12u9o.

Nós vamos importar isso para Electrum (criando uma nova wallet a partir da chave privada, eu prefiro endereços bech32, então eu importei com o prefixo p2wpkh:L1AHAuRLxZ14PspT4UjooZa3Jx2Y9hcKfuQpC19b4AqHq8V12u9o,
(você pode usar um endereço legacy, isso não afetará o resultado).

Nós obtemos o endereço bc1qc0kwr8clxgj63dp77sr4ql9zhexq2a6aw85ltw, vamos utilizar 300 satoshi de fee (para um endereço segwit, isso deve ser suficiente). Desse endereço enviaremos a transação com OP_RETURN.

2.3Copie a string hexadecimal salva no arquivo enc_hex.txt para a Electrum e crie a transação.
Preencha a linha "Pagar para" assim:
Code:
 OP_RETURN our_string, 0 
(não se esqueça da vírgula com o 0 no fim).



Enviamos o pagamento. Essa é minha transação https://www.blockchain.com/en/btc/tx/0e0546d004f3373822178ceddb3084247912e400b75e5971e66522f6b398f123



Como restaurar a seed phrase original?

2.4 Relembre a palavra ("bitcointalk" nesse exemplo) e obtenha o endereço (assim como em 2.2). Nós inserimos o endereço em um Block Explorer e faciilmente encontramos nossa transação. Clica nela e abra os detalhes, no fim da página encontraremos nosso código encriptado
 3222e79b5c94efcea7b8e1704e1bdd8fb9257baf7bbecf1a9bb5b5a5b8da094ad570dddc7754220 c2e2359081956d238ba24429639c90b2348f15f052617aab

Salve essa linha em um arquivo de texto (eu fiz em enc_hex.txt) e salve em um pen drive.



2.5Desligue a internet, reinicie o computador e use o sistema operacional Tails. Adiante, copie o arquivo encriptado do pen drive e abra o terminal na pasta em que está o arquivo e rode o seguinte comando:
Code:
 xxd -ps -r enc_hex.txt enc.txt 
Próximo comando:
Code:
openssl enc -aes-256-cbc -d -in enc.txt -out seed.txt -nosalt -k bitcointalk -iter 21000000

(o valor do parâmetro -iter parameter deve coincidir com aquele utilizado durante a primeira fase de encriptação, então é importante não esquecer, melhor escrever em algum lugar).

É isso, abra o arquivo seed.txt e reescreva a seed phrase em um pedaço de papel (dividindo as palavras a cada 4 letras). Se a wallet não fornecer a opção de completar as palavras ao digitar, você encontrará as palavras completas no dicionário BIP 39.
(Obrigado bomj pelas correções).

Se você tem de salvar uma seed de 24 palavras, elas não caberão em 80 bytes. Nesse caso, a encriptação hexadecimal da string deverá ser dividida em 2 partes e 2 saídas OP_RETURNs deverão ser criadas. Ou utilize outra conversão para encaixar essa informação em 80 bytes. 


P.S. Se alguém deseja repetir, pratique primeiro, tente não encher a blockchain com coisas inúteis.

_______________________________________________________________________________ ______________________________

Loganota aqui

Se tiverem alguma dúvida, ficarei feliz em ajudá-los. Se você encontrar erros, escreva nesse post e eu consertarei.

Obrigado  Wink
Jump to: