比特币交易所钱包实现

  • Leo
  • 更新于 2024-09-24 21:48
  • 阅读 695

一离线地址生成比特币钱包地址类型P2PKH(Pay-to-Public-Key-Hash)定义:P2PKH是最传统的比特币地址类型,通常以1开头。地址格式:例如,1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。特点:○地址对应的是公钥的哈希值。○交

一 离线地址生成

image.png

比特币钱包地址类型

P2PKH (Pay-to-Public-Key-Hash) 定义:P2PKH 是最传统的比特币地址类型,通常以 1 开头。 地址格式:例如,1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。 特点: ○ 地址对应的是公钥的哈希值。 ○ 交易过程需要提供对应的私钥以解锁和使用资金。

P2WPKH (Pay-to-Witness-Public-Key-Hash) 定义:P2WPKH 是一种为隔离见证(Segregated Witness)设计的新型地址,通常以 bc1 开头。 地址格式:例如,bc1qw508d6qejxtdg4y5r3z4t9z2f8m9m49v2vyy。 特点: ○ 直接引用公钥的哈希,并引入了隔离见证,提高了交易效率。 ○ 可以降低手续费,因为它减小了交易大小。

P2SH (Pay-to-Script-Hash) 定义:P2SH 地址允许将复杂的脚本(如多重签名)封装在地址中,通常以 3 开头。 地址格式:例如,3J98t1WiJZPHgD5wA8p8qC8N4nD5Hh8Kr3。 特点: ○ 地址本身是一个脚本的哈希值,提供了更复杂的交易逻辑(如多重签名、时间锁等)。 ○ 用户需要提供与该脚本对应的输入来解锁资金。

P2PKH 是最基础和广泛支持的地址类型,适用于普通交易。 P2SH 适合需要复杂逻辑的交易,如多重签名,提供了更大的灵活性。 P2WPKH 提供了隔离见证的优势,适合更先进的使用场景,但需要支持该功能的钱包。

二 钱包充值

image.png

核心步骤

第一步 开启扫链的定时任务 第二步 获取当前的最新区块链高度,并比较是否大于本地的区块链 第三步 如果大于本地区块链,则说明此时有新的区块产生,需要以本地区块链为起始位置往高处扫,同时将扫到的区块数据存到本地DB 第四步 根据区块,获取对应的tx交易列表,并筛选出目标地址是交易所内部地址的tx 第五步 将交易设置为待确认,并存入DB中 第六步 等链上过了交易确认位之后,将DB中的交易改为已完成,并同步到业务层

三 提款逻辑

image.png

核心步骤

第一步 获取离线签名需要的参数,给合适的手续费 第二步 构建未签名的交易消息摘要,将消息摘要递给签名机签名 第三步 构建完整的交易并进行序列化 第四步 发送交易到区块链网络 第五步 扫链获取到交易之后更新交易状态并上报业务层

UTXO

创建UTXO:当用户收到比特币时,相关交易的输出会创建UTXO。例如,如果 Alice 向 Bob 转账 1 BTC,那么这个交易的输出会成为 Bob 的UTXO。 使用UTXO:Bob可以将这个UTXO用作将来的交易输入。当Bob决定转账时,他可以选择一个或多个UTXO作为输入来创建新的交易。 找零:如果Bob使用的UTXO的金额超过了他要发送的金额,交易会生成一个找零输出,将剩余的比特币返回给他自己。 下面我们结合着一个图示来说明

image.png

初始状态 Alice 10个BTC,Bob2个BTC,Tom 5个BTC 当Alice 给Bob发起一笔转账的时候,实际上产生了两个输出,即转给Bob的6BTC和转给自己的4BTC。原先的10个BTC将作废

此时 Alice 4个BTC,Bob 2 + 6 个BTC ,Tom 5个BTC 这个时候Bob 给Tom发起一笔7BTC 的转账,又产生两个输出,即转给自己的1BTC和转给Tom的7BTC。 自己原来的2BTC 和 6BTC的输入作废。

最后 Alice 4个BTC,Bob 1 个BTC , Tom 5+7 个BTC

点赞 2
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Leo
Leo
江湖只有他的大名,没有他的介绍。