制定通用数据组织合同:如何创建一个稳固的表

时间:2018-03-31 00:17:27

标签: database-design ethereum solidity

我已经阅读了Rob的CRUD Dapp帖子,我现在想知道是否有人可能知道如何创建代表通用表的可靠性合同,而不是特定于应用程序,但是可以存储和检索数据的合同任何申请都有条理的方式?

这样开发人员就不必担心组织他们的数据了。

2 个答案:

答案 0 :(得分:1)

希望我能正确理解你的问题。 如果我必须创建一个以表格形式存储各种数据的合同,我会使用映射。

如果您有这样的表:

| ID   | Product | Price | .... |
---------------------------------
| 123  | Phone   | 1000  | .... |
| 124  | Laptop  | 2000  | .... |

您可以为所有类型的表创建多用途映射,其中键表示ID和所有数据的字节:

public mapping(uint256 => bytes);

传递一堆你不知道它具有什么形式的数据作为字节数组是很常见的(你可以查看ERC827令牌提议)。

因为映射是自动创建的公共getter,但请记住一次只能获得一个元素(这是对映射和数组的限制),这会使批量操作实际上是不可行的。

您也无法创建自定义函数来为用户执行批量操作,因为函数无法返回映射或动态数组。此外,没有简单的方法来获取映射的所有值的数组。但是,您可以手动检索固定数量的元素并将它们保存在固定长度的数组中并返回(非常昂贵),或者您可以将检索到的元素转换为字节数组并以这种方式返回它们。

如果您的用户不知道您可以在公共阵列中提供的ID,那么要检索元素,您必须知道产品ID。

总而言之,您应该尽量在区块链上存储尽可能少的数据。 保存数据非常昂贵(在存储合同成本20000气体中存储新值)这就是为什么您几乎看不到任何符合您描述目的的合同。

希望能回答你的问题。

答案 1 :(得分:0)

您可以使用此库来实现。 https://github.com/petrosDemetrakopoulos/ethairballoons。它在npm中可用,您可以使用“ npm install ethairballoons”进行安装。

它提供了对实体合同的抽象级别,您唯一要做的就是在JSON中定义模型并进行部署。它将完成这项工作而无需编写任何一行Solidity。