假设我们有一个函数,如:
function tokenFallback(address sender, uint tokenAmount)其他一些合同决定将其称为:
contract.tokenFallback(sender, tokenAmount, data)tokenFallback中只有两个参数,但是调用包含三个参数。tokenFallback函数不包括_data。会发生什么?tokenFallback是否仍能正常执行并忽略它接收到的_data变量?
发布于 2018-03-13 23:14:24
不,被叫的合同会恢复的。这是因为当您以可靠的方式编写契约调用时,它将计算被调用函数签名的散列。这是如何完成的(正式python实现):
sig = sha3("tokenFallback(address,uint)")然后将此签名散列截断为4个字节,并在没有实际函数名的情况下发送到接收契约。
由于签名散列取决于参数类型,因此它与调用的契约所期望的不同,因此它将恢复。
您可能可以使用程序集强制某个签名散列,但我不确定它是如何工作的。
https://ethereum.stackexchange.com/questions/42675
复制相似问题