如何学习区块链、智能合约等(学习区块链、智能合约等技术的方法是什么)?

142
okx

本仓库旨在为中文社区提供分析市场上智能合约应用的架构与实现的内容。欢迎关注本开源知识项目!

事件概要

2022年2月4日,一位中国深圳12岁小学生黄振(网传名)在B站和Twitter上发布了他的Solidity教学视频,同时公布了他的教学项目RandomDAO。由于一些大V的转推,这个项目引起了币民们的注意。至2022年2月8日,已经有超过47000个地址领取了他发布的空投代币RND,并且曾经排名ETH消耗gas费排行榜的第二。

事件分析

由于这是一个偏向技术的社群,因此我主要关注技术方面的特点。黄振同学(暂称)发布的Random合约只是一个普通的ERC20合约加上一个空投逻辑,本来并不值得开篇论述。然而,一个与之相关的突变在区块链网络上发生了:https://github.com/33357/airdrop_multi_claim 这个合约实现了对Random合约的批量空投,并通过此获得了大量收益:https://etherscan.io/tx/0xfc1d5688c18244764fe3678020b4821a8c215c7a7f42685814b3cf49557967ff(保守估计超过30个ETH)。这非常值得我们好好研究它的实现逻辑。

合约分析

操作原理

我们看到https://etherscan.io/address/0x1c7E83f8C581a967940DBfa7984744646AE46b29#code上的获取空投函数是这样写的:

function claim() external{ if((uint32(block.timestamp)-release_time) < waiting_time) return; require(!claimed[msg.sender] && balanceOf(msg.sender) > 0); claimed[msg.sender] = true; safeTransferFrom(owner(), msg.sender, amount); }

它的主要思路如下:

1. 首先检查领取的时间是否超过了需要等待的时间(waiting_time),如果没有则直接返回。

2. 然后检查这个地址是否已经领取过空投,如果已经领取过则直接返回。

3. 检查这个地址是否拥有RND代币,如果没有则直接返回。

4. 将claimed[msg.sender]标记为True,表示这个地址已经领取过空投。

5. 调用safeTransferFrom函数,从owner()账户向msg.sender账户转移代币。

该函数实现了对于随机空投的控制。可以看出,该合约遵循了ERC20标准,并且使用了一定的防作弊措施。

然而,我们发现这个突变的核心在于https://github.com/33357/airdrop_multi_claim这个合约。这个合约使用了包括合约随机数生成、合约内部加密哈希、交易数据打包等技术,在不影响合约安全的情况下,实现了批量获取空投。

结论

这个事件给了我们一个很好的案例,展示了智能合约技术的能力和不断创新的可能性。我们需要更多的技术思考和探索,以应对未来更多的挑战与机遇。

欧易

欧易(OKX)

用戶喜愛的交易所

币安

币安(Binance)

已有账号登陆后会弹出下载

进群交流|欧易官网