eosiosg / eos-challenge-contract

ISC License
3 stars 0 forks source link

is it correct to use tapos_block_num as header block #25

Closed qianxiaofeng closed 4 years ago

Frank-AFN commented 4 years ago
  1. intrinsic方法的tapos_block_num 在jungle中合约测试, 以及EOS代码的trace, eosio::tapos_block_num 肯定 不是head_block_number, intrinsic方法中, tapos_block_number是uint16类型.

https://github.com/EOSIO/eos/blob/2a6f974b5dc224b1a9f9d4e32dab0eedf40cf626/libraries/chain/include/eosio/chain/transaction.hpp#L61

目前用 ref_block_num 以及 ref_block_prefix 看起来不能算出block_num.

https://github.com/EOSIO/eos/blob/2a6f974b5dc224b1a9f9d4e32dab0eedf40cf626/libraries/chain/include/eosio/chain/transaction.hpp#L59

具体可以参照如上EOS 代码.

下面是看代码容易弄混的变量名称.

  1. controller中的tapos_block_summary 中的block_id 是lib.

last_irreversible_block_id() function: https://github.com/EOSIO/eos/blob/3689992fb1f22f5251f0ec8a72838f97e7403add/libraries/chain/controller.cpp#L2834

调用了 get_block_id_for_num() https://github.com/EOSIO/eos/blob/3689992fb1f22f5251f0ec8a72838f97e7403add/libraries/chain/controller.cpp#L2889

这里如果tapos_block_summary.block_id == block_num 由此推测. tapos_block_summary存储的是lib

qianxiaofeng commented 4 years ago

libraries/chain/controller.cpp signed_transaction get_on_block_transaction() 里设置的时候

trx.set_reference_block( self.head_block_id() );

这段代码需要研究一下

Frank-AFN commented 4 years ago

Currently can not get head block number in smart contract. Use tapos_block_num as native EOSIO reference block number of this transaction.