文章提供了学习Solidity后的下一步实践建议,列出了10个从易到难的项目,帮助开发者通过实践提升技能,并强调了编写单元测试和关注gas成本的重要性。
现在你已经完成了我们的 Solidity 教程,接下来该做什么?
你现在掌握了足够的知识,可以构建以下项目中的任何一个。知识来自于学习,但技能来自于实践。如果你想成为一名成功的 Solidity 开发者,你需要同时具备知识和技能!以下是一些建议,你可以构建这些项目以应用你到目前为止学到的内容。
你已拥有所有必要的知识,如果你认真想成为一名 Solidity 工程师,就动手实践吧!
这些项目的难易程度大致从简单到困难排列,但你具备构建这些项目所需的所有基础知识。
构建一个经典的 NFT,只能通过支付特定的 ERC20 代币进行铸造。
一个支付者将一定数量的代币存入合约,但接收者只能在 n 天内提取 1/n 的代币。
两个人希望以无信任的方式交换他们的 NFT。用户在合约上创建一个交换,这个交换是一个地址对和 ID,其中地址是 NFT 的智能合约地址,ID 是 NFT 的 tokenId。只有当 ID 与地址和 ID 匹配时,一个人才能存入 NFT。对方只能在他们的 NFT 匹配交换的地址和 ID 时才可以存入。
一旦双方都存入 NFT,任何一方都可以调用交换。
需要考虑的一些边角案例:
你的合约应具有 createFundraiser()
函数,目标和截止日期作为参数。捐赠者可以向给定的 fundraiserId donate()
。如果在截止日期之前达到目标,调用 createFundraiser()
的钱包可以 withdraw()
与该活动相关的所有资金。否则,如果截止日期过了但未达到目标,捐赠者可以撤回他们的捐款。构建一个支持以太币的合约和一个支持 ERC20 代币的合约。
一些需要考虑的边角案例:
卖方调用 deposit()
将 NFT 存入合约,并指定一个截止日期和一个保留价。买家可以在截止日期之前对此 NFT 出价,最高出价胜出。如果未达到保留价,则 NFT 不被出售。多个拍卖可以同时进行。未获胜的买家可以撤回他们的出价。获胜者无法撤回他们的出价,必须完成交易购买 NFT。卖方也可以通过调用 sellerEndAuction()
来结束拍卖,该调用只有在截止后且保留价已达到的情况下才有效。获胜者将获得 NFT,卖方将收到以太币。
卖方可以通过指定价格和过期时间来 sell()
他们的 NFT。卖方不需要将 NFT 存入合约,而是授权合约从他们那里提取。如果买方在过期之前按照指定价格支付,则 NFT 从卖方转移到买方,买方的以太币转移给卖方。
卖方可以随时 cancel()
销售。边角案例:
一个合约拥有 1,000,000 个云币。任何人在 beginDate 开始向合约质押云币并持有 7 天,将根据合约到期时的总质押份额的比例获得奖励。例如,假设 Alice 质押了 5,000 个云币,但到期时总质押量为 25,000 个云币。Alice 将有权获得 200,000 的奖励,因为她占所有用户的 20%。
警告:很容易错误计算奖励,导致恶意行为者可以利用系统。请仔细考虑边角案例!
任何用户都可以调用 createLottery
创建彩票,购买彩票的窗口为接下来的 24 小时。一旦 24 小时结束,将有 1 小时的延迟,然后彩票结束。在以太坊上安全地生成 随机数 是一项棘手的任务,但为此,依靠未来的区块哈希(玩家无法预测),对于这个项目来说,已经足够了。在调用 createLottery
之后,人们可以为特定的 lotteryId 购买票。彩票必须包含停止购票的截止日期,以及之后的时间,在此期间未来的区块哈希将决定获胜者。获胜者必须在 256 个区块内领取奖金(区块哈希函数的最大回溯),否则,所有人可以取回他们的票。
使用 ERC1155 代币模拟一副可以取任何值(从 1 到 25,包括 1 和 25)的扑克牌。每个玩家从随机排列的数字 1-25 开始,形成一个 5×5 的二维数组。每隔 n 个区块,玩家可以铸造一张新卡,卡上有一个随机数字。谁先得到 5 个排成一行(宾果)就获胜。
与普通的二十一点不同,隐藏庄家的牌极为困难,因此每个人都应对自己的手牌完全公开。真正的二十一点通常使用多副牌,使计牌变得不那么有效,因此你可以让随机数生成器生成一个 [2-10] 之间的随机数,但请记住十、杰克、女王和国王都算作 10,因此要确保概率成比例。同样,A 可以是 1 也可以是 11。庄家必须继续抽牌,直到总点数至少为 21。
由于智能合约无法自我推进状态,任何人都可以调用 dealerNextMove()
来推动游戏进行,如果轮到庄家。 在真正的应用中,你需要一个链外计算机来不断操作庄家,但现在我们不必担心这个。
你应该强制玩家在 10 个区块内做出按行动,以避免任何人暂停游戏。
我们将 学习 Solidity 资源与 Solidity 练习 配套,是因为仅通过学习来编程是一个陷阱。编码更为重要!现在,你可以做一些比解决小型练习更具挑战性的事情。
真的,停止阅读教程,开始创建项目!如果你遇到困难,请在我们的 Discord 社区寻求帮助,搜索谷歌,或向现代 AI 聊天机器人求助。
我们已经教过你使用 Foundry 框架编写 Solidity 单元测试。部署未经测试的代码来处理他人的资金是完全不可接受的。尽管这些只是教育合约,但你应该在旅程的早期培养编写测试的习惯。
尝试从攻击者的角度进行思考。如果攻击者想要恶搞系统,他们会尝试什么样的奇怪输入?
最后,请注意 Foundry 报告的Gas成本。你可以通过使用我们的 以太坊气体价格计算器 将气体单位转换为美元成本,并通过阅读我们的文章了解如何 将 ETH 气体转换为美元 来了解该计算器是如何工作的。
然后考虑学习 Solidity 气体优化技巧 并将其应用于你的项目。
如果你真的想多走一步,构建一个简单的前端应用程序来连接这些合约。我们建议使用 wagmi js 库。
完成了吗?我们建议通过阅读我们的 气体优化书籍 来学习如何优化合约,然后尝试优化你创建的合约!
如果你完成了以上所有内容,并希望与社区一起进一步深入学习,可以考虑参加我们的高级 Solidity 启动营。
最初发布于 2023 年 9 月 10 日
- 原文链接: rareskills.io/post/begin...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!