智能合约基础笔记

智能合约简介

什么是智能合约

  1. 法律角度,智能合约是否是一个真正意义上的合约还有待确认
  2. 计算机科学角度,智能合约是一种计算机协议,一旦制定和部署就能实现自我执行(self-executing)和自我验证(self-verifying),而且不再需要人为的干预
  3. 技术角度,一种计算机程序,能够自主执行合约相关的操作,并产生相应的可验证的证据,来说明执行合约操作的有效性

例如,银行账户的存取款可以用合约来替代,以及任何需要记录信息的场合

智能合约的历史

  1. 20世纪七八十年代,人们提出了让计算机代替人类进行商业市场管理的想法。
  2. 九十年代,研究数字合约和数字货币的Nick Szabo提出了“智能合约”
  3. 08年比特币出现,借由其背后的区块链技术,智能合约飞速发展
Nick Szabo对智能合约的定义

智能合约是一个由计算机处理的、可执行合约条款的交易协议。其总体目标是能够满足普通的合约条件,例如支付、抵押、保密甚至强制执行,并最小化恶意或意外事件发生的可能性、以及最小化对信任中介的需求。智能合约所要达到的相关经济目标包括降低合约欺诈所造成的损失,降低仲裁和强制执行所产生的成本以及其他交易成本等。

优点

  1. 高效的实时更新
  2. 准确执行
  3. 较低的认为干预风险
  4. 去中心化权威
  5. 较低的运行成本

    风险

  6. 现实中的合同出现漏洞可以协商或者通过法律和仲裁解决,智能合约的漏洞执行后无法修补
  7. 智能合约的自我验证特性导致隐私性低

以太坊智能合约详解

合约操作流程

  1. 启动一个节点
  2. 编写合约
  3. 编译
  4. 部署,矿工确认。得到地址与接口
  5. 使用web3.js接口调用合约

    以太坊上的账户

    两类账户,公用一个空间地址。

外部账户,被密钥对控制。外部账户没有代码。用户通过创建和签名一笔交易从一个外部账户发送信息。

合约账户,被存储在账户中的代码控制。每当合约账户收到一条消息,合约内部的代码就会被激活,允许它对内部存储进行读取、写入、发送其他消息和创建合约。

以太坊的账户包含四个部分

  1. 随机数,用于确定每笔交易只能被处理一次的计数器
  2. 账户目前的以太币余额
  3. 账户的合约代码(如果有的话)
  4. 账户的存储(默认为空)
钥匙文件
  1. 账户通过私钥和公钥确定
  2. 账户地址是公钥的最后20个字节
  3. 账户地址和私钥密文存储在钥匙文件keyfile中
  4. 私钥总是处于加密状态,秘钥是创建账户时输入的密码
  5. 通过秘钥和keyfile中的私钥密文才能得到私钥,进行交易
  6. 要确保备份好keyfile和秘钥
    创建账户
    1
    2
    3
    4
    5
    6
    7
    8
    安装客户端
    brew install ethereum

    创建账户
    geth account new

    同步区块
    geth
账户的备份

~/Library/Ethereum/keystore/keyfile
这是账户数据,备份好

Gas

为防止用户恶意部署无限循环运行的合约,合约执行的每一步都需要支付费用,就是gas。

  1. Gas花销Gascost:针对具体操作是不变的。保证每种操作所需的计算资源保持不变
  2. Gas价格Gasprice:每个gas所需的以太币。由用户控制,价格高的确认快。并且随以太币的市值波动,以保证运行智能合约所需的真实花费不会出现大幅度变化
  3. Gasfee:Gascost*Gasprice,真实费用,单位是以太币

消息和交易

消息

合约账户有能力向其他合约账户发送消息,它是一个虚拟的对象,不会具体的存储在以太坊的区块链内,可以看做一个函数调用的过程

类似于比特币的交易,主要有3点不同:

  1. 以太坊的消息可以由外部实体或者合约创建,比特币的交易只能从外部创建
  2. 以太坊消息可以选择包含数据
  3. 如果消息的接受者是合约账户,可以选择进行回应,这意味着以太坊消息也包含函数概念
交易

指外部所有账户将一个经过签名的数据包发送到另一个账户的过程,这个过程中产生的账户状态变化被存储到区块链上

交易包含:

  1. 消息的接受者
  2. 用于确认发送者的签名
  3. 以太币账户余额
  4. 要发送的数据
  5. STARTGAS,通过需要支付的燃料来对计算步骤进行限制
  6. GASPRICE,每一计算步骤需要支付给矿工的燃料

以太坊虚拟机

Gas的消耗

  1. 最常见的,执行特定的内部抽象操作。例如运行SHA3散列运算
  2. 进行一个从属的消息调用或合约创建时,例如执行CREATE、CALL、CALLCODE操作
  3. 增加账户内存使用量

内存使用计费机制鼓励用户使用较少的内存。执行账户内存清理操作不消耗GAS,还会得到折扣。

虚拟机运行环境

  1. 以太坊网络状态
  2. 合约剩余GAS
  3. 当前代码合约地址
  4. 合约发起者地址
  5. Gasprice
  6. 交易的输入数据
  7. 执行合约交易的账户地址
  8. 合约账户的余额
  9. 用于执行虚拟机代码所需的数组
  10. 目前区块的数据头
  11. 目前执行的CALL操作和CREATE操作的数量

区块链系统状态的验证

每产生一个新的有效区块,以太坊系统需要以下几个步骤将该区块加入权威区块链上

  1. 验证新区快的ommer区块的有效性。验证叔区块?
  2. 验证新区快所包含交易的有效性,即所有交易所花费的GAS是否与新区块链中标记的花费量一致,并且每笔交易一一对应
  3. 给该区块和ommer区块的矿工发放奖励
  4. 验证新区快的工作量证明,连接主链,然后将整个系统更新

智能合约操作

钱包部署

Mist或者Eth Wallet

命令行部署

通过web3.js的API在命令行部署

文章标题:智能合约基础笔记

本文作者:Benny

发布时间:2020-06-08, 19:49:33

最后更新:2018-06-30, 17:26:14

原始链接:https://benny233.github.io/2020/06/08/智能合约基础笔记/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录