是否可以使用tx.origin而不是msg.sender来阻止合同播放和恢复调用?
发布于 2018-06-02 13:59:59
是。将require(tx.origin == msg.sender);添加到您不希望从契约中调用的任何方法中(这也会阻止使用multisig钱包的用户)。
不过,请记住,虽然这项工作目前正在进行,但仍有计划消除合同和定期账户之间的区别,虽然目前仍有关于如何运作的争论,但如果工作顺利,就不再有办法区分两者之间的区别。
发布于 2018-06-02 14:09:53
虽然您当然可以这样做,但是您应该考虑到@james_pic说了什么。
另一种了解调用方是合同还是EOA的方法是使用此方法:
function isContract(address addr) returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; }
编辑:请记住,正如@james_pic所指出的,按照上面的方法,如果恶意契约在其构造函数中调用您的契约,那么extcodesize将为零,但它仍然能够恢复事务。
https://ethereum.stackexchange.com/questions/50238
复制相似问题