Axie Infinity 分析 (一)
介绍
Axie Infinity是一个卡片对战类型的gamefi游戏玩家可以通过PVE、PVP对战、获取SLP、购买NFT精灵、繁殖、升级等养成类游戏。
部分代码开源:
public-smart-contracts
ronin-smart-contracts
玩法分析
- 用户通过跨链将资产转移到ronin chain。需购买或其他方式得到3个NFT小精灵,进行游戏对战。
- 用私钥对邮箱地址签名进行账号绑定。
- 玩家进入游戏可以进行PVE、PVP获得SLP。用户等待锁定期后通过链上claim获取SLP。SLP的释放速率受控于项目方。
- NFT可以有性繁殖,中间消耗SLP和AXS。
- NFT交易市场可以自由买卖、拍卖NFT。
- 玩家获取的SLP和AXS可以进行Defi挖矿(Lp挖矿和单币挖矿)。
- 对于PVP Rank topN,赛季后会释放奖金激励。
涉及的合约
ronin侧
Ronin Gateway Contract
Ronin和Ethereum的跨链桥
合约地址
ronin:e35d62ebe18413d96ca2a2f7cf215bb21a406b4b
作用
Ronin和Ethereum的跨链桥
核心方法
functionId | 调用权限 | 备注 |
---|---|---|
acknowledWithdrawalOnMainchain(uint256 _withdrawalId) | onlyValidator | 需要多个validator对取款到ethereum的确认,如果阈值达到设置,则从pending中移除。 |
submitWithdrawalSignatures(uint256 _withdrawalId,bool _shouldReplace,bytes memory _sig) | onlyValidator | validator提供取款操作签名给ethereum,当ethereum收集足够的签名时可以被批准取出token |
withdrawERC20(address _token, uint256 _amount) | user | 用户调用取token到ethereum,创建withdrawEntry到pending |
depositERCTokenFor(uint256 _depositId, address _owner, address _token, uint32 _standard, uint256 _tokenNumber) | onlyValidator | validator调用,当满足阈值时可以在ronin取出token |
提款到MainChain
sequenceDiagram participant Validitor participant User participant SideChain as SideChain Gateway participant MainChain as MainChain Gateway User->>+SideChain:withdrawERC20 (transferFrom token) Validitor->>SideChain:N x acknowledWithdrawalOnMainchain Validitor->>SideChain:N x submitWithdrawalSignatures SideChain-->>-User: N x Signatures User->>+MainChain:withdrawERC20 (with Signatures) MainChain-->>-User:token transfer
存款到SideChain
sequenceDiagram participant Validitor participant User participant SideChain as SideChain Gateway participant MainChain as MainChain Gateway User->>+MainChain:depositERC20 MainChain-->>-Validitor:emit TokenDeposited Validitor->>+SideChain:N x depositERCTokenFor SideChain-->>-User:token transfer
注:涉及weth取出存入与token操作相同此处不再赘述
注:涉及batch操作与原子操作类似此处不再赘述
Ronin Registry Contract
合约地址
ronin:3a860626b0467809d50c58bef89b8ac6247fd62a
作用
维护例如GATEWAY、WETH_TOKEN、VALIDATOR、ACKNOWLEDGEMENT合约名称到地址的注册合约。
Ronin Validator Contract
合约地址
ronin:0000000000000000000000000000000000000011
作用
validator白名单合约,用于添加、删除validator和更改阈值投票。维护Ronin的POA共识。
Smooth Love Potion Contract
合约地址
ronin:a8754b9fa15fc18bb59458815510e40a12cd2014
作用
游戏内的ERC20:SLP,用户进行游戏后服务器发放给玩家的“经验”,用于其他玩法消耗。
核心方法
除常规IERC20外,多了一个checkpoint方法用于“claim”。
function | 调用权限 | 备注 |
---|---|---|
checkpoint(address _owner,uint256 _amount,uint256 _createdAt,bytes _signature) | user | 用户取出slp时需要服务器给出相对应的签名 |
Axie Infinity Shard Contract
合约地址
ronin:97a9107c1793bc407d6f527b77e7fff4d812bece
作用
ERC20合约:axs
Axie Contract
合约地址
ronin:32950db2a7164ae833121501c797d79e7b79d74c
作用
ERC721合约:axie。除了正常的IERC721以外,里面包含了一些管理员操作例如:growAxieggToAdult、batchMintAxieggs、mintAxie、和一些改变genes的设置。此部分代码未开源。
Katana Router Contract
合约地址
ronin:7d0556d55ca1a92708681e2e231733ebd922597d
Lp对
slp-weth lp ronin:306a28279d04a47468ed83d55088d0dcd1369294
axs-weth lp ronin:c6344bc1604fcab1a5aad712d766796e2b7a70b9
usdc-weth lp ronin:a7964991f339668107e2b6a6f6b8e8b74aa9d017
AXS Staking Pool Contract
合约地址
ronin:05b0bb3c1c320b280501b86706c3551995bc8571
作用
质押axs挖矿(单币挖矿)
核心方法
function | 备注 |
---|---|
stake(uint256) | 质押axs |
restakeRewards() | 复投 |
claimPendingRewards() | 获取收益 |
unstake(uint256) | 取出质押 |
Staking Pool Contracts
合约地址
SLP-WETH LP Staking Pool ronin:d4640c26c1a31cd632d8ae1a96fe5ac135d1eb52
AXS-WETH LP Staking Pool ronin:487671acdea3745b6dac3ae8d1757b44a04bfe8a
作用
质押LP挖矿。
Marketplace Contract
NFT交易二级市场
合约地址
ronin:213073989821f738a7ba3520c3d31a1f9ad31bbd
核心方法
function | 备注 |
---|---|
settleAuction(address,address,uint256,uint256,uint256) | 买NFT |
createAuction(uint8[],address[],uint256[],uint256[],uint256[],address[],uint256[]) | 创建卖单 |
cancelAuction(uint256) | 撤销卖单 |
revalidateRelatedAuctions(uint256) | 未知,似乎是管理员的操作 |
sequenceDiagram participant Consumer participant Seller participant Marketplace Seller->>+Marketplace:createAuction 创建卖单 alt Seller->>Marketplace:cancelAuction 撤单 else Consumer->>Marketplace:settleAuction 购买 Marketplace-->>-Consumer:transfer NFT end
Ethereum侧
Ethereum侧包含gateway、ERC20、ERC721合约与ronin侧大致相同。不同点在于Ethereum上的gateway使用了EIP712方式取款减少交互节约gas。