为了账号安全,请及时绑定邮箱和手机立即绑定

智能合约中的变量读取时需要遍历整个区块链中的相关交易吗?

智能合约中的变量读取时需要遍历整个区块链中的相关交易吗?

慕莱坞森 2019-05-21 10:51:10
如果在智能合约中定义了一个数组,和append方法。那要读取这个数组的最新值,是不是需要遍历整个区块链中的相关交易,把所有append(也可能还有delete)读取出来,才能最终得到最新的数组?看起来很麻烦。我看到向ContractAddress发起的交易里,有inputdata一项。但这里面只涉及要调用的方法以及参数。transaction的ordering在以太坊里如何解决的呢?
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

不需要,合约本质是一个账户,以太坊的账户体系中是可以存储数据的,没增加一个区块,有些账户的数据就变动了,如果合约被调用,数据变动了,其实在区块上链后,也就是新的数据了。
这是一个合约中数据的样子,storage就是合约的变量数据。
"143f5e185e5724a1794739d37245b5b790d9e981":{
"balance":"0",
"nonce":0,
"root":"ca8c4b371ca57e115d36d825df11edb2ed0d3a95fe16d62ddc1588d2dba7e44f",
"codeHash":"7612f2653b712e6...fa640e2294c876098b1358f0b4e8",
"code":"60806040526004361....",
"storage":{
"00000000000000000000...0000000000000000000000000":"0a",
"00000000000000000000...0000000000000000000000001":"64",
"00000000000000000000...0000000000000000000000002":"01",
"034feb03b7facb45a16a...b0ac9c170ab4ad6508986005c":"820400"
}
}
                            
查看完整回答
反对 回复 2019-05-21
?
炎炎设计

TA贡献1808条经验 获得超4个赞

这其实是误解了。以太坊是虚拟机,你可以理解为运行你的程序前,所有环境都是准备好了的。变量就在那里,你读取就好了。就像是一台机器一样。因为他虚拟机里存储的是最终状态。inputdata只是本次交易的附加数据而已。
                            
查看完整回答
反对 回复 2019-05-21
  • 2 回答
  • 0 关注
  • 579 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号