Изменения состояния в блоке

Я где-то читал, что «состояние» обновляется только в конце каждого блока. Я также читал, что каждый блок содержит определенную последовательность транзакций и, таким образом, неявно «обновляет» состояние внутри блока. Это может быть семантикой, но я просто хочу быть уверенным в том, как обновляются переменные состояния: будет ли транзакция, которая изменяет состояние, делать это перед следующей транзакцией, независимо от того, находится ли она в том же блоке?

Для ясности: предположим, что переменная контракта Bookравна 10 ETH, чтобы пользователи могли делать ставки против этих 10 ETH. Каждый раз, когда транзакция ставит сумму X, Bookона уменьшается на X: Book = Book - X. Ставки ограничены таким образом, что Book>=0 всегда: require(Book - X >= 0)в верхней части функции ставок. Если Боб поставит 6 ETH, а Алиса поставит 6 ETH, это, очевидно, будет противоречить моему требованию. Однако, если их транзакции находятся в одном блоке, будет ли вторая транзакция отклонена?

Ответы (1)

будет ли транзакция, которая изменяет состояние, сделать это перед следующей транзакцией, независимо от того, находится ли она в том же блоке?

Да

если их транзакции находятся в одном блоке, будет ли вторая транзакция отклонена?

Да

Важным моментом является то, что ни Алиса, ни Боб не знают, кто первый: майнер решает, какая транзакция будет первой.

См. также Каков порядок транзакций по умолчанию во время майнинга?

Я так и думал, но это обнадеживает.