我知道,如果智能契约的方法不改变状态变量,我们可以在不进行任何事务的情况下看到它的结果。
现在我想知道如何通过编程看到这个方法的结果?
例如,通过一个浏览器网站的api,我可以向它发送一些数据,并向我展示一些结果。
我用的是php。所以,请不要向我提供web3.js或python等等。
例如,我希望在这个地址中获得一个名为totalSupply网络上的名为DS2Token的智能契约的ropsten方法的结果:0x53778036dce23a22303142923316af257d7ee813
发布于 2018-09-24 17:59:16
我设想某个地方已经为PHP编写了一个web3实现,但无论如何,您都可以通过简单的HTTP调用节点或代理(如infura )来实现这一点。
要从函数读取,您需要知道它的签名和要传递的参数。对于totalSupply(),这只是函数名的keccak256哈希的前4个字节作为字符串,即keccak256("totalSupply()"),即0x18160ddd。您可以将其设置为事务的data,以及契约的地址为to字段,然后向eth_call发出POST请求。卷曲,这看起来像是:
curl https://ropsten.infura.io/ \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_call","params": [
{"from": "0x53778036dce23a22303142923316af257d7ee813",
"to": "0x53778036dce23a22303142923316af257d7ee813",
"gas": "0x76c0","gasPrice": "0x9184e72a000","value": "0x0",
"data": "0x18160ddd"}, "latest"],"id":1}'from和gasPrice值可以是任意值,但是gas需要足够大才能完成读取操作。
您将得到一个类似于{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000052b7d2c7f6fac568ea0000"}的结果。
然后,简单地将接收到的十六进制数转换为十进制,您就可以得到您的总供应量。
https://ethereum.stackexchange.com/questions/59357
复制相似问题