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

在以太坊区块链上保存合约数据的更有效方式是什么?

在以太坊区块链上保存合约数据的更有效方式是什么?

Go
蛊毒传说 2021-11-29 15:49:34
我正在玩一个私有的以太坊区块链,我对实施一些智能合约很感兴趣。但是,信息非常有限,因为这是区块链的较新实现。举个例子,假设我想要一份包含个人信息的合同。为每个人创建一个新合约,还是简单地在同一个合约中保存所有用户的信息,是否更有效?在伪代码中,这两个选项如下所示。选项 1(为每个人实例化一个新合同):contract = // contract codeethereum.newContract(contract, userInfo);选项 2(在一份合约中保存所有用户的信息):contract = {  var users = [];  // other contract code}ethereum.newContract(contract, userInfo);在这种情况下,我们可以通过以下方式量化“效率”:每次实例化新合约时,我们都必须为合约挖掘区块,然后挖掘用户对合约进行的任何交易。然而,如果我们只实例化一个合约,我们只挖掘合约部署一次,然后是之后的任何交易,但是......如果我们选择将所有用户的所有信息存储在一个合约中,则只是将合约数据的“差异”(所有用户的“数组”)存储为一个块,或者将整个数据集存储在每个街区?或者...如果我们选择“每个用户的合同”选项,如果我们多次存储整个合同定义,是否会“浪费空间”(是否值得进行可能的冗余挖掘)?希望我的问题很清楚,但如果没有,请告诉我。我相信这个问题是“权衡”之一。(回复:标签——我使用以太坊的 golang 实现,以及一个 JavaScript API 与之交互。)
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

  1. 是的。但是,每次您想要添加用户时,您都必须发送一个交易来向现有合约添加新记录。

  2. 区块由交易组成。每次添加用户时,都必须为相应的函数调用创建一个事务。但是,您只需执行此操作一次,并且不会将数据冗余复制到未来的块中。

  3. 是的。

从您的问题的结构来看,您似乎应该再次阅读交易和块之间的区别。


查看完整回答
反对 回复 2021-11-29
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

考虑到您的用户对象不是太大,所有用户的单一合同就足够了。

从上面的代码中,建议使用 amap比数组更有效地获取用户记录。按任何字符串键入记录,例如名字+姓氏。

mapping(string => user_struct) public users;


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信