オフライン取引を行う方法は?
1 回答
- 投票
-
- 2019-01-30
Tezosに含まれるすべてのトランザクションは、過去60ブロックハッシュ内のブロックハッシュを参照する必要があります.これは、コンセンサスに加えて、チェーンの公証の追加レイヤーとして機能しますが、トランザクションにオフラインで署名するには、いくつかの追加手順が必要であることを意味します.
これを行う1つの方法は、RPCを使用することです.
/chains/main/blocks/head/helpers/forge/operations
文書化された
ここ. これには実行中のノードが必要ですが、このためにインターネットに接続する必要はありません.また、最近のブロックのハッシュを手動で提供する必要があります.
「署名された操作」を取得するには、データから取得したデータに署名する必要がありますが、残念ながら、CLIではまだサポートされていません.次に、操作に署名する必要があります.これは、tezoscliを使用して行うことができます
./tezos-client sign bytes <bytes> for <src>
操作の前に「03」バイトを追加する必要があります.これは、署名者の透かしとして機能します.
最後に、署名と符号なしの操作を組み合わせる必要がありますが、残念ながら、CLIではまだサポートされていません.
もう1つの方法は、署名されたMichelsonデータを受け入れ、それに基づいてアクションを実行するスマートコントラクトを使用することです(たとえば、パラメーターで指定されたアドレスに資金を送信します).このアプローチの利点は、メッセージ自体に署名するときに最近のハッシュを知る必要がないことです.コマンドでtezoscliを使用できます
./tezos-client typecheck data <data> against type <type>
続いて
./tezos-client sign bytes <data> for <src>
その後、このメッセージを通常のトランザクションでスマートコントラクトに送信する必要がありますが、そのトランザクションは、トランザクション料金の支払いに必要なごく少量の資金のみを制御するキーを使用して実行できます.
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.
-
「残念ながら、これはまだCLIではサポートされていません」-(2番目の状況では) `signbytes 0x05 ...for
`ではなく、実際に `signbytes 0x03 ...for `を使用できます.. "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
-
ああ、「signfor」が0x03で機能するかどうかはわかりませんでしたが、有効な署名付きトランザクションが生成されますか?ah, I wasn't sure if "sign for" worked for 0x03, does it produce a valid signed transaction?
- 0
- 2019-01-30
- Arthur B
-
それでも署名された操作は提供されませんstill doesn't give you a signed operation though
- 1
- 2019-01-30
- Arthur B
-
ありがとう@ArthurB:thumbsup:CLIの使用は安全で「公式な」方法だと思います.しかし、私見では、大多数の人にとって最もユーザーフレンドリーな方法ではありません.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
エアギャップデバイスでオフライントランザクションを作成し、それをネットワークにブロードキャストするにはどうすればよいですか?