首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solidity和DELEGATECALL:消息和数据格式

Solidity和DELEGATECALL:消息和数据格式
EN

Ethereum用户
提问于 2018-06-14 08:12:19
回答 2查看 748关注 0票数 3

我有一些关于CALLDELEGATECALL的问题。我已经读过一些相关的帖子(链接),但没有找到对我的怀疑的答案。

1)通过直接调用函数(例如,CALL )或使用addressOfTheContract.call(bytes4(sha3("funct(uint256)")), _n),对实体契约中的函数执行D5有什么区别吗?

2)通过直接调用函数(例如,DELEGATECALL )或使用addressOfTheLibraryContract.delegatecall(bytes4(sha3("funct(uint256)")), _n)对库函数执行D8有什么不同?让我们假设,在这两种情况下,库都是在契约开始时使用import语句导入的。

3) CALLDELEGATECALL是否都生成具有相同格式的事务(noncetovalue、.)的消息,除了gasPricegasLimit字段?

4)最后,CALLDELEGATECALL是否都发生在每个节点上?

EN

回答 2

Ethereum用户

发布于 2018-06-15 08:27:21

  1. 如果在契约中调用函数(“内部”调用),则存在差异。内部函数调用由跳转完成,不需要实际的call操作码。较长的形式相当于this.funct(arg1)
  2. 不,这应该是等价物。
  3. 不,CALLDElEGATECALL是EVM的操作码,就像SSTOREMUL一样。没有生成任何事务,只会运行代码。
  4. 在挖掘的事务中发生的所有执行都发生在网络上的每个完整节点上。如果您在本地模拟事务,例如使用web3 .call (不要与solidity .call混淆),那么它只在本地运行。
票数 1
EN

Ethereum用户

发布于 2018-06-14 08:15:32

我对前两个答案不能百分之百肯定,所以等待其他人的确认:

  1. 不,他们应该做同样的事。
  2. 不,他们应该做同样的事。
  3. 不,合同之间的通话根本不会产生交易。
  4. 这要看情况了。它们在其他代码运行的地方运行。如果进行事务处理,代码将在所有节点上运行。如果您使用eth_call对视图/纯函数进行调用,则该函数仅在与您交谈的节点上本地执行。作为函数执行的一部分的CALLDELEGATECALL在相同的位置运行。
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/51201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档