《精通比特币》读书记录steemCreated with Sketch.

in #cn7 years ago

一、快速术语检索

1.比特币地址:(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串字符和数字组成,以阿拉伯数字“1”开头。就像别人向你的email地址发送电子邮件一样,他可以通过你的比特币地址向你发送比特币。
2.比特币:既可以指这种虚拟货币单位,也指比特币网络或者网络节点使用的比特币软件。
3.区块:一个区块就是若干交易数据的集合,它会被标记上时间戳和之前一个区块的独特标记。区块头经过哈希运算后会生成一份工作量证明,从而验证区块中的交易。有效的区块经过全网络的共识后会被追加到主区块链中。
4.区块链是一串通过验证的区块,当中的每一个区块都与上一个相连,一直连到创世区块。
5.交易确认:当一项交易被区块收录时,我们可以说它有一次确认。矿工们在此区块之后每再产生一个区块,此项交易的确认数就再加一。当确认数达到六及以上时,通常认为这笔交易比较安全并难以逆转。
6.难度:整个网络会通过调整“难度”这个变量来控制生成工作量证明所需要的计算力。
7.难度目标:使整个网络的计算力大致每10分钟产生一个区块所需要的难度数值即为难度目标。
8.难度调整:整个网络每产生2,106个区块后会根据之前2,106个区块的算力进行难度调整。
9.矿工费:交易的发起者通常会向网络缴纳一笔矿工费,用以处理这笔交易。大多数的交易需要0.5毫比特币的矿工费。
10.矿工:指通过不断重复哈希运算来产生工作量证明的各网络节点。
11.比特币网络:是一个由若干节点组成的用以广播交易信息和数据区块的P2P网络。
12.交易:简单地说,交易指把比特币从一个地址转到另一个地址。更准确地说,一笔“交易”指一个经过签名运算的,表达价值转移的数据结构。每一笔“交易”都经过比特币网络传输,由矿工节点收集并封包至区块中,永久保存在区块链某处。
13.钱包:指保存比特币地址和私钥的软件,可以用它来接受、发送、储存你的比特币。

二、介绍

什么是比特币

不同于传统货币,比特币是完全虚拟的。它不但没有实体,本质上也没有一种虚拟物品代表比特币。
比特币隐含在收发币的转账记录中。用户只要有证明其控制权的密钥,用密钥解锁,就可以发送比特币。
这些密钥通常存储在计算机的数字钱包里。拥有密钥是使用比特币的唯一条件,这让控制权完全掌握在每个人手中。
本质上,挖矿把央行的货币发行和结算功能进行分布式,用全球化的算力竞争来取代对中央发行机构的需求。
比特币系统包含调节挖矿难度的协议。挖矿——在比特币网络中成功写入一个区块交易——的难度是动态调整的,保证不管有多少矿工(多少CPU)挖矿,平均每10分钟只有一个矿工成功。
比特币协议还规定,每四年新币的开采量减半,同时限制比特币的最终开采总量为2,100万枚。这样,流通中的比特币数量非常接近一条曲线,并将在2140年比特币将达到2,100万枚。由于比特币的开采速度随时间递减,从长期来看,比特币是一种通货紧缩货币。此外,不能通过“印刷”新比特币来实现“通货膨胀”。
比特币由这些构成:

一个去中心化的点对点网络(比特币协议)
一个公共的交易账簿(区块链)
一个去中心化的数学的和确定性的货币发行(分布式挖矿)
一个去中心化的交易验证系统(交易脚本)

比特币钱包-客户端

完整客户端:

一个完整客户端,或称“全节点”,是存储所有比特币交易的整个交易历史(由每一个用户完成的每一笔交易,曾经所有的每一笔)的客户端,管理用户的钱包,并可以在比特币网络上直接开始交易。
类似于一个独立的电子邮件服务器,因为它处理着协议的各个方面,而不依赖于任何其它的服务器或第三方服务。

轻量级客户端

一个轻量级客户端存储用户的钱包,但需要依赖第三方服务器才能进行比特币交易,才能接入比特币网络。
轻量级客户端不保存所有交易的完整副本,因此必须信赖第三方的服务器来获取交易确认。
这就类似于一个独立的电子邮件客户端,能够通过邮箱服务器来访问一个邮箱,因为它在网络交流中依赖于一个第三方服务器。

在线客户端

在线客户端通过网页浏览器在第三方服务器上访问和储存该用户的钱包。
这类似于在线邮件,因为它完全依赖于第三方服务器。

移动客户端

智能手机的移动客户端,例如基于Android系统,既可以作完整客户端运行,也可作为轻量级客户端或在线客户端。
一些移动客户端是与在线客户端或桌面客户端同步的,提供跨多个设备但有一个共同的资金源的多平台钱包。

比特币客户端的选择,取决于用户想要管理资金的数目。一个完整的客户端将为用户提供最高级的管理和独立性。这样钱包的备份和安全责任就转移到了用户身上。另一种选择是在线客户端,其设置和使用是最简单的,但在线客户端的取舍还在于需衡量第三方介入的风险,因为安全性和控制权是由用户和网页服务商所共同承担的。如果一个在线钱包服务遭受了损失,就像已发生过的那样,用户们可能会失去所有的资金。反过来看,如果用户的一个完整客户端没有进行适当的备份,他们可能会因为电脑的操作失误而丢失他们的资金。

三、比特币基本原理

概述

从千分之一比特币(1毫比特币)到一亿分之一比特币(1聪比特币),比特币网络可以处理任意小额交易。在本书中,我们将用“比特币”这个术语来表示任意数量的比特币货币,从最小单元(1聪)到可被挖出的所有比特币总数(21,000,000)。
交易包含了每一笔被转移的比特币(输入)的所有权证明,它以所有者的数字签名形式存在,并可以被任何人独立验证。
在比特币术语中,“消费”指的是签署一笔交易:转移一笔以前交易的比特币给以比特币地址所标识的新所有者。

比特币交易

交易告知全网:比特币的持有者已授权把比特币转帐给其他人。而新持有者能够再次授权,转移给该比特币所有权链中的其他人,产生另一笔交易来花掉这些比特币,后面的持有者在花费比特币也是用类似的方式。
交易形式
最常见的交易形式是从一个地址到另一个地址的简单支付,这种交易也常常包含给支付者的“找零”
另一种常见的交易形式是集合多个输入到一个输出的模式。这相当于现实生活中将很多硬币和纸币零钱兑换为一个大额面钞。像这样的交易有时由钱包应用产生来清理许多在支付过程收到的小数额的找零。
最后一种在比特币账簿中常见的交易形式是将一个输入分配给多个输出,即多个接收者(如图2-7)的交易。这类交易有时被商业实体用作分配资金,例如给多个雇员发工资的情形。
交易的构建。比特币交易建立和签名时不用连接比特币网络。只有在执行交易时才需要将交易发送到网络。
完整客户端占太大的硬盘空间,所以大多数钱包使用轻量级的客户端,只保存用户自己的未消费输出。如果钱包客户端没有某一未消费交易输出,它可以通过不同的服务者提供的各种API或完整索引节点的JSON PRC API从比特币网络中拿到这一交易信息。

curl 'https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK'

返回:
{
"unspent_outputs":[

    {
        "tx_hash":"f2c245c38672a5d8fba5a5caa44dcef277a52e916a0603272f91286f2b052706",
        "tx_hash_big_endian":"0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2",
        "tx_index":47854970,
        "tx_output_n": 1,
        "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
        "value": 8450000,
        "value_hex": "0080efd0",
        "confirmations":217419
    },

    {
        "tx_hash":"0365fdc169b964ea5ad3219e12747e9478418fdc8abed2f5fe6d0205c96def29",
        "tx_hash_big_endian":"29ef6dc905026dfef5d2be8adc8f4178947e74129e21d35aea64b969c1fd6503",
        "tx_index":71083209,
        "tx_output_n": 0,
        "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
        "value": 100000,
        "value_hex": "0186a0",
        "confirmations":161802
    },

    {
        "tx_hash":"d9717f774daab8d3dd470853204394c82e3c01097479575d6d2ee97d7b3bdfa1",
        "tx_hash_big_endian":"a1df3b7b7de92e6d5d57797409013c2ec8944320530847ddd3b8aa4d777f71d9",
        "tx_index":75974855,
        "tx_output_n": 0,
        "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
        "value": 1000000,
        "value_hex": "0f4240",
        "confirmations":153961
    },

    {
        "tx_hash":"3f1df69df90d097981ca9c97ad8b6a32daed345565a433f8c8e472b2dab2ac79",
        "tx_hash_big_endian":"79acb2dab272e4c8f833a4655534edda326a8bad979cca8179090df99df61d3f",
        "tx_index":79887883,
        "tx_output_n": 1,
        "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
        "value": 719787,
        "value_hex": "0afbab",
        "confirmations":148074
    },

    {
        "tx_hash":"417bdb6f5db3e830407f94d1a82d1667e738b19da3679b7263ebfb913394efdd",
        "tx_hash_big_endian":"ddef943391fbeb63729b67a39db138e767162da8d1947f4030e8b35d6fdb7b41",
        "tx_index":170905487,
        "tx_output_n": 0,
        "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
        "value": 10000,
        "value_hex": "2710",
        "confirmations":67883
    },

    {
        "tx_hash":"d049d6039f9d1cb2625bac294d7465b4b1077bd5bc0e30e01e02b184db524c1f",
        "tx_hash_big_endian":"1f4c52db84b1021ee0300ebcd57b07b1b465744d29ac5b62b21c9d9f03d649d0",
        "tx_index":174630347,
        "tx_output_n": 0,
        "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
        "value": 11100,
        "value_hex": "2b5c",
        "confirmations":65345
    },

    {
        "tx_hash":"b8a6470c7a38d0983effed00a3f75c74ba371da1387352f35d1df155851ea8d1",
        "tx_hash_big_endian":"d1a81e8555f11d5df3527338a11d37ba745cf7a300edff3e98d0387a0c47a6b8",
        "tx_index":175949432,
        "tx_output_n": 0,
        "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
        "value": 10000,
        "value_hex": "2710",
        "confirmations":64439
    },

    {
        "tx_hash":"a2b9570e26e3991fc999c42dc8c6eea7b06514b61814da1a71b56c6ba2ae651c",
        "tx_hash_big_endian":"1c65aea26b6cb5711ada1418b61465b0a7eec6c82dc499c91f99e3260e57b9a2",
        "tx_index":175955161,
        "tx_output_n": 0,
        "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
        "value": 10000,
        "value_hex": "2710",
        "confirmations":64430
    },

    {
        "tx_hash":"05230cb8cd8c6a3788ed41433dfdd68a1a608cc8feb3bc1c29d97ce84bec070e",
        "tx_hash_big_endian":"0e07ec4be87cd9291cbcb3fec88c601a8ad6fd3d4341ed88376a8ccdb80c2305",
        "tx_index":175955664,
        "tx_output_n": 0,
        "script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
        "value": 10000,
        "value_hex": "2710",
        "confirmations":64430
    }

]

}
查看交易详细信息:
https://blockchain.info/tx/${tx_hash_big_endian}

创建交易输出

交易的输出会被创建成为一个包含这笔数额的脚本的形式,只能被引入这个脚本的一个解答后才能兑换。
简单点说就是,支付方的交易输出会包含一个脚本,这个脚本说 “这个输出谁能拿出一个签名和接收方的公开地址匹配上,就支付给谁”。因为只有接收方钱包的私钥可以匹配这个地址,所以只有接收方的钱包可以提供这个签名以兑换这笔输出。因此支付方式会用需要接收方的签名来包装一个输出。
假如支付方的地址上,金额是0.10比特币的输出形式,而此次交易只需要支付0.015比特币,就需要找0.085比特币的零钱。支付方的钱包将自己的金额分成了两个支付:一个给接收方,一个给自己。她可以在以后的交易里消费这笔零钱输出。
最后,为了让这笔交易尽快地被网络处理,支付方的钱包会多付一小笔费用。这个不是明显地包含在交易中的,而是通过输入和输出的差值所隐含的。这个差值会就被矿工当作交易费放到区块的交易里,最终放进区块链帐薄中。
支付方的钱包应用创建的交易大小为258字节,包含了金额未来所属需要的全部信息。最后的最后,这个交易必须要被传送到比特币网络中以成为分布式账簿(区块链)的一部分。

Coin Marketplace

STEEM 0.19
TRX 0.14
JST 0.030
BTC 60268.51
ETH 3201.96
USDT 1.00
SBD 2.43