3.08 EOS智能合约(下)

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方法
    在这里插入图片描述
  • 关闭网络
    在这里插入图片描述

学院Go语言视频主页
https://edu.csdn.net/lecturer/1928

[清华团队带你实战区块链开发]
(https://ke.qq.com/course/344443?tuin=3d17195d)
扫码获取海量视频及源码 QQ群:
721929980
在这里插入图片描述

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页