目录
一、区块
- 什么是区块
- 区块的结构
- 产生一个区块的过程
- 如何校验一个区块的有效性
- 如何验证交易的有效性
二、区块链
- 什么是区块链
- 区块链的特点
三、智能合约
- 智能合约是什么
- 如何搭建一个智能合约
关键字
UTXO POW coinbase Markle Tree Nonce
正文
区块
什么是区块
在比特币网络中,数据会以文件的形式被永久记录,我们称这些文件为区块。同时也是一种记录交易的数据结构。每个区块由区块头和区块主体组成,区块主体只负责记录前一段时间内的交易信息,区块链的大部分功能都由区块头来实现。
区块的结构
区块的结构主要分为两部分:区块头和区块主体,如下:
区块结构
数据项 | 描述 | 长度 |
---|---|---|
Magic no(魔法数) | 总是0xD9B4BEF9 | 4字节 |
Blocksize(区块大小) | 到区块结束的字节长度 | 4字节 |
Blockheader(区块头) | 包含8个数据项 | 80字节 |
Transaction counter(交易数量) | 正整数VI=VarInt | 1-9字节 |
Transaction (交易) | 交易列表(非空) | <Transaction-counter>许多交易 |
Blockheader区块头表结构
数据项 | 目的 | 更新时间 | 大小(字节) |
---|---|---|---|
Version(版本) | 区块版本号 | 更新软件后他指定了一个新的版本号 | 4 |
hashPrevBlock(前一个区块的hash值) | 前一个区块的256位hash(父区块的hash,区块与区块之间就是靠次hash链接成链) | 新区块进来时 | 32 |
hashMerkleRoot Merkle(根结点hash值) | 基于一个区块中所有交易的256位hash | 接受一个交易时 | 32 |
Time(时间戳) | 从1970-01-01 00:00 UTC开始到现在,一秒为单位的当前时间戳 | 每几秒更新 | 4 |
Bits(当前目标的hash) | 压缩格式的当前目标hash值 | 挖矿难度调整时 | 4 |
Nonce(随机数) | 从0开始的32位随机数 | 产生hash时(每次产生hash随机数时都要增加) | 4 |
产生一个区块的过程
1.矿工在挖矿前要组建区块
将coinbase交易打包进区块(coinbase交易必须放在交易列表的第一个)
将交易池中优先级的交易打包进区块
(优先级 = 交易的额度 * UTXO的深度 / 交易的size)
2.创建区块的头部
版本号 父区块哈希 Markle树根 时间戳 难度值 Nonce
3.挖矿成功后,将计算出来的随机数Nonce填入区块头部,向临近节点传播
如何校验一个区块的有效性
- 利用算出来的nonce和本区块里面存储的父区块的hash值再做一次hash。
- 验证POW的nonce值是否符合难度值
- 检查时间戳是否小于当前时间2小时
- 检查Merkle树根是否正确
- 检查区块size要小于区块size的上限
- 第一笔交易必须是coinbase(挖矿成功的那笔交易)交易
- 验证每个交易
如何验证交易的有效性
- 交易size不能大于区块的size上限
- 交易输入的UTXO是否存在
- 交易UTXO没有被其他交易引用
- 输入金额要大于输出金额(交易中,矿工会收取费用)
- 解锁脚本进行验证
区块链
什么是区块链
区块链是一个分布式账本,一种通过去中心化,去信任的方式集体维护的一个可靠数据的技术方案。是通过每相邻的两个区块中区块头里面的父hash(hashPrevBlock)关联在一起的一种链式数据结构。
区块链的特点
去中心化
由于使用分布式核算和存储,不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护。开放性(没有限制,开源,数据公开)
系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明自治性,集体维护
区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据,使得对“人”的信任改成了对机器的信任,任何人为的干预不起作用。可靠的数据库(不可更改,永远可访问)
一旦信息经过验证并添加至区块链,就会永久的存储起来,除非能够同时控制住系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高。匿名性,隐私保护
由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此交易对手无须通过公开身份的方式让对方自己产生信任,对信用的累积非常有帮助。
智能合约
智能合约是什么
“智能合约”(smart contract)这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。定义如下:
“一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议。”
个人理解就是:将一些约定好的条款,用机器语言写入机器中,在一定的条件下会自动触发;期间不需要人为参与。
比如,通过淘宝下单付款后商家发货,确认收货后系统自动转钱给商家。
智能合约的部署
http://ethereum.github.io/browser-solidity //智能合约在线编辑器