我正在玩一个私有的以太坊区块链,我对实现一些智能合约很感兴趣.但是,由于这是区块链的较新实现,因此信息非常有限.
举例来说,假设我想要一份包含有关某个人的信息的合同.为每个人创建一个新合同,或者仅保存有关同一合同中所有用户的信息,效率更高吗?
在伪代码中,这两个选项如下所示.
选项1(为每个人实例化一个新合同):
contract = // contract code
ethereum.newContract(contract, userInfo);
选项2(一份合约中所有用户的持有信息):
contract = {
var users = [];
// other contract code
}
ethereum.newContract(contract, userInfo);
在这种情况下,我们可以通过以下方法量化“效率”:
>每次实例化新合同时,我们都必须挖掘该合同的区块,然后挖掘用户对该合同进行的任何交易.但是,如果我们仅实例化一份合同,那么我们只会挖掘一次合同部署,然后再挖掘任何交易,但是…
>如果我们选择在一个合约中存储所有用户的所有信息,则仅将合约数据的“差异”(所有用户的“数组”)存储为一个块,还是存储整个数据集在每个街区?要么…
>如果我们选择“每个用户的合同”选项,那么如果我们多次存储整个合同定义,是否“浪费了空间”(值得进行可能的冗余挖掘)吗?
希望我的问题很清楚,但如果没有,请告诉我.我相信这个问题是“权衡取舍”之一.
(Re:标签-我正在使用以太坊的golang实现和与之交互的JavaScript API.)
解决方法:
>是的.但是,每次您要添加用户时,都必须发送事务以将新记录添加到现有合同中.
>块由交易组成.每次添加用户时,都必须为相应的函数调用创建事务.但是,您只需要执行一次,就不会将数据冗余复制到以后的块中.
>是的.
从问题的结构方式来看,似乎您应该重新阅读事务和块之间的区别.