一 离线地址生成
比特币钱包地址类型
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 提供了隔离见证的优势,适合更先进的使用场景,但需要支持该功能的钱包。
二 钱包充值
核心步骤
第一步 开启扫链的定时任务
第二步 获取当前的最新区块链高度,并比较是否大于本地的区块链
第三步 如果大于本地区块链,则说明此时有新的区块产生,需要以本地区块链为起始位置往高处扫,同时将扫到的区块数据存到本地DB
第四步 根据区块,获取对应的tx交易列表,并筛选出目标地址是交易所内部地址的tx
第五步 将交易设置为待确认,并存入DB中
第六步 等链上过了交易确认位之后,将DB中的交易改为已完成,并同步到业务层
三 提款逻辑
核心步骤
第一步 获取离线签名需要的参数,给合适的手续费
第二步 构建未签名的交易消息摘要,将消息摘要递给签名机签名
第三步 构建完整的交易并进行序列化
第四步 发送交易到区块链网络
第五步 扫链获取到交易之后更新交易状态并上报业务层
UTXO
创建UTXO:当用户收到比特币时,相关交易的输出会创建UTXO。例如,如果 Alice 向 Bob 转账 1 BTC,那么这个交易的输出会成为 Bob 的UTXO。
使用UTXO:Bob可以将这个UTXO用作将来的交易输入。当Bob决定转账时,他可以选择一个或多个UTXO作为输入来创建新的交易。
找零:如果Bob使用的UTXO的金额超过了他要发送的金额,交易会生成一个找零输出,将剩余的比特币返回给他自己。
下面我们结合着一个图示来说明
初始状态 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
声明:本网站所有相关资料如有侵权请联系站长删除,资料仅供用户学习及研究之用,不构成任何投资建议!