我写了非常基础的Concatenation and StringUtil contracts。我尝试通过在StringUtil内创建实例的情况下使用并置协定来应用组合方法。但是,Solidity编译器警告我添加payable关键字来连接函数,以便从StringUtil合约中使用它。我以为连接不是一个应付操作。 =)有没有一种方法可以在不消耗汽油的情况下使用该功能?我脑海中浮现出一些我在下面写下的想法,但它们不好。
将整个串联合约代码复制到StringUtil中并直接在其中使用。但是,这不是一个好方法。
从Concatenation扩展StringUtil(合同StringUtil是Concatenation)。但是,我需要在新创建的合约中编写更多功能,比如说Comparer并将其用作相同的方法。这也不好。因为,StringUtil已从Concatenation扩展为可用。
您有什么想法?您知道此主题的最佳做法吗?
谢谢。
答案 0 :(得分:1)
Solidity编译器警告我添加payable关键字来连接函数,以便从StringUtil合约中使用它
这是因为您已将concatenate
功能标记为应付功能。它似乎没有进行任何醚转移,因此似乎没有必要。
有没有一种方法可以在不消耗汽油的情况下使用该功能?
运行不是view
或pure
的函数将始终产生一定的耗气量,与完成的工作量成比例。由于您的函数会修改存储空间,因此无法在不浪费电量的情况下使用它。
关于可升级性,除非添加了call
,否则通常需要在添加新方法时重新部署两个合同,并设置一种接受函数签名和参数的方法。您可以研究代理合同,以了解如何实施。
答案 1 :(得分:0)
我在下面做了一个非常简单的实验。我在函数上同时应用了payable和view关键字。这次的编译器没有警告我。我发现我在发布第一篇文章时错误地调用了应付款功能。
最后,我知道将payable关键字添加到从另一个合同调用的函数中并不是强制性的事情。我们可以管理被调用的函数是否消耗其他合同中的天然气。正确吗?