[英]Is possible to call a function from another contract in assembly ? Solidity
[英]Is it possible to call contract function from another contract without consuming Gas?
我写了非常基本的Concatenation和StringUtil合同 。 我尝试通过在StringUtil内创建实例的情况下使用并置协定来应用组合方法。 但是,Solidity编译器警告我添加payable关键字来连接函数,以便从StringUtil合约中使用它。 我以为连接不是一个应付操作。 =)有没有一种方法可以在不消耗汽油的情况下使用该功能? 我在脑海中浮现出一些想法,但它们不好。
将整个串联合同代码复制到StringUtil中并直接在其中使用。 但是,这不是一个好方法。
从Concatenation扩展StringUtil(合同StringUtil是Concatenation)。 但是,我需要在新创建的合约中编写更多功能,比如说Comparer并将其用作相同的方法。 这也不好。 因为,StringUtil已从Concatenation扩展。
你怎么看? 您是否知道有关此主题的最佳做法?
谢谢。
Solidity编译器警告我添加payable关键字以连接函数,以便从StringUtil合约中使用它
这是因为您已将concatenate
功能标记为应付款。 它似乎没有进行任何醚转移,因此似乎没有必要。
有没有一种方法可以在不消耗气体的情况下使用该功能?
运行非view
函数或pure
函数将始终产生一定的耗气量,与完成的工作量成比例。 由于您的函数会修改存储,因此没有消耗大量电量就无法使用它。
至于可升级性,除非添加了call
,并且设置了一个接受函数签名和参数的方法,否则通常需要在添加新方法时重新部署两个合同。 您可以研究代理合同,以了解如何执行类似的工作。
我在下面做了一个非常简单的实验。 我在函数上同时应用了payable和view关键字。 这次的编译器没有警告我。 我发现我在发布第一篇文章时错误地调用了应付款功能。
最后,我了解到将payable关键字添加到从另一个合同调用的函数中并不是强制性的事情。 我们可以管理被调用的函数是否消耗其他合同中的天然气。 这是正确的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.