「我家今晚没人,这是我的地址。」
我们昨天介绍了区块链的基本架构,
知道交易纪录如何在区块链上保存、连接。
从最外层开始看起,
区块链里面有区块,由矿工去更改Nonce值,
最後将这些区块用哈西值 (杂凑值)链起来,达到不可窜改性。
区块里面包含几个部分:
使用的版本、难度、上一区块的杂凑值、交易资料的Merkle Root、时间戳记、Nonce
我们在两天前有秀过区块的内容。
今天我们要更着重於交易资讯内容里非常重要的资讯:地址。
先放上一个交易内容。
这可不是普通的交易,这个是比特币有史以来第一个交易。
可以看到此交易的杂凑值,以及金额50BTC,时间是2009/01/04
新产生的比特币转到某个人的帐户(1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa)里,
而这个人大概就是中本聪。
(之後还有很多人打币给他,所以余额并不是50BTC)
不过那并不是重点,
今天的重点是,这个地址是怎麽回事。
标题下的很烂,不过就是这麽回事。
区块链的地址是由「私钥→公钥→地址」的流程变来的,
私钥变公钥,公钥不能变私钥这件事情我们已经知道了,
那地址能不能变公钥呢?
答案是不行。
先卖个关子,等你看完应该就理解了,我们还是一步一步来,从头开始。
比特币的私钥为256位元,
可以从0x1到
0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140
中任选一个数字,每一个数字在secp256k1这个椭圆曲线上都是可行的。
我们都会有一个疑问,随机挑一个数字真的可行吗?
如果我跟另外一个人挑到一样的数字,那不就完了?
答案是,还真的完了。
虽然完了,但也不太可能发生。
256位元就意味着总共有 个数字,或者说1.16 × 个数字
而全球人口四舍五入後不过就(100亿),要想抽到同一个数字实在不简单。
所以实在没有碰撞的可能性。
公钥由私钥产生,而比特币使用的是 secp256k1 这个椭圆曲线,
还记得我们在说明ECC(DAY 15)时有说到
K=k*G
其中K是公钥,k是私钥,G是基点,
G的压缩型是
02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
藉由运算就可以得到相对应的私钥。
椭圆曲线是在直角坐标上点的运算,因此会有x座标和y座标。
而压缩型就是在表示时不标示y座标,因为 y 是可以从 x 推算出来的。
虽然如此,椭圆区线上同一个 x 座标可以对应到两个 y 座标,
於是我们需要在公钥前加上前缀(prefix)。
所以你可以回去看到基点G的开头是02,代表这是一个压缩型的表示方式且y座标 > 0
而未压缩型的G是
04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
两个表示方式的长度差了一倍。
地址是由公钥导出来的,
首先会先过两层杂凑函数,第一个是SHA-256,第二个是ripemd160(也是杂凑函数)。
我称这个运算後的值为公钥杂凑值好了
*我们等一下会组合成一个值,我称它为「准地址」,这个值接着使用base58编码後就会成为地址。
准地址由三个部分组成,0x00、公钥杂凑值、校验格。依序排列。
其中校验格 = SHA(SHA(0x00公钥杂凑值))的前四位元组(byte)
以上是 P2PKH (Pay to Public Key Hash) 格式的地址产生方式,他的开头会是1。
另外一种P2SH (pay to script hash)格式是比较新的表示方法,开头是3。
他的生成方式如下,我就不一一解释了。
P2PKH和P2SH有不同的性质,在交易上会有差别,
不过那个不是我们今天的讨论范围,有兴趣的人可以去读 这篇。
大概是铁人30天目前花最多时间的一篇(还自己做图天啊)
因为是没有学过的东西,所以花蛮多时间统整资料的,
若有错误再请不吝指教。
那麽,明天见!
参考资料:
https://know.zombit.info/私钥公钥与地址/
https://www.0x1.academy/wallet/address
https://medium.com/coinmonks/how-to-generate-a-bitcoin-address-step-by-step-9d7fcbf1ad0b
https://en.bitcoin.it/wiki/Private_key
在Day3 Pipeline 如何做版本控制 - NiFi Registry就有提到 NiFi Re...
这是 Roblox 从零开始系列,入门章节的第十三个单元,我们的游戏出现Bug了,那就是死亡後分数还...
传统编辑器的作用,就是把 HTML 转换为我们所见的网页的过度性产品 Classic Editor...
硬碟空间调整 这几天的议题环绕在硬碟的使用,那今天就说得轻松的主题如何在GKE中改变硬碟的空间大小,...
面量图介绍 面量图又称分层设色图、区域密度图(Choropleth map),高中地理课本的说明是在...