智能合约基础笔记
智能合约简介
什么是智能合约
- 法律角度,智能合约是否是一个真正意义上的合约还有待确认
- 计算机科学角度,智能合约是一种计算机协议,一旦制定和部署就能实现自我执行(self-executing)和自我验证(self-verifying),而且不再需要人为的干预
- 技术角度,一种计算机程序,能够自主执行合约相关的操作,并产生相应的可验证的证据,来说明执行合约操作的有效性
例如,银行账户的存取款可以用合约来替代,以及任何需要记录信息的场合
智能合约的历史
- 20世纪七八十年代,人们提出了让计算机代替人类进行商业市场管理的想法。
- 九十年代,研究数字合约和数字货币的Nick Szabo提出了“智能合约”
- 08年比特币出现,借由其背后的区块链技术,智能合约飞速发展
Nick Szabo对智能合约的定义
智能合约是一个由计算机处理的、可执行合约条款的交易协议。其总体目标是能够满足普通的合约条件,例如支付、抵押、保密甚至强制执行,并最小化恶意或意外事件发生的可能性、以及最小化对信任中介的需求。智能合约所要达到的相关经济目标包括降低合约欺诈所造成的损失,降低仲裁和强制执行所产生的成本以及其他交易成本等。
优点
以太坊智能合约详解
合约操作流程
外部账户,被密钥对控制。外部账户没有代码。用户通过创建和签名一笔交易从一个外部账户发送信息。
合约账户,被存储在账户中的代码控制。每当合约账户收到一条消息,合约内部的代码就会被激活,允许它对内部存储进行读取、写入、发送其他消息和创建合约。
以太坊的账户包含四个部分
- 随机数,用于确定每笔交易只能被处理一次的计数器
- 账户目前的以太币余额
- 账户的合约代码(如果有的话)
- 账户的存储(默认为空)
钥匙文件
- 账户通过私钥和公钥确定
- 账户地址是公钥的最后20个字节
- 账户地址和私钥密文存储在钥匙文件keyfile中
- 私钥总是处于加密状态,秘钥是创建账户时输入的密码
- 通过秘钥和keyfile中的私钥密文才能得到私钥,进行交易
- 要确保备份好keyfile和秘钥
创建账户
1
2
3
4
5
6
7
8安装客户端
brew install ethereum
创建账户
geth account new
同步区块
geth
账户的备份
~/Library/Ethereum/keystore/keyfile
这是账户数据,备份好
Gas
为防止用户恶意部署无限循环运行的合约,合约执行的每一步都需要支付费用,就是gas。
- Gas花销Gascost:针对具体操作是不变的。保证每种操作所需的计算资源保持不变
- Gas价格Gasprice:每个gas所需的以太币。由用户控制,价格高的确认快。并且随以太币的市值波动,以保证运行智能合约所需的真实花费不会出现大幅度变化
- Gasfee:Gascost*Gasprice,真实费用,单位是以太币
消息和交易
消息
合约账户有能力向其他合约账户发送消息,它是一个虚拟的对象,不会具体的存储在以太坊的区块链内,可以看做一个函数调用的过程
类似于比特币的交易,主要有3点不同:
- 以太坊的消息可以由外部实体或者合约创建,比特币的交易只能从外部创建
- 以太坊消息可以选择包含数据
- 如果消息的接受者是合约账户,可以选择进行回应,这意味着以太坊消息也包含函数概念
交易
指外部所有账户将一个经过签名的数据包发送到另一个账户的过程,这个过程中产生的账户状态变化被存储到区块链上
交易包含:
- 消息的接受者
- 用于确认发送者的签名
- 以太币账户余额
- 要发送的数据
- STARTGAS,通过需要支付的燃料来对计算步骤进行限制
- GASPRICE,每一计算步骤需要支付给矿工的燃料
以太坊虚拟机
Gas的消耗
- 最常见的,执行特定的内部抽象操作。例如运行SHA3散列运算
- 进行一个从属的消息调用或合约创建时,例如执行CREATE、CALL、CALLCODE操作
- 增加账户内存使用量
内存使用计费机制鼓励用户使用较少的内存。执行账户内存清理操作不消耗GAS,还会得到折扣。
虚拟机运行环境
- 以太坊网络状态
- 合约剩余GAS
- 当前代码合约地址
- 合约发起者地址
- Gasprice
- 交易的输入数据
- 执行合约交易的账户地址
- 合约账户的余额
- 用于执行虚拟机代码所需的数组
- 目前区块的数据头
- 目前执行的CALL操作和CREATE操作的数量
区块链系统状态的验证
每产生一个新的有效区块,以太坊系统需要以下几个步骤将该区块加入权威区块链上
- 验证新区快的ommer区块的有效性。验证叔区块?
- 验证新区快所包含交易的有效性,即所有交易所花费的GAS是否与新区块链中标记的花费量一致,并且每笔交易一一对应
- 给该区块和ommer区块的矿工发放奖励
- 验证新区快的工作量证明,连接主链,然后将整个系统更新
智能合约操作
钱包部署
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" 转载请保留原文链接及作者。