首页>>资讯>>学院

比特币交易所钱包实现

2024-09-25 10:47:11 93

一 离线地址生成

24.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 提供了隔离见证的优势,适合更先进的使用场景,但需要支持该功能的钱包。


二 钱包充值

24.png

核心步骤


第一步 开启扫链的定时任务

第二步 获取当前的最新区块链高度,并比较是否大于本地的区块链

第三步 如果大于本地区块链,则说明此时有新的区块产生,需要以本地区块链为起始位置往高处扫,同时将扫到的区块数据存到本地DB

第四步 根据区块,获取对应的tx交易列表,并筛选出目标地址是交易所内部地址的tx

第五步 将交易设置为待确认,并存入DB中

第六步 等链上过了交易确认位之后,将DB中的交易改为已完成,并同步到业务层


三 提款逻辑

24.png

核心步骤


第一步 获取离线签名需要的参数,给合适的手续费

第二步 构建未签名的交易消息摘要,将消息摘要递给签名机签名

第三步 构建完整的交易并进行序列化

第四步 发送交易到区块链网络

第五步 扫链获取到交易之后更新交易状态并上报业务层


UTXO


创建UTXO:当用户收到比特币时,相关交易的输出会创建UTXO。例如,如果 Alice 向 Bob 转账 1 BTC,那么这个交易的输出会成为 Bob 的UTXO。

使用UTXO:Bob可以将这个UTXO用作将来的交易输入。当Bob决定转账时,他可以选择一个或多个UTXO作为输入来创建新的交易。

找零:如果Bob使用的UTXO的金额超过了他要发送的金额,交易会生成一个找零输出,将剩余的比特币返回给他自己。

下面我们结合着一个图示来说明

24.png

24.png

24.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

声明:本网站所有相关资料如有侵权请联系站长删除,资料仅供用户学习及研究之用,不构成任何投资建议!