128

关于智能合约的存储问题

moon_illusion · 于 发布 · 最后由 chakera回复 · 1648 次阅读

请教精通这一块的大神,
以Solidity文档中的投票合约为例:http://solidity.readthedocs.io/en/develop/solidity-by-example.html#voting

address public chairperson;
mapping(address => Voter) public voters;
Proposal[] public proposals;

通过查看一些资料,感觉是储存在智能合约所属账户的空间中,而合约账户处于某个区块中。但如果按此理解的话感觉也有一些问题,就是当有新的人投票,则需要更新原本的区块,但从etherscan上看有人投票,会生成新的交易,而交易则应该存储在新的区块中的,和前面的理解矛盾。所以请大神指教:
这些字段都会存储在区块链中吗?具体存储在什么位置?每一次投票都会生成新的交易吗,如果是交易中存储的是什么内容,非常感谢!

  • 128
    ajian1984

    不是大神,但我感觉是这样的。
    1. 交易数据存储在区块链上,账户的状态数据存储在本地;区块只保存该区块最终实现的账户状态的默克尔树根。
    2. 用户发送特定类型的交易,将智能合约部署到区块链上(即是生成一个内部账户——智能合约账户)。该交易被存储在某一区块上。
    3. 人们与该合约互动时,也是通过发送交易与该合约互动,所以您说会生成新交易是对的;
    4. 然而,在上一步骤中,人们(外部账户)是交易发起方,智能合约(内部账户)是交易接收方;要验证交易有效不需要知道接收方的账户状态,只要保证发起方有足够余额即可;如果该智能合约有进一步的动作,则可将智能合约账户视为交易发起方;这些都是新交易,因此都记在新的区块上,而不是去更新那个记载着创建智能合约交易的区块;同样地,因为区块数据不可更改,该智能合约账户的代码也就不能更改。这是我们对智能合约的信任的来源。

    以太坊交易的内容请参考:科普 | 以太坊到底是啥?
    如何实现可更新的智能合约,请参考:教程 | 在区块链上建立可更新的智慧合约

  • 128
    ajian1984

    智能合约如何储存数据则是我所不了解的,教程中应该有答案。。。大家一起探讨学习。

  • 128
    moon_illusion

    @ajian1984 非常感谢,看了您的答复,比原来理解的更清晰一些了。

  • 8433 large
    halepa

    现在越来越多的人开始采用这类的智能合同来存储资料了。但我无法确定这个是否安全可靠,值不值得信赖?

  • 128
    chakera

    大家有遇到geth同步一直差几十个块的问题吗?