区块链如何实现溯源?用日志吧! / 学习智能合约#6 by lemooljiang

View this thread on steempeak.com
· @lemooljiang · (edited)
$1.03
区块链如何实现溯源?用日志吧! / 学习智能合约#6
用区块链实现溯源的提法听过不少,文章也看过不少,现在就来实现一把,看看是如何实现的。

在我的上篇文章[《以太坊中比mapping更便宜的存储方案:事件日志?》](https://steemjiang.com/trend/@lemooljiang/dmqyf) 有分析过,**如果是用于存储目的,那么用mapping并不是最佳的方案,用事件日志才是!** 然后,再从区块中读取日志,提取有用的信息。

![etherjiang.jpg](https://steemjiang.com:8081/ipfs/Qmdow5jzu9gKqmD9duMFso4XqkSwUedhUYeJhoZeL971wU)

https://etherjiang.github.io

上面的etherjiang是我最近设计的结果,把这些技能都完成了一遍。

## web3实现遍历日志
```js
myContract.getPastEvents('MyEvent', {
    filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'},
    fromBlock: 0,
    toBlock: 'latest'
}, function(error, events){ console.log(events); })

eg:
let res = await instance.getPastEvents('SetContent', {fromBlock: 0, toBlock: 'latest'})
let log = res[0].returnValues[0]
```

**`getPastEvents` 这个方法就可以实现日志遍历了**,速度还不错。得到的是一个日志数组。帖一个看看:
```
0:
address: "0x98C59036C71Ef10684b3A4a3ffA85b280fe7b402"
args: Result {0: "QmVRPzXoLsXa7PccffrCk9x2z81MnfYtKfM1iVaijfzhAG", __length__: 1, t: "QmVRPzXoLsXa7PccffrCk9x2z81MnfYtKfM1iVaijfzhAG"}
blockHash: "0xa5016d26ee660a5e9b87893aa937d1c3f0c6cd6a6dc8585b400f1760ad751f2c"
blockNumber: 7840738
event: "SetContent"
id: "log_ce314885"
logIndex: 0
raw: {data: "0x000000000000000000000000000000000000000000000000…96a667a684147000000000000000000000000000000000000", topics: Array(1)}
removed: false
returnValues: Result {0: "QmVRPzXoLsXa7PccffrCk9x2z81MnfYtKfM1iVaijfzhAG", t: "QmVRPzXoLsXa7PccffrCk9x2z81MnfYtKfM1iVaijfzhAG"}
signature: "0x8372f4d5703f980a74984746e8a40c81a527b0806704c2d078f255a0dc26fe3e"
transactionHash: "0xe614c0216af7ff16ec7905153b9748ece9c5fb86f4eeeb8b390c6a2dbcfd98cb"
transactionIndex: 0
__proto__: Object
```

可以看出,此日志包含了所有的数据,有用的数据在 returnValues 中。

所以,用事件日志的方法可以轻松地实现一个数据溯源的应用,是不是还不错呢!

👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
👎  
properties (23)
post_id85,931,510
authorlemooljiang
permlinkwytuq
categoryhive-180932
json_metadata{"tags":["smartcontract","cn","eth","web3","truffle","vuejs","solidity","logs"],"dapp":"steemjiang","format":"markdown"}
created2020-05-08 03:47:54
last_update2020-05-08 09:27:06
depth0
children0
net_rshares3,925,591,363,949
last_payout2020-05-15 03:47:54
cashout_time1969-12-31 23:59:59
total_payout_value0.568 SBD
curator_payout_value0.457 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length1,699
author_reputation263,700,595,848,611
root_title"区块链如何实现溯源?用日志吧! / 学习智能合约#6"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (53)