我正在玩一个私有(private)的以太坊区块链,我对实现一些智能合约很感兴趣。但是,信息非常有限,因为这是区块链的较新实现。

举个例子,假设我想要一份包含个人信息的契约(Contract)。 为每个人创建一个新合约,还是简单地在同一个合约中保存所有用户的信息,效率更高吗?

在伪代码中,这两个选项如下所示。

选项 1(为每个人实例化一个新契约(Contract)):

contract = // contract code

ethereum.newContract(contract, userInfo);

选项 2(在一份合约中保存所有用户的信息):
contract = {
  var users = [];

  // other contract code
}

ethereum.newContract(contract, userInfo);

以下是我们如何量化这种情况下的“效率”:
  • 每次实例化新合约时,我们必须为合约挖掘区块,然后挖掘用户对合约进行的任何交易。然而,如果我们只实例化一个合约,我们只挖掘合约部署一次,然后是之后的任何交易,但是...
  • 如果我们选择将所有用户的所有信息存储在一个合约中,那么只是将合约数据的“差异”(所有用户的“数组”)存储为一个块,还是存储整个数据集在每个街区?或者...
  • 如果我们选择“每个用户的契约(Contract)”选项,如果我们多次存储整个契约(Contract)定义是否“浪费空间”(并且是否值得进行可能的冗余挖掘)?

  • 希望我的问题很清楚,但如果没有,请告诉我。我相信这个问题是“权衡”之一。

    (回复:标签——我使用以太坊的 golang 实现,以及一个 JavaScript API 与之交互。)

    最佳答案

  • 是的。但是,每次您要添加用户时,您都必须发送交易以向现有契约(Contract)添加新记录。
  • 区块由交易组成。每次添加用户时,都必须为相应的函数调用创建一个事务。但是,您只需执行一次,并且不会将数据冗余复制到 future 的块中。
  • 是的。

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

    关于javascript - 在以太坊区块链上保存合约数据的更有效方式是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34216759/

    10-12 13:35