智能合约
- 顾名思义是一种合约,比如我们在某二手平台购物当我们下单以后,卖家不发货该怎么办
- 如果有了智能合约那就好办了
- 智能合约可以充当中间的代理人,大家可以将智能合约想像成跑在以太坊上面的一套程序
- 其就是一个包含合约代码和存储空间的虚拟账户
- 我们的智能合约运行在以太坊的
EVM虚拟机上
以太坊
- 以太坊的点对点网络中,每个全节点上都包含一个以太坊虚拟机
- 当节点需要大宝或者验证区块时,就将交易相关的可执行代码加载到
EVM中执行
- 当节点需要大宝或者验证区块时,就将交易相关的可执行代码加载到
- 缺点:
- 产生大量的平行计算
- 所有节点必须拿到一样的运行结果
记录
- 因为智能合约在网络中每个节点独立执行,所以所有的记录和数据都被保存在区块链上
- 当完成一笔交易后,区块链上就保存了数据,是无法篡改的,不会丢失
- 与传统合约对比的优势
- 简单思考智能合约就是一段代码,代码更加简单,不会产生歧义性
- 合约内容不会被篡改,任何执行记录都会保存在区块链中
- 依赖于区块链协议,合约执行的强制力可以得以保证
- 上面为智能合约的从创建到被调用的过程
- 我们是用
Solidity语言去编写只能合约 - 被编译后,就会变成字节码部署在区块链上
- 我们是用
之所以选择
Solidity语言,是因为其目前最稳定
- 部署到区块链上以后
- 需要创建一个交易将合约部署到区块链上
- 交易的
data保存的是以太坊字节码 to的地址为一个空的账户- 当交易被旷工大宝加入区块链时,此合约就被创建完成了
- 区块链上就会出现一个与该智能合约相对应的一个合约账户
调用
- 当智能合约被调用的时候
- 只需要触发一个指向该地址的交易
- 并且要将合约需要的参数作为一个
data字段保存在交易中即可 - 以太坊为了方便智能合约的调用和参数传递
- 在编译智能合约的时候就会自动生成一个
ABI - 这个
ABI就是一个固定格式的字符串,包含了合约中各种函数名、参数数目和类型等等信息 - 在合约创建的时候需要向用户提供合约的ABI和合约地址
#EVM
- 以太坊虚拟机的存储方式有三种
栈账户存储内存-
栈就是用来底层存储一个操作数,如ADD -
账户存储不会随着合约执行结束而被释放,是k-v形式,每次改动账户或内存中的数据都需要消耗gas费 -
内存是以太坊虚拟机在运行代码时,临时分配的一块线性空间,合约调用结束后会被自动释放
-
总结:智能合约就是一段保存在区块链上的逻辑代码,运行在以太坊虚拟机上,使用智能合约,用户可以十分方便的在以太坊平台上去创建去中心化应用