blockchain-ex5
实验五:认识智能合约&线上 IDE 实现 Solidity 合约
实验概述
本实验参考自以太坊中的以太猫游戏和 Loom Network 团队的智能合约教学案例,进行 Solidity 智能合约入门与 remix 在线 IDE 使用练习,通过构建一个“宠物游戏”来学习智能合约的编写,在实验中穿插 Solidity 基础知识。
实验 5-1:生成宠物,并存入区块链上的宠物数据库
实现效果:
-
在 JavaScript VM 环境下,部署 AnimalIncubators 合约。
-
创建三个分别叫Drogon、Rheagal、Viserion 的宠物,并展示其DNA。
实验 5-2:Solidity 进阶——宠物成长系统
实现效果:
-
部署 AnimalFeeding 合约
-
以三个用户身份添加 Drogon、Rheagal、Viserion 的宠物
-
Drogon用户:0xca35b7d915458ef540ade6068dfe2f44e8fa733c
-
Rheagal用户:0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
-
Viserion用户:0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db
-
-
同一账户只可调用一次 createRandomAnimal
-
再次使用Viserion用户(0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db)调用createRandomAnimal,调用如下所示失败。
-
-
让 Drogon 宠物进食成长一次,展示新宠物的主人与 Drogon 相同
-
切换回Drogon用户(0xca35b7d915458ef540ade6068dfe2f44e8fa733c)
-
调用feedOnFood(0,2023),查看新宠物的主人:
-
拓展实验 5-3:Solidity 高阶理论
实现效果:
-
部署 AnimalHelper 合约
-
展示宠物的冷却时间:
-
根据要求,创建宠物后可进食一次,每两次进食之间必须等待 1min
-
创建宠物:
-
进食第一次,成功,冷却时间重置
-
进食第二次,失败,冷却时间未重置
-
-
-
成功实现 getAnimalsByOwner 函数
-
喂食后,Drogon用户所拥有所有宠物ID是0和1。
-
拓展实验 5-4:solidity 高阶篇
实现效果:
-
部署 AnimalAttack 合约
-
成功升级,并改名
-
首先两个用户分别创建两个宠物
-
Drogon用户(0xca35b7d915458ef540ade6068dfe2f44e8fa733c)(owner):
-
Rhealgal用户(0x14723a09acff6d2a60dcdf7aa4aff308fddc160c):
-
-
Rhealgal用户通过氪金升级自己的宠物至level 2
-
满足等级要求,Rhealgal用户将宠物名改为“Rhealgal_changed”
-
-
实现一次提现操作:
-
由于Rhealgal用户有氪金行为,Drogon用户(owner)可以从合约powerUp中提现
-
记录当前Drogon用户余额:
-
调用withdraw合约提现,提现成功:
-
提现后Drogon用户余额,可以看到余额增加了0.001 ether:
-
-
-
实现战斗升级系统
-
对于先手胜率75%:合约中生成0-99的随机数,检测随机数,若为则失败,否则成功。
-
Drogon用户(owner)选择宠物Drogon对Rhealgal用户的宠物Rhealgal进行攻击
-
对战中,发起方Drogon胜利,winCount加1,level升为2,冷却时间重置
-
同时,Rhealgal失败,lossCount加1,level未变,冷却时间重置
-
多次攻击后,Drogon胜利共6次,失败1次:可以看到level为7,证明了失败时什么都没发生,只进行了冷却时间重置
-
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 lzhのBLOG!