首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数变元量

函数变元量
EN

Ethereum用户
提问于 2018-03-13 22:44:09
回答 1查看 51关注 0票数 1

假设我们有一个函数,如:

代码语言:javascript
复制
function tokenFallback(address sender, uint tokenAmount)

其他一些合同决定将其称为:

代码语言:javascript
复制
contract.tokenFallback(sender, tokenAmount, data)

tokenFallback中只有两个参数,但是调用包含三个参数。tokenFallback函数不包括_data。会发生什么?tokenFallback是否仍能正常执行并忽略它接收到的_data变量?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-03-13 23:14:24

不,被叫的合同会恢复的。这是因为当您以可靠的方式编写契约调用时,它将计算被调用函数签名的散列。这是如何完成的(正式python实现):

代码语言:javascript
复制
sig = sha3("tokenFallback(address,uint)")

然后将此签名散列截断为4个字节,并在没有实际函数名的情况下发送到接收契约。

由于签名散列取决于参数类型,因此它与调用的契约所期望的不同,因此它将恢复。

您可能可以使用程序集强制某个签名散列,但我不确定它是如何工作的。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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