0601 钱包部分小总结
1.描述一下交易所钱包的充值和提现流程
充值
- 交易所给用户提供地址,用户把钱转进来
- 扫链:获取最新块高,从上一次解析的块开始到最新块高进行交易解析
- 交易解析完之后,如果交易里面 to 是系统用户,则是充值,解析完成之后上账,并通知业务层
提现
1.获取签名参数–>2.离线签名–>3.广播出去—>把交易哈希更新数据库—->扫链解析确认是否完成
- 获取需要的签名参数(这里就看了)
- ETH:获取三个:Nonce(Number once的缩写)、gasprice、 gaslimite
- BTC:Version、Input、Output、Locktime、Sequence、Hash Type这些
- Atom :Account Number(唯一账户编号) Sequence(顺序)fess(手续费)
- 交易离线签名:
- 组织交易,先生成待签名消息摘要,
- 将待签名的消息摘要递给签名机进行签名,
- 签名机签名完成之后返回签名串
- 广播出去:拿到了离线签名后构建完整的交易并发送区块链网络,将签名时计算出来的交易 Hash 或者发送交易时返回交易 Hash 更新到数据库
- 扫链解析到这笔交易,说明提现成功。
2.HD 钱包助记词生成的流程
- 第一步:随机熵生成
- 第二步:计算校验和
- 第三步:组合熵和校验和
- 第四步:分割助记词索引
- 第五步:映射为助记词
3.助记词的验证过程
- 第一步:检查助记词数量
- 第二步:检查助记词是否在词汇表
- 第三步:将助记词转换成索引
- 第四步:提取种子的校验和
- 第五步:计算校验和
- 第六步:验证校验和
4.BIP44 路径
1 |
|
account 标记账户类型,便于分类,默认为0
change : 比特币特有的,找零地址就是1
5.门限共享秘密拆分过程MPC
秘密—–> n 份,k 份可恢复, 任意 k 份恢复出这个秘密,分别用门限共享算法和逆门限共享秘密算法
5.MPC GG20 算法 Keygen 和 Sign 分别需要经过多少轮共识
- Keygen: 4 轮
- Sign: 7 轮
6.为什么 schnorr 比特币手续费可以降低
schnorr 签名聚合成一个签名,还有短密钥,这样签名的数据会比 ECDSA 短很多,所以相对于 ECDSA 签名的交易会便宜很多
7. 为什么比特币早期时候不直接用 schnorr 签名算法
因为当时 schnorr 算法在专利期
8. 相比较之下 EDDSA 性能,安全性都会高一些,为什么比特币以太坊用了 ECDSA,没有用 EDDSA
- ECDSA 是基于更早的标准(如 FIPS 186-4 和 ANSI X9.62)发展的,因此在密码学界和工业界有较长的使用历史和广泛的标准化支持。它被大量系统和协议(如 TLS 和 Bitcoin)采用,形成了一个庞大的生态系统。
- 虽然 EdDSA 有一些优势,如不容易受到侧信道攻击的影响(如时间攻击和缓存攻击),但 ECDSA 的安全性也已经过广泛的研究和验证。对于很多开发者和企业来说,使用一个已被长期验证的算法是更为保守和安全的选择。
- EdDSA 通常具有更高的签名速度和较快的验证速度,尤其是在大多数软件实现中。然而,对于已经高度优化的 ECDSA 实现,性能差异在许多应用中可能并不明显。
- EdDSA 的设计更为简单且更不易出错,特别是在处理随机数生成等方面。然而,ECDSA 由于使用历史更长,开发者更为熟悉其使用和管理。
9.中心化钱包开发里面的充值,提现,归集,转冷,冷转热开发业务流程描述
💡💡接口返回的 to 是交易所系统里面的用户地址,这笔交易为充值交易;
💡💡接口返回的 from 是交易所系统里面的用户地址,这笔交易为提现交易;
💡💡接口返回的 to 是交易所的归集地址,from 是系统的用户地址,这笔交易资金归集交易;
💡💡接口返回的 to 地址是冷钱包地址,from 地址时热钱包地址,这笔交易热转冷的交易。
💡💡接口返回的 from 地址是冷钱包地址,to 地址时热钱包地址,这笔交易冷转热的交易。
充值
扫链—>解析交易–>确认地址是系统地址则判断为充值—>通知业务层,持久化存储
- 获得最新块高;更新到数据库
- 从数据库中获取上次解析交易的块高做为起始块高,最新块高为截止块高,如果数据库中没有记录,说明需要从头开始扫,起始块高为 0;
- 解析区块里面的交易,to 地址是系统内部的用户地址,说明用户充值,更新交易到数据库中,将交易的状态设置为待确认。
- 所在块的交易过了确认位,将交易状态更新位充值成功并通知业务层。
- 解析到的充值交易需要在钱包的数据库里面维护 nonce, 当然也可以不维护,签名的时候去链上获取
提现
1.获取签名参数—>2.离线签名—3.广播出去—>4.扫链确认—>5.通知业务层,持久化存储
- 获取离线签名需要的参数,给合适的手续费
- 构建未签名的交易消息摘要,将消息摘要递给签名机签名
- 构建完整的交易并进行序列化
- 发送交易到区块链网络
- 扫链获取到交易之后更新交易状态并上报业务层
归集
归集就是转账,把分散的币归拢到归集地址,
- 将用户地址上的资金转到归集地址,签名流程类似提现
- 发送交易到区块链网络
- 扫链获取到交易之后更新交易状态
转冷
- 将热钱包地址上的资金转到冷钱包地址,签名流程类似提现
- 发送交易到区块链网络
- 扫链获取到交易之后更新交易状态
冷转热
- 手动操作转账到热钱包地址
- 扫链获取到交易之后更新交易状态
10.有用过 rosetta api, 请简单描述起作用,并举几个钱包常用的接口说明
Bitcoin Rosetta API 是由 Coinbase 提出的 Rosetta 标准的一部分,旨在为区块链和钱包提供一个统一的接口标准。这个标准化的接口使得与各种区块链的交互更加容易和一致,无论是对交易数据的读取还是写入。目前已经支持很多链,包含比特币,以太坊等主流链,也包含像 IoTex 和 Oasis 这样的非主流链。
用到的接口
/network/list:返回比特币主网和测试网信息。 /network/status:返回当前最新区块、已同步区块高度、区块链处理器的状态等。 /block 和 /block/transaction:返回区块和交易的详细信息,包括交易的输入输出、金额、地址等。 /account/balance:通过查询比特币节点,返回指定地址的余额。
发送交易到区块链网络
/construction/submit:通过比特币节点提交签名后的交易。
11.ETH2.0 的 epoch, slot 和 block 简述
Slot(时隙)
定义:Slot 是以太坊2.0中最基本的时间单位,每个slot都有一个指定的时间长度。在每个 slot 中,可能会有一个区块被提议并添加到链中。 时间长度:一个 slot 的长度为 12 秒。这意味着每 12 秒会有一个新的 slot。 功能:在每个 slot 中,网络中的验证者将有机会提议一个新的区块。这些提议者是通过权益证明(PoS)随机选择的。
Epoch(纪元)
定义:Epoch 是由多个连续的slot组成的更长时间段。在 Eth2.0 中,Epoch 用于管理和组织验证者的活动。 组成:一个 Epoch 由 32 个 slot 组成。 时间长度:由于一个 slot 是12秒,一个 Epoch 的总长度是 384 秒(即6.4分钟)。 功能:Epoch 是用来实现共识机制的一部分。在每个 Epoch 结束时,网络会进行状态和共识的检查和调整,包括对验证者的奖励和惩罚。
Block(区块)
定义:Block 是包含交易和其他相关数据的记录单元。在以太坊2.0中,每个slot可能会有一个区块被提议,但不保证每个 slot 都有区块。 内容:一个区块包含区块头、交易列表、状态根哈希、签名等数据。 创建过程:在每个 slot 开始时,网络会随机选出一个验证者来提议区块。该验证者将创建一个包含新交易和其他必要信息的区块,并广播到网络中。
12.中心化钱包开发中为什么需要确认位,您怎么理解这个确认位的
在确认位过了之后交易回滚的难度很大,每条链不一样,根据历史和经验来定,以太坊的话可以参照区块状态来做
13.简单描述以太坊交易类型,并说明这个交易类型的作用
- leagcy: 历史遗留交易类型,签名体为 gasLimit 和 gasPrice
- Eip1559: BaseFee 类型
- blob: EIP4844 交易类型
14.去中心化和中心化钱包开发中的异同点有哪些?
1、密钥管理方式不同
HD 钱包私钥在本地设备,私钥用户自己控制 交易所钱包中心化服务器(CloadHSM, TEE 等),私钥项目方控制
2、资金存在方式不同
HD 资金在用户钱包地址 交易所钱包资金在交易所热钱包或者冷钱包里面
3、业务逻辑不一致
中心化钱包:实时不断扫链更新交易数据和状态
HD 钱包:根据用户的操作通过请求接口实现业务逻辑
15.发生硬分叉时,做为钱包的开发,您应当怎么去处理这种状况, 以 ETHPOW 和 ETH2.0 分叉这个过程
认可共识比较
16.TON 支持合约吗?若支持,请说出其合约开发语言
17.比特币的地址有哪些格式,请说明
P2SH
P2WP
P2PKH
P2TP
18.描述一下 UTXO 和账户模型的区别
UTXO:未花费的交易输出
在UTXO模型中,每个交易输出都被视为未使用的交易输出(UTXO)。UXTO代表了一定数量的加密货币,他们被锁定在一个特定的地址上,并且只能通过使用私钥来解锁。当进行交易时,需要使用先前未使用的UTXO作为输入,并将其消耗掉,同事生成新的UTXO作为输出。
账户模型:
每个账户被视为包含余额和状态的实体。用户拥有一个私钥对应账户地址,可以使用私钥对账户进行前面来进行交易。每个账户的余额存储在链上,当发生交易时,账户的余额会相应地增加或减少。
20.解释一下什么是 EVM 同源链,举例说明一下
21.ERC721 和 ERC1155 区别与联系
一些感悟
最核心的不是扫链,不是获取用户数据、交易数据,接口比较简单
最核心的永远都是离线地址的生成和签名交易的生成
同一套助记词在不同的链生成的私钥不一样吗?
不一样
COSMOS支持的地址类型
以前只支持Secp256k1后来扩展支持Edd25519