我正在测试GETH的VM,以便从区块链中检索有趣的数据。我确实成功地拦截了呼叫并查看了内部事务,但我想深入一点,1)了解在智能契约上调用的是什么方法,2)在evm.go中我正在研究的智能契约上,我称自己为一种方法
return interpreter.Run(contract, input, readOnly)首先,我注意到很多时候输入都是空的,难道不应该总是包含调用SC的函数吗?GETH内部是否有什么设施可以理解输入是什么?它代表哪一种方法?如何添加(如果可以)添加对interpreter.Run的另一个调用,以调用合同上的另一个方法?(例如,erc20合同上的balanceOf?)
发布于 2018-11-06 22:19:51
我注意到很多时候输入都是空的,难道不应该总是包含调用SC的函数吗?
不一定。CALLDATA中的公共函数选择器是可选的。但是,使用空的CALLDATA调用契约将执行合同。在实践中,回退函数将被执行,它只是接收(有时拒绝)以太。
GETH内部是否有什么设施可以理解输入是什么?它代表哪一种方法?
不知道GETH的事。从执行的角度来看,您所拥有的只有目标契约地址和CALLDATA输入字节。如果有,则前四个字节表示公共函数选择器(“方法调用它表示”)。从4字节选择器到实际的函数名或原型可以部分完成:使用各种方法构建了反向查找表。在这里可以找到一个公共的:https://www.4byte.directory/
如何添加(如果可以)添加对interpreter.Run的另一个调用,以调用合同上的另一个方法?(例如,erc20合同上的balanceOf?)
这是GETH特有的,我不知道具体的客户端。对不起,我不能回答这个问题。我只能告诉您可以这样做,您需要找到挂起代码的位置,然后就需要正确地分配(了解目标例程的ABI,您将能够构建有效的CALLDATA,包括前面提到的函数选择器)。
https://ethereum.stackexchange.com/questions/61153
复制相似问题