DAPP-ERC20代币授权机制实践

96
cowkeys
2018.08.21 21:15* 字数 993

如何将ERC20代币应用到dapp应用

1 前言

最近越来越多的dapp应用出现在了我们的视野里,我们可以看到其中大部分都是游戏应用,在这些游戏中,除了很火的fomo3d以及由它衍生出来的同类游戏,剩下的基本都是养成类游戏和简单的博弈类游戏(例如摇股子、锤子剪刀布等)。

当我尝试着也上链了一个类似的游戏上链之后,不由得考虑到了几个问题:

1 如何吸引更多的用户来进入游戏。
2 吸引用户进来之后如何保持住游戏社区的用户活跃度。

因为很多游戏在赚上一波热度后,活跃度就开始下降,并且一个游戏的合约上链之后大都是开源且不能修改的,当用户失去新鲜感后,游戏方不得不马不停蹄地上线更多的游戏来维持用户数。

我们注意到基本上所有的游戏网站都是用ETH来进行交易(通过浏览器钱包metamask)。
那我们是不是可以将已经上链的各种代币通过合约的操作参与到游戏中来,然后我们通过宣传“自身游戏能支持大部分代币”来推广自己的游戏。这样不仅能够吸收各类币种持有者进入我们的游戏社区,也能够推广己方的代币,保持住用户常驻自己社区的各类游戏中。这样就可以把我们自己的社区做成一个类似交易所的游戏社区了!

2 使用代币参与游戏

那么,如何才能实现我们的想法。我们知道目前各类交易所中基于以太坊的代币大部分都是ERC20协议的代币,ERC20标准里有一个重要的方法:

function transfer(address _to, uint256 _value) returns (bool success)

按道理我们可以直接调用transfer方法把代币转给游戏的合约,但是问题来了:
游戏合约不是个人的钱包,虽然说是智能合约,但它自己并不知道有人transfer代币给了它,更不知道是谁转了多少币给到自己,因此我们的游戏不能记录转账信息,所以还是不能支持其他代币的流通。

ERC20协议的升级版ERC223 通过新增接口和识别合约地址来解决了这种问题,但是已经上链的ERC20代币并不能使用这种新的特性,因此也不做过多的解析。

我们往下继续看ERC20的标准接口,发现下面几个方法就能满足我们的需求。

function approve(address _spender, uint256 _value) returns (bool success); 
// 批准_spender账户从自己的账户转移_value个token。可以分多次转移。 
function transferFrom(address _from, address _to, uint256 _value) returns (bool success);
// 与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
function allowance(address _owner, address _spender) constant returns (uint256 remaining);
// 返回_spender还能提取token的个数。 查询剩余能够使用的代币数`

因此可以得到如下的交易流程:

流程图

2 实用测试

接下来就是付诸实践了。测试源码(如何部署合约,如何使用solidity语法 也不再赘述)。

1 发布一个游戏合约: 代码地址 (简单的投资购买道具key 以及分红机制)。

2 发布一个ERC20代币合约: 代码地址 symbol(seele)。

3 架设一个前端站点进行测试 代码地址,使用web3js来调用metamask进行合约调用。

seelepurchase.png

经过所有的测试,基本能够实现我们用代币参与各类游戏的想法。但是处理起来会多一步授权代币的步骤,这可能会引起部分用户的不信任,如何更好的处理此类交互,大家可以相互交流一下。

我们有一个社区专门讨论区块链dapp相关内容
0x007社区已开通小密圈,欢迎大家加入:


分享码
blockchain
Web note ad 1