如何追踪以太坊状态变量的历史?

moz*_*nge 5 blockchain ethereum

区块链备受评价的功能之一是存储在区块链上的数据的可追溯性,我认为记录的价格是不可变的。

我试图找出如何在以太坊区块链上实际跟踪状态变化。为了解释我的问题,以下面的智能合约为例

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个合约中,重点是storedData状态变量。让我们假设值在无数次加班中发生了多次变化。那么如何追溯这一历史记录storedData以查看在不同时间点分配给它的所有值。我正在寻找一种实用的方法来做到这一点。

Die*_*o B 4

您有两种方法可以跟踪状态变量随时间的变化情况:

1) 合约的开发使得当所述变量被修改时,其先前的状态将被添加到包含所有先前状态的数组中。前任。检查此合约事件: https://etherscan.io/address/0x3958b4ec427f8fa24eb60f42821760e88d485f7f#events

在此输入图像描述

2)合约已经开发完毕,因此当状态变量被修改时,它会触发一个记录所述交易的事件。看看 consensys 中有关事件的这篇文章:

https://media.consensys.net/technical-introduction-to-events-and-logs-in-ethereum-a074d65dd61e

本文介绍了事件的三个​​用例:

首先,使用事件简单地从使用 sendTransaction() 调用的合约函数获取返回值。其次,使用事件作为数据的异步触发器,可以通知观察者(例如 UI)。第三,使用事件将日志写入区块链作为一种更便宜的存储形式。