版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010986776/article/details/84843873
1.什么是李嘉图合约
- 李嘉图合约是一种特殊的结构化文本,主要用作交易中明确双方的意图,是做交易之前查看的要遵循的规则
- 以后正式合法的合约都要有李嘉图合约
- EOS白皮书中所提到的,所有的交易,都会是基于对宪法同意的基础之上进行的,这就意味着,EOS启动后,用户所有的链上行为,都会涉及到李嘉图合约
- 简单说,李嘉图合约是一个文件,定义了通过互联网发行的某种类型的价值,标识发行人和签署人,将发行人认为合适的期限和条款加入其中,从而让该文件成为合约
2.李嘉图合约可以解决什么问题
- 智能合约存在一个普遍问题:涉及到交易双方意图类型的问题时,仅靠代码本身,无法良好解决
- 对于一些概念的理解,类似现实世界之中的交易合同的约定,有时仅靠智能合约是无法做到的,这时,具有法律效应的文本合约,结合依赖区块链技术开发的智能合约,会带来更多的准确性
3.李嘉图合约在哪
- EOS智能合约abi文件由5部分组成
{
"types":[...], //定义类型的别名
"structs":[...], //各个类型的数据结构
"actions":[...], //智能合约的action
"tables":[...], //数据结构体,表
"ricardian_clauses":[...] //李嘉图条款
}
4.Action
- 一个智能合约可以定义多个Action,每个Action代表一次单独的操作
- 映射到代码中,可以将Action理解成类中的函数,函数中定义了调用Action时需要执行的操作
- 智能合约与账户通过Action的方式进行通信,Action可以单独执行,也可以和其他Action一起作为一个整体执行
- 例如:账户小王执行了[还钱]Action,[还钱]Action通知账户工商银行,执行[转账]Action,[转账]Action又通知账户[小李],执行[短信通知]Action
5.Transaction
- 是一个或多个Action的集合,一个Transaction中的Action要么全部成功,要么全部失败,与数据库事务很像
- 前面例子中,[还钱]Action、[转账]Action、[短信通知]Action可以被包含在一个事务中
6.合约交互模式
- EOSIO中提供了两种智能合约的交互模式
- Inline(内联)
- Deferred(延迟)
- Inline可以理解为实时交互模式,一个Transaction中所有的Action,实时调用,顺序执行,例如A给B转账,银行触发一个转账,给B发短信,B回应接收到
- Deferred可以理解为延时交互模式,TransactionA中的部分Action没有被立即执行,而是延迟一段时间后,由TransactionB执行,例如A给B转账,银行触发一个转账,给B发短信,B回应钱用于下个月某天还房贷等,这个Action就不会被立即执行,而且放到一个队列中
7.Inline模式与Deferred模式主要区别
- Inline模式是实时执行Action,Deferred是延时执行
- Deferred模式的Action会被放入一个队列中,后续执行时从队列中取出
- Inline模式中的Action是在同一个Transaction里,而Deferred模式下Action被分散到不同Transaction里
8.EOS合约与以太坊合约区别
- EOS合约可以升级
- 以太坊智能合约一旦部署,就固化在那
- EOS支持Deferred交互模式
- 权限控制不同
- 以太坊通过黑白名单
- EOS通过账户
- 合约数据存储方式不同
- EOS是存储到内存中的表
- 以太坊存储是固化的,IO读写效率低,也不支持对某个字段做index
- 使用依赖库的方式不同
- solidity是后来写的库,比较少,也不是很完善
- EOS是C++的库,非常多,也很完善
9.不同权限的智能合约交互调用
- 启动网络
- 设置两个alias
- 生成两套wast文件
- 生成两套abi文件
- 创建三对密钥
- 解锁钱包
- 将三个私钥导入钱包
- 创建三个账户
- 查看账户
- 部署两个合约
- 调用hello合约的hi方法
- 查看账户json
- target账户授权给hello合约特定权限
- 查看账户的变化
- 调用hello合约的hi方法
- 调用hello合约的hi方法
- 关闭网络