技术云图 | CryptoKitties迁移到PlatON教程(三)

原创 PlatON 

技术云图 | CryptoKitties迁移到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

(0)
PlatONWorld-M6的头像PlatONWorld-M6管理员
上一篇 4 1 月, 2022 12:57
下一篇 5 1 月, 2022 10:01

相关推荐

发表回复

登录后才能评论