原创 PlatON
CryptoKitties(密码猫),是全球首款区块链游戏。密码猫是一群讨人喜欢的数字喵咪,每一只猫咪都拥有独一无二的基因组,这决定它的外观和特征。玩家可以收集和繁殖喵咪,创造出全新的喵星人并解锁珍稀属性。
基于PlatON已经全面兼容以太坊,本文主要讲如何将CryptoKitties迁移到PlatON上。
| 交互验证
前面部署的几个合约,GeneSimple是不包含权限管理的,其他三个的owner都是同一个,即前面设置的owner账号。
由于CryptoKitties核心逻辑在合约中,因此我们主要验证合约迁移是否成功就可以了。受限于时间和精力,这里选择使用控制台客户端来进行交互验证,有兴趣的朋友可以开发图形界面来完整实现这个项目。控制台客户端是用js开发的,已经开源,有兴趣的朋友可以去看看。
https://github.com/salamandaaa/crypto-kitties-client
接下来,我们将通过控制台来体验一下kitty的产生、繁殖和拍卖流程。除了owner之外,我们会用到另外两个账号user1和user2,用来模拟参与到Kitty游戏中的真实用户。
| 设置合约
这一步也可以放在部署脚本中,我们通过接口来设置,顺便对这是接口这个功能进行演示。
node index.js --set_sale_auction_address lat1x6nv5ga7l2pctt4tvlw9t4ekkge6z73gtwmfnvnode index.js --set_sire_auction_address lat164xrjncqn79ttcld27tdjq9wttcsz8t6txq72qnode index.js --set_gene_science_address lat17km9jwlan8avemk0d3jwp683y0k95y466tayq6
以上三条命令将SaleClockAuction、SiringClockAuction和GeneSimple三个合约注入到KittyCore中。 启动程序默认是paused,必须将合约全部添加之后才能启动。
node index.js --unpause
空投
这里给user1空投一个kitty
node index.js --airdrop lat1kvprlyg44kuzgl3eqzu7fs0gsgg7903angx92g
从控制台的输出可以看到KittyId,这里KittyId是1。 查询
查询KittyId为1的owner。
node index.js --owner_of 1
输出结果
lat1kvprlyg44kuzgl3eqzu7fs0gsgg7903angx9
与空投地址一样。查询user1拥有的Kitty
node index.js --kitties_of_owner lat1kvprlyg44kuzgl3eqzu7fs0gsgg7903angx92g
输出结果
[ '1' ]
user1有一个id为1的Kitty。 创建Kitty
这个操作只能由合约owner来执行,而且创造产生的Kitty总量是有限的
node index.js --create_kitty
从控制台可以看到生成了一个id为2的Kitty。 查询销售拍卖
node index.js --query_sale_auction 2
输出结果
Result { '0': 'lat1wgvxun6csmxkfsaauaduqp5mrw74ll4f94j3cy', '1': '10000000000000000', '2': '0', '3': '86400', '4': '1636504092333', seller: 'lat1wgvxun6csmxkfsaauaduqp5mrw74ll4f94j3cy', startingPrice: '10000000000000000', endingPrice: '0', duration: '86400', startedAt: '1636504092333'}
可以看到刚才创建的Kitty拍卖信息,seller是KittyCore合约的地址 Kitty竞价
默认起拍价是0.01LAT,只需要超过该价格即可竞拍成功,这里我们使用user2参与竞价
node index.js --bid_for_sale 2,1000000000000000000,lat1q8s2eekw3kc6f5tnvqs8l9lt4xdp7kxe6rlx7x
查询user2的Kitty
node index.js --kitties_of_owner lat1q8s2eekw3kc6f5tnvqs8l9lt4xdp7kxe6rlx7x
输出结果
[ '2' ]
说明已经竞拍成功。Kitty繁殖
user1将id为1的Kitty作为sire拍卖
node index.js --sire_kitty 1,100000000000000000,10000000000000000,86400,lat1kvprlyg44kuzgl3eqzu7fs0gsgg7903angx92g
查询繁殖拍卖
查询id为1的Kitty的拍卖信息
node index.js --query_sire_auction 1
输出结果
Result { '0': 'lat1kvprlyg44kuzgl3eqzu7fs0gsgg7903angx92g', '1': '100000000000000000', '2': '10000000000000000', '3': '86400', '4': '1636510968566', seller: 'lat1kvprlyg44kuzgl3eqzu7fs0gsgg7903angx92g', startingPrice: '100000000000000000', endingPrice: '10000000000000000', duration: '86400', startedAt: '1636510968566'}
繁殖竞价
user2用id为2的Kitty参与竞价
node index.js --bid_for_sire 1,2,1000000000000000000,lat1q8s2eekw3kc6f5tnvqs8l9lt4xdp7kxe6rlx7x
出生
可以由任何一个用户触发,这里我们使用user1
node index.js --give_birth 2,lat1kvprlyg44kuzgl3eqzu7fs0gsgg7903angx92g
从控制台可以看到产生了id为3的Kitty。接下来我们查询一下这只Kitty的owner
node index.js --owner_of 3
输出结果
lat1q8s2eekw3kc6f5tnvqs8l9lt4xdp7kxe6rlx7x
是user2,也就是参与竞价的那个用户。 出售
用户user2对id为3的Kitty进行拍卖
node index.js --sell_kitty 3,100000000000000000,10000000000000000,86400,lat1q8s2eekw3kc6f5tnvqs8l9lt4xdp7kxe6rlx7x
用户user1竞价
node index.js --bid_for_sale 3,1000000000000000000,lat1kvprlyg44kuzgl3eqzu7fs0gsgg7903angx92g
查询id为3的Kitty的owner
node index.js --owner_of 3
输出结果
lat1kvprlyg44kuzgl3eqzu7fs0gsgg7903angx92g
是user1,说明竞价成功,已经获得了这只Kitty。至此,我们的交互验证就完成了。合约中还有丰富的权限管理功能、合约升级功能等,有兴趣的朋友可以自己去研究。
本文转载自https://mp.weixin.qq.com/s/IRtzEsnoFNv0Pmq3D9Nt4Q