区块链学习笔记01--区块链常识
目录
1.人类交易发展史
2.比特币(bitcoin)
2.1 比特币诞生背景
2.2 神秘组织CypherPunk
2.3 中本聪Satoshi Nakamoto
2.4 比特币(bitcoin)
3.区块链(blockchain)
3.1 区块链和比特币
3.2 中心化与去中心化
3.3 区块链(blockchain)
4.比特币专业名词
4.1 记账
4.2 钱包
4.3 节点
4.4 采矿(mining)
4.4.1 采矿本质
4.4.2 难度值
4.4.3 矿
4.4.4 采矿过程
4.5 算力
4.6 比特币参数
4.6.1 出块时间
4.6.2 出块奖励
4.7 p2p网络
4.8 工作量证明POW
4.9 比特币地址(bitcoin address)
4.10 比特币结构
4.10.1 区块结构
4.10.2 区块头结构
1.人类交易发展史
以物换物->实物货币->传统货币->人工货币,其中人工货币可以细分为
- 金属货币(称量货币)
- 纸币
- 电子货币
- 数字货币
货币体系的发展通常是按照由大到小的顺序逐步推进,在这一过程中使用的便捷程度不断提升,并且下级货币的存在往往表明其父级货币在运行过程中所遇到的问题已经被有效解决
2.比特币(bitcoin)
2.1 比特币诞生背景
在比特币之前已经存在数个电子支付系统,例如:
- Ecash(1990年)专注于密码学网络支付系统但依附于中心化架构
- B-money(1998年)是比特币理论先驱但尚未解决发行货币问题
- 比特现金(2005年)提出了极具挑战性的数学难题并开发了认证系统然而设计者并未涉及编程工作无法完成其目标
生产发行成本太低,受国家影响太大
生产发行成本太低,受国家影响太大
2007-2009年全球金融危机爆发时, 货币体系出现问题成为数字currency 出生的主要原因之一. 另一方面来看, 在密码学与计算机技术取得突破的情况下, 数字currency 的诞生也可视为这一进步的应用. 如前所述, 在解决上层currency 的局限性方面, 在前文中我们已经指出下层currency 的提出往往是为了弥补这些局限. 正如上文所述, 在解决上层currency 的局限性方面, 在前文中我们已经指出下层currency 的提出往往是为了弥补这些局限. 而数字currency的核心创新在于其通过克服纸币的主要缺点——生产发行成本过低且易受政府干预——从而实现了价值的有效传递.
2.2 神秘组织CypherPunk
cypherpunk(直译为密码朋克),作为一个旨在通过强大的加密算法保护个人安全隐私的社会团体,在其理念中强调信仰的力量与技术的应用相结合。该组织的主要成员多为电脑黑客、密码学家以及对隐私极度关注的人所组成。例如维基解密创始人阿桑奇等人都属于这一群体。该团体的核心主张是反对任何形式政府推行的标准密码体系,并且他们最推崇的是信息交流中的绝对隐私权。
2.3 中本聪Satoshi Nakamoto
中本聪自称日裔美国人(因为其真实身份尚未被外界确认)。他曾在2008年向"metzdowd.com"网站密码学邮件列表贡献一篇题为《比特币:一种点对点式的电子现金系统》( Bitcoin: A Peer-to-Peer Electronic Cash System )的文章,在其中详细阐述了构建一套无需交易双方信任支持的电子支付系统的方法。该文中还首次提出了去中心化电子交易的概念,并描述了实现这一目标所需的算法设计。随后于2014年开发出首个比特币客户端程序并开始进行矿池运算(mining),成功捕获了5枚比特币——这是比特币生态系统正式成立的重要里程碑事件之一。然而到了2016年1月期间,则停止参与相关活动,并逐渐退出公开通信渠道
2.4 比特币(bitcoin)
值得注意的是,在传统货币体系中像人民币和美元这样的固有货币与之不同。例如目前国际通行的主要货币单位如人民币或者美元等都是具有国家信用背书的传统法定货币体系中的成员。其本质上是一种去中心化的电子支付协议?其核心功能是构建一个全球范围内的数字钱包系统?在该系统中运行的各种交易记录数据即我们常说的数字货币的一种形式?然而需要注意的是,在技术实现上‘数字币’与‘数字货币’属于两个不同的概念体系?由于公众对数字货币概念认识不清以及相关理论研究尚不完善的原因?从技术角度来看,在区块链技术的支持下‘数字币’本质上只是一种特殊的去中心化数据库记录?这使得对数字资产的研究与开发具备了新的可能性?
首先将数据定义为货币从而解决了货币发行的问题。由于数据并非由特定的人或机构直接制造而是通过计算机算法生成的因此通过消除人为通胀的可能性从而实现了价格稳定
(2)此外数据充当货币的同时也化解了货币归属的安全隐患。在计算机算法体系中数据能够实现加密功能而非基于现实世界中的实物持有仅当确实掌握特定的解密算法以及密钥(可视为解密参数)才能明确界定数据的所有者这一机制有效防止了基于实物纸币所具有的不可篡改性带来的法律纠纷(即实施盗窃行为)
3.区块链(blockchain)
3.1 区块链和比特币
在上一节中我们深入探讨过比特币虽然它被广泛称为xx币但其核心功能本质上就是一个电子支付系统然而在这一过程中区块链作为一项核心技术起到了关键作用它的本质特征则表现为一个去中心化的数据库系统这表明区块链技术的存在对于比特币的发展具有决定性影响正是由于这一软件的成功发布使得Blockchain技术开始受到广泛关注并被广泛认知
3.2 中心化与去中心化
因为理论问题过于复杂,并且连续的专业术语不利于清晰阐述,因此我们决定采用最为简洁明了的语言来进行阐述。举个例子来说,在宿舍取餐到食堂的场景中
- 中心化:由某位特定人物 today's responsibility for ordering food, 谁人负责分配他人 today's portion of food, 该特定人物无需亲自参与 daily food preparation.
- 去中心化:真正意义上没有一个人拥有绝对的权力或领导地位, 各位成员需轮流承担起今日的饮食责任, 每个人都有可能亲身负责分配今日所需的饭菜.
通过前面的例子可以很直观地理解中心化与去中心化的概念。中央位置往往是由权威主导的,在这种情况下存在一个绝对支配的力量或组织是很自然的事情。然而,在现实中如果出现少数拥有强大影响力的关键人物或机构时,则会发生权力高度集中的现象——寡头与垄断的局面就会自然形成。比如,在前面的例子中张三与其他拥有权威地位的人建立良好的关系往往能带来最大的利益。这种状况直接导致了权力集中和个体行为受限制的现象。
去中心化的核心在于解决寡头与垄断问题;每个参与者都有可能自行处理食物并将其返还给其他人。为了避免他人对自己少分配食物的情况发生,则要求每个参与者在处理食物时均需公平对待所有人。从而克服了寡头与垄断可能导致少数人占据优势所带来的负面影响。(此仅为举例说明,请具体情况具体分析)
3.3 区块链(blockchain)
在先前的讨论中已经指出
- 从狭义上讲, 区块链是按时间序列排列的数据区块, 通过顺序连接形成一种链式数据结构, 同时依靠密码学手段确保其不可篡改性和不可伪造性, 形成一个分布式账本。
- 而从广义上讲, 区块链技术是基于块链数据结构进行验证与存储, 利用分布式节点结合共识算法生成与更新数据, 通过密码学手段保障数据传输安全与访问权限, 并借助自动化脚本代码开发智能合约来进行数据编程与操作, 构建一种全新的分布式基础架构与计算模式。
4.比特币专业名词
由于区块链技术发源于比特币的发展历史而为人所熟知 因此系统性地学习比特币相关知识将有助于我们更容易掌握区块链技术 并且能够更深入地理解其本质 这样就可以更好地认识这一技术的核心价值
4.1 记账
定义为记录于数据库内的过程即为记账。对比传统记账模式而言,比特币的记账机制存在显著差异
| 传统记账方式 | 比特币记账方式 |
|---|---|
| 由某个人(会计)进行记账 | 所有参与交易的人共同记账 |
| 只有会计自己知道每一笔交易的细节 | 所有人都知道每一笔交易的细节 |
| 有一笔交易记录一次 | 间隔一定时间记录一次 |
在传统记账方式中,在会计(即具备完整信息的人)看来就是我们前文中所述的信息垄断者;这是因为每位会计都独有掌握着每笔交易的具体信息,在发生数据篡改时其他人无法察觉其改动痕迹。与之不同的是,在比特币记账机制下,则将每一位参与方视为独立的算力节点,在任何一笔交易被处理时都会被所有节点验证确认;由于单个节点的操作不会干扰其他记录的内容(即不会影响其他节点保存的数据),因而确保了交易数据的一致性
同时传统记账模式下每笔交易仅记录一次,在无记录的情况下也无人知晓其发生情况。由于各笔交易之间相互独立且无关联关系。然而比特币采用分块链技术实现了这一目标。即在特定时间段例如10分钟内不管是否发生交易每个节点都会存储该时间段内的所有交易记录这样就能确保所有参与者的数据一致性。具体而言在10分钟内完成的所有可能发生的交易都会被所有参与者完整地记录下来。因此如果某人试图少记录一笔交易那么在下次完成相关交易时其他人将发现其账本缺失该笔交易从而阻止其有效执行这项操作这就相当于不将其纳入系统运行。
4.2 钱包
一个私钥,能够产生一个公钥,一个公钥能够计算出一个hash账户地址。
- 私钥类似于银行保密码。
- 公钥对应于银行金卡账号。
- 哈希用户登录地址等于将银行金卡账号加密并对外公布的信息。
可以把私钥视为比特币的本质,在管理这些私钥信息时使用的wallet.dat文件也可被视为一种钱包工具。其中包含了与私钥相关的详细信息。然而由于该文件不具备独立操作的功能 通常情况下 在处理该 wallet 文件时使用的 Bitcoin 客户端也可被视为钱包工具

ps:再多补充一句,在某个时间段内某人使用比特币客户端完成一次交易时,“银行卡账户地址”都会不同。但这一现象不应被误解为该用户实际上拥有无限多个比特币账号。这种数据保护机制源自于计算机加密算法的应用。从而防止账户信息被不法分子追踪交易记录进而窃取
4.3 节点
每一个运行比特币客户端的节点称为节点。对节点而言
- 轻量级节点:避免下载完整账本文件,在线获取区块头信息及与个人相关的交易记录(通常适用于手机设备)
- 全局节点:包含全部交易信息的存储结构被称为全全局索引(通常用于普通电脑)
对于客户端而言
黄色:真实网络(在钱包章节中的截图显示为黄色);
绿色:测试网络(拥有一部分实际应用中使用的数据);
蓝色:本地网络(仅限于内部开发测试环境)。
4.4 采矿(mining)
每个交易的信息集合都将采用levelDB数据库进行存储,在比特币网络中每个节点会接收并维护一个相同的记录。在节点之间会争夺对共同维护的记录拥有权的行为被称为挖矿行为。当一个节点成功争夺记录拥有权时不仅会获得对该记录的所有权还会执行一次完整的记录更新操作
4.4.1 采矿本质
在此基础上生成一个随机数值,并对现有区块数据进行处理以执行sha256哈希加密计算;通过计算哈希值判断是否存在满足小于难度值的情况。
4.4.2 难度值
系统通过计算前2016个区块生成区块的平均时间来决定难度值的变化。可能会有所波动。系统无法通过单一人工干预来设定难度值。
4.4.3 矿
矿实际上就是计算出的数字。
4.4.4 采矿过程
假设:
(1)比特网络中有5个矿工,分别为A、B、C、D、E
(2)难度值是:0x0000123456780012
(3)比特网络前2016个区块的数据内容是:
过程:
(1)所有人同时开始计算:sha256(12345678abcd1234abcd5678+一个整数数字)的hash值结果
目的是找到使得【hash值结果 < 难度值】表达式成立的这个整数数字
(2)假设矿工C在某一时刻计算出了整数数字当是100的时候能够使得表达式成立,那么矿工C会立即将这个整数数字公布到比特网络中
(3)同一时刻其余所有矿工立即停止计算,并开始验证这个数字是否真的能让表达式成立
(4)所有矿工验证通过后,证明矿工C这次计算是有效的,那么就允许矿工C将这个计算结果添加到本地的区块链中
(5)同时所有矿工也将这个计算结果添加到自己本地的账本中
(6)比特网络更新难度值,所有矿工重新开始计算,下一轮采矿周期开始
代码解读
4.5 算力
通过上述采矿流程概述可知,在所有参与者中谁的运算效率更高谁就有更大的机会开采到矿石。那么大家可能会好奇这一过程是否简单易行?实际上对于一次sha256算法的计算确实非常容易操作然而大家都知道sha256算法是一种不可逆的单向加密机制它的雪崩效应决定了任何微小的变化都会导致最终的哈希结果发生显著变化因此仅凭几次简单的计算就难以获得目标数值因此必须从基础数值1开始逐步累加计算并进行比对(诚然这是一个枯燥乏味的过程)直到偶然间发现某个数值满足要求为止而运算效率则直接决定了谁能更快捷地找到所需数值在比特币系统中我们将其称作算力即衡量哈希运算效率的标准
k=2^{4}=4 (其中k为参数)
m=2^{8}=256
n=2^{b} (其中b为密钥长度)
t=2^{c} (其中c为密文大小)
当前比特币网络的整体算力已经达到P阶段水平,在这种情况下我们可以看出我们之前所期待通过几次hash运算就能找到结果的想法是多么荒谬。值得注意的是即使普通家用电脑配置下的CPU单核浮点运算能力一般也只有每秒10^12次这样的水平将这一数值折合成哈希计算能力还需进一步折减因此在实际应用中为了寻觅目标数字必须付出极大的努力
由于家用电脑的处理速度较慢,在密码挖掘领域逐渐被显卡、加速器和专用芯片等技术所取代。其中ASIC类设备等同于显卡、加速器和专用芯片等技术手段,在 hash256 计算方面具有特殊用途。然而这些设备虽然主要用于密码挖掘功能,在单个设备的实际应用中依然无法与专业团队相提并论(仍无法超越他人)
pss:每个ASIC都相当于一台矿机;将多台矿机组合在一起就形成了矿场;而将多个这样的矿场进一步整合在一起就组成了规模更大的矿池。
4.6 比特币参数
4.6.1 出块时间
矿工C在一个区块中计算并记录在一个账本上的所需时间为约10分钟。全网参与者在相同的时间段内完成一次计算任务。通过计算发现需要完成的数量令人惊叹。基于前2016个区块的历史数据进行评估。比特网络会根据这些数据动态调整难度值,并维持约两周的时间长度
4.6.2 出块奖励
出块奖励是比特币网络中最核心的内容,并且也是比特币最真实来源的原因。比特网络是一种独特的网络架构,在其创建初期并不存在比特币交易。每当一个参与者成功开采一个区块时(即完成一次记账),比特网络就会为该参与者分配一定数量的比特币作为奖励。这也是比特币最原始的产生机制的基础。
该网络每产生21万笔区块奖励将进行减半调整;最开始时,每个矿工在开采一个区块时将获得50个比特币的奖励;因为该网络每隔10分钟就会生成一个新的区块,所以通过计算每年产生的总新区块数量乘以每个新区块对应的衰减周期(即每天有约6个新区块,每周约42个,每年约1789个)……大致需要四年时间才能完成一次衰减;经过两次调整后,目前每个新区块将带来12.5个比特币的激励
基于简单的数学逻辑可知,在采矿比特网络的过程中一定会出现不再奖励任何比特币的现象的出现。这表明比特币总量已确定不再进行 further发放。而这个过程实际上非常直接:只需要应用等差数列的基本原理即可轻松得出结果为2100万个。这正是第2.4节所阐述的核心原因:货币发行量是由算法决定而非人工指定。
4.7 p2p网络
P2P网络(peer-to-peer网络)被称为点对点连接。它是一种通过用户之间的数据共享实现通信的互联网技术。其特点包括具有较高的抗攻击能力、提供大带宽以及确保所有参与者在系统中处于平等地位
4.8 工作量证明POW
以下是经过改写的文本内容
4.9 比特币地址(bitcoin address)
基于第4.2节所述的hash账户地址。该地址的生成过程具有较高的复杂度,在此之前已经进行了详细的阐述。
(1)本地随机数列获取私钥,然后由私钥生成公钥
(2)使用公钥进行一次sha256运算,然后再使用RIPMD160算法对刚才的结果进行加密得到一个160bit,即20byte字节的数据.
ps:[RIPMD160算法并不是go内置的hash函数,需要下载]
(3)然后将当前网络版本1byte字节的数据作为数据头添加到20byte数据前面,得到21byte字节数据
(4)然后copy这21byte字节数据,然后对他做两次sha256加密运算后,取前4byte字节数据
(5)将刚才的21byte字节数据+这个4byte子节的数据,获得25byte字节的数据
(6)然后进行base58编码,得到bitcoin地址
代码解读

4.10 比特币结构
4.10.1 区块结构
| 字节长度 | 字段 | 说明 |
|---|---|---|
| 4 | 区块大小 | 用字节表示的该字段之后的区块大小 |
| 80 | 区块头 | 组成区块头的几个字段 |
| 1-9 | 交易计数器 | 该区块包含的交易数量,包含coinbase交易 |
| 不定 | 交易列表 | 记录在区块里的交易信息 |
4.10.2 区块头结构
| 字节长度 | 字段 | 说明 |
|---|---|---|
| 4 | 区块版本号 | 区块版本号 |
| 32 | 父区块头哈希值 | 前一个区块头的哈希值 |
| 32 | Merkle根哈希 | 交易列表生成的默克尔树根哈希 |
| 4 | 时间戳 | 该区块产生的近似时间,精确到秒的UNIX时间戳 |
| 4 | 难度目标 | 难度目标,挖矿难度值 |
| 4 | Nonce | 挖矿过程中使用的随机值 |
gettransaction 交易hash
decoderawtransaction 获得的交易信息中的交易hex
asm
数字签名在应用验证过程中的使用可通过bitcoin软件控制台输入【gettransaction 交易hash

