Как совершить офлайн-транзакцию?
1 ответ
- голосов
-
- 2019-01-30
Все транзакции,включенные в Tezos,должны ссылаться на хэш блока в пределах последних 60 хэшей блоков. Это действует как дополнительный уровень нотариального заверения цепочки,помимо консенсуса,но означает,что вам потребуется несколько дополнительных шагов для подписания транзакций в автономном режиме.
Один из способов сделать это - использовать RPC:
/chains/main/blocks/head/helpers/forge/operations
Документировано здесь .
Для этого вам понадобится работающий узел,но для этого он не обязательно должен быть подключен к Интернету. Вам также необходимо будет вручную указать хэш последнего блока.
Вам нужно будет подписать данные,которые вы получите,чтобы получить «подписанную операцию»,но,к сожалению,это пока не поддерживается в интерфейсе командной строки.Затем вам нужно подписать операцию,что можно сделать с помощьюtezos cli
./tezos-client sign bytes <bytes> for <src>
Вам нужно будет добавить байт «03» перед операцией. Это действует как водяной знак для подписывающей стороны.
Наконец,вам нужно объединить подпись и операцию без знака,к сожалению,это пока не поддерживается в интерфейсе командной строки.
Другой способ - использовать смарт-контракт,который принимает подписанные данные Майкельсона и предпринимает действия на их основе (например,отправляет средства на адрес,указанный в параметрах). Преимущество этого подхода в том,что вам не нужно знать недавний хэш при подписании самого сообщения. Вы можете просто использоватьtezos cli с командой
./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» - действительно можно подписывать байты 0x03 ... для
`,а не (во второй ситуации) подписывать байты 0x05 ... для `. "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
-
ах,я не был уверен,работает ли «подписать для» для 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: Думаю,использование интерфейса командной строки было бы безопасным и «официальным» способом.Но ИМХО это не самый удобный способ для большинства людей.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
Как создать автономную транзакцию на устройстве с воздушным зазором и транслировать ее в сеть?