0 引 言
区块链系统在市场上具有极高的市值,截至2021年11月,区块链系统的总市值超过3万亿美元
[1,2]。区块链系统包含一定的金融属性,可以在支付领域发挥作用
[3]。支付巨头PayPal允许用户使用加密货币向商户付款
[4],戴尔、steam、特斯拉也曾接受比特币支付
[5,6]。但是,受限于区块链自身存在的问题,steam与特斯拉随后宣布停止接受比特币支付方式
[7,8]。目前,在日常生活中也几乎不存在接受区块链交易的贸易市场,因此将区块链的使用范围扩展到日常支付领域依旧困难重重,当前区块链存在以下局限性:
1) 支付确认的高延迟。以比特币为例
[9],一般12 min产生一个区块,为保证该区块在最长链中,在其后产生6个连续的区块,才能确认该区块中包含的交易,因此商户需要经过长时间的等待才能确认消费者完成了支付。而在日常支付场景下,商户需要在2 s内完成消费者支付确认。
2) 高昂的手续费(区块链网络交易费用
[10])。区块链网络是由许多分布式节点共同维护的,他们负责打包交易并发送给邻近的网络节点,以此保证信息的公开透明。节点在打包交易并广播这些信息时会付出一定的资源,与之相应的,每一笔转账交易都会产生一部分费用用于奖励矿工,由此用户在进行交易时,每笔交易都会额外付出一定的交易手续费。由于日常支付场景中存在的往往是高频小额交易,可能会出现交易手续费高于交易金额的情况,对于交易双方而言,过高成本的交易手续费显然是无法接受的,而现有方案极少有对此进行处理优化。
现有一些解决方案尝试将链上支付行为转移至链下,以此来解决支付确认的高延迟问题。在状态通道
[11,12]中,交易双方事先支付交易资金,然后在链下进行交易,更新双方状态,最后在链上汇总结算。但是由于状态通道的建立需要一定的时间,如果想缩短支付确认时间,消费者必须提前与所有潜在的交易对象建立状态通道,且在每个通道内都锁入资金,这无疑提高了在日常支付场景中使用区块链的资金门槛。文献[
13]在此基础上提出了Tumblebit方案,引入支付中心,通过链下解谜计算的方式,增强了交易的隐私性,但这增加了交易的计算开销,而且并不能解决手续费与额外被锁定资金问题。闪电网络
[14]使用哈希时间锁合约实现了交易路由,使得消费者只需与一位商户建立支付通道,便可与其他连通的商户进行交易,虽然闪电网络解决了额外被锁定资金问题,但是引入了路由节点所收取的路由费用,在一个复杂网络中,路由费用将不可忽视。针对此问题,文献[
15]提出perun支付中心方案,提出了虚拟支付通道的概念,允许用户在现有支付通道的基础上,建立新的支付通道,避开与区块链的交互,从而实现了支付通道的快速创建,在这种情况下,商户与消费者只需要与支付中心建立支付通道,消费者与具体商户进行交易时,双方通过支付中心快速建立虚拟支付通道,由此解决了消费者过高的被锁定资金问题。但是在perun支付中心方案中,由于商户之间是独立的,无法实时获知消费者的真实剩余金额,从而产生双花漏洞。此外,支付中心需要准备大量的资金,用于平衡支付通道,对支付中心的资金要求很高。
针对以上问题,文献[
16]提出了Snappy方案进行了一定的优化,该方案在商户之间形成联盟,消费者只需要预先存入一定量的押金,并在随后的交易中,确保未上链交易总金额小于押金即可,同时为了避免消费者与商户合谋,商户也需要存入相同金额的押金。但是在贸易市场中,消费者数量庞大,每位商户都存在大量的资金被用作押金,增加了商户的资金压力。
综上所述,将区块链应用于日常支付场景中需要满足以下要求:a) 商户能够在短时间内确认自己能够收到交易资金;b) 商户与消费者均不需要准备额外资金;c) 尽可能降低交易手续费。
为了实现区块链快速交易,本文提出商户联盟交易体系,将付款与结算分离,同时在链下记录资金状态,缩短支付确认时间。针对已有方案中引入的押金问题,设计筹码交易机制,使用筹码代替被锁定的不可使用的押金,释放系统中被锁定资金。针对交易手续费问题,设计交易结算机制,解耦消费者结算与商户结算,降低交易手续费。针对可能出现的作恶场景,设计状态安全同步机制,为基于区块链的日常交易提供安全保障。
1 商户联盟交易模型
商户联盟交易模型包含以下实体:某贸易市场下的所有商户、所有消费者和区块链系统。商户联盟交易模型如
图1所示。
由
图1可知,贸易市场内商户之间建立商户联盟。消费者前往该贸易市场消费时,预先在区块链上抵押预计消费的资金。智能合约生成该消费者的筹码,随后在商户联盟内同步该筹码记录,消费者与商户共同维护筹码记录,将其作为交易是否能达成的依据。在结算方面,将商户结算与消费者结算解耦,增加商户的结算灵活度,将多笔交易统一结算,从而减少区块链交易次数,降低交易手续费。
本文假设商户联盟中有超过一半的商户是诚实的,区块链系统的吞吐量总是能够满足交易量所需,即不会出现交易产生却无法上链的情况。
2 商户联盟交易体系架构
假设某贸易市场内存在n家商户(M1,M2,…,Mn ),有k位消费者(C1,C2,…,Ck )准备在贸易市场内消费,消费者Ci 的预计开销为Vi。
智能合约
[17,18]允许在没有第三方的情况下进行可信交易,根据预先设定好合约的执行流程,就能够不可抵赖地完成交易行为。本商户联盟交易体系在链上使用智能合约技术实现整体架构。架构包含3个层面:数据层、网络层和应用层。本文在数据层设计了消费者状态与商户状态,用于记录各方的交易情况以及资金分配情况,为交易体系提供数据支撑;在网络层采用状态安全同步机制,在商户联盟内部提供了数据状态同步服务;在应用层向商户与消费者提供了完整的交易与结算服务。
2.1 数据层
数据层为交易体系架构规定标准化的数据结构-消费者状态与商户状态,用于记录各方的资金状态,为应用层交易与结算提供底层数据基础。
消费者状态CS i 是一个n+3元组:(Sig i,Vi0,Vi1,Vi2,…,Vin,Version ij ),记录了消费者Ci 的当前资金状况,如剩余资金、已进行的交易情况等,其字段含义如下:
1) Sig i :表示消费者Ci 的签名,作为消费者状态的标签,起识别作用;
2) Vi0:表示消费者Ci 的剩余可使用资金;
3) Vij :表示消费者Ci 在商户Mj 处的已消费金额;
4) Version ij :表示当前消费者状态的版本,用于商户判断当前消费者状态是否重复出现。
商户状态MS是一个n+2元组:(Sig,(pk1,),(pk2,),…,(pk n,),Version),记录了当前各商户可取出资金的情况。商户状态由智能合约管理维护,其字段含义如下:
1) Sig:表示智能合约对当前商户状态的签名;
2) (pk i,):表示商户Mi 的标识符以及商户Mi 当前可取出的资金数量;
3) Version:表示当前商户状态的版本。
2.2 网络层
在本方案中,消费者状态由消费者与商户在链下共同更新维护。商户依据最新消费者状态判断消费者的剩余资金是否足以完成交易,智能合约依据最新消费者状态完成结算,消费者状态在商户联盟交易模型中有着至关重要的作用。为保证消费者状态的安全性以及实时性,在网络层设计了状态安全同步机制。在交易时,向所有商户同步最新消费者状态,在结算时按照最新消费者状态进行结算,避免可能存在的作恶情况。状态安全同步机制流程如下:
1) 双方完成交易后商户将带有消费者与商户签名的最新消费者状态在商户联盟内同步。
2) 其他商户在收到最新消费者状态后,对此进行验证。首先,判断商户Mi 金额的变动与消费者剩余金额的变动是否相等;其次,验证其他消费者的剩余金额是否被修改过。
3) 若验证通过,则更新本地最新消费者状态;否则,向智能合约申请审计,由商户联盟全体商户进行投票,商户联盟内诚实商户占据一半以上,足以保证系统安全性。
4) 在结算审计时,所有商户将最新消费者状态发送至智能合约。
5) 智能合约根据多数原则判断最新消费者状态,进而完成结算。
2.3 应用层
商户联盟交易架构的应用层为联盟内商户和消费者提供了完整的区块链快速交易服务,它包含两个模块:筹码交易机制和交易结算机制。
2.3.1 筹码交易机制
现有研究工作中存在大量被锁定无法使用的资金,这无疑提高了用户在日常支付场景中使用区块链交易时的门槛。因此本文在应用层中设计了筹码交易机制,用于为消费者提供区块链快速交易服务,将现有系统中存在的被锁定资金总量清零。一方面将消费者资金转换为筹码-消费者状态,并使用消费者状态记录当前消费者的交易行为,释放消费者侧的被锁定资金,另一方面在消费者结算时,依据消费者状态分配商户资金,释放商户侧的押金。
消费者在前往贸易市场消费之前,要将自己的预估资金发送至智能合约。智能合约创建对应的消费者状态并在商户联盟内同步,该消费者以对应的消费者状态作为筹码参与交易,商户根据消费者状态中的剩余可使用资金,判断交易是否能完成,随后由商户与消费者共同更新同步最新消费者状态。筹码交易机制流程如
图2所示。
消费者前往贸易市场进行交易时,具体流程如下。
准备阶段:
1) 消费者向智能合约发送签名并转入预计开销的资金。
2) 智能合约创建对应初始消费者状态,并对其签名,以防恶意用户假造消费者状态。
3) 智能合约向消费者与商户同步该消费者状态。
交易阶段:
4) 消费者向商户付款时,由消费者更新自己状态并对其状态签名。需要更新的信息包括:消费者剩余金额、对应商户交易金额和状态版本号。
5) 商户验证最新消费者状态,判断消费者剩余金额的变动值与自己金额的变动值是否相等,同时保证只有商户与消费者的资金发生了变动。
2.3.2 交易结算机制
在区块链系统中,每一笔交易都会收取一定的交易手续费,而在日常支付场景中多为高频小额交易,多笔交易累积起来的手续费可能会高于交易本身的金额,这严重阻碍了区块链在日常支付领域中的应用。已有快速交易方案中,均没有对此进行考虑。在Snappy方案中,虽然在链下完成多笔交易,在链上完成汇总,但是由于消费者在每个商户处进行交易后,转账的目标地址不同,在链上汇总时会产生多笔交易,依旧会存在多笔交易手续费。因此本文在应用层设计了交易结算机制,将消费者结算与商户结算解耦,减少区块链交易次数,降低交易手续费。消费者进行结算时,商户资金不会立刻转移到商户账户上,而是会暂时存储在智能合约中,同时智能合约更新并同步商户状态,在商户结算阶段完成资金的汇总转移。在区块链系统中,每笔交易都会收取一笔交易手续费,交易结算机制将商户与多位消费者的交易合并成一笔交易,能够有效降低交易手续费。交易结算机制流程如
图3所示。
消费者结算阶段:
1) 当消费者Ci 完成交易后,向智能合约提出结算申请。
2) 智能合约进行结算时状态安全同步,依据多数原则判断消费者状态。
3) 智能合约将消费者剩余资金退还给消费者。
4) 智能合约根据消费者状态更新商户状态。设消费者状态为:(Sig i,Vi0,Vi1,Vi2,…,Vin,Version ij ),商户状态为:(Sig,(pk1,),(pk2,),…,(pk n,,Version)。具体步骤包含: a) 根据消费者状态中的对应商户资金Vij,更新商户状态中的(pk j,)项为(pk j,+Vij ); b) 采用自增方式更新Version; c) 智能合约为商户状态签名。
5) 对商户状态中的(pk i,)项签名,并发送给对应的商户确认。
商户结算阶段:
1) 商户Mi 完成多笔交易,准备取出资金时,向智能合约提出结算申请,同时附带自己的签名。
2) 智能合约对签名进行验证。
3) 验证通过后,根据当前商户状态的(pk i,)项,向商户Mi 进行转账,转账金额为。
4) 智能合约更新商户状态,将对应商户可取出金额置为0,同时对新的商户状态进行签名。
当消费者完成结算后,消费者取出自己的剩余资金。但是商户交易所得资金依旧存放在智能合约上,以商户状态的形式记录着。此时仅产生了一笔交易,所以只有一笔交易手续费,而实际上消费者在商户联盟内已经进行了很多笔交易。当不断有消费者前往交易时,只要商户没有取出资金,对于商户而言,就没有交易手续费;只有当商户取出自己的资金时,才会产生一笔交易,收取一笔交易手续费,由此有效降低了区块链在日常支付中的使用门槛。
3 安全性能
3.1 安全性分析
安全性分析主要是基于区块链快速交易模型,以多种潜在的攻击场景为例分析说明本方案的安全性。
3.1.1 消费者作恶
在消费者作恶场景下,消费者在不同商户处提供虚假或不同版本的消费者状态,使得商户未能根据最新消费者状态判断消费者剩余资金是否足够交易,进而导致消费者的实际交易资金超出预存筹码,此时消费者离开贸易市场,智能合约处存放的筹码资金不足以向商户完成支付,对诚实商户造成了损失。
根据状态安全同步机制,当商户完成一笔交易后,需要在商户联盟内部同步最新消费者状态,消费者尝试使用恶意消费状态进行交易时,商户发现消费者发送的消费者状态与自己存储的消费者状态不一致,可以在商户联盟内请求获取正确的消费者状态,即可发现该消费者在使用恶意消费状态进行交易,从而及时结束交易,避免损失。
3.1.2 商户作恶
消费者状态由消费者更新,商户确认后在商户联盟内同步。在商户作恶场景下,商户在同步最新消费者状态前,恶意修改自己的资金部分,从而获取额外收益。在消费者更新消费者状态时,会对最新消费者状态签名,其他商户在收到消费者状态同步时,会对签名进行验证,商户的恶意修改会使得签名无法被验证,从而防止了商户作恶行为。
其次,若商户在交易完成后,未同步消费者状态。在这种情况下,在进行消费者状态同步时,消费者也会收到同步信息,由此可以判断出商户是否在商户联盟内同步了消费者状态,进而防止商户作恶行为。
3.1.3 消费者与商户合谋作恶
当消费者与商户合谋时,商户完成交易后,不将消费者状态在商户联盟内同步。使得其他商户不能收到最新消费者状态,无法判断是否能够完成交易,而随后消费者在受害商户处使用以前版本的消费者状态完成交易,当消费者完成超额交易后,直接离开贸易市场,其留在智能合约处的资金并不足以对受害商户进行补偿。
在本模型中,若一笔交易未在商户联盟内同步,该交易将无法体现在诚实商户保存的消费者状态中。在结算时,智能合约依据诚实商户发送的消费者状态完成结算,同时更新商户状态。所以未在联盟内同步的交易将不会进入结算过程,即智能合约将只对遵循本模型的商户的交易进行结算,从而保证遵循协议的诚实商户能够收到交易的全部金额。
3.2 性能分析
为验证商户联盟交易模型,本文实现了一个原型系统,验证了本文提出的基于商户联盟的区块链快速交易方案在被锁定资金、交易效率、结算效率等方面的性能。
3.2.1 实验环境
商户联盟交易模型原型系统模拟了一个贸易市场。系统使用Node.js(v8.17.0)实现。模型中的区块链系统基于以太坊(v1.8.4)实现,并通过API Web3实现与其他实体的通信交互。原型系统运行在Ubuntu16.04操作系统中。
3.2.2 资金分析
现有系统中存在的额外资金压力以及高昂的交易手续费提高了将区块链应用在日常支付场景中的门槛,本文商户联盟交易模型在这两方面进行了改进。假设贸易市场内存在10个商户与50位消费者,每个消费者与随机多个商户消费进行10笔交易,总计10以太币,与文献[
11,
16]对比结果如
表1所示。
资金方面,本文方案存在显著的优势。在状态通道方案
[11]中,由于消费者并不清楚自己会与哪一家商户进行交易,所以需要与每一家商户建立状态通道。每个状态通道内都抵押10以太币,则每位消费者需要抵押100以太币,其中90以太币为需要额外抵押的押金,所以消费者侧的额外押金总量为4 500以太币,商户侧的押金总量为5 000,由此系统中存在的额外押金总量为9 500以太币。而在Snappy
[16]方案中,每位消费者只需要抵押10以太币,同时需要保证未上链交易的交易总额在10以太币以内,因此消费者侧的总押金量为500以太币。为了保证商户不会与消费者合谋,每位商户需要对应每一位消费者抵押相同金额的押金,所以每位商户的押金为500,商户侧的总押金量为5 000以太币,此时系统中存在的押金总量为5 500以太币。在本文模型中,我们以筹码的形式完全取代了押金机制,消费者只需预先发送可能消费的总金额至智能合约,即使这部分金额超出实际支付金额,但由于这部分资金数不大,且是可以被使用的,我们可以认为这部分资金不属于消费者需要准备的额外资金。在商户侧,状态安全同步机制保证商户无法通过恶意行为获得额外收益,因此商户也不需要发送额外押金。
本文方案对交易手续费也进行了有效的优化。由于交易手续费是交易者自行设定的,此处设定每笔交易手续费为0.1以太币,Snappy
[16]与状态通道方案
[11]中,在不存在找零交易的情况下,消费者与每一位商户都进行了交易,那么在结算时智能合约需要向所有商户都发起一笔交易,即每位消费者在结算时都会产生10笔交易,所以整个系统共产生500笔交易,交易手续费为50以太币,而在本文方案中,每位消费者在汇总结算时会产生一笔交易,商户仅在取出交易所得时产生一笔交易,于是系统中会产生60笔交易,交易手续费为6以太币。在已有方案中的交易手续费的增长速率为O(
m·
n),而本文方案中交易手续费的增长速率为O(
m+
n),
m、
n为消费者与商户的数量。
3.2.3 支付确认效率分析
在日常支付场景中,对于支付确认的时间要求很高,通常要求在2 s内商户能够确认消费者是否完成了支付行为,本文商户联盟交易架构将付款与结算分离,在链下使用消费者状态记录资金状态,缩短了支付确认时延。
图4分析了支付确认时延与每秒的交易数量、商户数量的关系。从
图4可以看出,即使贸易市场内存在200位商户、每秒完成500次交易时,支付依旧可以在1.5 s内完成确认,满足日常支付场景需求。
3.2.4 状态同步效率分析
在本文中,状态安全同步机制至关重要,保证了整个系统的安全,同时为商户判断交易是否能进行提供了依据。为此我们分析了状态同步效率,确保商户能够及时进行状态同步。
图5表明,随着商户的增加,状态同步时间呈线性增长,即使存在200位商户时,商户之间也能及时同步消费者状态,使系统良好运行。
4 结 语
为解决区块链在日常支付场景中难以应用的问题,本文提出了一种基于商户联盟的区块链快速交易方案,为区块链在日常支付场景下提供了技术基础。已有的区块链交易方案虽然在支付确认高延迟问题上做出了一定的优化,但没有有效解决系统中存在的大量被锁定资金问题。此外,已有方案也未考虑交易手续费问题,本方案在现有工作的基础上,进一步对被锁定资金以及交易手续费进行优化,使用筹码机制取代了押金机制,通过更加灵活的交易结算机制降低了交易手续费,为区块链在日常支付场景中的使用降低了资金门槛与额外开销。不足之处在于,消费者的交易隐私没有得到有效的保护,未来可从零知识证明的角度切入,实现用户隐私的保护。
国家重点研发计划(2021YFB2700200)
国家自然科学基金(61772383)
国家自然科学基金(61702379)
国家自然科学基金(62172303)
国家自然科学基金(U1836202)
湖北省自然科学基金(2020CFB628)