制定通用数据组织合同:如何在 solidity 中创建 table
Making a general purpose data organization contract: how would one create a table in solidity
我读过 Rob 的 CRUD Dapp post 我现在想知道是否有人可能知道如何创建表示通用表的可靠性合约,而不是特定于应用程序的合约,但可以在其中存储和检索数据的合约任何应用程序的组织方式?
这样开发人员就不必担心组织他们的数据。
希望我正确理解了你的问题。
如果我必须创建一个合约来以 table 的形式存储各种数据,我会使用映射。
如果你有这样的table:
| ID | Product | Price | .... |
---------------------------------
| 123 | Phone | 1000 | .... |
| 124 | Laptop | 2000 | .... |
您可以为所有类型的 table 创建一个 multi-purpose 映射,其中键表示 ID,字节表示所有数据:
public mapping(uint256 => bytes);
传递一堆你不知道它是什么形式的数据作为字节数组是很常见的(你可以看看 ERC827 代币提案)。
因为映射是 public getter 是自动创建的,但是请记住 您一次只能获取一个元素(这是对映射和数组),这使得批量操作几乎不可行。
您也不能创建自定义函数来为用户执行批量操作,因为函数 不可能 return 映射或动态数组 。此外,没有简单的方法来获取映射的所有值的数组。但是,您可以手动检索固定数量的元素并将它们保存在固定长度的数组中,然后 return 这(非常昂贵)或者您可以将检索到的元素转换为字节数组并 return 这样.
此外,要检索元素,您必须知道产品 ID,如果您的用户不知道 ID,您可以在 public 数组中提供他们。
总而言之,你应该尽量在区块链上存储尽可能少的数据。 保存数据非常昂贵(在合约存储中存储一个新值需要 20000 gas)这就是为什么你几乎看不到任何满足你描述目的的合约。
希望这能回答您的问题。
您可以使用这个库来实现。 https://github.com/petrosDemetrakopoulos/ethairballoons。它在 npm 中可用,您可以使用 "npm install ethairballoons" 安装它。
它提供了对 solidity 合约的抽象级别,您唯一需要做的就是在 JSON 中定义您的模型并部署它们。它无需编写一行 Solidity 即可完成这项工作。
我读过 Rob 的 CRUD Dapp post 我现在想知道是否有人可能知道如何创建表示通用表的可靠性合约,而不是特定于应用程序的合约,但可以在其中存储和检索数据的合约任何应用程序的组织方式?
这样开发人员就不必担心组织他们的数据。
希望我正确理解了你的问题。 如果我必须创建一个合约来以 table 的形式存储各种数据,我会使用映射。
如果你有这样的table:
| ID | Product | Price | .... |
---------------------------------
| 123 | Phone | 1000 | .... |
| 124 | Laptop | 2000 | .... |
您可以为所有类型的 table 创建一个 multi-purpose 映射,其中键表示 ID,字节表示所有数据:
public mapping(uint256 => bytes);
传递一堆你不知道它是什么形式的数据作为字节数组是很常见的(你可以看看 ERC827 代币提案)。
因为映射是 public getter 是自动创建的,但是请记住 您一次只能获取一个元素(这是对映射和数组),这使得批量操作几乎不可行。
您也不能创建自定义函数来为用户执行批量操作,因为函数 不可能 return 映射或动态数组 。此外,没有简单的方法来获取映射的所有值的数组。但是,您可以手动检索固定数量的元素并将它们保存在固定长度的数组中,然后 return 这(非常昂贵)或者您可以将检索到的元素转换为字节数组并 return 这样.
此外,要检索元素,您必须知道产品 ID,如果您的用户不知道 ID,您可以在 public 数组中提供他们。
总而言之,你应该尽量在区块链上存储尽可能少的数据。 保存数据非常昂贵(在合约存储中存储一个新值需要 20000 gas)这就是为什么你几乎看不到任何满足你描述目的的合约。
希望这能回答您的问题。
您可以使用这个库来实现。 https://github.com/petrosDemetrakopoulos/ethairballoons。它在 npm 中可用,您可以使用 "npm install ethairballoons" 安装它。
它提供了对 solidity 合约的抽象级别,您唯一需要做的就是在 JSON 中定义您的模型并部署它们。它无需编写一行 Solidity 即可完成这项工作。