Если я прав, одноразовый номер отвечает за выполнение транзакций заказа. Предположим, у вас есть две транзакции T1 и T2. Т1 зависит от Т2. Итак, я хочу иметь заказ T1, а затем T2. Это делается путем предоставления одноразового номера T1 и одноразового номера T2 + 1. (пожалуйста, поправьте меня, если это неверно)
Теперь в некоторых случаях может возникнуть ситуация, когда T2 зависит также от состояния контракта. Поэтому я хочу убедиться, что T1 выполняется только тогда, когда T2 может быть выполнен. Есть ли способ сделать это?
Так что на самом деле убедитесь, что T1 и T2 включены в один и тот же блок. Я думаю, что это можно было бы сделать с помощью контракта на костюм, но не уверен, что есть лучшее или стандартное решение для этого.
Большое спасибо за любой совет!
PS: Пример: Я хочу что-то купить. T1 вносит деньги (или утверждает) контракт. T2 купить что-то с помощью контракта.
Реальный пример: я хочу купить токен на Ether Delta. Т1: депозит. T2: Купить токен. Нет смысла вносить депозит, если кто-то был быстрее и уже купил этот токен по указанной цене.
Итак, я хочу иметь заказ T1, а затем T2. Это делается путем предоставления одноразового номера T1 и одноразового номера T2 + 1. (пожалуйста, поправьте меня, если это неверно)
Если и T1, и T2 отправляются с одной и той же учетной записи, то порядок nonce будет соблюдаться, да.
T2 зависит также от состояния контракта. Поэтому я хочу убедиться, что T1 выполняется только тогда, когда T2 может быть выполнен. Есть ли способ сделать это?
Сценарий 1: если T1 и T2 принадлежат одной и той же учетной записи, то этот порядок уже гарантирован одноразовыми номерами.
Сценарий 2: если они из разных учетных записей, то T2 будет успешным, только если он внесет допустимое изменение в состояние. Если он не внесет допустимых изменений в состояние, произойдет сбой и он не будет включен в блок.
Если T1 требуется, чтобы сделать состояние «действительным» до прибытия T2, вы можете просто убедиться, что в случае сбоя T2 (поскольку T1 еще не произошло) он будет повторно отправлен.
Если T1 не требуется для того, чтобы сделать состояние «действительным», а T2 может работать без T1, то вам нужно быть осторожным с обеспечением порядка.
Так что на самом деле убедитесь, что T1 и T2 включены в один и тот же блок.
Непонятно, почему вы хотите, чтобы они были включены в один и тот же блок. Пока T1 предшествует T2 — даже в более раннем блоке — тогда изменения состояния будут работать.
Кроме того, вы не можете гарантировать их включение в один и тот же блок. Это зависит от шахтеров. Можно попытаться добиться этого с ценами на газ, но опять же, нет никакой гарантии.
deposit()
и buy()
в одной комбинированной функции (принимая один вызов), чтобы он мог делать то, что вы просите. (Что похоже на то, что это не так.)
Грег
МайклРазум
Грег
Исмаэль