0%

Crypto-rarity自动冒险升级脚本

Pre:

rarity有一些web界面,可供玩家去冒险、升级。但是为了方便,能够自动去冒险、升级,还是自己简单写个脚本try一下。

顺便熟悉一下solidtyweb3js


Rarity:

简介:

Yearn Finance 创始人 Andre Cronje 发文称受到 Loot 启发推出游戏 Rarity,在该游戏中玩家可创建召唤师,Rarity 总量没有限制,除 Gas 外无需其他费用,召唤师每天可以通过冒险赚取 xp 经验值,一旦获得了一定量的 xp 就可以升级,获得特技和法术。

游戏共有 11 个角色,分别是野人、吟游诗人、牧师、德鲁伊、斗士、僧侣、圣骑士、游侠、巡逻兵、巫师、法师。


合约源码:

rarity solidity源码

简单通读一下源码,发现solidity写的代码还是挺简单的,并没想象中的难,可能跟没有那么多操作要放在链上有关。

readContract:

https://ftmscan.com/address/0xce761d788df608bd21bdd59d6f4b54b2e27f25bb#readContract

挑几个比较重要的函数说明下

adventures_log

  • 查询下一次冒险的时间

  • input:角色id

  • output:下一次冒险的时间戳

summoner

  • 查询角色信息

  • input:角色id

  • output:角色的经验、下一次冒险的时间戳、职业类别、等级

25641732-8ED4-4D10-81F4-B5E90094D83D

xp_required

  • 查询下一级所需经验

  • input:等级

  • output:下一级所需经验

writeContract:

https://ftmscan.com/address/0xce761d788df608bd21bdd59d6f4b54b2e27f25bb#writeContract

adventure

  • 让角色去冒险,每天只能冒险一次,每次获得250xp

  • input:角色id

level_up

  • 角色升级

  • input:角色id


脚本:

流程图:

自动冒险:

DF22C901-3AC7-48EE-8D73-592181380B59

  • 查出自己地址有哪些角色id

  • 调用合约的查询函数summoner,知道下一次冒险时间

  • 判断一下有没到冒险时间

  • 满足条件的话,调用合约的adventure,让角色去冒险

自动升级:

84454A4B-F8F1-444D-AB4A-79B47F941381

  • 调用合约函数summoner,知道当前经验值

  • 调用合约函数xp_required,知道下次升级所需经验

  • 满足条件的话,调用合约的level_up,让角色去升级


一些问题:

gas:

自己的脚本和https://rarityextended.com/执行的gas费有些差异,后续有空要看一下怎么样省一下gas fee,虽然也很少钱。

2749692E-F7D8-49E0-A22D-BD8AE0CC1040

交易失败:

脚本定时跑起来后,常有几笔失败的交易,可能跟nonce设置有关系。

20210927120445


总结:

脚本定时跑起来后,就不用去web页面上一个个点去冒险和升级,方便了不少,写之前觉得挺麻烦的,有点无从下手,写完才发现很简单。hhh

后续加点、玩副本这些,有空再研究补充下吧~


Refs: