eosiosg / eos-challenge-contract

ISC License
3 stars 0 forks source link

EOS 和 EVM transaction执行原子性 #13

Closed Frank-AFN closed 4 years ago

Frank-AFN commented 4 years ago

EOS transaction 和 EVM transaction 掺杂执行时. 需要注意原子性问题. EOS transaction是用eosio::check (assert) 来回滚multi-index write operation. EVM当evmc_result 返回status_code 例如 evmc_failure, evmc_out_of_gas来kill整个操作. 这里会出现可能会出现交易执行一半. out_of_gas.

i.e. contract creation execution steps:

  1. EOS multi-index account table 1 write (write success)
  2. evm_execute out_of_gas (return)
  3. EOS multi-index 2 account_state write (write failure)

是否需要把 EOS multi-index 1 write rollback?

Frank-AFN commented 4 years ago

目前对于 contracts create action. 并没有造成太大的影响. 但仍需要解决

第一次 gas 不足, 执行到 step 2. out_of_gas. step 1已经执行. 第二次 gas 充足, step 1不会再次执行. 会执行完 step2, 3以完成 contract creation.

refer commit: https://github.com/eosiosg/eos-challenge/commit/c3396bb6758572dd41b8fb6bc28397de7c6142d9

Frank-AFN commented 4 years ago

raw action 中 atomic 依靠 eosio::assert(status = EVMC_SUCCESS ) 来保证

Frank-AFN commented 4 years ago

EOS trx总是会执行成功, EVM trx可能会失败. 这样会把失败的EVM trx也记录在EOS链上. 和ETH 设计保持一致.