Como fazer uma transação offline?
1 responda
- votos
-
- 2019-01-30
Todas astransaçõesincluídasno Tezos devem referenciar um hashbloconos últimos 60 hashes deblocos. Isso atua como uma camada adicional denotação da cadeia,além do consenso,mas significa que vocêprecisa de algumasetapasextraspara assinartransações offline.
.Umamaneira defazerisso é usar o RPC:
/chains/main/blocks/head/helpers/forge/operations
documentado aqui .
Vocêprecisa de umnóem execuçãoparaisso,masnãoprecisa ser conectado à Internetparaisso. Vocêtambémprecisaráfornecermanualmente o hash de umbloco recente.
Vocêterá que assinar os dados que você sairpara obter uma "operação assinada",mas,infelizmente,quenão é suportadano CLI ainda.Vocêentãoprecisa assinar a operação,que vocêpodefazer usando o Tezos CLI com
./tezos-client sign bytes <bytes> for <src>
Vocêprecisará adicionar obyte "03"nafrente da operação. Isso atua como umamarca d'águapara o signatário.
Finalmente vocêprecisa combinar a assinaturae a operaçãonão assinada,infelizmente quenão é suportadano CLI ainda.
.Outramaneira é usar um contratointeligente que aceita dados de Michelson assinadose tomemedidas combasenele (porexemplo,enviefundospara umendereçoespecificadonosparâmetros). Obenefício dessa abordagem é que vocênãoprecisa saber uma hash recente ao assinar aprópriamensagem. Vocêpode apenas usar o Tezos Cli com o comando
./tezos-client typecheck data <data> against type <type>
seguidopor
./tezos-client sign bytes <data> for <src>
Vocêterá queenviarestamensagempara o contratointeligente com umatransação regular,masessatransaçãopode serexecutada com uma chave que controla apenas uma quantidademuitopequena defundos,exatamente o que énecessárioparapagarpelataxa detransação.
All transactions included in the Tezos must reference a block hash within the past 60 block hashes. This acts as an additional layer of notarization of the chain, besides the consensus but it means you need a few extra steps to sign transactions offline.
One way to do this is to use the RPC:
/chains/main/blocks/head/helpers/forge/operations
Documented here.
You need a running node for this, but it doesn't have to be connected to the Internet for this. You will also need to manually provide the hash of a recent block.
You'll have to sign the data you get out of it to get a "signed operation" but, unfortunately, that is not supported in the CLI yet.You then need to sign the operation, which you can do using the tezos cli with
./tezos-client sign bytes <bytes> for <src>
You will need to add the "03" byte in front of the operation. This acts as a watermark for the signer.
Finally you need to combine the signature and the unsigned operation, unfortunately that is not supported in the CLI yet.
Another way is to use a smart-contract that accepts signed Michelson data and takes action based on it (for instance, send funds to an address specified in the parameters). The benefit of this approach is that you do not need to know a recent hash when signing the message itself. You can just use the tezos cli with the command
./tezos-client typecheck data <data> against type <type>
followed by
./tezos-client sign bytes <data> for <src>
You will then have to send this message to the smart contract with a regular transaction, but that transaction can be performed with a key that only controls a very small amount of funds, just what is needed to pay for the transaction fee.
-
"Infelizmente,issonão é suportadono CLI ainda" - umpode defato "sinal de sinal 0x03 ...para
",em vez de (na segunda situação) "sinal de sinal 0x05 ...para ". "unfortunately, that is not supported in the CLI yet" -- One can indeed `sign bytes 0x03... for`, rather than (in the second situation) `sign bytes 0x05... for `. - 0
- 2019-01-30
- Tom
-
Ah,eunãotinha certeza se "sinalpara"trabalhoupara 0x03,produz umatransação assinada válida?ah, I wasn't sure if "sign for" worked for 0x03, does it produce a valid signed transaction?
- 0
- 2019-01-30
- Arthur B
-
Aindanão lhe dá uma operação assinadaemborastill doesn't give you a signed operation though
- 1
- 2019-01-30
- Arthur B
-
Obrigado @arthurb: Thumbsup: Eu acho que usar o cli seria umamaneira segurae "oficial".Mas IMHOnão é o caminhomaisfácil de usarpara amaioria daspessoas.Thank you @ArthurB :thumbsup: I guess using the CLI would be a safe and "official" way. But IMHO it is not the most user-friendly way for the majority of people.
- 1
- 2019-01-31
- XTZST2O
Comofaçopara criar umatransação offlineem um dispositivojogado a are transmiti-lopara a rede?