1. 前言
最近越来越多的dapp应用出现在了我们的视野里,我们可以看到其中大部分都是游戏应用,在这些游戏中,除了很火的fomo3d以及由它衍生出来的同类游戏,剩下的基本都是养成类游戏和简单的博弈类游戏(例如摇股子、锤子剪刀布等)。
当我尝试着也上链了一个类似的游戏之后,不由得会考虑几个问题:
1 如何吸引更多的用户来进入游戏。
2 如何保持住游戏社区的用户活跃度。
因为很多游戏在赚上一波热度后,活跃度就开始下降,并且一个游戏的合约上链之后大都是开源且不能修改的,当用户失去新鲜感后,游戏方不得不马不停蹄地上线更多的游戏来维持用户数。那如何优化这类问题呢?
我们注意到基本上所有的游戏网站都是通过浏览器钱包metamask用ETH来进行交易,那我们是不是可以将已经上链的各种代币通过合约的操作参与到游戏中来,然后我们通过宣传“自身游戏能支持大部分代币”来推广自己的游戏。这样不仅能够吸引各类币种持有者进入我们的游戏社区,也能够推广自己社区的代币,并且保持住用户常驻在社区中。这样就可以做到一个类似交易所的游戏社区了!
2. 如何多样化游戏币种,使用代币参与游戏
我们知道目前各类交易所中基于以太坊的代币大部分都是ERC20协议的代币,ERC20标准里有一个重要的方法:
function transfer(address _to, uint256 _value) returns (bool success)
按道理我们可以直接调用transfer方法把代币转给游戏的合约,但是问题来了:游戏合约不是个人的钱包,虽然说是智能合约,但它自己并不知道有人转了代币给它,更不知道是谁转了多少币给到自己,因此我们的游戏到此还是不能支持其他代币的流通。
(注:ERC20协议的升级版ERC223 通过识别合约地址和新增处理接口已经解决了这种问题,但是已经上链的ERC20代币并不能使用这种新的特性,因此也不做过多的解析。)
我们往下继续看ERC20的标准接口,下面几个方法就能满足我们的需求了。
因此可以得到如下的交易流程:
3. 测试
接下来就是付诸实践了。(如何部署合约,如何使用solidity语法 也不再赘述)。
1 发布简单的游戏合约(具有购买道具和分红的机制)。
https://github.com/cowkeys/erc20_purchase_game/blob/master/contracts/game.sol
2 发布ERC20代币合约: symbol(seele)。
https://github.com/cowkeys/erc20_purchase_game/blob/master/contracts/token.sol
3 架设测试站点,使用web3js来调用metamask进行合约调用。
https://github.com/cowkeys/erc20_purchase_game
如图所示,经过所有的测试,基本能够实现我们用代币参与各类游戏的想法。
4. 缺陷
通过上面的处理,游戏中会多一步授权代币的步骤,这可能会引起部分用户的不信任,如何更好的处理此类交互,还有待进一步探讨和优化。
也可以用最新的ERC233协议,更好地实现需求。后续再做进一步的讨论。敬请期待!
网友评论