比特币通过“挖矿”产生
挖矿:验证比特币交易的同时参与竞赛来解决一个数学问题,全球化的算力竞争来取代对中央发行机构的需求
比特币系统包含调节挖矿难度的协议。挖矿难度是动态调整的,保证不管有多少矿工(CPU)挖矿,平均每10分钟只有一个矿工成功。
Alice向Bob支付0.05比特币买一杯咖啡..
给定素数p和椭圆曲线E G为指定基点
对 K=kG,已知k和G计算K比较容易,而由G和K计算k则比较困难
至今没有有效的方法来解决这个问题,这就是椭圆曲线算法原理之所在.
私钥可以是1和n-1之间的任何数字,其中n是一个常数(\(n=1.158*10^{77}\),略小于\(2^{256}\)),由比特币所使用的椭圆曲线的阶所定义。 一般是通过在一个密码学安全的随机源中取出一长串随机字节,对其使用SHA256哈希算法进行运算,这样就可以方便地产生一个256位的数字。 如果运算结果小于n-1,我们就有了一个合适的私钥。
生成 KidsCharity 开头的地址
比特币的交易验证引擎依赖于两类脚本来验证比特币交易:一个锁定脚本和一个解锁脚本。
比特币网络上的大多数交易都是P2PKH交易,此类交易都含有一个锁定脚本,该脚本由公钥哈希实现阻止输出功能
锁定脚本
OP_DUP OP_HASH160 (Cafe Public Key Hash) OP_EQUAL OP_CHECKSIG Cafe Public Key Hash即为咖啡馆的比特币地址Hash
解锁脚本
(Cafe Signature) (Cafe Public Key)
将两个脚本结合起来可以形成如下有效组合脚本
(Cafe Signature) (Cafe Public Key) OP_DUP OP_HASH160 (Cafe Public Key Hash) OP_EQUAL OP_CHECKSIG
与P2PKH相比,P2PK模式更为简单。公钥本身已经存储在锁定脚本中,而且代码长度也更短。P2PKH是由Satoshi创建的,主要目的一方面为使比特币地址更简短,另一方面也使之更方便使用。P2PK目前在Coinbase交易中最为常见,Coinbase交易由老的采矿软件产生,目前还没更新至P2PKH。
锁定脚本
(Public Key A) OP_CHECKSIG
解锁脚本
(Signature from Private Key A)
将两个脚本结合起来可以形成如下有效组合脚本
(Signature from Private Key A) (Public Key A) OP_CHECKSIG
假如记录在脚本中的公钥个数为N,则至少需提供其中的M个公钥才可以解锁。这也被称为M-N组合,其中,N是记录在脚本中的公钥总个数,M是使得多重签名生效的公钥数阀值
锁定脚本
M (Public Key 1) (Public Key 2) ... (Public Key N) N OP_CHECKMULTISIG
解锁脚本
OP_0 (Signature B) (Signature C)
将两个脚本结合起来可以形成如下有效组合脚本 M=2 N=3
OP_0 (Signature B) (Signature C) 2 (Public Key A) (Public Key B) (Public Key C) 3 OP_CHECKMULTISIG
验证未解锁脚本是否含有与3个公钥中的任意2个相一致的私钥的有效签名。
储存私钥:
记录UTXO
SPV节点只需下载区块头,而不用下载包含在每个区块中的交易信息。由此产生的不含交易信息的区块链,大小只有完整区块链的1/1000。SPV节点不能构建所有可用于消费的UTXO的全貌,这是由于它们并不知道网络上所有交易的完整信息。SPV节点验证交易时所使用的方法略有不同,这个方法需依赖对等节点“按需”提供区块链相关部分的局部视图。
区块结构:
区块头:
哈希二叉树,作快速归纳和校验大规模数据完整性的数据结构

比特币网络中几乎每个节点都会维护一份未确认交易的临时列表,被称为内存池或交易池

根据节点算力的提升, 减小目标阀值, 使10分钟左右生成一个区块
New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes)
为了扩充比特币的交易量
当前,比特币网络只支持每秒约7笔交易,而Visa则每秒大约支持45000笔交易
扩大区块? 侧链?