初探「智能合约」🤯

442 阅读3分钟

智能合约

  • 顾名思义是一种合约,比如我们在某二手平台购物当我们下单以后,卖家不发货该怎么办
    • 如果有了智能合约那就好办了
  • 智能合约可以充当中间的代理人,大家可以将智能合约想像成跑在以太坊上面的一套程序
    • 其就是一个包含合约代码和存储空间的虚拟账户
    • 我们的智能合约运行在以太坊的EVM虚拟机上

以太坊

  • 以太坊的点对点网络中,每个全节点上都包含一个以太坊虚拟机
    • 当节点需要大宝或者验证区块时,就将交易相关的可执行代码加载到EVM中执行
  • 缺点:
    • 产生大量的平行计算
    • 所有节点必须拿到一样的运行结果

image.png

记录

  • 因为智能合约在网络中每个节点独立执行,所以所有的记录和数据都被保存在区块链上
    • 当完成一笔交易后,区块链上就保存了数据,是无法篡改的,不会丢失
  • 与传统合约对比的优势
    • 简单思考智能合约就是一段代码,代码更加简单,不会产生歧义性
    • 合约内容不会被篡改,任何执行记录都会保存在区块链中
    • 依赖于区块链协议,合约执行的强制力可以得以保证

image.png

  • 上面为智能合约的从创建到被调用的过程
    • 我们是用Solidity语言去编写只能合约
    • 被编译后,就会变成字节码部署在区块链上

之所以选择Solidity语言,是因为其目前最稳定

  • 部署到区块链上以后
    • 需要创建一个交易将合约部署到区块链上
    • 交易的data保存的是以太坊字节码
    • to的地址为一个空的账户
    • 当交易被旷工大宝加入区块链时,此合约就被创建完成了
    • 区块链上就会出现一个与该智能合约相对应的一个合约账户

调用

  • 当智能合约被调用的时候
    • 只需要触发一个指向该地址的交易
    • 并且要将合约需要的参数作为一个data字段保存在交易中即可
    • 以太坊为了方便智能合约的调用和参数传递
    • 在编译智能合约的时候就会自动生成一个ABI
    • 这个ABI就是一个固定格式的字符串,包含了合约中各种函数名、参数数目和类型等等信息
    • 在合约创建的时候需要向用户提供合约的ABI和合约地址

#EVM

  • 以太坊虚拟机的存储方式有三种 账户存储 内存
    1. 就是用来底层存储一个操作数,如ADD

    2. 账户存储不会随着合约执行结束而被释放,是k-v形式,每次改动账户或内存中的数据都需要消耗gas

      image.png

    3. 内存是以太坊虚拟机在运行代码时,临时分配的一块线性空间,合约调用结束后会被自动释放


总结:智能合约就是一段保存在区块链上的逻辑代码,运行在以太坊虚拟机上,使用智能合约,用户可以十分方便的在以太坊平台上去创建去中心化应用