¿Cómo realizar una transacción offline?
1 respuesta
- votos
-
- 2019-01-30
Todas lastransaccionesincluidasen Tezos deben hacer referencia a un hash debloque dentro de los últimos 60 hashes debloque. Esto actúa como una capa adicional denotarización de la cadena,además del consenso,pero significa quenecesita algunospasos adicionalesparafirmartransaccionesfuera de línea.
Unaforma de hacerestoes usarel RPC:
/chains/main/blocks/head/helpers/forge/operations
Documentado aquí .
Necesita unnodoen ejecuciónparaesto,peronotiene queestar conectado a Internetparaesto. También deberáproporcionarmanualmenteel hash de unbloque reciente.
Tendrá quefirmar los datos que obtengapara obtener una "operaciónfirmada"pero,desafortunadamente,eso aúnnoes compatible con la CLI.Luego,debefirmar la operación,lo quepuede hacer usandotezos cli con
./tezos-client sign bytes <bytes> for <src>
Deberá agregarelbyte "03" antes de la operación. Esto actúa como unamarca de aguaparaelfirmante.
Por último,debe combinar lafirma y la operación sinfirmar,desafortunadamenteeso aúnnoes compatible con la CLI.
Otraformaes utilizar un contratointeligente que acepte datosfirmados de Michelson ytomemedidasen función deellos (porejemplo,envíefondos a una direcciónespecificadaen losparámetros). Elbeneficio deesteenfoquees quenonecesita conocer un hash reciente alfirmarelmensaje. Puedes usartezos cli conel comando
./tezos-client typecheck data <data> against type <type>
seguido de
./tezos-client sign bytes <data> for <src>
Luego,deberáenviarestemensaje al contratointeligente con unatransacción regular,peroesatransacción sepuede realizar con una clave que solo controla una cantidadmuypequeña defondos,justo lo que senecesitaparapagar latarifa detransacción.
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.
-
"Desafortunadamente,eso aúnnoes compatible con la CLI" - De hecho,unopuede `firmarbytes 0x03 ...para
`,en lugar de (en la segunda situación) `firmarbytes 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,noestaba seguro de si "firmarpor"funcionabapara 0x03,¿produce unatransacciónfirmada 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
-
aunquetodavíanote da una operaciónfirmadastill doesn't give you a signed operation though
- 1
- 2019-01-30
- Arthur B
-
Gracias @ArthurB:thumbsup: Supongo que usar la CLI sería unaforma segura y "oficial".Peroen mi humilde opinión,noes laformamásfácil de usarpara lamayoría de laspersonas.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
¿Cómo creo unatransacción sin conexiónen un dispositivo conespacio aéreo y latransmito a la red?