以太坊中比mapping更便宜的存储方案:事件日志?
在我的前一篇文章中《以太坊 + IPFS 数据存储可行方案》 提到以太坊中以mapping存储的方式,为了节约gas,可以先将内容存在IPFS上,再存入mapping中。但今天看到一篇文章《智能合约事件应该这么用!》 有提到:mapping存储并不是最优方案,合约事件才是!
pragma solidity ^0.5.10;
contract DocumentRegistry {
event Registered(uint256 hash, address sender);
function register(uint256 hash) public {
emit Registered(hash, msg.sender);
}
}
看了一下案例,大体明白它的意思。就是说:任何触发的事件其实已经存入区块链了! 如果你只是想把数据存入区块链中,用事件的方式就可以解决,而无需用mapping存储!这样可以更节约gas! 具体对比数据:日志每个字节花费8个Gas,而合约存储(mapping)是每32个字节20,000个Gas!
嗯,但是又有新的问题:如何遍历读取事件日志呢?因为在合约中是没有办法读取到的,只能遍历区块去获取?what,这又是什么鬼?好吧,文章只是讲了前半段,至于如何读取区块是什么也没谈啊。我只能留着这个大问号去google!
问题解决留待下回分解!