比特币地址(Bitcoin Address)是用于接收和发送比特币的唯一标识符,类似于传统金融系统中的银行账号。一个比特币地址由一串字母和数字组成,通常以1、3或bc1开头,具体长度为26至35个字符。以下是比特币地址的主要类型及其特点:

  1. P2PKH地址(Pay-to-PubKey-Hash)

    • 以“1”开头。
    • 例子:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
    • 最为传统和常见的比特币地址类型。
  2. P2SH地址(Pay-to-Script-Hash)
    • 以“3”开头。
    • 例子:3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
    • 用于实现更复杂的支付条件,例如多重签名地址。
  3. Bech32地址(也称为SegWit地址)
    • 以“bc1”开头。
    • 例子:bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf3q0s
    • 这是比特币协议升级SegWit(隔离见证)后的新地址格式,提供更高的效率和安全性。

地址生成过程

比特币地址是通过以下步骤生成的:

  1. 私钥生成:通过随机生成一个256位的数字,即私钥。私钥是保密的,任何人掌握私钥就能控制相关地址中的比特币。
  2. 公钥生成:使用椭圆曲线加密算法(通常是SECP256K1),从私钥生成公钥。
  3. 公钥哈希:对公钥进行两次哈希:第一次使用SHA-256,第二次使用RIPEMD-160,生成公钥哈希(Public Key Hash)。
  4. 添加版本字节和校验和
    • 在公钥哈希前添加一个版本字节(例如,P2PKH地址的版本字节为0x00)。
    • 对上述数据进行两次SHA-256哈希,从中取前4字节作为校验和,并添加到数据末尾。
  5. Base58编码:最后,对结果进行Base58编码,生成最终的比特币地址。

使用与安全

  • 接收比特币:用户可以将自己的比特币地址提供给他人,以接收比特币。
  • 发送比特币:用户需要用相应的私钥对交易进行签名,证明其对地址内比特币的所有权,然后广播交易到比特币网络。

安全建议

  1. 保管私钥:私钥应安全存储,不能泄露给他人。建议使用硬件钱包或离线冷钱包来存储私钥。
  2. 备份:定期备份私钥或助记词,以防丢失。
  3. 谨慎使用:尽量避免在不安全的网络或设备上操作比特币交易。

btcd示例

使用btcutil来创建比特币地址涉及几个步骤,包括生成密钥对(私钥和公钥),然后使用公钥生成地址。

func NewBTCAddress(){
// 生成私钥
privKey, err := btcec.NewPrivateKey()
if err != nil {
panic(err)
} // 导出公钥
pubKey := privKey.PubKey() // 生成BTC地址(P2PKH)
addressPKH, err := btcutil.NewAddressPubKey(pubKey.SerializeUncompressed(), &chaincfg.MainNetParams)
if err != nil{
panic(err)
}
fmt.Printf("Private Key: %x\n",privKey.Serialize())
fmt.Printf("Public Key: %x\n",pubKey.SerializeUncompressed())
fmt.Printf("BTC Address: %s\n",addressPKH.EncodeAddress()) // 生成公钥hash
pubKeyHash := btcutil.Hash160(pubKey.SerializeCompressed()) // 创建一个简单的多重签名脚本
script, err := txscript.NewScriptBuilder().AddOp(txscript.OP_DUP).
AddOp(txscript.OP_HASH160).AddData(pubKeyHash).
AddOp(txscript.OP_EQUALVERIFY).AddOp(txscript.OP_CHECKSIG).Script()
if err != nil {
panic(err)
}
// 生成P2SH地址
addressP2SH, err := btcutil.NewAddressScriptHashFromHash(pubKeyHash, &chaincfg.MainNetParams)
if err != nil{
panic(err)
}
fmt.Printf("P2SH Address: %s\n",addressP2SH.EncodeAddress()) // 生成Bech32地址(P2WPKH)
addressBech32,err := btcutil.NewAddressWitnessPubKeyHash(pubKeyHash, &chaincfg.MainNetParams)
if err != nil{
panic(err)
}
fmt.Printf("Bech32 Address: %s\n",addressBech32.EncodeAddress())
}

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特


BTC 地址的更多相关文章

  1. 定制比特币btc地址address

    https://99bitcoins.com/how-to-get-a-custom-bitcoin-address/ https://en.bitcoin.it/wiki/Vanitygen htt ...

  2. 利用vanitygen生成比特币个性地址的教程

      比特币怎么生成地址?大家都知道比特币地址都是以1开头的一串乱码,很多朋友会新建过一排地址然后在里面挑选,下面小编为大家分享下比特币生成个性地址方法. 其实就是使用vanitygen软件来生成个性化 ...

  3. 如何跟踪比特币SV(BSV)地址余额?

    Coin Balance Tracker 能够查看任何BSV/BCH/BTC地址的当前余额.您只需要确保你的电脑能连接Internet以及地址正确.此程序非常安全,因为它只使用公共数据,不需要登录和密 ...

  4. node.js与比特币(typescript实现)

    BTC中的utxo模型 BTC中引入了许多创新的概念与技术,区块链.PoW共识.RSA加密.萌芽阶段的智能合约等名词是经常被圈内人所提及,诚然这些创新的实现使得BTC变成了一种有可靠性和安全性保证的封 ...

  5. 关于比特币的“冷存储”和Armory的使用

    转自:http://8btc.com/thread-1164-1-1.html 最近随着比特币话题的火热,又有一批人卖房或倾产换成比特币入圈,这一次与以前不同的是,以前倾产入圈的人都是技术人员,有足够 ...

  6. 如何保护好我们的比特币(bitcoin)

    转自:http://8btc.com/thread-819-1-1.html 随着比特币(BTC)的使用者越来越多:价格也很高(2013年,1比特币价格长期在100美元以上):同时比特币没有一个中央机 ...

  7. YIIMP矿池搭建

    本文将以Verge(x17)和Raven(x16rv2)为例子来说明多算法矿池YIIMP的搭建过程. 1 环境准备 1.1 准备Ubuntu 准备虚拟机或物理机,操作系统为Ubuntu 18.04,之 ...

  8. Bminer

    Bminer https://www.bminer.me/zh/ Bminer: When Crypto-mining Made Fast¶ Bminer是一款为NVIDIA和AMD GPU深度优化的 ...

  9. 业内首发 | 区块链数据服务 - BDS

    区块链数据服务(Blockchain Data Service,BDS)是京东云区块链产品部发推出的,其将区块链的链式.非结构化数据通过技术手段进行结构化存储,实时同步到高性能数据仓库中. 用户可以通 ...

  10. 最著名的著名的比特币BTC钱包地址-中本聪的钱包

    最著名的著名的比特币BTC钱包地址-中本聪的钱包1.比特币创始人中本聪 1PTFYUG6nCzRrByoRfGT5kefUNuZjNF84o这个地址还是比特币的创世地址,比特币从未移动过,其中的50币 ...

随机推荐

  1. 容器化tomcat9.0

    #启动tomcat容器: docker run -d --name tomcat9.0 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/chenleile ...

  2. 鸿蒙HarmonyOS实战-Web组件(Cookie及数据存储)

    前言 Cookie是一种存储在用户计算机上的小文本文件,用于在用户访问网站时存储和提取信息.它由网站服务器发送到用户的浏览器,并存储在用户的计算机上.每当用户访问该网站时,浏览器将发送该Cookie回 ...

  3. VALL-EX下载介绍:只需3秒录音,即可克隆你的声音

    VALL-EX是一个强大和创新的多语言文本转语音模型,支持对中文.英文和日语的语音进行合成和克隆,使用者只需上传一段3-10秒的录音,就可以生成高质量的目标音频,同时保留了说话人的声音.情感和声学环境 ...

  4. react 装饰器

    使用装饰器定义 装饰器是一种函数,写成 @函数名.它可以放在类和类方法的定义前面.react脚手架创建的项目默认是不支持装饰器,需要手动安装相关模块和添加配置文件. 安装相关模块 npm i -D c ...

  5. ubuntu server 22.04 安装docker

    ubuntu server 22.04 安装docker 官方安装文档: https://docs.docker.com/engine/install/ubuntu/ 1.更新软件列表: sudo a ...

  6. 网站_域名_DNS_端口_web访问过程

    网站基本概念 服务器:能够提供服务器的机器,取决于机器上所安装的服务软件 web服务器:提供web服务(网站访问),需要安装web服务软件,Apache,tomcat,iis等 域名 (Domain ...

  7. 讯飞有一个可以根据描述文本自动生成PPT的AI接口,有趣

    文档:https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度,生成一次是10点,正好100次,如果要购买的话最低要购买1 ...

  8. Java编码规范-字符串与Integer的比较,BigDecimal非空参数

    Java编码规范-字符串与Integer的比较,BigDecimal非空参数 package com.example.core.mydemo; import java.math.BigDecimal; ...

  9. git客户端安装和使用

    需要安装三个软件 1.git客户端 点击下载 下载完成后一只next就行了. 2.git右键属性的扩展程序 点击下载 下载完成后一只next就行了 3.git中文包 点击下载 下载完成后一只next就 ...

  10. Blender练习——SciFi枪械.md

    Blender练习--SciFi枪械 一.基本操作 常用快捷键 E 挤出 B 倒角,中途可通过滚轮或S来调整细分 Alt+点选 循环选择 Ctrl Alt+点选 并排选择 F 补面,比如一个碗口,将碗 ...