La operación de inyección firmada falla con un error de clave no revelada
1 respuesta
- votos
-
- 2019-03-03
Antes deenviartransacciones desde una cuenta,se debe realizar una operación de 'revelar'para la cuenta. Parece queesta cuentapuede haber sido activada,pero aúnno se ha revelado. Para queestofuncione,necesitaríamosincluir la operación de revelaciónen la lista de operaciones:
sotez.rpc.getHead() .then(head => { const operation = { branch: head.hash, contents: [ { kind: 'reveal', fee: '1269', counter: '31204', public_key: keys.pk, source: from, gas_limit: '10000', storage_limit: '0', }, { kind: 'transaction', source: from, fee: '50000', counter: '31205', gas_limit: '10200', storage_limit: '0', amount: amount, destination: to, } ], } ... })
Una vez que se ha revelado la cuenta,noesnecesario que la revelación seincluyaen las operacionesposteriores.
Respuesta de SendOperation:
const send = (from, to, amount, keys) => { const operation = { kind: 'transaction', source: from, fee: '50000', gas_limit: '10200', storage_limit: '0', amount: `${amount}`, destination: to, }; rpc.sendOperation({ from, operation, keys }) .then(result => console.log(result)); };
Before sending transactions from an account, a 'reveal' operation must be made for the account. It looks like this account may have been activated, but not yet revealed. To make this work we would need to include the reveal operation in the list of operations:
sotez.rpc.getHead() .then(head => { const operation = { branch: head.hash, contents: [ { kind: 'reveal', fee: '1269', counter: '31204', public_key: keys.pk, source: from, gas_limit: '10000', storage_limit: '0', }, { kind: 'transaction', source: from, fee: '50000', counter: '31205', gas_limit: '10200', storage_limit: '0', amount: amount, destination: to, } ], } ... })
After the account has been revealed, the reveal is not needed to be included in the operations thereafter.
SendOperation Answer:
const send = (from, to, amount, keys) => { const operation = { kind: 'transaction', source: from, fee: '50000', gas_limit: '10200', storage_limit: '0', amount: `${amount}`, destination: to, }; rpc.sendOperation({ from, operation, keys }) .then(result => console.log(result)); };
-
¡Gracias!Editémi pregunta con la operación de revelación agregada.Cuando loejecuto ahora,simplemente se cuelga sin resultadoni error.Thanks! I edited my question with the reveal operation added. When I run it now, it just hangs with no result or error.
- 0
- 2019-03-03
- Michael Rodriguez
-
Ah,noimporta,fueporelincremento del contador.Notétuedición y la arregléen mimétodo.Curiosamente,sinembargo,ahora reciboesteerror: {"kind": "permanente","id": "proto.003-PsddFKi3.operation.invalid_signature"}Ah nevermind, it was because of the counter increment. I noticed your edit and fixed it in my method. Oddly, though, now I'm getting this error: {"kind":"permanent","id":"proto.003-PsddFKi3.operation.invalid_signature"}
- 0
- 2019-03-03
- Michael Rodriguez
-
¿Haprobado lamismatransferencia usando rpc.sendOperation?sendOperation debemanejar si latransacciónnecesita una revelación ytodos los contadorespara las operaciones.Have you tried the same transfer using rpc.sendOperation? sendOperation should handle whether the transaction needs a reveal and all the counters for the operations.
- 0
- 2019-03-04
- AKISH
-
Probéesemétodoprimero,y simplemente se colgó sin respuestani error.Entoncespensé que lo haría deestamanera,pensando que seríamás seguro,ya quenome gustaba que sendOperationtomarael objeto de claves comoparámetro,yesperaba construiresta aplicación sin alojarmi propionodo.Pero ahora que lo revisé y loescribí deestamanera,me di cuenta de quetodavíaestoyenviandoelpk y sk detodosmodos dentro de la operación ... ¡así queesonoesbueno!Peropara responder a supregunta,lointenté y simplemente colgó.I tried that method first, and it just hung with no response or error. Then I thought I would do it this way, thinking it would be more secure, as I didn't like that the sendOperation takes the keys object as a parameter, and I was hoping to build this app without hosting my own node. But now that I've gone through and written it this way, I realized that I am still sending the pk and sk anyhow within the operation... so that's not good! But to answer your question, I did try that, and it just hung.
- 0
- 2019-03-04
- Michael Rodriguez
-
Tendré que ver qué hace que las respuestas se cuelguen,pero creo queprobé uno de susejemplos anteriores ynoté que la clave de cantidadno semanejaba correctamenteen sotez (se suponía que debía ser coaccionadaen una cadena).Siprueba su sendOperation y convierte la cantidaden una cadena,además de agregar unatarifa,gas_limit y storage_limit,esopuedefuncionar.I'll have to see what is making the responses hang, bit I think I tried one of your examples from earlier and noticed that the amount key wasn't being handled correctly in sotez (was supposed to be coerced into a string). If you try your sendOperation and make the amount a string, as well as adding a fee, gas_limit, and storage_limit that may work.
- 1
- 2019-03-04
- AKISH
-
Graciasportu ayuda,¡te lo agradezcomucho!Actualicémi preguntapara usar sendOperation.Esta veznoestá colgado,está devolviendo "TypeError: No sepuede leer lapropiedad 'tipo' deindefinido"Thanks for your help, I really appreciate it! I've updated my question to use sendOperation. This time it's not hanging, it's returning "TypeError: Cannot read property 'kind' of undefined"
- 0
- 2019-03-04
- Michael Rodriguez
-
Acabo de recordar que sendOperationtoma un objetoparams que contieneelfrom,la operación y las claves.Actualicémi pregunta yfuncionó.I just remembered that sendOperation takes a params object containing the from, the operation, and the keys. I've updated my question, and it worked!
- 1
- 2019-03-04
- Michael Rodriguez
Hoy he aprendidomucho ynopodría haber llegadotan lejostan rápido sin StackExchange. Casitengoelenvío resuelto,peronopuedoni pormi vida averiguarpor quéestoestáfallandoen elpunto deinyección con unerror "unrevealed_key".
Soy consciente de que debería decodificar latransacciónfalsificada y volver a verificar los valorespara asegurarme de queelnodo remotono hayaintentado cambiarmi transacción,peroeliminéesebit deestapublicaciónpor simplicidad.
Devuelve:
[{"kind":"branch","id":"proto.003-PsddFKi3.contract.unrevealed_key","contract":"tz1htPf3VPXrHBTX1E7y3tBteib6hA9Teosj"}]
Editar: Entoncesnecesito revelaresta cuentaprimero. Modifiquémi método deenvíopara verificar si la cuenta se había revelado antes y,sino,agregué la revelación a la lista de operaciones. Ahora obtengo
{"kind":"permanent","id":"proto.003-PsddFKi3.operation.invalid_signature"}
.Editar2: Estofuncionó,usando sendOperation