<p><img src="https://cdn.steemitimages.com/DQmWDiD5ZHhVbNe1tL5i53kKKu9Do6tHZAkZYM8Wq4S4mAj/%E5%B8%81%E4%B9%8E%E5%B0%81%E9%9D%A2.jpg" alt="币乎封面.jpg">给 EOSLaoMao 投票,请认准我们的主网节点ID:eoslaomaocom</p> <hr> <p>在上一篇大事纪中我们提到从主网开始,EOSLaoMao 团队在技术上为社区所贡献的三个开源项目。在这一篇中,除了和开发者相关的内容之外,我们还会涉及到和与普通用户息息相关的几个开源项目。</p> <p>主网上线没多久,整个社区因为资源 RAM 的价格飙升而开始关注 EOS 上资源分配的问题。果然时间并没有过去多久,从 RAM 的紧缺,到了 CPU 和 NET 资源的频频告急。整个社区中存在的资源使用不均的问题比较突显,有人抵押了大量的资源,但是不需要那么大的资源使用量,有人没有那么多的资源在使用上却需要大量的 CPU。</p> <p>而熟悉 EOS 资源分配的朋友们都知道,CPU 的量和 EOS token 持有量是呈正相关的,也就是全网会根据你持有的 token 数量,给你分配一定额度的资源使用量。</p> <p>要是把 EOS 看成是某种维度的土地资源的话,EOS token 的持有者就是之上的地主。有些地主手上几个山头的土地资源,但是自己并用不了那么多,让它荒着吗?好像又有点可惜。这片土地上还有千千万无田可耕的租赁者,而这些人想要耕种的产量,想要产量后的利益,想要利用好土地资源后的种种。所以为什么不重新匹配供需呢?</p> <p>市场上的重新分配供需,地主和租赁者想要找到彼此其实不是非常容易的事情,会考虑到对方的诚信问题,考虑到合作期限内双方是否有能力完成所设定的目标问题,也就是能力问题,等等。要是找到了出租和承租双方彼此,还要考虑操作起来的方便与否问题。</p> <p>考量到以上问题,EOSLaoMao 团队开始想要着手去解决。但是在这之前,也对难度和可实现性进行了评估,比如:</p> <p>EOS 的世界里面,有类似的案例解决方案可以借鉴吗?<br> 这种属于中大型的项目,到底需要多少时间才能开发完成?<br> 我们能不能去做一个方便租赁双方操作的项目呢,也就是一键操作的项目?<br> 等等。</p> <p>不管怎样,虽然刚开始觉得难度不小,但我们还是决定开始试试看。</p> <h2>EOSLaoMao 团队第 4 个开源项目</h2> <p>今年的 9 月 11 日,EOSLaoMao 团队正式推出 <a href="https://github.com/EOSLaoMao/BankofStaked-CE/blob/master/README-CN.md">BankofStaked 智能合约</a>,这是一个 CPU&NET 资源自动售卖机。这次项目终于实现了用户“一键操作”的便捷性功能,在安全性上面我们也综合了社区的经验,将风险降到最低。</p> <p>直到现在,市场上的同款产品,大部分都不能做到抵押资源的同时,代币持有者还能有投票权。而且很多资源租赁产品实质是需要用户把 token 转到他们的项目合约中,这就大大增加了整个项目合约单点的风险,也就是说,万一项目方的合约被盗了或者出事了,用户本来想要赚点利息的 token,结果可能是连本金都无法追回来。这也是后面我们推出了 BankofStaked 的 Creditor 公开计划中,设计时的一些顾虑。而 BankofStaked 在代码的设计中就规避掉这些可能的风险。</p> <p>我们团队后来在很多场合也介绍了大家比较感兴趣的问题:</p> <p>BankofStaked 这个在 EOS 上的智能合约是如何实现全自动化的?</p> <p>在设计上,我们从三个部分实现全自动化,即内联交易、延时交易和避免延时交易失败的兜底机制。</p> <p>首先先来认识一下内联交易实现了哪些流程。</p> <p>匹配价格方案自动抵押这个过程,是在用户转账时直接用 INLINE action 实现的;其次是调用合约本身的 check action,是兜底机制特定的 action;最后一项是免费计划,用户转账进来之后会自动退回。以上三项都是在内联交易里面调用的。</p> <p>延时交易(Deferred TX)包含了什么呢?</p> <p>用户在下单的时候,抵押完了相关额度后,会立刻发起一个延时交易。这个延时交易可以实现订单在未来过期的那个时间点,自动执行过期的操作。这样就实现了获取服务是自动的,服务逾期时取消也是自动的功能。</p> <p>第三部分是兜底机制。延迟交易有时候是会失败的,我们就自己设计了一个兜底机制,比如会去检查订单是否过期、该删除的数据是否删除了、该退款的是否退款了等等。</p> <p>这就是我们设计的自动化合约的三个主要部分。</p> <p>这是吸取了整个社区一些惨痛损失经验而集成的项目,在整个过程中,我们探索出一个重要的功能,也就是我们第五个开源项目。</p> <h2>EOSLaoMao 团队第 5 个开源项目</h2> <p>10 月 20 日,考虑到 BankofStaked 流程中抵押接口的风险性,我们开源了 <a href="https://github.com/EOSLaoMao/SafeDelegatebw">SafeDelegatebw 智能合约</a>。</p> <p>在 BankofStaked 的流程中,其中有一步需要调用账户的抵押接口进行抵押,其中系统合约的 delegatebw 接口的第五个参数叫 Transfer,也就是当我给别人抵押的时候,同时是可以指定把 token 也顺便转给他。</p> <p>我们考虑到涉及 token 转账权限层面的 action,风险是非常高的,即使很多的 Creditor 信任 BankofStaked 这个合约,但是依然会让 BankofStaked 成为一个单点的风险,所以我们做了一个叫 safedelegatebw 的合约,鼓励所有的账户,把这个合约部署在自己的贷出人账户上。</p> <p>这个合约的目的,就是把系统合约的 delegatebw 接口简单地进行封装,把第五个参数写成 false。即调用了自定义的接口,token 无法被转走。这样就保证了即使合约出了问题,提供这个贷出人账户的 BP 或者用户不会有资金被转移的风险。</p> <p>我们可以看看,基于 SafeDelegatebw 合约提供 Bank of Staked 的 creditor 账户的代码部署内容如下:</p> <p>第一步,部署 SafeDelegatebw 合约到 creditor 账户</p> <p>0.克隆 SafeDelegatebw 代码</p> <p><code>git clone https://github.com/EOSLaoMao/SafeDelegatebw</code></p> <p>1.验证 wasm 哈希并部署合约:</p> <p>#f03c15 请确保 wasm 的哈希准确无误:</p> <blockquote> <p>cat SafeDelegatebw/safedelegatebw.wasm | shasum -a 256</p> </blockquote> <p>3da535cdb8e47384e3af6e9583f4ec7a82cc2f9f4a188c2c477130fe21b2cfc3 -</p> <p>cat SafeDelegatebw/safedelegatebw.wasm | md5</p> <p>0c780517f8e9154423606f9cf8c1f0f4</p> <p>部署合约:</p> <p><code>cleos -u https://api.eoslaomao.com set contract <your_creditor_account> SafeDelegatebw/</code></p> <p>2.增加 delegateperm 权限并将系统合约的 <code>delegatebw</code> 权限授权给 <code>delegateperm</code>:</p> <p><code>./delegate_perm.sh <your_creditor_account> https://api.eoslaomao.com</code></p> <p>完成之后 creditor 账户的权限结构如下:</p> <blockquote> <p>cleos -u <a href="https://api.eoslaomao.com">https://api.eoslaomao.com</a> get account <your_creditor_account><br> permissions:</p> </blockquote> <p>owner 1: 1 OWNER_KEY<br> active 1: 1 ACTIVE_KEY<br> delegateperm 1: 1 <your_creditor_account>@eosio.code</p> <p>第二步,授权 creditor 账户的 delegatebw 权限给 BankofStaked</p> <p>增加 creditor_perm 权限,并将 creditor 账户部署的 SafeDelegatebw 的 delegatebw 权限,以及系统合约的 undelegatebw 权限授权给 Bank of Staked:</p> <p><code>./creditor_perm.sh <your_creditor_account> https://api.eoslaomao.com</code></p> <p>该步骤执行了下面三个权限设置操作。</p> <p>新增 creditorperm 权限,授权给 bankofstaked 账户的 eosio.code。<br> 授权 SafeDelegatebw 的 delegatebw 合约权限给 creditorperm<br> 授权系统合约的 undelegatebw 合约权限给 creditorperm<br> 至此,creditor 账户的权限结构如下所示:</p> <p>`cleos -u <a href="https://api.eoslaomao.com">https://api.eoslaomao.com</a> get account <your_creditor_account></p> <p>permissions:</p> <p>owner 1: 1 OWNER_KEY</p> <p>active 1: 1 ACTIVE_KEY</p> <p>delegateperm 1: 1 <your_creditor_account>@eosio.code</p> <p>creditorperm 1: 1 bankofstaked@eosio.code`</p> <p>至此,基于 SafeDelegatebw 合约的 creditor 账户权限设置完毕。</p> <p>这是我们在做资源租赁项目上开源的两个智能合约,综合了整个社区可能发生的风险,设计的内容。在目前整个市场上看,也很难找到关注用户权限的资源租赁产品,同时也是整个社区的用户对自己 token 包含的权限意识不强有关系。</p> <p>我们想要帮助市场资源分配更合理的同时,也想保留用户自己最大范围的权限,比如投票权、接受空投币的权利,同时能够最大限度保障用户的资产安全(目前是零风险)。</p> <p>希望这个初心,能够和大部分读者达成一致的共识。</p> <p>下一篇,我们将继续分享 EOSLaoMao 团队最后部分的开源项目内容,敬请期待!</p> <hr> <p><strong>BP节点账号:eoslaomaocom</strong></p> <p>官方网站:<a href="https://eoslaomao.com/">https://eoslaomao.com/</a></p> <p>CPU&NET 资源租赁:<a href="https://eoslaomao.com/bankofstaked">BankofStaked</a></p> <p>EOS 安全卫士:<a href="https://eoslaomao.github.io/EOSGuardian/">EOS Guardian</a></p> <p>币乎:<a href="https://bihu.com/people/625142">EOSLaoMao</a></p> <p>Telegram: <a href="https://t.me/eoslaomao">EOSLaoMao</a></p> <p>Twitter:<a href="https://twitter.com/EOSLaoMao">EOSLaoMao</a></p> <p>GitHub: <a href="https://github.com/eoslaomao">EOSLaoMao</a></p> <p>Steemit: <a href="https://steemit.com/@eoslaomao">EOSLaoMao</a></p>