我有一些关于CALL和DELEGATECALL的问题。我已经读过一些相关的帖子(链接),但没有找到对我的怀疑的答案。
1)通过直接调用函数(例如,CALL )或使用addressOfTheContract.call(bytes4(sha3("funct(uint256)")), _n),对实体契约中的函数执行D5有什么区别吗?
2)通过直接调用函数(例如,DELEGATECALL )或使用addressOfTheLibraryContract.delegatecall(bytes4(sha3("funct(uint256)")), _n)对库函数执行D8有什么不同?让我们假设,在这两种情况下,库都是在契约开始时使用import语句导入的。
3) CALL和DELEGATECALL是否都生成具有相同格式的事务(nonce、to、value、.)的消息,除了gasPrice和gasLimit字段?
4)最后,CALL和DELEGATECALL是否都发生在每个节点上?
发布于 2018-06-15 08:27:21
call操作码。较长的形式相当于this.funct(arg1)。CALL和DElEGATECALL是EVM的操作码,就像SSTORE或MUL一样。没有生成任何事务,只会运行代码。.call (不要与solidity .call混淆),那么它只在本地运行。发布于 2018-06-14 08:15:32
我对前两个答案不能百分之百肯定,所以等待其他人的确认:
eth_call对视图/纯函数进行调用,则该函数仅在与您交谈的节点上本地执行。作为函数执行的一部分的CALL或DELEGATECALL在相同的位置运行。https://ethereum.stackexchange.com/questions/51201
复制相似问题