聊聊李嘉图合约

什么是李嘉图合约?
简单来讲,是用人们可以阅读的语言,用类似合同的方式,描述智能合约里每个接口的意图。例如EOS里eosio.token是发币合约,其中transfer这个action是用来转账的,它有4个参数:

  • from,转出账户
  • to,接收转账的账户
  • quantity,转账数量
  • memo,备注

它的李嘉图合约是:

## Transfer Terms & Conditions 
I, {{from}}, certify the following to be true to the best of my knowledge: 
1. I certify that {{quantity}} is not the proceeds of fraudulent or violent activities. 
2. I certify that, to the best of my knowledge, {{to}} is not supporting initiation of violence against others. 
3. I have disclosed any contractual terms & conditions with respect to {{quantity}} to {{to}}. 
I understand that funds transfers are not reversible after the {{transaction.delay}} seconds or other delay as configured by {{from}}'s permissions. 
If this action fails to be irreversibly confirmed after receiving goods or services from '{{to}}', I agree to either return the goods or services or resend {{quantity}} in a timely manner.

可以看到它清楚的描述了这个action的意图是什么,执行这个action就代表调用者同意这个条款。

虽然阅读李嘉图合约不能代替阅读其源码,但这至少让使用者有机会了解自己执行合约会有什么后果。而且可以作为事后有纠纷时,处理时的依据。

可惜的是,当前EOS上的大部分合约都没有李嘉图合约,这么好的东西没有利用起来,让人有点心疼。

除了作为类似法律声明外,能不能利用李嘉图合约干点别的有意义的事呢?我有个想法:

EOS上的合约可升级,是人们质疑其可信任度时经常提到的。虽然我认为这是个优点,EOS实际提供了可升级、很难升级和不可升级几种策略(见https://zhuanlan.zhihu.com/p/66367223里合约可升级部分),但实际项目方设为不可升级的非常少。毕竟可能出现漏洞需要修补嘛。如何能协调修补漏洞和消除合约可升级之间的矛盾呢?我想李嘉图合约是个可以考虑的选项。可以考虑在EOS系统上做如下设计:

  1. 合约中每个action都要求有(有效)李嘉图合约,没有李嘉图合约就不允许部署
  2. 当合约升级时,李嘉图合约不允许改动,有改动就升级失败
  3. 若有合约的李嘉图合约与其实际内容明显不符,该账户被冻结(这一点主动审查不可能做到,最多有被举报时审查)

这样可以做到当合约升级时,每个action的意图不能发生变化,从而不允许项目方通过升级合约改变action的行为从而损害用户的利益。

但是这只能是法理上的限制,基本上只能出问题后事后追溯时,对于链外的裁决提供一些链上证据而已,无法真正阻挡有意图的项目方作恶。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值