Как создать транзакцию
3 ответ
- голосов
-
- 2019-02-07
В Интернете можно найти множество справочных материалов,которые помогут понять,как это сделать. Вы можете проверить это или это . Некоторые элементы также представлены в этом другом вопросе
В основном шаги
- получить зависимости
- хеш ветки:
/chains/main/blocks/head/hash
- счетчик:
/chains/main/blocks/head/context/contracts/<source_pkh>/counter
- хеш протокола:
/protocols
- хеш ветки:
- операция кузницы (
/chains/main/blocks/head/helpers/forge/operations
). Обратите внимание,легко ли воспроизвести эту логику за пределами собственного клиента. - подписывать байты (
tezos-client sign bytes
) - операция перед применением (
/chains/main/blocks/head/helpers/preapply/operations/)
- декодировать подпись в шестнадцатеричный формат
- операция ввода (
/inject/operation
)
There are multiple references online which provide material to understand the steps involved in this. You can check this or that. Some elements are also provided in this other question
Basically the steps are
- get dependencies
- branch hash:
/chains/main/blocks/head/hash
- counter:
/chains/main/blocks/head/context/contracts/<source_pkh>/counter
- protocol hash:
/protocols
- branch hash:
- forge operation (
/chains/main/blocks/head/helpers/forge/operations
) Note sure if it's easy to replicate this logic outside from the native client though - sign bytes (
tezos-client sign bytes
) - preapply operation (
/chains/main/blocks/head/helpers/preapply/operations/)
- decode signature to hexadecimal format
- inject operation (
/inject/operation
)
-
- 2019-02-07
helpers/scripts/run_operation
полезен для моделирования операции без ее подписания (вы можете использовать нулевые байты для подписи),чтобы оценить требования к газу и хранению.Вы увидите,какtezos-client -l
устанавливает здесь максимальные значения дляgas_limit и storage_limit,а затем использует результат для установки фактическихgas_limit и storage_limit (в зависимости от максимально допустимого пользователем storage_limit,называемого "-гореть-крышка ").Чтобы узнать,как операция кодируется в двоичном формате,вы можете увидеть,как
tezos-client describe unsigned operation
.helpers/scripts/run_operation
is useful to simulate an operation without signing it (you may use zero bytes for the signature), in order to estimate the gas and storage requirements. You will seetezos-client -l
setting gas_limit and storage_limit to the maximum values here, and then using the result to set the actual gas_limit and storage_limit (subject to the user's maximum acceptable storage_limit, called "--burn-cap").To learn how the operation is encoded in binary, you can see
tezos-client describe unsigned operation
.-
Я заметил,что мой ответ не объясняет,зачем нужна предварительная заявка.Почему не просто run_operation?I noticed my answer does not explain why preapply is needed. Why not just run_operation?
- 0
- 2019-03-02
- Tom
-
- 2019-02-07
Проще всего было бы проверить как,например,
eztz
реализует переводы .Тогда посмотрите,как создаются операции переноса, здесь а>.
И,наконец,как вводится поддельная операция, здесь а>.
Судя по всему,
forge
eztz создается удаленно с помощью/helpers/forge/operations
.Easiest would be checking out how e.g.
eztz
implements transfers.Then see how the transfer operations is forged here.
And finally how the forged operation is injected here.
By the looks of it, seems like eztz's
forge
is done remotely by/helpers/forge/operations
.-
На самом делеeztz подделывает локально,но пока мы используем удаленную кузницу как способ дважды проверить соответствие того,что мы подделали локально.В будущем мы удалим удаленную проверку кузницы :-)Actually eztz forges locally, but for the time being we use the remote forge as a way to double check that what we forged locally matches. In future, we will remove the remote forge check :-)
- 1
- 2019-02-08
- Stephen Andrews
Я пытаюсь понять различные этапы создания операции транзакции.
Tezos-client -l
показывает количество вызовов RPC,среди которых:Что делают
run_operation
иpreapply
и зачем они оба нужны?Кроме того,вводимая операция имеет двоичную кодировку,какая кодировка используется?(кодировку можно получить с помощью
/chains/main/blocks/head/helpers/forge/operations
,но я бы хотел кодировать операцию сам).