DappLink 一键发钱包技术解决方案

  • Dapplink
  • 发布于 2025-03-21 23:16
  • 阅读 11

随着 Web3 生态的快速发展,数字资产管理成为区块链应用的重要组成部分。无论是交易所、中心化钱包,还是去中心化的 MPC 托管系统,都需要高效、安全且可扩展的钱包基础设施。

一.概述

随着 Web3 生态的快速发展,数字资产管理成为区块链应用的重要组成部分。无论是交易所、中心化钱包,还是去中心化的 MPC 托管系统,都需要高效、安全且可扩展的钱包基础设施。DappLink 一键发钱包业务平台 正是为了解决这一需求,提供一键式钱包部署解决方案,支持中心化钱包、去中心化钱包以及托管系统的快速集成和上线。

自项目启动以来,DappLink 一键发钱包平台已与多个项目方达成合作,其中 Parapack 和 FishCake 已成功集成 DappLink 一键发钱包并顺利上线。

DappLink 一键发钱包平台专为不同类型的 Web3 项目提供高效、便捷的钱包基础设施,主要支持以下应用场景

  • 交易所钱包:支持充提、归集、冷温热钱包管理等业务流程
  • 中心化钱包:提供高性能、多链兼容的钱包后端服务
  • 去中心化钱包:支持分层确定性钱包架构,安全的去中心化密钥管理方式
  • MPC 托管系统:基于 MPC 和 ZK 技术,实现去中心化私钥管理,MPC 动态委员会签名,增强安全性和合规性

平台采用模块化设计,确保各个组件可以独立部署,同时支持一键式集成

二.DappLink项目架构

fea6634c67e618cf457a2f270e84b174.png

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聚合

三.项目功能详解介绍

1. 统一签名服务业务流程

cf29686b76cdb61a52913dce5ea936b1.png

该服务部署在 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 完成之后把公钥吐出来

    • signTxMessage:交易签名的函数

2. 中心化钱包业务流程

40cb0856bdefb068df3c067ff3f7a334.png

  • 地址生成流程

    • 业务方按照需求调度签名机生成密钥对,私钥存储在签名机里面,公钥通过接口返回

    • 业务调用 gRPC 接口,传入公钥列表,生成地址,multichain-sync-utxo/multichain-sync-account 调度底层服务根据公钥生成地址,并返回地址列表给到业务方。

  • 扫链业务流程

    • 充值时:synchronizer 服务监听区块解析交易处理入库

    • 充值:出金地址是外部地址,入金地址是交易所用户地址

    • 提现:出金地址是热钱包地址,入金地址是外部地址

    • 归集:出金地址是用户地址,入金地址是热钱包地址

    • 热转温:出金地址是热钱包地址,入金地址是温钱包地址

    • 温转热:出金地址是温钱包地址,入金地址是热钱包地址

  • 提现

    • 调用 multichain-sync 的 BuildUnSignTransaction, 构建 32 个字节的 MessageHash

    • 使用 MessageHash 去签名机里面进行签名,返回来 signature

    • 使用交易的 requestId 和签名发送到 multichain-sync, 构建的完整的并发送到区块网络

    • multichain-sync 的提现任务不断扫交易并发送到区块链,发送完成之后通知业务层,交易已发送

    • 扫到提现交易之后再次通知业务层提现成功

  • 归集, 热转温和温转热业务逻辑和提现差不多流程

2.1 统一 RPC 服务 Gateway

a18ce491084dd241cf95c2dc48289951.png

2.2 Wallet-chain-utxo 实现的接口

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:签名的交易的验证

2.3 wallet-chain-account 实现的接口

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: 预留接口

2.4 multichain-sync-* 服务

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

3. 去中心化钱包业务

3e4bd11c200be16479f4baab8e39221d.png

  • 数据采集与整合:从第三方数据平台、中心化交易所行情、去中心化交易所行情和交易聚合器获取数据。

    • 通过 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) 作为本地数据存储,可能用于缓存或者轻量级数据存储需求

3.1 行情服务业务

0079332b3fdf97ea5cb4236e4f217320.png

3.2 密钥托管的服务业务

870ad9b531afb0b5a51951a9cd813d3a.png

4. MPC 网络

c59e1db36337ad895c45dd907f2becac.png

  • 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 交互,发送密钥生成和签名请求。

    • 提供钱包服务的核心功能,例如密钥管理和交易签名。

四.交易所钱包详解业务流

1. 商户 ID 分配

  • DappLink 业务中台给业务方分配商户 ID

2239fc664cce559e596f638bdfbc6a64.png

  • 业务方提交商户信息

  • DappLink 业务中台给业务方分配 Token 和商户 ID

2. 业务配置

7b90a4907493f9fbf2d46baa769d7817.png

  • 使用商户 ID 注册到我们 DappLink 钱包平台,内部会根据业务方进行分库分表

  • 业务注册的时候需要把充值,提现,流水下发等相关回调接口一并提交到 DappLink 钱包平台

3. Token 配置

ab13a6c0ee04579bda053d62df8434ea.png

  • 业务配置 token, 传入 token 名字,符号, 精度,最小最大归集和转冷金融等信息

4. 地址生成

6565d70523679062ccd9ee3e76482286.png

  • 业务调度自己的签名生成密钥,私钥不会离开 TEE 或者 CloudHSM, 但是它会将公钥列表返回到业务方

  • 业务方把公钥列表给到 multichain,multichain 调度 wallet-chain-account/utxo 根据公钥导出地址

  • 把生成地址列表存到业务表里面,并且返回地址列表

5. 充值

ac434aaf1f2c98b4aeac2302c91ceda5.png

  • 获取最新区块链

  • 获取本地数据最高区块

  • 链上的最新和数据库的最高区块进行比较

  • 若本地数据块高 = 链上最新区块高度,等待最新区块出现

  • 若本地数据块高 > 链上最新区块高度, 进行交易回滚

  • 若本地数据块高 < 链上最新区块高度,

  • 根据区块高度获取交易列表

  • 解析交易之后

    • 若 from 是外部地址,to 地址是内部用户地址,充值; 调用回调接口通知业务方

    • 若 from 地址是用户地址,to 地址是热钱包地址,归整; 调用回调接口通知业务方

    • 若 from 地址是热钱包地址,to 地址是外部用户地址,提现; 调用回调接口通知业务方

    • 若 from 地址是热钱包地址,to 是冷钱包地址,热转冷; 调用回调接口通知业务方

    • 若 from 是冷钱包地址,to 地址是热钱包地址,冷转热; 调用回调接口通知业务方

6. 提现

6800d8a9acf13116288b41e3ec5ff2c6.png

  • 用户发起提现,业务方将提现交易发送 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 返回给业务端

  • 提现进程会去扫描这些交易发送到区块链网络

  • 扫链部分参考充值模块

7. 归集

8a4a62daf4583f54a30be25094a22687.png

  • 检测用户地址资金是否大于最小归集金额, 如果大于最小归集金额,发起交易归集资金

8. 热转冷

  • 检测热钱包地址资金是否大于一定的转冷金额,发起交易将资金转到零钱包,流程类似提现和归集

9. 冷转热

  • 热钱包金额小于一定数量,报警通知业务方

  • 业务方手动操作向冷钱包转入一笔资金

10.交易回滚

a829e45e6bc6287f2d3db4288a1f4ad1.png

11. 服务部署方式

  • 签名机:项目方部署

  • 统一 gRPC 服务

    • wallet-chain-utxo: dapplink 提供服务

    • wallet-chain-account: dapplink 提供服务

  • 统一扫链服务

    • multichain-sync-account: dapplink 提供服务

    • Multichain-sync-utxo: dapplink 提供服务

  • 业务中台:dapplink 提供服务

五.去中心化钱包的各个业务流程

1. 钱包地址生成

dbec75baf766c2558f128c5cd74d740e.png

2. 助记词导出

  • DappLink 解决方案和其他 HD 钱包他们推导模式都是一样,DappLink 钱包助记词导入到其他钱包,生成的私钥,公钥,地址是一样(某些链地址格式比较多,若不同钱包选用地址格式不一致的话,他生成的地址会不一样)

c5394720dcd7b7c0ecb7eb8420eb9650.png

3. 助记词导入

102c3fbdc67171b69ff863cb2fcd0f15.png

4. 私钥导出

255dded7f0d5e906be2f2fabd098fc83.png

5. 私钥导入

78a49c0451f44156de7fb7b5783b5e6f.png

注意:私钥导入只能生成这个私钥相关的地址,但是助记词,他可以通过 BIP 推导协议管理 n 钱包(account, address_index)

6. 收款

ab9c67f9dca06e11ef4bcf25b31599ee.png

7. 转账

7df7cd3898632dcceff570941cf78c7c.png

  • GasOracle: 预测链上手续费,这个可以使用 DappLink 的 GasOracle 服务

8. 钱包的余额获取

cf42bcc29d32f0b99fbc3e7d2245a302.png

9. 交易记录

ae69777c858930d131c22d0f9a3773fb.png

10. 代币发现功能

25f01c4e4b105b2fc7196b7f9d066b20.png

11. 行情业务模块

e18af5fd067e73977150b30629e8dc7b.png

12. 资产管理模块

3a4a675e067195c2f50bffc1dba848d9.png

13.闪兑

66f78b6b5cd7ebf901180767bcec14cf.png

14. Dapp浏览器

51306788ec86c09767b7371f04121944.png

六. DappLink 一键发钱包愿景

DappLink 的“一键发钱包”愿景旨在通过极简化的操作,为开发者和企业提供高效、安全且易用的钱包解决方案,助力 Web3普及和创新。具体包括以下目标:

  • 快速部署,降低门槛:提供一站式解决方案,让开发者无需深入研究复杂的底层技术,只需通过简单的界面或API调用,即可快速生成支持多链、多资产的钱包,覆盖从 HD 钱包到 AA 钱包的多种类型。
  • 灵活可扩展:支持主流区块链和Layer2解决方案(如OpStack和 Polygon zkEVM),同时开放插件化架构,便于定制和扩展,满足企业级和个性化需求。
  • 高安全性保障:基于 DappLink 签名机的 CloudHSM 和 TEE 双模式,以及支持 ECDSA, EdDSA 和 BLS 等加密算法,确保密钥管理和交易签名的安全性,最大限度降低用户资产风险。
  • 兼容 MPC 技术:集成多方计算(MPC)功能,提升钱包的安全性和灵活性,特别是对需要托管或分布式签名的场景提供支持。
  • 面向未来的创新:结合账户抽象(Account Abstraction)技术,助力用户从复杂的区块链交互中解放出来,实现更智能化、自动化的交易流程,为 Web3 产品带来更友好的用户体验。
  • 生态融合与教育:打通与其他Web3产品的对接路径(如 NFT、GameFi、DeFi、PayFi 等),并通过 DappLink 技术培训体系,帮助更多开发者掌握钱包技术,推动整个生态的繁荣发展。

通过“一键发钱包”,DappLink 希望为 Web3 开发者、企业和最终用户带来更便捷的入口和更安全的保障,成为下一代区块链技术应用的基础设施推动者

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Dapplink
Dapplink
0xBdcb...f214
首个模块化、可组合的Layer3协议。