用区块链实现溯源的提法听过不少,文章也看过不少,现在就来实现一把,看看是如何实现的。 在我的上篇文章[《以太坊中比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 中。 所以,用事件日志的方法可以轻松地实现一个数据溯源的应用,是不是还不错呢!
post_id | 85,931,510 |
---|---|
author | lemooljiang |
permlink | wytuq |
category | hive-180932 |
json_metadata | {"tags":["smartcontract","cn","eth","web3","truffle","vuejs","solidity","logs"],"dapp":"steemjiang","format":"markdown"} |
created | 2020-05-08 03:47:54 |
last_update | 2020-05-08 09:27:06 |
depth | 0 |
children | 0 |
net_rshares | 3,925,591,363,949 |
last_payout | 2020-05-15 03:47:54 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.568 SBD |
curator_payout_value | 0.457 SBD |
pending_payout_value | 0.000 SBD |
promoted | 0.000 SBD |
body_length | 1,699 |
author_reputation | 263,700,595,848,611 |
root_title | "区块链如何实现溯源?用日志吧! / 学习智能合约#6" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 SBD |
percent_steem_dollars | 10,000 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
lemooljiang | 0 | 540,300,638,944 | 100% | ||
ace108 | 0 | 276,009,306,724 | 25% | ||
skysunny | 0 | 106,557,781 | 100% | ||
rivalhw | 0 | 442,583,118,448 | 100% | ||
dapeng | 0 | 33,238,149,089 | 100% | ||
timool | 0 | 998,256,642 | 100% | ||
lucknie | 0 | 15,796,385,035 | 100% | ||
dumping | 0 | 1,607,210,241 | 100% | ||
laodr | 0 | 2,611,150,367 | 100% | ||
htliao | 0 | 38,856,692,066 | 35% | ||
ew-and-patterns | 0 | 32,473,485,377 | 4% | ||
catwomanteresa | 0 | 63,370,835,877 | 50% | ||
liangfengyouren | 0 | 2,385,091,093 | 50% | ||
cn-reader | 0 | 6,256,370,049 | 50% | ||
tvb | 0 | 29,284,574,740 | 50% | ||
skenan | 0 | 8,492,225,131 | 50% | ||
kimzwarch | 0 | 7,333,716,337 | 4% | ||
yellowbird | 0 | 7,614,001,766 | 100% | ||
davidke20 | 0 | 4,804,505,902 | 4% | ||
dancingapple | 0 | 11,748,969,527 | 50% | ||
xiaoshancun | 0 | 50,120,794,819 | 100% | ||
blc | 0 | 3,997,923,114 | 100% | ||
hqy | 0 | 55,764,590,806 | 100% | ||
metten | 0 | 8,450,031,789 | 100% | ||
zmm | 0 | 680,909,113 | 100% | ||
cn-book | 0 | 866,914,877 | 100% | ||
cn-movie | 0 | 91,628,227 | 100% | ||
vivia | 0 | 2,706,842,825 | 100% | ||
coindzs | 0 | 683,481,256 | 100% | ||
xiaoli | 0 | 249,125,507 | 100% | ||
payroll | 0 | 308,896,865,741 | 2% | ||
archisteem | 0 | 4,710,116,765 | 7.5% | ||
moneybaby | 0 | 831,741,256 | 2.5% | ||
julian2013 | 0 | 95,540,405,619 | 50% | ||
sasaadrian | 0 | 30,161,852,499 | 20% | ||
new-steemit | 0 | 1,085,489,276 | 2% | ||
freepress | 0 | 57,686,296,423 | 25% | ||
arhitekto | 0 | 547,167,306 | 50% | ||
mia-cc | 0 | 5,209,665,921 | 100% | ||
kgswallet | 0 | 541,004,673 | 20% | ||
steem-drivers | 0 | 5,953,971,032 | 44% | ||
viktorv | 0 | 575,347,423 | 51% | ||
stevoperon | 0 | 965,729,021,631 | 40% | ||
cruznat | 0 | 0 | -10% | ||
friendlystranger | 0 | 389,768,661,134 | 16% | ||
starnote | 0 | 176,510,053 | 100% | ||
razer7 | 0 | 408,515,803,540 | 28% | ||
moochain.net | 0 | 177,960,188 | 100% | ||
lemool | 0 | 0 | 100% | ||
liebin | 0 | 0 | 100% | ||
dinggle | 0 | 0 | 100% | ||
moocer | 0 | 0 | 100% | ||
imooc | 0 | 0 | 100% |