在研究以太坊智能合约的过程中,出现了如何在合约内存储大型结构(数组或映射)的问题。有合同
pragma solidity ^ 0.8.6;
contract UselessWorker {
uint32 public successfullyExecutedIterations = 0;
mapping (uint32 => uint32 [6]) items;
event ItemAdded (uint32 result);
function doWork (int _iterations) public {
for (int32 i = 0; i <_iterations; i ++) {
items [successfullyExecutedIterations] = [uint32 (block.timestamp), successfullyExecutedIterations, 10, 10, 10, 10];
successfullyExecutedIterations ++;
}
emit ItemAdded (successfullyExecutedIterations);
}
}
Run Code Online (Sandbox Code Playgroud)
doWork方法用数字数组填充地图 项,由外部脚本调用。同时,项目中出现的记录越多,消耗的磁盘空间就越快(对于 1,000,000 条,区块链大小约为 350 MB,对于 2,000,000 条,约为 1.1 GB,对于 19,000,000 条,约为 22 GB。这是 .ethereum/ …