比特币采用SHA-256、RIPEMD-160哈希算法生成密钥,使用SHA-256作nonce碰撞以挖矿
Bitcoin一般指p2p网络,bitcoin一般指代币
图灵完备
图灵完备指的是可以用一系列操作来描述所有可计算问题。
比特币不是图灵完备的,因为它没有条件判断语句,不能执行循环,也不会产生递归
Tx/Block hashes内置的数据类型首选little endian
Little endian 与 Big endian
(
big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效字节(LSB)
所有网络协议都是采用big endian的方式来传输数据的。所以有时我们也会把big endian方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。采用big endian方式存储数据是符合我们人类的思维习惯的
PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据
X86 系列 CPU都是 little-endian 的, BIG-ENDIAN、LITTLE-ENDIAN跟多字节类型的数据有关,比如int,short,long型。
比如 int a = 0x05060708
在BIG-ENDIAN的情况下存放为:
字节号 0 1 2 3
数据 05 06 07 08
在LITTLE-ENDIAN的情况下存放为:
字节号 0 1 2 3
数据 08 07 06 05
Transaction交易类型
- 1.Generation(挖矿)
- 2.Pay to Pubkey Hash
- 3.Pay to Script Hash(脚本Hash)
比特币的交易(Transation,缩写Tx),并不是通常意义的交易,例如一手交钱一手交货,而是转账。交易由N个输入和M个输出两部分组成。交易的每个输入便是前向交易的某个输出,那么追踪到源头,必然出现一个没有输入的交易,此类交易称为CoinBase Tx。CoinBase类交易是奖励挖矿者而产生的交易,该交易总是位于Block块的第一笔
私钥
256位、32字节
迷你私钥存在安全问题,因为输入集合太小,易被构造常见组合的彩虹表暴力破解,所以通常还是使用系统随机生成的比较好,无安全隐患
公钥
公钥有两种形式:压缩与非压缩
早期比特币均使用非压缩公钥。其左右两个32字节是有关联的,左侧(X)可以推出右侧(Y)的平方值,有左侧(X)就可以了
两种公钥的首个字节为标识位,压缩为33字节,非压缩为65字节。以0x04开头为非压缩,0x02/0x03开头为压缩公钥,0x02/0x03的选取由右侧Y开方后的奇偶决定
压缩形式可以减小Tx/Block的体积,每个Tx Input减少32字节
部分参考https://www.8btc.com/wiki/bitcoin-basic-concepts
The BitCoin Scripting Language
- P2PK (Pay to Public Key)
- P2PKH (Pay to Public Key Hash)。最常用的形式
- P2SH (Pay to Script Hash),通过软分叉加入的
比特币要证明交易包含在区块中,不需要排序。证明不在区块中,需要排序
比特币地址1(WIF地址)或3(多签名地址)开头
bitcoin-core使用AES-256-CBC加密钱包文件