署名された操作の挿入がUnrevealed_Keyエラーで失敗する
1 回答
- 投票
-
- 2019-03-03
アカウントからトランザクションを送信する前に、アカウントに対して「表示」操作を行う必要があります.このアカウントはアクティブ化されているようですが、まだ公開されていません.これを機能させるには、操作のリストに表示操作を含める必要があります.
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, } ], } ... })
アカウントが公開された後は、その公開をその後の操作に含める必要はありません.
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)); };
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)); };
-
ありがとう!公開操作を追加して質問を編集しました.今実行すると、結果やエラーなしでハングします.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
-
ああ、気にしないでください、それはカウンターの増分のためでした.私はあなたの編集に気づき、私の方法でそれを修正しました.ただし、奇妙なことに、次のエラーが発生します:{"kind": "permanent"、 "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
-
rpc.sendOperationを使用して同じ転送を試しましたか?sendOperationは、トランザクションにリビールが必要かどうか、および操作のすべてのカウンターを処理する必要があります.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
-
最初にその方法を試しましたが、応答もエラーもなくハングしました.次に、sendOperationがkeysオブジェクトをパラメーターとして受け取るのが気に入らなかったので、より安全だと考えて、この方法で行うと思いました.自分のノードをホストせずにこのアプリを構築したいと考えていました.しかし、このように書き終えた今、私はまだ操作内でpkとskを送信していることに気付きました...それは良くありません!しかし、あなたの質問に答えるために、私はそれを試しました、そしてそれはただハングしました.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
-
何が応答をハングさせているのかを確認する必要があります.少し前の例の1つを試してみたところ、sotezで金額キーが正しく処理されていないことに気づきました(文字列に強制変換されるはずでした).sendOperationを試して金額を文字列にし、料金、gas_limit、storage_limitを追加すると機能する場合があります.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
-
あなたの助けをありがとう、私は本当に感謝しています!sendOperationを使用するように質問を更新しました.今回はハングせず、「TypeError:プロパティ 'kind' ofundefinedを読み取れません」を返します.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
-
sendOperationは、from、操作、およびキーを含むparamsオブジェクトを受け取ることを思い出しました.質問を更新しましたが、うまくいきました.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
今日はたくさんのことを学びました.このStackExchangeがなければ、これほど早く習得することはできませんでした.送信はほぼ解決しましたが、注入の時点で「unrevealed_key」エラーが発生して失敗する理由を一生理解できません.
偽造されたトランザクションをデコードし、値を再確認して、リモートノードがトランザクションを変更しようとしていないことを確認する必要があることは承知していますが、簡単にするために、この投稿からそのビットを削除しました.
戻り値:
>[{"kind":"branch","id":"proto.003-PsddFKi3.contract.unrevealed_key","contract":"tz1htPf3VPXrHBTX1E7y3tBteib6hA9Teosj"}]
編集: したがって、最初にこのアカウントを明らかにする必要があります. sendメソッドを変更して、アカウントが以前に公開されたかどうかを確認し、公開されていない場合は、公開を操作のリストに追加しました.これで、
{"kind":"permanent","id":"proto.003-PsddFKi3.operation.invalid_signature"}
が表示されます.Edit2: これは、sendOperationを使用して機能しました