什么是链付

随着区块链技术的蓬勃发展数字资产的种类也越来越多,企业客户一般都拥有很多个地址,如何管理海量地址上多种数字资产变成了一个亟待解决的问题。链付是一种面向企业客户的数字资产第三方支付平台,为企业各种数字资产的转入转出以及管理提供一整套解决方案,通过链付您可以方便地对海量地址上的数字资产进行管理。

产品优势

一般使用区块链实现数字资产的转入转出需要以下步骤:

如果企业用到多条链上的资产那么这个过程就将重复多次,而且开发和维护一条链的服务也需要一定的技术门槛和经验。因此使用链付跟企业自己开发数字资产支付服务相比有如下优势:

  • 成本低

    • 不需要企业的开发人员懂区块链技术,只需要能使用API接口。
    • 不需要企业部署和维护多个区块链节点。
    • 不需要企业开发交易签名工具。
  • 安全性高

    • 使用链付能避免假充值,链付团队也会及时跟进区块链上最新的安全问题。
    • 提供充值监控,减少因为区块链合约漏洞带来的恶意充值。
    • 黑名单机制能及时冻结黑客充值,阻止往钓鱼地址等恶意地址的提现。
    • 为商户提供完善的私钥管理方案,减少私钥丢失泄露等风险。
  • 快速便捷

    • 仅需要使用API接口和处理通知回调,在使用委托签名模式下甚至都无需这两步。
    • 在商户系统上可以完成绝大部分调用API接口的操作,比如创建地址,发起提现等。
    • 商户系统提供丰富的图表来展示商户资产的现状和走势。
  • 智能
    • 链付通过分析区块链交易的费率来寻找最合适的交易手续费,减少商户交易的成本。
    • 链付处理提现时会在提现地址集中选择合适的地址作为转出地址,如果没有合适的地址则进行相应的资产划拨或者追加网络手续费,确保提现请求能被成功处理。

产品架构

链付由区块链浏览器、核心业务处理器、商户系统、网关接口和SDK等部分组成,架构图如下:

产品架构

链付自主研发了不同区块链对应的浏览器,而不是使用第三方数据服务(比如Etherscan),区块链浏览器为核心业务处理器提供区块链数据服务。每种区块链都部署了多个节点分布在国内和国外,避免单点故障、网路孤岛、节点欺诈等问题。

核心业务处理器在处理充值和提现业务时会先采取风控措施,比如黑名单,大额,高频等机制。

商户系统、网关接口和API、链付钱包等参见下文。

应用场景

基于链付可以支撑多种业务场景,比如交易所钱包服务、to C的数字货币钱包、空投、数字资产管理、DAPP、量化交易等。

交易所

交易所一般需要支持多种数字资产并且拥有大量的的客户地址,交易所需要在满足客户提现和确保客户资产的安全性上做一个适中的选择, 在越来越多的区块链上的安全问题和黑客攻击面前交易所都需要一个专业、经验丰富且响应及时的钱包服务团队做技术支撑。链付可以给交易所提供专业的钱包服务支持,流程如下:

  1. 使用链付SDK本地生成地址然后上传到链付。
  2. 处理链付的充值通知给客户入账。
  3. 使用链付钱包管理客户地址对应的私钥。
  4. 将客户地址上的数字资产归集到数字资产管理器。
  5. 从数字资产管理器划拨一部分数字资产到交易所热钱包来满足客户日常提现。
  6. 从交易所发起提现,然后链付构造交易,接着交易所热钱包对交易进行签名。
  7. 链付将签名后的交易广播出去。

to C钱包

市场上存在各种各样的to C钱包比如imtoken、比特派、币信等,有的是中心化钱包有的是去中心化钱包。数字货币市场依然是一个蓝海市场,现存的to C钱包不一定是未来的市场老大甚至都不一定存在。不论是您想打造一款中心化的还是去中心化的钱包都可以从链付获得丰富的技术支持。

空投

去中心化项目吸引客户非常有效的措施就是空投,链付本身就支持批量提现,因此在链付上可以非常方便的实现空投。首先在链付商户系统上创建一个委托签名地址,然后向该地址转入数字货币和网络手续费,接着在提现操作页面发起一笔批量提现,导入提现的目标地址和数量即可。

空投的效果非常依赖目标地址的活跃度,链付有完整的区块链数据可以为您提供定制的数据分析服务,帮助您寻找最合适的空投目标地址。

数字资产管理

随着数字资产市场规模的迅速增长,企业拥有的数字资产规模也在快速增长。企业需要安全且便捷的数字资产管理工具,比如内部审批,多重签名,审计等。链付有灵活的地址集设定,同一个企业内部可以指定多个不同的充值地址集和提现地址集,能满足企业内部不同项目方的数字资产管理需求。

DAPP

目前DAPP用户转化率比较低的原因之一就是数字资产的转入转出非常麻烦,比如基于以太坊的DAPP可能需要用户会使用MetaMask,这需要用户先安装Chrome然后安装MetaMask插件,然后再学会使用MetaMask,这个漫长且繁琐的流程中用户会大量流失。另外一种选择就是入驻到imtoken这类的钱包中,首先就存在一个能不能入驻的问题,其次钱包进入DAPP的方式是打开一个网页,体验是比较差的。

DAPP可以通过开发自己的手机APP,然后集成链付钱包服务来解决用户的数字资产转入转出问题。用户使用地址就像使用银行卡账号一样,学习成本大为降低。手机APP的操作体验也远高于手机内部APP网页的的操作体验。

量化交易

量化交易需要及时采集市场的各种信息,尤其是交易所充值地址上的大额转账,链付可以提供地址的Watch服务,通过Watch地址可以及时得到转入转出信息,帮助量化交易程序更快地研判市场变化。

基本概念

区块链

区块链是一种多方共享的分布式账本技术。它通过数学方法实现交易数据和历史记录的不可篡改性,通过共识算法和智能合约实现各参与方对交易的共同确认和账本记录。

交易Hash

区块由一个或多个交易构成,每个交易经过一定的Hash算法产生的Hash值就称为交易Hash。

交易确认次数

有的区块链是非最终确定性的,比如比特币,非最终确定性意味着交易确认次数比较小的时候是不可靠的,确认次数越大可靠程度越高。链付对每个区块链都设置了一个交易最小确认次数和交易推荐确认次数,比如比特币的交易最小确认次数是0,推荐确认次数是3。默认情况下商户区块链配置中的交易确认次数就是链付设置的交易推荐确认次数,商户可以覆盖交易推荐确认次数,但不能小于链付设置的交易最小确认次数。

币种

链付中每个币种都币种ID、名称和简称,比如测试环境下的币种:

币种ID 名称 简称
BITCOIN-PLATFORM-DAruzNmUUwEw Bitcoin BTC
ETHEREUM-PLATFORM-XRzfDpylC1sQ Ethereum ETH

币种ID是唯一的,但名称和简称可能相同,比如以太坊上存在一些名称相同的ERC20代币。有的时候币种的名称可能发生改变,但币种ID不会变。

地址

地址是公钥的一种编码形式,而公钥所对应的编码形式可能有多种,比如比特币中地址有Base58编码和Bech32编码,比特现金作为比特币的分叉币又引入一种Cash编码。

Bitcoin及类Bitcoin的地址可能存在多种编码格式,比如Base58,Cash,Bech32,其中Base58和Cash编码的地址是等价的:

地址 格式
1KrBGSteFouRb4WtbGR2DgUE1jUM9Ym45J Base58
bitcoincash:qr8t7d65qzsrytznd8s9c5xww9sjmzzu9u7pd5y23w Cash
bc1qwqdg6squsna38e46795at95yu9atm8azzmyvckulcc7kytlcckxswvvzej Bech32

Ethereum的地址存在多个版本,包括大写,小写和Eip55格式:

地址 格式
0xC2D7CF95645D33006175B78989035C7C9061D3F9 全部大写
0xc2d7cf95645d33006175b78989035c7c9061d3f9 全部小写
0xC2D7CF95645D33006175B78989035C7c9061d3F9 Eip55

虽然还存在其它格式的以太坊地址,但链付只支持大写,小写和Eip55格式,且必须带0x前缀

Litecoin区块链存在两种等价的P2SH地址:

地址 Mainnet的Base58编码前缀
3Nsi4BpeZtsLQvkn8p6PZfHFPoUxKbJ1YY 5
MV5rN5EcX1imDS2gEh5jPJXeiW5QN8YrK3 50

虽然链付支持多种格式的地址,但同一个公钥所对应的不同地址格式只能上传一种。如果您上传了Base58格式

1
1KrBGSteFouRb4WtbGR2DgUE1jUM9Ym45J

就不能再上传Cash格式

1
bitcoincash:qr8t7d65qzsrytznd8s9c5xww9sjmzzu9u7pd5y23w

委托签名

商户可以让链付帮助创建地址,此时地址的私钥由链付持有,地址相关的交易也委托给链付进行签名。使用委托签名商户可以不必关心私钥的管理,这在某些情况下比较方便。比如空投时商户可以创建一个委托签名地址,然后将要空投的币先发送到该委托签名地址,再在链付上发起批量提现即可完成空投,空投完成后这个地址就不需要再使用了。

HD Path

在上传地址的时候可以填写地址的HD Path,如果您的地址是通过HD协议创建出来的,那么在给链付构造的交易进行签名时,链付会将地址的HD Path携带上,这样可以方便通过Root Key找到Child Key,然后进行签名。

地址集

地址集是指多个地址的集合,链付定义了两种地址集:充值地址集(DEPOSIT)和提现地址集(WITHDRAW)。地址只有在充值地址集中才会产生充值通知,地址只有在提现地址集中才会作为构造提现交易的输入。1个地址最多只能在1个充值地址集中,但可以在多个不同的提现地址集中。

提现地址集可以包含充值地址集和没有子集的提现地址集,这样您可以根据业务需要灵活的设置提现地址集。充值地址集只能包含地址,不能包含地址集。

账户

账户代表着地址上某种币的余额,余额分为确认余额、可用余额、冻结余额以及未确认余额:

  • 确认余额:区块链上确认的余额
  • 可用余额:可以用于提现的余额
  • 冻结余额:由提现交易(但交易尚未确认)产生的冻结余额
  • 未确认余额:未确认交易产生的余额

例如A初始有1个BTC,转个B 0.2个BTC后还剩下0.8个BTC

地址 状态 确认余额 可用余额 冻结余额
A 初始 1 1 0
A 交易(A->B 0.2BTC)未确认 1 0.8 0.2
A 交易确认 0.8 0.8 0

有的区块链支持多个币种,比如以太坊除了ETH之外还有很多ERC20、ERC721代币。有的区块链本身只有一种币,但存在很多分叉链和基于该区块链的高级协议,比如比特币区块链本身只有BTC,但是存在BCH这种分叉币,还存在使用OMNI协议创造的USDT。链付将后面这种情况也视为存在多种代币,因此商户系统中的BTC菜单栏下面存在”BTC账户”、”BCH账户”和”OMNI账户”。

充值

不同区块链上的交易结构有所不同,但总的来说交易都可以抽象为输入或者输出,输入和输出可能有一方不存在。链付中的充值产生的条件是:

  • 地址在输出端有值且值大于0
  • 地址在充值地址集中

同样的地址可能在交易中有多个输出,链付会将所有的输出合并成一个充值,比如BTC交易tx0的输出:

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"index":0,
"address":"1KrBGSteFouRb4WtbGR2DgUE1jUM9Ym45J",
"amount":1
},
{
"index":1,
"address":"1KrBGSteFouRb4WtbGR2DgUE1jUM9Ym45J",
"amount":2
}
]

地址1KrBGSteFouRb4WtbGR2DgUE1jUM9Ym45J在链付中产生的充值数量就是3。充值产生后会给商户发送充值通知,但发送有前提条件:

  • 链付和商户都开启了充值币种的通知开关
  • 充值地址不在链付或者商户的黑名单中
  • 经链付风控系统判断非恶意充值

商户可以在区块链配置和币种配置中设置是否开启充值通知,如果区块链配置中的充值通知是关闭的,那么该链上的币种充值通知都不会发送。

提现

商户可以通过商户系统或者调用网关接口来向链付发送提现请求,链付负责构造交易然后交易商户进行签名(如果地址是委托签名地址,那么签名将由链付完成),签名完成后再交易链付负责广播交易。

一个提现请求可能需要多笔提现交易来完成,交易类型有三种:

  • MERGE:提现地址集内部的币种划转
  • REFUEL:提现地址集内部的网络手续费划转
  • WITHDRAW:完成提现请求的交易

当提现地址集中有地址的网络手续费足够但代币不足够的时候,需要从其它地址先转一部分代币到该地址上。当提现地址中有地址的代币足够但网络手续费不足够的时候,需要先从其它地址转一部分网络手续费到该地址上。

提现完成后会发送提现通知,商户可以在区块链配置和币种配置中设置是否开启提现通知,如果区块链配置中的提现通知是关闭的,那么该链上的币种提现通知都不会发送。

提现间隔

提现间隔包括”提现批处理时间间隔”和“提现批处理数量”,用来设定下一次处理提现的规则。比如当设置提现批处理时间间隔为10s时就是指处理完当前的提现请求后链付会等待10s再处理提现。当设置提现批处理数量为5时,链付在处理完当前的提现请求后会等待提现请求累计到5个之后再处理。等待的时间和累计的提现请求数量任何一个满足条件之后链付都会立即处理提现请求。

商户可以在区块链配置中设置”提现批处理时间间隔”和“提现批处理数量”,也可以在币种配置中设置,币种配置的值会覆盖掉区块链配置的值。