首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种不改变任何状态变量的智能契约方法的结果

一种不改变任何状态变量的智能契约方法的结果
EN

Ethereum用户
提问于 2018-09-24 14:39:21
回答 1查看 362关注 0票数 0

我知道,如果智能契约的方法不改变状态变量,我们可以在不进行任何事务的情况下看到它的结果。

现在我想知道如何通过编程看到这个方法的结果?

例如,通过一个浏览器网站的api,我可以向它发送一些数据,并向我展示一些结果。

我用的是php。所以,请不要向我提供web3.js或python等等。

例如,我希望在这个地址中获得一个名为totalSupply网络上的名为DS2Token的智能契约的ropsten方法的结果:0x53778036dce23a22303142923316af257d7ee813

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-09-24 17:59:16

我设想某个地方已经为PHP编写了一个web3实现,但无论如何,您都可以通过简单的HTTP调用节点或代理(如infura )来实现这一点。

要从函数读取,您需要知道它的签名和要传递的参数。对于totalSupply(),这只是函数名的keccak256哈希的前4个字节作为字符串,即keccak256("totalSupply()"),即0x18160ddd。您可以将其设置为事务的data,以及契约的地址为to字段,然后向eth_call发出POST请求。卷曲,这看起来像是:

代码语言:javascript
复制
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}'

fromgasPrice值可以是任意值,但是gas需要足够大才能完成读取操作。

您将得到一个类似于{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000052b7d2c7f6fac568ea0000"}的结果。

然后,简单地将接收到的十六进制数转换为十进制,您就可以得到您的总供应量。

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

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

复制
相关文章

相似问题

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