美文网首页区块链研习社金马带你定投区块链
基哥探索区块链——比特币地址

基哥探索区块链——比特币地址

作者: o行者o | 来源:发表于2018-01-19 19:34 被阅读92次

开场白

前段时间断断续续了解了区块链的基本概念、 原理、技术等, 感觉大多数的文章都是千篇一律, 都是介绍区块链就是使用了钱包使用了非对称加密算法, 挖矿使用了pow、 pos、 dpos,网络使用了去中心化得p2p, 存储使用了区块, 还有什么零知识证明、 闪电网络、 侧链等新技术, 感觉都是复制粘贴转载了白皮书的介绍,吹嘘使用的技术多么流弊, 带着币圈的浮躁, 感觉似乎已经能颠覆世界, 但潜心研究区块链技术的文章太少。 空谈误国, 实干兴邦, 基哥只希望潜心探索区块链, 一层层拨开区块链神秘的乌沙, 把各种神秘的技术用技术的语言解释记录下来。

钱包地址

对区块链有基本了解的应该都知道钱包使用的最多的词就是公钥、 私钥、 地址。

  1. 私钥相当于钱包的钥匙
  2. 公钥相当于银行卡
  3. 地址相当于银行卡号

私钥和公钥是使用非对称加密生成, 比特币使用的是椭圆曲线算法。
地址是使用公钥作为payload用哈希算法生成的散列值再用base58加密展示。

相关的基本概念网上有很多通俗易懂的解释,这里主要解释比特币地址生成的过程。

  1. 使用公钥进行信息摘要处理, 比特币使用的是双哈希也叫哈希160, 先使用SHA256再使用RIPEMD160处理生成digest
  2. 对生成的摘要使用base58check进行encoding, base58check带有校验功能, 流程如图所示


    image.png
  • 首先对生成的摘要加上version prefix, 参考文献wiki上有version的定义, 钱包地址使用的是0


    image.png
  • 使用两次SHA256生成信息摘要并取前4个字节作为校验码checksum

  • 拼接version+payload+checksum

  • 使用base58加密算法生成地址

以上的各个步骤会用python代码解释

from secp256k1 import PrivateKey, PublicKey
from binascii import hexlify, unhexlify

import hashlib
import base58

#生成私钥公钥
privkey = PrivateKey()
pri_key = privkey.serialize()

print "pri_key: %s" % pri_key
pub_key  = hexlify(privkey.pubkey.serialize())
print "pub_key: %s" % pub_key

#使用sha256 对公钥进行第一次哈希处理
intermed = hashlib.sha256(unhexlify(pub_key)).digest()

#使用ripemd160 对sha256生成的摘要进行第二次哈希处理
digest = hashlib.new('ripemd160', intermed).digest()

#根据比特币的定义钱包地址的version为0, 再payload之前加上
payload = chr(0) + digest

#对payload进行2次sha256的哈希处理, 并取前面4个字节作为校验码
checksum = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4]

#把checksum拼接在payload的尾部
payload = payload +checksum

#使用base58进行加密处理
addr = base58.b58encode(payload)
print "wallet addr: %s" % addr

运行结果

pri_key: 309ab3a4e26be042196a66f45d787d45feff36e32eccfb875e0464191fb8565d
pub_key: 02bafbedeea575352c209ac4fa1930bcf2bb8051acca9f2fabe777517fa6b92e3f
wallet addr: 1JB5evkY74A2JhHiNUqUm9v1x4uN43WE8v

参考文献

Technical background of version 1 Bitcoin addresses
Base58Check encoding
Private key

相关文章

  • 基哥探索区块链——比特币地址

    开场白 前段时间断断续续了解了区块链的基本概念、 原理、技术等, 感觉大多数的文章都是千篇一律, 都是介绍区块链就...

  • 区块链、比特币理解笔记

    此篇文章适合知道区块链、比特币名词,但是不理解的朋友。 先说一下区块链和比特币的联系吧。区块链是比特币的基...

  • aaa

    比特币地址生成算法详解 比特币钱包地址生成代码-go实现 区块链以太坊以及hyperledger总结区块链技术 默...

  • 比特币白皮书解读

    没有比特币就没有区块链,没有区块链就没有比特币。 可见,比特币是区块链是多么的密切相关,而且比特币也可以说是区块链...

  • 《精通比特币》读书笔记(二)

    区块链数据查询网站Blockchain info是一个比特币的搜索引擎,可以搜索比特币的地址、交易和区块。比特币系...

  • 解读“区块链”

    区块链和比特币的关系 比特币与区块链,更像是鸡与蛋的关系。 比特币是区块链技术的第一个应用,区块链技术也是由比特币...

  • 微众银行张开翔:区块链可成为多种领域的连接器。你怎么看?

    同意这个看法。 很多人以为区块链就是比特币,比特币就是区块链、数字货币就是区块链。其实不然,区块链是比特币等数字货...

  • 轻松理解比特币侧链机制

    侧链白皮书:用楔入式侧链实现区块链的创新 对话 小明:我有一个比特币地址和一个莱特币地址,我可以把比特币发到莱特币...

  • 探索区块链技术

    区块链技术来源 谈到区块链,就不得不提比特币,区块链作为比特币的底层技术,是伴随着比特币而产生的。比特币交易机制中...

  • 唯有跳出“比特币区块链”的思维和范式,区块链发展才能实现自我“救

    必须清楚地看到,比特币只是区块链应用的一个成果,“比特币不等于区块链”。区块链是多种技术的集成,比特币只是区块链多...

网友评论

    本文标题:基哥探索区块链——比特币地址

    本文链接:https://www.haomeiwen.com/subject/lzraoxtx.html