在这个文章系列的第一部分中,我们介绍了将你的以太坊DApps货币化的理论方法。 在这一部分,我们将会通过看一些代码示例,来展示如何在Solidity中实际实现它们。
提取资金
首先,你需要有一个能够允许将资金提取到所有者的地址的函数。 这很简单:
当合约调用这个函数时,此函数会将合约的余额转移到owner的地址(使用了非常流行的onlyOwner修饰符模式)。如果你不熟悉如何运用上述关键词,那么我建议你先去完成我们的cryptozombies课程,然后再继续阅读。
免责声明:以下所有示例都经过了简化,以说明如何只实现所讨论的函数。 因为我们对商业逻辑做出了假设,所以在创建一套智能合约时我们没有采取任何严格的安全措施。 在推出产品之前,请对你的代码进行全面的安全审核!
1. 做Crowdsale/发布代币
以太坊官方网页(ethereum.org/crowdsale)对此进行了描述。 为了创建安全的crowdsale,建议使用Open Zeppelin创建的审核合约。
2. 高级功能/跳过过程
完整代码请看:https://ethfiddle.com/O3_2o-oqaZ
在这个例子中,用户可以支付1 ether以绕过winCount的升级要求。 然后,所有者会调用之前讨论的withdraw函数,提取资金。
请注意,以太的价格可能在未来急剧上涨(或下跌),这将改变你的高级功能的成本。 因此,在许多情况下,合理的做法是添加一个onlyOwner函数,使你可以在将来更改成本,否则你的应用程序可能会变得非常昂贵。 这也同样适用于后面所有的示例。
3. 收取一定比例的市场交易费用
在这个(非常简化)的例子中,当有人想要购买一个僵尸时,10%的价格会到你的钱包,其余的则被转移到僵尸的所有者手里。
完整合约请看:https://ethfiddle.com/MuApSyO3jx
为了节省一些gas成本,你可以跳过这个函数的第一行,而以太则会被留在合约的余额里。 通过使用我们之前描述的withdraw函数,你可以在稍后的时间里提取合约中所有的以太。
4. 订阅/会员
这里我们将会看一下实现订阅/会员商业模型的例子:
终身
基于时间
基于使用量
我们将创建一个合约,其中一些函数只能由被标记为符合条件的个人才能调用。
终身会员
这是一个简单的例子:创建一个布尔映射、一个检查布尔是否为真值的修饰符、以及一个允许用户付费成为会员的函数。
完整合约请看:https://ethfiddle.com/LgzLNtIIVF
另外,与其使用一个布尔来判断是否为会员,我们可以用一个unit8和不同的会员等级来给予更多的功能访问权:0级为免费用户、1级为银卡会员、2级为金卡会员,以此类推。然后onlySilver()可以检查会员等级是否>=1。
简单吧?我们继续。
基于时间的会员/订阅
这里,我们的商业模式将假设订阅价格为0.005 以太/天。
完整合约请看:https://ethfiddle.com/Dx1jQlgazK
在这种情况下,当一个用户调用renewSubscription函数时,如有必要,subscriptionExpiration将被初始化为now,然后增值用户支付的天数。onlyMember修饰符可以用来检查目前的时间是否已经过期。
基于使用量的会员/付费使用
在这里的商业模式包括了用户提前购买函数的调用,类似于你可以以固定的价格购买API调用。
在这个例子中,用户每以太可以购买1000次调用。 每次用户调用具有onlyIfEnoughCalls修饰符的函数时,在检查它们符合该调用的条件之后,availableCalls变量将递减。
完整合约请看:https://ethfiddle.com/rO0xD9nIl6
以上所有情况中,你只需将相应的only修饰符添加到任何函数中,然后该函数就只能由有权访问它的用户调用。
结论
在这个由两部分组成的系列文章中,我们讨论并实现了一些商业模式,你可以在目标是货币化或盈利的情况下应用于你的Dapp。
我想强调的是,这篇文章中给出的所有代码都是每个模型的一个非常基本的实现,你应该根据自己的具体需求进行调整。
下一步
领取专属 10元无门槛券
私享最新 技术干货