Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

区块链地址生成算法

一杯浓咖啡
81 0 0
地址是为了人们交换方便而弄出来的一个方案,因为公钥太长了(130字符串或66字符串)。地址长度为25字节,转为base58编码后,为34或35个字符。base58是类似base64的编码,但去掉了易引起视觉混淆的字符,又在地址末尾添加了4个字节校验位,保障在人们交换个别字符错误时,也能够因地址校验失败而制止了误操作。
" X3 |9 n: w4 o. ?* K" M7 U由于存在公钥有两种形式,那么一个公钥便对应两个地址。这两个地址都可由同一私钥签署交易。
. P) Y2 D, H; t& N公钥生成地址的算法:
  V/ G: C- ^+ }; ~& J3 D$ @9 sVersion = 1 byte of 0 (zero); on the test network, this is 1 byte of 111
" |) w8 \2 A/ eKey hash = Version concatenated with RIPEMD-160(SHA-256(public key))
8 h6 _6 c1 a0 ]+ x7 z& ^( |Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))
" x( U2 j7 z" G  D9 bBitcoin Address = Base58Encode(Key hash concatenated with Checksum)
* f1 r. t2 H# p# a! i5 W: S下图是非压缩公钥生成地址的过程:$ l5 W) J0 Y& `& U, ]2 V, B

, g* W: |. m5 D1 T  p对于压缩公钥生成地址时,则只取公钥的X部分即可。
( J  w( M, F! }! c  G8 ]推导关系+ b" ?4 T0 O  w) C2 l1 F/ o
三者推导关系:私钥 >> 公钥 >> 两个地址。过程均不可逆。拥有私钥便拥有一切,但通常为了方便,会把对应的公钥、地址也存储起来。
: O+ @. \6 q/ f$ x2 C" r3 J0 T-----------------------以下来源于百度http://zhidao.baidu.com/link?url=-iAaP8yzPO7NI4ruKOtmowXhR4FONK5cdx7IqFWkHuCwA8XFt9I82LOlGAGoJko06gQxs5qI0lKtvr8ndC0Qp76eW0rg_lx7CTf9FVyaF2u ---------------% _) z8 |3 x# q. G* P) [
比特币地址的生成过程
- x  A6 D: A# G$ l9 a, [6 U6 ^! ?(说明: 有些数字以"0x"开头,意思是此数字使用十六进制表示法。"0x"本身没有任何含义,它是C语言流传下来的,约定俗成的写法,比如0xA就是十进制的10。另外,1个字节 = 8位二进制 = 2位十六进制)。. J1 W/ d7 |' T( _" a/ Z( a
第一步,随机选取一个32字节的数、大小介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间,作为私钥。
1 w, M- u* C* V/ t, |% @8 x' J18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725
) n, a5 J) |- V0 Q1 Q! X( T第二步,使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥。 (共65字节, 1字节 0x04, 32字节为x坐标,32字节为y坐标)关于公钥压缩、非压缩的问题另文说明。# U& M1 Q- k* A' @+ y
0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B' b% Z& |! t3 ~: T: G- T
23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6- T" j" k1 r, _1 x. J+ ~
第三步,计算公钥的 SHA-256 哈希值
! |1 c# Q7 Y: ~$ a/ F600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B4088 L7 a/ c2 C: I( p- S
第四步,取上一步结果,计算 RIPEMD-160 哈希值
( Q; R$ o/ V* B$ R4 D* c010966776006953D5567439E5E39F86A0D273BEE
% u/ Q* t4 `% M. F% r0 r第五步,取上一步结果,前面加入地址版本号(比特币主网版本号“0x00”)
) Z, T/ A  ~0 _4 B' o! z00010966776006953D5567439E5E39F86A0D273BEE$ F  F7 D1 u8 p& X0 Z4 x% J
第六步,取上一步结果,计算 SHA-256 哈希值
* a0 g; |2 S" J( F  A; W% ^445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094
" ^4 \: q3 u5 A6 i1 @+ X$ B第七步,取上一步结果,再计算一下 SHA-256 哈希值(哈哈)
2 n, j- D  c+ `, K; i) uD61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A304 C& u$ ]4 T" o* k/ g/ T
第八步,取上一步结果的前4个字节(8位十六进制)
1 T3 H/ ~' M; V( ]. ID61967F6, c) d9 k5 {( X. B8 r
第九步,把这4个字节加在第五步的结果后面,作为校验(这就是比特币地址的16进制形态)。
8 _/ T* J! e( @" \, f) U00010966776006953D5567439E5E39F86A0D273BEED61967F6& x5 j9 Y: E- P9 ~0 u4 r7 Q$ h
第十步,用base58表示法变换一下地址(这就是最常见的比特币地址形态)。
) \- v' S  {/ Q# e6 p16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM6 [9 d  ^: P. {+ ^0 T* }. s
------------------------------来自于以太坊黄皮书-------------------------------------------------------) L8 F9 d  i8 s5 G4 i
以太坊地址生成算法0 {! |+ t# O: `4 }* r+ l
1 j( O# ~! C2 S1 F+ k; I; ^0 I
------------------------------来自于以太坊白皮书------------------------------------------------------------------------5 L1 G- Z0 s! ?& z
https://github.com/ethereum/wiki/wiki/White-Paper#ethereum-accounts
; p: U  _1 q( P$ Y7 @' F" U# q: pEthereum Accounts
' z7 M8 [& h' O9 u1 b/ _, nIn Ethereum, the state is made up of objects called “accounts”, with each account having a 20-byte address and state transitions being direct transfers of value and information between accounts.0 C" i6 s  |: |" F1 e
以太坊中,账户包含20字节的地址,以及账户之间价值和信息的传递的状态转换。4 |! @' c0 y7 i( R  n# W, q
An Ethereum account contains four fields:
2 o1 W$ p" ~4 W" kThe nonce, a counter used to make sure each transaction can only be processed once. Y) l+ M; e1 L1 p! n
The account’s current ether balance" L! A$ ]8 {% {0 y
The account’s contract code, if present8 N1 n( ?1 ~" L1 n7 b5 \1 B
The account’s storage (empty by default)) ]9 J: J9 m  Q* _0 t) U
以太坊账户包含4个部分:, A; V' I1 l; m6 c: f; q
nonce 是一个计数器用于确保每笔交易只被处理一次& G8 |1 b3 q! m' Q* ~$ K3 h! z
账户当前以太币数量& O& \) e4 a3 \. N
合约代码
* O; D- o  N- s1 {$ O" M: A3 |以太坊存储空间?
- V6 T% h$ d2 m# T“Ether” is the main internal crypto-fuel of Ethereum, and is used to pay transaction fees.9 A# Q! [$ O) K% I; Y
以太币是以太坊中的主要密码货币,用于支付交易费用
9 B& E/ j! h% ~8 g* s$ h/ Z( MIn general, there are two types of accounts: externally owned accounts, controlled by private keys, and contract accounts, controlled by their contract code. An externally owned account has no code, and one can send messages from an externally owned account by creating and signing a transaction; in a contract account, every time the contract account receives a message its code activates, allowing it to read and write to internal storage and send other messages or create contracts in turn.
* C' L: s" s1 b: }1 E6 X, b以太坊中有两种账户:外部用户的账户,通过私钥控制;智能合约账户,通过合约代码控制。
- k# k  O3 L+ Z- M9 O1 C) U! O外部用户账户不包含代码,用户可以通过创建和签署交易来给外部用户账户发送信息。
( K' G! g7 e, a# V7 ?合约账户,每次接受到信息时,合约代码开始工作,允许读取、写入内部存储,已结发送信息,或者反过来创建合约。3 b2 k: C, Z- K1 }) L
Note that “contracts” in Ethereum should not be seen as something that should be “fulfilled” or “complied with”; rather, they are more like “autonomous agents” that live inside of the Ethereum execution environment, always executing a specific piece of code when “poked” by a message or transaction, and having direct control over their own ether balance and their own key/value store to keep track of persistent variables.2 f+ P% [& P( d: h' y! @
注意以太坊中的合约不应该被视为某种可以被完成,被遵守的恭喜。它们更像是以太坊环境的自治代理机构。能够直接控制它们的以太币和秘钥来追踪持续变量。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

一杯浓咖啡 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5