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
m/44'/coin_type'/account'/change/address_index

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


0601 钱包部分小总结
http://example.com/2024/05/30/061钱包部分小总结/
作者
Wangxiaowang
发布于
2024年5月30日
许可协议