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