前言
- 额,正确使用的方式不就是转账吗?直接调用不就可以了?
- 是的,就是转账,但是
- 我要在账号中的合约中执行转账(这个之前的文章已经实现了,不是本篇文章的重点)
- 同时执行一个greet(std::string msg) action呢?
- 当其他任何玩家转账给我,我要知道转账的数据,同时给我捎句话呢
- 那就使用一个action转账,一个action greet(msg)!!!
- 目的是到了呢,但是这个是两个action呢?那就是有时间差的,貌似不符合我的需求哦,那该怎么办呢?
- 好的,如果你看过之前的文章,其实你已经明白怎么做了,自定义dispatcher这个宏
- 是的,完全正确,那么本篇文章就是接着之前的文章而来,把数据记录起来
游戏设计
- 本次的合约来玩一个游戏叫做:paymsg
- 游戏规则:
- 合约的具体设计请看源码就可以了
- 拦截transfer方法,获取转账信息
- 记住反序列化的时候,需要建一个struct来承载数据的信息
- 设计一个对外的action用于 用户免费更新储存的信息
- 此合约只是demo,仅供参考
1 | [[eosio::action]] |
编译,部署,验证
- 编译,买RAM,部署
- 使用shaokunpay11部署合约
- 使用eostoday1235进行添加数据
使用eostoday1235进行两次的upmsg进行修改数据
填坑
- 之前有一个困惑的问题是关于scatter和eosjs2无法一起使用,官方也没有例子,而现在找到了github
- 以下我只是搬运工 ^.^
- scatter + eosjs2
- npm i -S scatterjs-core scatterjs-plugin-eosjs2 eosjs@20.0.0-beta3
1 | import ScatterJS from 'scatterjs-core'; |
- scatter + eosjs1
- npm i -S scatterjs-core scatterjs-plugin-eosjs eosjs@16.0.9
1 | import ScatterJS from 'scatterjs-core'; |
- scatter + web3
- npm i -S scatterjs-core scatterjs-plugin-web3 web3
1 | import ScatterJS from 'scatterjs-core'; |
- scatter + tronweb
- npm i -S scatterjs-core scatterjs-plugin-tron tronweb
1 | import ScatterJS from 'scatterjs-core'; |
总结
- 这样就实现了以太坊payable关键字的功能了
- paymsg这个小game的逻辑,其实也和市面上大多数的菠菜类游戏的实现方式类似,只是其中的规则少了点
- 至此,基于eos开发dapp的所有流程基本上是讲完了
- 当然其中有很多点我也没有讲到,主要是我在学习的过程中,其他点没有遇到太大的问题.比如说multi_index的操作
- 关于感想,就是要有耐心去学习这个,因为目前也没有其他的更好的资料,我比较推荐官方的教程eos smart contract
- 还有一点,如果你使用eosiocpp编译wasm,abi文件,写合约的时候,有时候需要参考源码eosio,如果使用eosio.cdt编译的合约,eosio.cdt eoslib要去这里找(ps:这个地方受过很多伤…)
- 最后,祝大家学的开心
关于我
区块链技术痴迷的程序猿一枚,如果你喜欢我的文章,可以加上微信共同学习,共同进步。