随着 Web3 生态的快速发展,数字资产管理成为区块链应用的重要组成部分。无论是交易所、中心化钱包,还是去中心化的 MPC 托管系统,都需要高效、安全且可扩展的钱包基础设施。
随着 Web3 生态的快速发展,数字资产管理成为区块链应用的重要组成部分。无论是交易所、中心化钱包,还是去中心化的 MPC 托管系统,都需要高效、安全且可扩展的钱包基础设施。DappLink 一键发钱包业务平台 正是为了解决这一需求,提供一键式钱包部署解决方案,支持中心化钱包、去中心化钱包以及托管系统的快速集成和上线。
自项目启动以来,DappLink 一键发钱包平台已与多个项目方达成合作,其中 Parapack 和 FishCake 已成功集成 DappLink 一键发钱包并顺利上线。
DappLink 一键发钱包平台专为不同类型的 Web3 项目提供高效、便捷的钱包基础设施,主要支持以下应用场景
平台采用模块化设计,确保各个组件可以独立部署,同时支持一键式集成
DappLink 一键发钱包平台由多个核心组件构成,以确保安全性、可扩展性和高性能
key-locker:链上密钥管理工具,支持Ethereum、IPFS、Arweave 等区块链
签名机:DappLink 的签名机支持 CloudHSM 和 TEE(可信执行环境)两种模式,目前支持 ECDSA 和 EdDSA两种加密算法,目前已被多家厂商采用。签名机确保交易签名的安全性,并可适配不同的安全需求
MPC 网络:DappLink 采用 MPC 和 ZK 技术,去中心化密钥管理机制,动态签名委员会,适用于企业级钱包和合规托管需求
wallet-sdk: 提供多链支持的标准化接口,使开发者可以快速集成钱包功能;主要包括:
地址生成
交易签名
资产查询
链上交互
统一 gRPC 接口服务:提供 gRPC 统一接口,整合第三方数据平台,支持不同类型的区块链模型,这一组件提供了一致化的 API 设计,使不同类型的区块链可以通过相同接口进行交互。
chain-data-api: 对接第三方平台的统一钱包 API,主要服务于 HD 钱包
wallet-chain-account:适用于账户模型(Ethereum、Solana 等)
wallet-chain-utxo:适用于UTXO模型(Bitcoin、Litecoin、BCH、BSV 等)
统一扫链服务:DappLink 具备完善的链上数据同步和监控能力,支持账户模型和UTXO 模型的交易处理;针对账户模型的链:multichain-sync-account 和 针对 UTXO 模型的链 multichain-sync-utxo, 这一模块确保了钱包可以实时跟踪链上变化,并高效处理资产流转;本模块主要有以下功能:
业务配置
地址导出
充值 & 提现
资产归集
热转冷、冷转热
交易回滚等业务逻辑
数据与交易服务
skeye:统一行情服务,集成 CEX 与 DEX,提供实时市场数据
trade:支持中心化钱包的闪兑、杠杆、期货和期权保险,未来可对接交易所
去中心化闪兑:通过调度 Aggregator API 提供最优交易路径,提高兑换效率
Hailstone 业务中台:Hailstone 是 DappLink 体系中的业务中台,负责与上层业务系统对接,提供高效、稳定的中间层服务,Hailstone 使得钱包可以无缝接入各种 Web3 应用,提升业务整合能力。主要功能包括:
用户账户管理
交易风控
数据分析
跨链交互
Dapp聚合
该服务部署在 TEE 环境,通常由业务方自己来部署, DappLink 提供技术支持;支持的接口如下
rpc getSupportSignWay(SupportSignWayRequest) returns (SupportSignWayResponse) {}rpc
exportPublicKeyList(ExportPublicKeyRequest) returns (ExportPublicKeyResponse) {}rpc
signTxMessage(SignTxMessageRequest) returns (SignTxMessageResponse) {}
getSupportSignWay:查看签名方式是否支持
ECDSA
EdDSA
RSA
Ed25519
tm-ed25519
secp256k1
secp256r1
exportPublicKeyList: keygen 完成之后把公钥吐出来
地址生成流程
业务方按照需求调度签名机生成密钥对,私钥存储在签名机里面,公钥通过接口返回
业务调用 gRPC 接口,传入公钥列表,生成地址,multichain-sync-utxo/multichain-sync-account 调度底层服务根据公钥生成地址,并返回地址列表给到业务方。
扫链业务流程
充值时:synchronizer 服务监听区块解析交易处理入库
充值:出金地址是外部地址,入金地址是交易所用户地址
提现:出金地址是热钱包地址,入金地址是外部地址
归集:出金地址是用户地址,入金地址是热钱包地址
热转温:出金地址是热钱包地址,入金地址是温钱包地址
温转热:出金地址是温钱包地址,入金地址是热钱包地址
提现
调用 multichain-sync 的 BuildUnSignTransaction, 构建 32 个字节的 MessageHash
使用 MessageHash 去签名机里面进行签名,返回来 signature
使用交易的 requestId 和签名发送到 multichain-sync, 构建的完整的并发送到区块网络
multichain-sync 的提现任务不断扫交易并发送到区块链,发送完成之后通知业务层,交易已发送
扫到提现交易之后再次通知业务层提现成功
归集, 热转温和温转热业务逻辑和提现差不多流程
GetSupportChains(req *utxo.SupportChainsRequest) (*utxo.SupportChainsResponse, error)
ConvertAddress(req *utxo.ConvertAddressRequest) (*utxo.ConvertAddressResponse, error)
ValidAddress(req *utxo.ValidAddressRequest) (*utxo.ValidAddressResponse, error)
GetFee(req *utxo.FeeRequest) (*utxo.FeeResponse, error)
GetAccount(req *utxo.AccountRequest) (*utxo.AccountResponse, error)
GetUnspentOutputs(req *utxo.UnspentOutputsRequest) (*utxo.UnspentOutputsResponse, error)
GetBlockByNumber(req *utxo.BlockNumberRequest) (*utxo.BlockResponse, error)
GetBlockByHash(req *utxo.BlockHashRequest) (*utxo.BlockResponse, error)
GetBlockHeaderByHash(req *utxo.BlockHeaderHashRequest) (*utxo.BlockHeaderResponse, error)
GetBlockHeaderByNumber(req *utxo.BlockHeaderNumberRequest) (*utxo.BlockHeaderResponse, error)
SendTx(req *utxo.SendTxRequest) (*utxo.SendTxResponse, error)
GetTxByAddress(req *utxo.TxAddressRequest) (*utxo.TxAddressResponse, error)
GetTxByHash(req *utxo.TxHashRequest) (*utxo.TxHashResponse, error)
BuildUnSignTransaction(req *utxo.UnSignTransactionRequest) (*utxo.UnSignTransactionResponse, error)
BuildSignedTransaction(req *utxo.SignedTransactionRequest) (*utxo.SignedTransactionResponse, error)
DecodeTransaction(req *utxo.DecodeTransactionRequest) (*utxo.DecodeTransactionResponse, error)
VerifySignedTransaction(req *utxo.VerifyTransactionRequest) (*utxo.VerifyTransactionResponse, error)
GetSupportChains: 可以查询是否支持这条链
ConvertAddress: 公钥导出地址
ValidAddress:判断地址格式是否正确
GetFee: 预估手续费
GetAccount:获取账户相关的信息,例如:余额
GetUnspentOutputs:获取未花费的输入输出列表
GetBlockByNumber:根据区块号获取区块的信息,包含交易列表,若传空,获取到的是最新区块,若传入区块数,获取到的区块的信息
GetBlockByHash:根据区块哈希获取区块的信息,包含交易列表
GetBlockHeaderByHash:根据区块哈希获取区块头信息
GetBlockHeaderByNumber:根据区块号获取区块头信息
SendTx:广播签名的交易
GetTxByAddress: 根据地址获取该地址相关的交易记录
GetTxByHash:根据 TxHash 获取交易详情
BuildUnSignTransaction:根据交易数据生成待签名的32字节的 MessageHash
BuildSignedTransaction: 用签名机返回的 signature 和交易信息一起构建出完整的交易
DecodeTransaction:将 rawTx decode 出原始的交易
VerifySignedTransaction:签名的交易的验证
type IChainAdaptor interface {
GetSupportChains(req *account.SupportChainsRequest) (*account.SupportChainsResponse, error)
ConvertAddress(req *account.ConvertAddressRequest) (*account.ConvertAddressResponse, error)
ValidAddress(req *account.ValidAddressRequest) (*account.ValidAddressResponse, error)
GetBlockByNumber(req *account.BlockNumberRequest) (*account.BlockResponse, error)
GetBlockByHash(req *account.BlockHashRequest) (*account.BlockResponse, error)
GetBlockHeaderByHash(req *account.BlockHeaderHashRequest) (*account.BlockHeaderResponse, error)
GetBlockHeaderByNumber(req *account.BlockHeaderNumberRequest) (*account.BlockHeaderResponse, error)
GetAccount(req *account.AccountRequest) (*account.AccountResponse, error)
GetFee(req *account.FeeRequest) (*account.FeeResponse, error)
SendTx(req *account.SendTxRequest) (*account.SendTxResponse, error)
GetTxByAddress(req *account.TxAddressRequest) (*account.TxAddressResponse, error)
GetTxByHash(req *account.TxHashRequest) (*account.TxHashResponse, error)
GetBlockByRange(req *account.BlockByRangeRequest) (*account.BlockByRangeResponse, error)
BuildUnSignTransaction(req *account.UnSignTransactionRequest) (*account.UnSignTransactionResponse, error)
BuildSignedTransaction(req *account.SignedTransactionRequest) (*account.SignedTransactionResponse, error)
DecodeTransaction(req *account.DecodeTransactionRequest) (*account.DecodeTransactionResponse, error)
VerifySignedTransaction(req *account.VerifyTransactionRequest) (*account.VerifyTransactionResponse, error)
GetExtraData(req *account.ExtraDataRequest) (*account.ExtraDataResponse, error)
}
GetSupportChains: 可以查询是否支持这条链
ConvertAddress: 公钥到处地址
ValidAddress:判断地址格式是否正确
GetFee: 预估手续费
GetAccount:获取账户相关的信息,例如:余额
GetBlockByNumber:根据区块号获取区块的信息,包含交易列表,若传空,获取到的是最新区块,若传入区块数,获取到的区块的信息
GetBlockByHash:根据区块哈希获取区块的信息,包含交易列表
GetBlockHeaderByHash:根据区块哈希获取区块头信息
GetBlockHeaderByNumber:根据区块号获取区块头信息
GetBlockByRange: 根据 star 和 end 区块号获取这些区块区间的区块信息
SendTx:广播签名的交易
GetTxByAddress: 根据地址获取该地址相关的交易记录
GetTxByHash:根据 TxHash 获取交易详情
BuildUnSignTransaction:根据交易数据生成待签名的32字节的 MessageHash
BuildSignedTransaction: 用签名机返回的 signature 和交易信息一起构建出完整的交易
DecodeTransaction:将 rawTx decode 出原始的交易
VerifySignedTransaction:签名的交易的验证
GetExtraData: 预留接口
service BusinessMiddleWireServices {
rpc businessRegister(BusinessRegisterRequest) returns (BusinessRegisterResponse) {}
rpc exportAddressesByPublicKeys(ExportAddressesRequest) returns (ExportAddressesResponse) {}
rpc buildUnSignTransaction(UnSignWithdrawTransactionRequest) returns(UnSignWithdrawTransactionResponse){}
rpc buildSignedTransaction(SignedWithdrawTransactionRequest) returns(SignedWithdrawTransactionResponse){}
rpc setTokenAddress(SetTokenAddressRequest) returns (SetTokenAddressResponse) {}
}
businessRegister:第三方业务需要进行注册,注册到系统之后才能使用整个钱包服务
exportAddressesByPublicKeys:根据公钥批量生成地址
createUnSignTransaction:根据交易数据生成待签名的32字节的 MessageHash
buildUnSignTransaction: 用签名机返回的 signature 和交易信息一起构建出完整的交易
setTokenAddress: 业务根据自己的需求配置需要支持的 token
数据采集与整合:从第三方数据平台、中心化交易所行情、去中心化交易所行情和交易聚合器获取数据。
通过 chain-data-api 进行多数据源的整合处理
skyeye 和 dapplink-aggregator 负责交易计算、交换和汇总,为交易聚合器提供数据支持
区块链账户与 UTXO 处理:
通过 wallet-chain-utxo 处理 UTXO 账户数据。
通过 wallet-chain-account 处理基于账户模型的区块链数据。
key-locker 去中心化的密钥柜组件
Hailstone 钱包中台服务
钱包基础数据获取功能:用户钱包的基本信息管理
钱包资产管理功能: 钱包资产的存储和管理
钱包行情功能:实时查询钱包资产的市场价格
Dapp 板块:提供 Dapp 相关的业务支持
咨询模块:提供市场或产品咨询信息
闪兑板块:提供快速兑换功能
RWA(现实世界资产):支持现实资产的链上映射
PayFI: 支付金融相关功能
前端依赖库,提供钱包交互和交易聚合功能:
wallet-sdk: 生成离线钱包地址,支持 HD(分层确定性)模式, 进行离线签名。
inject-js:处理钱包和 Dapp 交互的 JS 桥代码
dapplink-aggregator-js:提供交易聚合器 API 的 JS 代码;进行先验数据提取和计算,支持币种兑换功能
parapack(SQLite) 和 fishcake(SQLite) 作为本地数据存储,可能用于缓存或者轻量级数据存储需求
LinkLayer多重质押协议:作为整个系统的顶层协议,负责协调MPC节点加入退出管理,通过质押模型和承诺签名来保证网络的安全和可靠。
MPC 节点层:由多个运行在 TEE 环境中的 MPC 节点组成,每个节点持有密钥的一个分片(key-slice)。
mpc-node-1 到 mpc-node-9:各节点运行在 TEE 环境下,密钥分片被分布式存储在各节点中,保证单个节点无法直接还原完整密钥。
TEE(受信执行环境):提供硬件级别的安全性,防止恶意行为对密钥分片的篡改或泄露。
P2P 通信网络
节点之间通过点对点通信网络协同工作。
支持密钥生成(keygen)和签名(signature)操作的分布式计算。
密钥生成:各节点协作生成密钥分片,并通过计算聚合公钥。
签名:各节点接收待签名消息,独立计算后将结果返回,最后聚合为完整签名。
MPC Manager:负责管理 MPC 操作,包括密钥生成和签名请求。
核心功能
keygen
:触发密钥生成流程,返回生成的公钥(publicKey)。
Signature
:接收待签名的 32 位消息(Msg),协调 MPC 节点完成签名过程并返回结果。
Wallet Service
面向业务层的服务模块。
与 MPC Manager 交互,发送密钥生成和签名请求。
提供钱包服务的核心功能,例如密钥管理和交易签名。
业务方提交商户信息
DappLink 业务中台给业务方分配 Token 和商户 ID
使用商户 ID 注册到我们 DappLink 钱包平台,内部会根据业务方进行分库分表
业务注册的时候需要把充值,提现,流水下发等相关回调接口一并提交到 DappLink 钱包平台
业务调度自己的签名生成密钥,私钥不会离开 TEE 或者 CloudHSM, 但是它会将公钥列表返回到业务方
业务方把公钥列表给到 multichain,multichain 调度 wallet-chain-account/utxo 根据公钥导出地址
把生成地址列表存到业务表里面,并且返回地址列表
获取最新区块链
获取本地数据最高区块
链上的最新和数据库的最高区块进行比较
若本地数据块高 = 链上最新区块高度,等待最新区块出现
若本地数据块高 > 链上最新区块高度, 进行交易回滚
若本地数据块高 < 链上最新区块高度,
根据区块高度获取交易列表
解析交易之后
若 from 是外部地址,to 地址是内部用户地址,充值; 调用回调接口通知业务方
若 from 地址是用户地址,to 地址是热钱包地址,归整; 调用回调接口通知业务方
若 from 地址是热钱包地址,to 地址是外部用户地址,提现; 调用回调接口通知业务方
若 from 地址是热钱包地址,to 是冷钱包地址,热转冷; 调用回调接口通知业务方
若 from 是冷钱包地址,to 地址是热钱包地址,冷转热; 调用回调接口通知业务方
用户发起提现,业务方将提现交易发送 DappLink钱包服务
业务方将交易发送到 multichain-sync-account/utxo 进行构建待签名的消息,multichain-sync-account/utxo 调度 wallet-chain-account/utxo 返回待签名的消息
业务方将待签名的消息发送给自己部署的签名进行签名
业务方将 signature 和 交易 ID 发送到你 multichain-sync-account/utxo ,multichain-sync-account/utxo 调度 wallet-chain-account/utxo 构建完整交易并发送到区块链网络,将完整交易和交易 Hash 返回给业务端
提现进程会去扫描这些交易发送到区块链网络
扫链部分参考充值模块
热钱包金额小于一定数量,报警通知业务方
业务方手动操作向冷钱包转入一笔资金
签名机:项目方部署
统一 gRPC 服务
wallet-chain-utxo: dapplink 提供服务
wallet-chain-account: dapplink 提供服务
统一扫链服务
multichain-sync-account: dapplink 提供服务
Multichain-sync-utxo: dapplink 提供服务
业务中台:dapplink 提供服务
4. 私钥导出
注意:私钥导入只能生成这个私钥相关的地址,但是助记词,他可以通过 BIP 推导协议管理 n 钱包(account, address_index)
11. 行情业务模块
DappLink 的“一键发钱包”愿景旨在通过极简化的操作,为开发者和企业提供高效、安全且易用的钱包解决方案,助力 Web3普及和创新。具体包括以下目标:
通过“一键发钱包”,DappLink 希望为 Web3 开发者、企业和最终用户带来更便捷的入口和更安全的保障,成为下一代区块链技术应用的基础设施推动者
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!