智能合约和存储空间在哪里?
关于以太坊区块链余下问题的探索
一. 在对整个区块链有了较为清晰地理解之后,回过头来,我想到了以下的问题:
-
既然ETH交易不仅有转账的交易,还有部署合约,以及存储空间的使用,
那么,智能合约/存储空间如何实现,他们又在哪里,智能合约的地址又是放在哪里?
二. 先来解释以下为什么会有这个疑惑.我已经知道以太坊区块链的结构主要包含以下几个部分:
版本号;
前一区块哈希;
时间戳;
随机数;
目标哈希;
MPT三棵树(交易树,状态树,收据树),树结构本身是key-value对,实际也只是哈希值;
MPT中,交易树最底层是交易;状态树包含账户,账户允许有空间和代码(外部账户没有代码,有代码的是合约账户.);收据树保存的是交易的收据,虽然资料不足,但从架构思路上它也不会需要代码和空间,只是完善SPV快速索引.
其次,EVM只是用来执行字节码的,也不会保存智能合约或者存储空间,那么只能是在区块链中.
我们可以看到,ETH似乎并没有专门为智能合约的地址设计单独的存储结构,存储空间也是.
三. 也正基于此,我有了一个假设: 合约其实都是在合约账户中的,空间也是.
四. 结果
后来仔细看solidity文档才发现,其实里面就有说明,只是自己忽略了.
合约部署后会创建一个合约账户,合约账户里保存着智能合约的可执行字节码(编译之后的,在EVM里执行),并且有存储空间,合约能对合约账户的空间写入信息.而abi是一个接口结构,利用abiDefinition可以创建调用该合约的结构.abi应该由合约所有方自己保存和提供.
(转载请注明出处~.~ http://blog.****.net/LNZ001/article/details/72842753 )