区块链交易管理器的制作方法

文档序号:26727021发布日期:2021-09-22 21:16阅读:106来源:国知局
区块链交易管理器的制作方法
区块链交易管理器
1.对相关申请的交叉引用
2.本专利申请要求neeraj srivastava于2019年12月13日提交的题为“blockchain transaction manager”的美国临时专利申请第62/948,060号的权益,该美国临时专利申请的全部内容通过引用并入本文。
技术领域
3.本技术涉及位于正在运行的计算机应用与区块链网络之间并且协助正在运行的应用提交、监视和接受区块链交易的中间系统。


背景技术:

4.区块链交易管道面临许多挑战。在区块链平台上,一些挑战是共同的,诸如交易提交与交易提交被接受至共享分类账中之间的延迟。其他挑战是高度特定于平台的,例如,以太坊(ethereum)中由于交易“随机数(nonce)”编号问题而发生的拒绝。期望的是对这些问题提供解决方案,并且将该解决方案结合到可以解决共同的挑战以及特定于平台的挑战的单个界面中。


技术实现要素:

5.本文描述的系统和方法通过使应用可以以其将交易提交至区块链网络例如以太坊的速率最大化以及在使人为干预最小化的同时使成功和最终完成的交易的比例最大化来解决本领域的需求。本文描述了一种接口,该接口可以插入在用户的应用与区块链网络之间,以获得强大的交易管道、状态报告和错误管理的益处。本文描述的区块链交易管理器通过以下的组合来解决上述挑战:队列、用于准备交易的算法;以及响应于区块链网络状况而迭代地调整所述交易的属性;以及轮询网络以了解交易状态。这些功能使能能够进行并发和错误之后的自动地重新发送。
6.在第一方面,提供了一种区块链交易管理器,其接收旨在用于区块链网络中的节点的区块链交易并且管理区块链交易向区块链网络中的节点的提交。区块链交易管理器包括向生成区块链交易的用户应用提供界面的交易管理应用。交易管理应用:接收关于区块链网络和提交交易的身份的必要信息;以及验证所接收到的区块链交易;以及将所接收到的区块链交易排入交易队列中。交易处理器:存储区块链网络和身份信息;以及准备所接收到的区块链交易的至少一个交易属性;使用由用户应用先前提供的身份凭证对所接收到的区块链交易进行数字签名,或者将所接收到的区块链交易认证为适用于区块链网络;以及尝试向区块链网络中的节点提交所接收到的区块链交易。区块链轮询器观察并报告所提交的区块链交易的区块链状态。
7.在示例实施方式中,交易管理应用在接收时为了跟踪目的而向区块链交易分配通用唯一标识符。交易处理器还将向区块链网络中的节点提交所接收到的交易的尝试排入跟踪队列以用于跟踪,并且存储成功提交至区块链网络中的节点的区块链交易的状态信息。
8.在其他实施方式中,管理活动调度器接收已被区块链网络中的节点拒绝的交易并且重试被拒绝的交易。此外,当区块链轮询器对所提交的区块链交易的初始轮询已超过可配置的最大尝试数目时,管理活动调度器可以调度区块链轮询器以降低的速率对区块链状态的进一步轮询以继续跟踪所提交的区块链交易的状态。
9.在另外的实施方式中,交易管理控制台提供人类用户经由交互界面对交易管理应用的访问。交易管理控制台经由用户的交互界面向用户提供区块链交易及其状态的列表。交易管理控制台还管理供区块链交易使用的身份或交易认证凭证。
10.区块链交易管理器还可以包括数据库,数据库存储尚未被成功写入区块链网络中的节点的所提交的区块链交易,并且存储该提交未成功的原因以及所提交的区块链交易的状态。
11.在第二方面,提供了一种管理区块链交易向区块链网络中的节点的提交的方法。该方法的示例实施方式包括:验证所接收到的区块链交易,并且将经验证的所接收到的区块链交易排入交易队列中;准备所接收到的区块链交易的至少一个交易属性,并且将所接收到的区块链交易放置在持久性队列中;对所接收到的区块链交易进行数字签名,或者将所接收到的区块链交易认证为适合于区块链网络;尝试向区块链网络中的节点提交经数字签名的或经认证的区块链交易;以及轮询所提交的区块链交易的区块链状态。在示例实施方式中,轮询区块链状态包括:轮询区块链网络中的节点以获取关于所提交的区块链交易朝向区块链网络中的接受的进展的信息;以及重试轮询直到期望的进展信息被接收到为止。在示例实施方式中,在轮询尝试的最大数目或时间段到期之后,轮询的频率降低。
12.在示例实施方式中,该方法还包括:接收响应,该响应指示:根据适合于区块链网络的准则,所提交的区块链交易向区块链网络中的节点的提交是否导致交易被区块链网络接受;以及将所提交的区块链交易以所提交的区块链交易的状态写入数据库。当所提交的区块链交易的状态指示提交不成功时,该方法还包括将提交不成功的原因存储在数据库中。
13.在其他的示例实施方式中,当所提交的区块链交易已被区块链网络中的节点拒绝时,对被拒绝的区块链交易的至少一个交易属性应用修复算法以创建经修复的区块链交易。对经修复的区块链交易进行数字签名,并且尝试向区块链网络中的节点提交经修复的区块链交易。当所提交的区块链交易已由于可重试错误而被区块链网络中的节点拒绝时,向区块链网络中的节点重新提交所提交的区块链交易,直到被接受或者超过重试限制为止。当超过所述重试限制时,通过向所存储的可用交易随机数池添加随机数值来指示交易的随机数的可用性;将所提交的区块链交易写入数据库中的错误交易表;以及/或者提取最初提交的原始区块链交易,并且使用与新接收到的交易相同的过程来使该原始区块链交易被再次准备并发送。
14.在另外的示例实施方式中,当区块链网络采用类似以太坊的交易随机数时,为所接收到的区块链交易自动地分配随机数。为所接收到的区块链交易自动地分配随机数可以包括:当针对同一账户和区块链网络的多个区块链交易被同时处理时,使用锁定机构来确保一次仅针对一个区块链交易计算随机数;当在多次重试之后区块链交易未被区块链网络中的节点接受时,可以将未被接受的区块链交易的随机数分配至可供与未被接受的区块链交易相关联的账户重新使用的随机数池。该方法还可以包括:当分配随机数时,考虑可用随
机数池是否包含针对与所接收到的区块链交易相关联的帐户的任何随机数;以及当随机数池包含针对与所接收到的区块链交易相关联的帐户的至少一个随机数时,选择最低值的随机数并且将最低值的随机数分配给所接收到的区块链交易。
15.为所接收到的区块链交易自动地分配随机数还可以包括:获得来自区块链网络中的节点的针对账户的随机数(n
web3
);获得为该账户最后自动地分配的随机数(n
red
);从为该账户最后自动地分配的随机数(n
red
)中减去来自区块链网络中的节点的针对该账户的随机数(n
web3
);以及当n
red

n
web3
大于预定义的随机数窗口时,则选取来自区块链网络中的节点中的针对该账户的随机数(n
web3
);否则选择具有更大值的随机数。所述方法还可以包括:在对所接收到的区块链交易进行数字签名之前,针对该账户选择最低的可用随机数;以及当池包含具有比所选择的随机数低的值的随机数时,将所选择的随机数与来自该池的较低值的随机数交换,并且针对所接收到的区块链交易使用来自该池的较低值的随机数。
16.在其他示例实施方式中,当所提交的区块链交易被区块链网络中的节点拒绝时,被拒绝的区块链交易的随机数被写入随机数池,并且该池中最低编号的随机数由准备用于向区块链网络中的节点提交的下一个接收到的区块链交易使用。在再次对被拒绝的区块链交易进行数字签名之前,被拒绝的区块链交易被自动地分配新的随机数以用于向区块链网络中的节点的重新提交。
17.在另一示例实施方式中,至少一个交易属性包括区块链交易的提交者提供的用于支付将由包含区块链网络中的节点的区块链网络用于处理区块链交易而招致的计算和存储成本的每代理单位的区块链交易费用的金额。该金额可以基于与区块链网络中最近接受的区块链交易相关联的金额来自动地计算。该方法还可以包括:自动地计算交易发送者指示其愿意对由包含所述区块链网络中的节点的区块链网络处理区块链交易进行补偿的计算和存储代理单位的最大金额(g)。这样的方法可以包括:从区块链网络获得先前挖掘的区块的限制(g
mb
),其中,所述限制包括交易发送者指示其愿意对由包含所述区块链网络中的节点的区块链网络处理待被挖掘至单个区块中的所选择的区块链交易进行补偿的代理计算和存储单位的最大金额的总和的最大值;以及获得处理该交易所需的代理计算和存储单位的实际金额的估计(g
db
)。然后,当g
db
>=g
mb
,分配g=g
mb
*α,其中α<1;并且当g
mb
>g
db
时,则计算比率r=g
mb
/g
db
,并且如下面那样得到g:
18.当(r>=0且r<=可配置比率cr1,其中cr1>0)时,则g=g
db
*β;
19.当(r>cr1且r<=可配置比率cr2,其中cr2>cr1)时,则g=g
db
*γ;以及
20.当(r>cr2)时,则g=g
db
*δ,其中δ>γ>β>1。
21.然后,在对区块链交易进行数字签名或者将区块链交易认证为适合于区块链网络之前将g添加至该区块链交易,并且尝试向区块链网络中的节点提交经数字签名的或经认证的区块链交易。
22.在其他实施方式中,当所提交的区块链交易由于区块链交易的提交者提供的用于支付将由包含区块链网络中的节点的区块链网络用于处理区块链交易而招致的估计计算和存储成本的每代理单位的区块链交易费用的金额太低或太高而被区块链网络中的节点拒绝时,按预定百分比向上或向下调整交易发送者指示其愿意对由包含区块链网络中的节点的区块链网络处理区块链交易进行补偿的计算和存储代理单位的最大金额,并且在调度延迟之后将区块链交易重新发送至区块链网络中的节点。
23.本文描述的实施方式还涵盖利用用于实现贯穿本公开内容描述的方法的指令编码的计算机系统和计算机可读介质。例如,本文描述的系统和方法可以在云中的用于提供用于访问如本文描述的区块链平台并且将数据存储至该区块链平台的功能的计算平台上实现。
附图说明
24.在附图的图中,通过示例而非限制的方式示出了本公开内容,在附图中,相似的附图标记指示相似的要素。在附图中:
25.图1示出在示例实施方式中部署时区块链交易管理器的使用上下文的框图。
26.图2示出从消息队列的角度来看通过图1的区块链交易管理器的服务组件和队列的交易的整体移动。
27.图3示出在示例实施方式中的图1的区块链交易管理器的组件的框图。
28.图4示出在示例实施方式中的图1的etm控制台的框图。
29.图5示出在示例实施方式中的图1的etm应用的框图。
30.图6示出图3的etm_发送处理器_服务的示例实施方式。
31.图7示出图3的etm_轮询_服务的示例实施方式。
32.图8示出图3的etm_调度_服务的示例实施方式。
33.图9示出在示例实施方式中的用于表示针对与交易处理直接有关的五个实体的队列内的交易的模式。
34.图10示出在示例实施方式中的针对涉及无故障准备和发送、快速挖掘和成功执行的交易在其生命周期中的路径。
35.图11示出在示例实施方式中的用于立即进行交易修复和重新发送的过程。
36.图12示出在示例实施方式中的用于处理“可重试”交易错误的过程。
37.图13提供上面描述的活动路径的高级概要,其中,焦点在其中系统在错误情况之后重试处理以及/或者有意地引入时间延迟的点上。
38.图14示出在示例实施方式中的可视化为状态转换模型的区块链交易管理过程。
39.图15是典型的通用计算机的框图,该典型的通用计算机可以被编程为适用于实现本文公开的区块链交易管理器的一个或更多个实施方式的专用计算机。
具体实施方式
40.下面关于图1至图15的描述充分示出特定实施方式,以使得本领域技术人员能够实践它们。其他实施方式可以结合结构性变化、逻辑性变化、过程变化和其他变化。一些实施方式的部分和特征可以包括在其他实施方式的部分和特征中,或者替代其他实施方式的部分和特征。权利要求书中阐述的实施方式涵盖那些权利要求的所有可用等同方案。
41.术语
42.区块链:使用密码学来链接和保护的、被称为区块的不断增长的记录列表。每个区块通常包括前一个区块的加密哈希、时间戳和交易数据。区块链被设计成固有地抵抗对交易数据的修改。为了用作分布式分类账,区块链通常由对等网络管理,对等网络共同遵守用于验证新区块的协议。一旦被记录,在不更改所有后续区块的情况下,不能追溯地更改任何
给定区块中的数据,更改所有后续区块需要网络多数的合谋。
43.智能合同:提供在区块链或分布式分类账上进行的通用计算的计算机协议。智能合同交易可以是简单的,或者可以实现复杂的逻辑。由此产生的交易通常对分类账参与者是透明的,可追踪的且不可逆转的。各种分布式分类账技术平台诸如以太坊已经实现了多种类型的智能合同。在以太坊的情况下,智能合同是被向下编译成字节代码并且被部署至以太坊区块链以用于执行的高级编程抽象。
44.在浏览器之外执行javascript代码的免费的开源服务器环境。是构建在chrome浏览器的javascript运行上的异步编程平台。关于的更多信息可以在“关于”node.js,node.js基金会,https://nodejs.org/en/about/处找到。
45.以太坊术语:将关于被称为以太坊的常用区块链平台来描述本文描述的示例实施方式。由于以太坊文件、实施和相关库有时针对相同构思使用不同名称,因此本文将以与以下含义一致的方式使用以下术语:
46.平台属性
47.以太币:以太坊区块链平台的本征加密货币。这种货币的一种用途是补偿矿工代表网络的工作。关于在这方面与以太坊类似的区块链平台,如本文所使用的“以太币”应被视为与所考虑平台的类似本征加密货币同义。
48.矿工:评估区块链交易并且进行共同维护其网络中区块链数据完整性的计算的实体。
49.交易生命周期术语
50.提交者:与交易相关联的区块链网络身份,其身份凭证用于对交易进行数字签名,并且将针对其加密货币账户收取费用。
51.发送/已发送:交易到区块链网络中的邻近节点的初始通信(或尝试)。
52.拒绝:交易在到区块链网络中的邻近节点的初始通信期间由于错误而被拒绝。
53.未决:交易在初始通信期间被接受,已被置于未决交易列表中,并且正在被广播至其他区块链网络节点,但尚不知道是否已被挖掘。
54.已挖掘:交易已经进行评估,包括在区块中,并且被附加至区块链(至少从给定节点的角度来看)。该交易可能成功或失败。
55.接收:源自区块链网络中的邻近节点的一条数据表明已知交易被挖掘,包括关于成功或失败的信息。(“接收”是由与以太坊节点一起使用的流行web3软件库使用的术语。)
56.成功:所挖掘的交易被完全执行并且在其被挖掘时没有错误。
57.失败:所挖掘的交易在其被挖掘时产生错误,没有被完全执行,并且除了对区块的失败细节的记录和向提交者的加密货币账户收取用于尝试的费用之外没有任何影响。故障可能由于多种原因而发生,其中一些原因在本文进行描述。
58.完成:由于发现区块链网络的另一部分在确认交易方面取得了更多进展,因此其区块的交易极不可能在区块链中被替换。不存在确定这一点的形式化规范,但是通常基于随后附加的区块的数目来确定。
59.简单交易:不包含新的智能合同的区块链交易。
60.合同交易:包含新的智能合同的区块链交易。
61.交易属性
62.燃气(gas):用于在处理给定交易的情况下将由类似以太坊的区块链网络招致的组合的计算成本和存储成本的估计的标准化代理单位金额,这成为用于向交易的提交者收取费用的基础。“燃气”既是代理单位,又是针对这种估计的总金额的术语。
63.起始燃气(startgas):交易发送者指示其愿意补偿提议交易的最大代理计算和存储单位。(这是web3库术语;以太坊黄皮书将其称为“燃气限制”)。
64.燃气价格(gasprice):交易提交者提供用于向挖掘该交易的账户支付的金额,以在该交易的处理期间消耗的每单位燃气的加密货币费用计。
65.本征燃气(intrinsic gas):在执行任何智能合同代码之前交易将使用的燃气。本征燃气包括基线交易燃气费用加针对作为参数向交易供应的任何数据的燃气费用。(计算针对作为参数向交易供应的任何数据的燃气费用是因为即使交易失败,输入参数也将被记录到区块链。)
66.随机数:此处对随机数的所有讨论都涉及提交者在以太坊和类似的区块链平台上的交易所需的顺序编号。
67.网络属性
68.区块燃气限制:当网络上的矿工选择未决交易以将其挖掘至单个区块中时,区块燃气限制是所有所选择的交易允许的起始燃气总和的最大值。每个以太坊网络或者基于具有类似结构的用于补偿矿工的平台的网络都有其自身的限制,所述限制在附加每个新的区块之后少量地增加或减少。
69.区块链节点属性
70.随机数窗口:交易可能具有但仍被节点接受的最高随机数值,表示为比由节点发送至区块链网络的针对给定提交者身份的最后交易的随机数高的增量。随机数窗口的作用是限制在节点中可能针对每个身份正在进行广播的交易的数目。随机数窗口可以针对区块链网络中的每个节点来配置。
71.邻近节点:区块链网络中的与用户或应用最直接通信的节点,以与整个区块链网络进行交互。
72.概述
73.区块链交易挑战
74.本文描述的区块链交易管理器解决了应用在直接与诸如以太坊的区块链网络一起工作时或者使用当前流行的支持库与区块链网络一起工作时所面临的困难。如上所述,本文的描述是关于常用的以太坊区块链网络提供的,但是本领域技术人员将理解的是,本文描述的技术也可以用于其他区块链网络,诸如aion、arcblock、eos、neo、fabric、sawtooth、nxt、qtum、quorum、smilo、tezos、tron、wanchain或zilliqa。本文使用的术语是关于以太坊区块链网络的。相应的术语将在其他区块链网络的上下文中使用,诸如提到的那些术语
75.1.针对要挖掘或完成的交易的同步等待
76.针对将交易添加至区块或者通过一些手段实现“终结”的时间延迟是对于大多数区块链平台共同的挑战。朴素的应用可能采用“即发即弃”的方法——将交易发送至区块链
网络中的邻近节点并且推测所述交易将成功而继续进行,直到稍后的活动证明并非如此。想要更多确定性的其他应用针对要挖掘或完成的交易可能选择在继续进行之前等待常规的时间段。然而,这些方法都不是理想的:一种方法导致后续过程的不确定性增加,而另一种方法导致几分钟的同步等待时间。
77.2.由随机数间隙引起的交易停止
78.第二类别的困难涉及由类似以太坊的区块链平台采用的交易“随机数”的构思。这些是网络期望顺序地分配给针对给定区块链身份提交的交易的编号。所述编号由提交者分配,但是实际上提交者通常将其委托给与区块链网络相关联的支持代码库。类似以太坊的网络将尝试以随机数编号顺序处理交易,这可能出于各种原因而导致交易延迟或交易失败。具有比已经处理的那些交易低或高得多的值的交易将彻底失败。序列中缺失的值将导致具有后续随机数的事务被忽略,直到填充了序列中的间隙为止。
79.3.对针对交易费用预期变化的人工重新配置的需要
80.接受的是,区块链平台中的交易与类似以太坊的矿工补偿机构伴随着交易者部分地基于如上限定的燃气价格愿意向网络缴纳费用的最大金额。低估燃气价格可能导致长延迟或无限期的延迟,这是因为为了包括在区块链中而选择了更慷慨的交易。选择更慷慨的交易由于首选价格随时间而波动的事实而加重成为挑战。但是为了考虑这种波动性而将燃气价格设置足够高意味着在大多数时间下支付过高。因此,大多数交易者定期地人工调整其应用建议的价格,并且在该交易者注意到交易未进行时也是如此(然后必须重新提交这些交易)。
81.4.发现和处理区块链交易拒绝和失败的困难
82.随机数和交易费用只是交易拒绝和交易失败的两个来源。由于区块链处理的异步性质和来自平台的不友好的错误报告,可能难以检测交易拒绝和交易失败以及其他错误,包括由智能合同本身引起的错误。一旦被检测到,可能难以解决这些错误。下面描述了与本文描述的区块链交易管理器有关的特定错误状况中的一些特定错误状况。
83.随机数低错误
84.对交易的随机数分配被设计为顺序过程。每个交易与随机数(整数值)进行绑定以避免双重消费问题。针对每个提议交易,随机数需要比先前的交易的随机数大一。随机数低错误在下述情况下发生:当提交者向网络提议具有比先前挖掘的针对其为提交者的最新交易的随机数低的随机数的交易时。这种情况可能发生在尝试水平地扩展交易发送应用期间,例如,如果使用了朴素的随机数分配算法,诸如在流行的以太坊支持库中发现的那些算法。这些库基于其自身对提交者的最高随机数的局部观察来自动地分配随机数。当多个实例尝试同时这样做时,可能发生重复的随机数分配,其中,处理的第二实例得到失败结果。
85.燃气低、燃气超量、以及燃气缺乏
86.如上所述,类似以太坊的区块链平台中的交易伴随着提交者愿意向网络缴纳费用的最大金额。该金额部分地基于下述:交易属性起始燃气;提交者对针对交易的可允许的代理计算和存储单位的上限。存在其中针对起始燃气选择的金额可能导致针对交易的问题的三种情况。前两种情况由区块链网络中的节点在向其发送交易时确定。这些平台中的每个交易消耗用于计算和所存储的最小金额的代理单位——被称为“本征燃气”,这可以从交易本身计算出。因此,如果起始燃气被设置小于本征燃气,则交易将被立即拒绝,并且具有燃
气低错误。分配太高的起始燃气也是有问题的。当起始燃气高于区块燃气限制时,交易将由于燃气超量错误而被拒绝,这是因为节点知道在当前网络状况下该交易永远无法适应区块。与燃气有关的第三问题仅在交易被挖掘时才会被发现,因为交易的确切的存储需求和计算需求仅在该交易被实际执行时才变成已知。如果起始燃气低于实际所需的燃气,一旦达到限制矿工将立即停止处理交易,并将该交易作为燃气缺乏的故障记录到区块链。记录交易的影响,但是由于计算工作由网络完成,因此仍基于参照提交者的以太币账户的全部起始燃气金额征收费用。远程过程调用(rpc)没有响应
87.交易发送应用通常经由远程过程调用与区块链网络中的邻近节点进行交互。如果节点对这些调用暂时没有响应并且因此没有接收到交易,这对应用提出了挑战。
88.资金不足
89.如果在发送交易时燃气价格和起始燃气的乘积大于提交者的账户中的以太币的金额,则交易由于资金不足错误而被拒绝。
[0090]“已知交易”错误
[0091]
为了使节点识别其是否已被告知提议交易,将每个交易的属性提取为识别哈希。哈希是对于这些属性将是唯一的值,但是如果哈希具有完全相同的属性,则该哈希对于后续交易是相同的。被发送有具有与已经在节点未决交易列表上的哈希相同的哈希的交易的节点由于已知交易错误将拒绝该交易。(如果具有相同哈希的先前交易已被挖掘,则后续交易也将失败,但是会出现低随机数错误。)
[0092]
5.由于系统故障引起的交易损失
[0093]
用于提交区块链交易的自动化系统涉及多个步骤,所述多个步骤包括:添加交易属性、数字签名、发送至区块链(可能沿途通过第三方库)、以及使状态和其他数据持久。如果对错误、异常或服务故障的处理不成熟,则借助于其自身管理该过程的应用容易在这些步骤中的任何步骤处丢失交易或数据。
[0094]
因此,在实现本文描述的区块链交易管理器之前,使用诸如以太坊的区块链网络的应用面临停止并等待区块链网络交易被接受(“挖掘”)。有时,由于不易处理的交易编号(“随机数”)以及针对交易费用的频繁重新编程单位成本估计(“燃气”),交易会被阻止。此外,该应用必须处理所有区块链网络交易错误。
[0095]
对于区块链交易挑战的解决方案
[0096]
本文描述的区块链交易管理器通过以下来解决上述挑战:队列、用于准备交易并响应于区块链网络状况而迭代地调整交易属性的算法的组合以及轮询网络以了解交易状态。这些能力支持并发和错误之后的自动地重新发送。
[0097]
1.异步并发交易处理
[0098]
示例实施方式中的区块链交易管理器通过使用强大的排队交易管道,随后轮询网络以跟踪交易成功或失败解决了上述主要挑战中的两个挑战。这允许用户应用提交交易而无需等待最终确认。还消除了交易丢失,这是因为针对每个步骤的后续队列都会保留所述步骤,直到确认步骤的处理的成功或失败为止。队列管道对初始提交进行调解;添加属性如燃气价格、随机数和燃气限制;数字签名以及网络确认。队列还管理重试和失败报告。
[0099]
作为附加的益处,队列使得能够在每个步骤处进行逻辑并发处理。区块链交易管理器的服务组件是针对这样的并发性而设计的,包括在需要时支持针对共享状态的缓存
(例如,用于确定可用的随机数值)。
[0100]
当人工处理时,通常基于交易的所有特征中的用于跟踪该交易的“交易哈希”来跟踪区块链交易诸如以太坊交易。例如,计算交易哈希,并且当交易被成功发送至区块链网络中的节点并且具有所有需要的属性并且在该节点被数字签名的情况下由该节点返回所述交易哈希。另一方面,本文描述的区块链交易管理器接受来自用户应用的部分(“原始”)交易。这是期望的,因为对于异步处理,最理想的是在实际提交之前计算某些属性。因此,可能需要附加的标识符以用于跨整个过程跟踪交易,包括该交易可能被区块链网络中的节点拒绝的可能性。
[0101]
区块链交易管理器在经由应用编程接口(api)——例如使用http请求来获取、投放、发布和删除数据的表征状态转移(rest)api——接收交易时,为了跟踪目的而向每个交易分配通用唯一标识符(uuid

随机)。在示例实施方式中,区块链交易管理器使用随机生成的版本

4uuid。如果交易稍后被区块链网络中的节点接受,则仍然生成交易哈希,如将是大多数实施方式中的情况。然后,该哈希同样与交易id相关联,并且对调用应用可用。
[0102]
虽然交易的这种异步处理可以使用多种编程平台来实现,但是示例实施方式中的区块链交易管理器的方法是选择具有下述的区块链交易管理器:具有针对异步处理的强大支持和用于与区块链网络交互的经过良好测试的库,例如存在于以太坊区块链平台的库。
[0103]
2.自动化随机数分配
[0104]
区块链交易管理器通过将随机数周到地自动地分配给传入交易,使上述与随机数有关的挑战最小化。当来自相同帐户的多个交易被同时处理时,随机数计算变得特别重要。例如,以太坊网络仅在其随机数为整数值并且比传送到网络的先前交易的随机数大一时才广播交易。如果将相同的随机数分配给多个交易,则以太坊区块链网络接受其首先接收到的任何一个交易并且拒绝其他交易。
[0105]
区块链交易管理器的示例实施方式中的随机数分配算法通过实施以下步骤来防止这些情况:
[0106]
1)如果区块链交易管理器同时处理针对同一账户和网络的多个交易,则使用锁定机构并且确保一次仅为这些交易中的一个交易计算随机数。
[0107]
2)注意,在交易在多次重试之后失败的任何时候,将该交易的分配的随机数添加值随机数池,该随机数池可以针对与该交易相关联的账户重新使用(下面描述的)。对所述池是否包含针对正在处理的交易帐户的任何随机数进行检查。如果所述池包含针对正在处理的交易帐户的任何随机数,选择值最低的随机数,将其从所述池中移除,并且将该随机数分配给正在处理的交易。如果所述池不包含针对正在处理的交易帐户的任何随机数,则继续进行步骤3。
[0108]
3)从区块链网络获取针对给定提交者的账户的随机数:n
web3

[0109]
4)获得由区块链交易管理器针对给定账户最后分配的随机数:n
red

[0110]
5)从来自步骤4的随机数中减去来自步骤3的随机数:n
red

n
web3
。如果差异大于随机数窗口(参见上面的节点属性限定),则选取步骤3的随机数。换句话说,如果n
red

n
web3
>随机数窗口,则n=n
web3

[0111]
6)否则,对来自步骤3的随机数和来自步骤4的随机数进行比较,并且选择具有较大值的任何一个随机数;即,如果n
red
>n
web3
,则n=n
red
,否则n=n
web3

[0112]
7)在即将对交易进行数字签名之前,重复与步骤2中的检查类似的检查,以确定使用了最低的可用随机数。如果所述池包含比在步骤1至步骤6中分配的随机数低的值,则将所分配的随机数与所述池中的随机数进行交换,并且使用来自所述池中的随机数以用于交易。
[0113]
3.自动执行成本估计
[0114]
为了避免上面描述的在低估交易费用或高估交易费用情况下的困难,区块链交易管理器单独估计针对每个交易的成本属性。
[0115]
燃气价格是基于与网络中最近接受的交易相关联的燃气价格计算的。在示例实施方式中,可以使用基于在过去几个区块中的中间燃气价格计算的流行的web3库。
[0116]
在示例实施方式中,计算允许交易的最大燃气(智能燃气)包括以下步骤:
[0117]
1)从区块链网络中获得先前挖掘的区块的区块燃气限制:g
mb

[0118]
2)获得交易将需要的实际燃气的估计。(web3库基于传递的数据以及/或者模拟智能合同调用的执行来对此进行归集):g
db

[0119]
3)如果g
db
>=g
mb
,则g=g
mb
*cf0,其中cf0是可配置因子。
[0120]
4)如果g
mb
>g
db
,则对g的计算取决于g
mb
比g
db
大多少。计算比率r=g
mb
/g
db
,然后,如下面那样得到g:
[0121]
如果(r>=0且r<=cr1),其中cr1是可配置比率,其中(cr1>0),则g=g
db
*cf1,其中cf1是可配置因子;
[0122]
如果(r>cr1且r<=cr2),其中cr2是可配置比率,其中(cr2>cr1),则g=g
db
*cf2,其中cf2是可配置因子;
[0123]
如果(r>cr2),则g=g
db
*cf3,其中cf3是可配置因子。
[0124]
5)如果交易是发送不具有任意消息数据的以太币货币(换句话说,存在“值”属性但交易属性中“数据”缺失或为空),则起始燃气是以太币的可配置金额g
value

[0125]
6)如果交易是发送具有任意消息数据的以太币货币(换句话说,“数据”和“值”都存在),则起始燃气是上面步骤4中所计算的燃气与并且来自步骤5的可配置的值g
value
的总和;即:起始燃气=g
value
+g。
[0126]
一旦被计算出,这些属性将被添加至原始交易,然后,这些属性进行数字签名并且发送至指定的区块链网络。
[0127]
4.针对交易准备和交易发送的重试
[0128]
区块链交易管理器将获取交易到区块链网络中的节点的过程分成两个阶段。第一阶段是交易准备,包括添加随机数和成本属性。第二阶段是发送,包括对交易进行数字签名并且将该交易传递至区块链网络中的节点。当在这些过程中的任一过程中遇到问题时,区块链交易管理器的用于解决这些问题的初始策略是简单重试方法。系统仅再次尝试准备或发送交易,最高达针对每个过程的可配置次数。
[0129]
如果在任一阶段超过最大重试次数,则将交易移至错误队列。在有意延迟之后,该交易返回再次准备并且发送。由于被区块链网络中的节点拒绝而未成功的那些交易接收附加的定制处理,如下所述。
[0130]
5.拒绝交易处理
[0131]
处理被区块链网络中的节点重复拒绝的交易涉及下述:首先避免由于交易的随机
数未被使用而导致的未来问题;以及其次,在可能的情况下解决拒绝的原因。本部分讨论区块链交易管理器对于这些操作的方法。
[0132]
自动随机数重新分配
[0133]
如果交易被区块链网络中的节点拒绝,则分配给该交易的随机数将不会按顺序出现在节点针对提交者的区块链身份接收到的随机数列表中。如果该节点仅接收具有按顺序的后续随机数的后续交易,跳过作为该交易的随机数的编号,则这将导致如上所述的随机数间隙。为了避免这个问题,被拒绝交易的随机数会被立即写入区块链交易管理器的内存缓存的列表。然后,为提交者准备的下一个交易使用最低编号的这样的随机数,如上所述。以这样的方式,随机数编号中的任何空隙会被立即填充。
[0134]
即使可以解决被拒绝交易的原因,该交易也不会使用最初分配的随机数来再次发送。替代地,在再次对要被重新发送的交易进行数字签名之前,再次进行自动随机数分配。该过程在重复重试之后交易失败的所有情况下进行,包括出于下面解决的原因。
[0135]
自动起始燃气重新计算
[0136]
当由于燃气低或燃气超量错误而被拒绝的交易被发送至区块链网络中的节点时,该交易通过调整在再次准备该交易并且在调度延迟之后发送该交易时的起始燃气来解决。向上或向下调整的起始燃气的金额基于可针对系统配置的百分比因子,例如,针对燃气低增加20%,而针对燃气超量减少10%。
[0137]
通过延迟和报告解决的拒绝
[0138]
对于由于“rpc未响应”或“资金不足”而被拒绝的交易,区块链交易管理器推测潜在原因将被及时解决。除了写入错误队列之外,不会对该交易采取动作,因此,该交易可能在等待时间之后被再次准备并发送。然而,原因连同交易的状态被写入数据库,这使得用户的应用能够进行监视。通过更改随机数处理“已知交易”拒绝
[0139]
如上所述,当交易与已经提交的交易相同时,出现“已知交易”拒绝。区块链交易管理器的示例实施方式推测针对其的原因是两个凑巧相同的交易被同样分配了相同的随机数。(这种情况在区块链交易管理器正在处理针对给定提交者的所有交易的情况下应当非常罕见,但在更复杂的情况下可能出现。)针对此的解决是从交易中去除重复的随机数并且分配适当的新的随机数。当交易被发送至错误队列并且随后被重新准备并重新发送时,不管怎样都会发生这种情况,因此除了为所有拒绝提供的处理之外,不需要附加处理。
[0140]
6.交易状态轮询
[0141]
使用户应用能够异步提交交易,全自动交易管理器的第二重要需求是确认交易是由区块链网络执行的,以及该执行是成功还是失败(就交易本身的意图而言)。通常,这种跟踪将观察到下述两种情况中之一:交易将是典型的并且在相对较短且可预测的时间段内被挖掘(例如,对于当前主要公共以太坊网络,几秒钟、一分钟或两分钟,或者对于其他平台,可能更长);或者由于网络或交易本身的问题,挖掘将显著延迟。预期到这一点,区块链交易管理器使用两种单独的状态轮询方法来实现。第一方法更密集。在发送至节点之后的初始时段期间,交易记录与其他最近发送的交易的记录一起保存在队列中。按顺序处理每个记录,并且区块链网络中的节点进行查询以查看交易是否已被挖掘。如果交易已被挖掘,则基于挖掘结果采取适当的动作。如果交易没有被挖掘,则该交易进入重试队列以进行重复的密集轮询(例如,一分钟若干次),直到达到可配置的重试限制为止。此时,该交易被称为基
于作业调度器的第二轮询方法。调度器在重新尝试密集轮询之前引入时间延迟。支持两个阶段的调度,例如每5分钟调度重新轮询,最高达五次,并且然后,其后无限期地每小时一次,直到轮询表明交易已被挖掘为止。这允许在网络资源的使用与交易状态的及时报告之间取得平衡。
[0142]
7.处理数据库故障
[0143]
数据库可用性的中断是上面提及的系统故障的潜在来源之一。区块链交易管理器根据中断发生在交易生命周期中的哪个位置以不同的方式处理这种可能性。在大多数情况下,这种处理涉及后续的数据库活动,例如将交易写入错误表。如果由于广泛的数据库不可用而无法进行这些写入,则将信息临时写入至不同的位置(在本示例实施方式中为文本文件),并且错误处理例程可以在稍后的时间将状态更新至数据库。
[0144]
api层数据库故障
[0145]
如果在用户应用提交原始交易时数据库没有响应,则区块链交易管理器简单地拒绝接受该交易并且向rest api提供错误返回码。
[0146]
交易准备期间的数据库故障或缓存故障
[0147]
对交易进行准备和签名涉及从数据库读取区块链网络信息并且从安全存储获取身份凭证。这些操作中的任何操作的错误将导致活动重试,最高达可配置的最大尝试数目。(读取缓存是例外;如果无法读取缓存,将替代地读取安全存储。)。如果错误持续超过可配置的最大迭代数目,则后续处理取决于具体问题。如果在查找网络信息期间发生错误,则将交易写入错误表,并且将在调度延迟之后进行重试。对于所有其他错误,将交易写入错误表但是不会自动地重试。管理者可以经由etm控制台人工重试,如下面描述的。
[0148]
发送至区块链节点之后的数据库故障
[0149]
在区块链网络中的邻近节点接受交易之后,区块链交易管理器将其细节连同其提交时的状态记录到数据库。如果出于任何原因而无法这样做,则将交易写入错误表,以指出发生的问题。然后,可以经由etm控制台人工重试。
[0150]
轮询之后的数据库故障
[0151]
在每轮轮询之后进行数据库更新——反映获得指示交易已被挖掘的收据,或者记录超过最大重试数目并且应当在延迟之后再次尝试轮询的事实。在示例实施方式中,如果数据库不可用,则将这些写入进行至本地文本文件,直到恢复数据库可用性为止,此时按最初意图将信息写入数据库。错误交易的调度期间的数据库故障
[0152]
在示例实施方式中,使用数据库而不是队列来保存需要错误处理的交易。对在定期检索这些交易期间出现的任何数据库问题进行记录。用于检索交易的定期尝试正在进行,因此在系统管理者人工解决所记录的问题之后,临时问题将自行纠正。
[0153]
8.批量交易处理
[0154]
考虑到异步处理和监视交易的能力,客户端应用批量提交所述交易的能力是适当的便利并且由区块链交易管理器支持。
[0155]
因此,本文描述的区块链交易管理器通过在准备了交易并且与邻近区块链网络节点的连接准备接受该交易时对要提交的区块链网络交易进行排队来解决常规区块链网络的挑战。自动地分配随机数以防止阻塞,并且有规律地轮询并获得区块链网络交易状态。此外,基于最新状况自动地分配燃气。区块链网络错误中的许多区块链网络错误是自动处理
的,并且针对无法被自动处理的那些错误提供报告。
[0156]
示例实施方式
[0157]
概述
[0158]
区块链交易管理器的功能是通过一系列服务组件的组合来实现的,这些服务组件能够在其生命周期的不同阶段对区块链交易采取动作,包括解决失败情况和拒绝情况。这些组件还与区块链网络(例如,以太坊)进行交互,以提交交易并跟踪其状态。一系列持久消息队列保存交易未决操作或者由这些服务组件进行的确认,并且内存和持久数据库保存关于相关区块链身份及其交易的信息,这些信息是服务组件在其工作中所需要的。系统主要旨在满足需要生成或跟踪区块链交易的应用。出于该目的,提供了具有对服务部件的访问的独立于编程语言的rest api。另外,api为部署在web服务器上或作为本地机器上的服务的基于浏览器的前端“控制台”web应用程序提供服务,该应用通过人类用户提供对区块链交易管理器功能的子集的直接访问。
[0159]
图1示出了在示例实施方式中部署时使用区块链交易管理器100的使用上下文的框图。在所示的示例实施方式中,区块链交易管理器100被配置为以太坊交易管理器(etm
tm
),以与包括邻近区块链节点110和多个区块链节点155的以太坊区块链网络接口。如上所述,当与其他类型的区块链网络一起使用时,区块链交易管理器100将接口至其他类型的区块链网络的各个节点。如所示出的,区块链交易管理器100包括部署的etm
tm
控制台120和部署的etm
tm
应用和服务130,如将在下面更详细描述的。区块链交易管理器100用作到以太坊区块链网络的rest api驱动接口,以太坊区块链网络包括节点110和节点155,用于由用户的浏览器140和/或用户计算机上的区块链交易生成应用150生成的区块链交易。
[0160]
队列和服务组件
[0161]
如上所述,区块链交易管理器100的大部分功能产生于交易的生命周期,该交易经由消息队列传递到能够在本地和在所选择的以太坊网络中对所述交易起作用的服务组件。下面的表1阐述了组件、队列、其用途和高级别下的交易流:
[0162]
服务组件名称
ꢀꢀꢀꢀꢀꢀꢀꢀ
目的
[0163]
etm_app 向用户应用和控制台提供rest api;对传入交易进行验证和排队
[0164]
etm_txhandler 准备交易属性,对交易进行数字签名,尝试发送至区块链,排队以用于跟踪并存储交易状态
[0165]
etm_polling 观察并报告所提交的交易的区块链状态
[0166]
etm_scheduling 处理长期运行的循环活动:(1)接收被拒绝的交易并且对其进行重试;(2)更慢地轮询区块链以跟踪已从etm_polling超时的所提交的交易的状态。
[0167]
表1
[0168]
表2中描述的队列为这些组件提供要处理的交易。队列的使用有助于区块链交易管理器100同时致力于交易的能力,并且有助于允许在交易生命周期的不同阶段使用单独的组件和基础设施。
[0169]
队列名称
ꢀꢀꢀꢀꢀꢀ
目的
[0170]
etm_app_tranaction 对简单交易——原始交易或者被调度器转换回
原始交易、等待准备具有网络相关属性的失败交易——进行排队。
[0171]
etm_app_contract 与etm_app_tranaction相同,除了智能合同交易之外
[0172]
etm_tx_persistence 对准备具有网络相关属性(随机数、燃气限制和燃气价格)并且正在等待数字签名并将被发送至以太坊网络节点的简单交易进行排队
[0173]
etm_cont_persistence 与etm_tx_persistence相同,除了智能合同交易之外
[0174]
etm_app_transaction_retry 对在准备具有网络相关属性、数字签名期间、或者当被发送至以太坊节点时被拒绝、等待用于重试其中发生问题的过程的尝试的简单交易进行排队
[0175]
etm_app_contract_retry 与etm_app_transaction_retry相同,除了智能合同交易之外
[0176]
etm_error 对已经重复重试并且被拒绝的交易(简单和智能合同两者)进行排队。这些交易将被写入数据库,以由调度器进行处理。
[0177]
etm_tx_polling 对即将被发送至以太坊节点并且正在等待并且该节点已经针对其分配了交易哈希的简单交易进行排队
[0178]
etm_cont_polling 与etm_tx_polling相同,除了智能合同交易之外
[0179]
etm_tx_polling_retry 对针对其正在进行有效轮询以确定其是成功还是失败的未决简单交易进行排队。在轮询开始之前将etm_tx_polling中的交易移至该队列。
[0180]
etm_cont_polling_retry 与etm_tx_polling_retry相同,除了智能合同交易之外
[0181]
etm_polling_fin_retry 对在预设轮询尝试数目之后未被确定成功或失败同时在轮询重试队列中的简单交易和合同交易进行排队
[0182]
表2
[0183]
图2示出从消息队列的角度来看通过区块链交易管理器100的服务组件(表1)和队列(表2)的交易的整体移动。关于涉及这些移动的活动的附加细节以及每个流中涉及的数据形式将在下面关于区块链交易管理器100的操作进行更详细的说明。注意,交易经由数据库而不是队列流向etm调度,这是图2中针对该服务组件没有示出传入交易流的原因。
[0184]
持久性和缓存
[0185]
上面概述的交易生命周期由各个点处的数据库支持。这些数据库包括以下内容:
[0186]
持久关系存储
[0187]
用法:从用户接收到的、由系统合成的或者从以太坊网络轮询的所有与交易相关的信息被存储在持久关系存储中。这包括每个交易在区块链交易管理器(在以太坊区块链
网络的情况下为以太坊交易管理器(etm
tm
)100)的交易生命周期中的状态。私有区块链密钥被从该存储中排除。
[0188]
针对密钥的增强安全存储
[0189]
目的:使用区块链交易管理器的应用为系统提供将与该系统提交的交易相关联的针对每个以太坊身份的公钥

私钥对。期望的是使得区块链交易管理器100可以在添加或修改交易属性之后对该交易进行数字签名。针对这些密钥的存储需要额外的安全性和隔离性。根据所期望的安全级别,类似etm
tm
的交易管理器的实施者可以使用任何加密对象存储或者对区块链交易管理器100进行适配,以使用专门构建的基于硬件或基于软件的安全密钥存储。
[0190]
内存缓存
[0191]
目的:通过缓存重复读取的数据元素——包括区块链网络连接信息、提交者的身份和针对每个身份的随机数分配——来提高性能。
[0192]
用户和应用访问管理
[0193]
除了密钥管理和交易签名之外,安全性是对交易管理的正交关注。考虑到每个用例的安全需求,通常应用最佳实践。下面概述了在示例实施方式中使用的方法。
[0194]
使用用于访问管理的两种单独的方法。首先,经由rest api直接用于用户应用的特征使用身份管理系统进行认证。在身份系统中创建用于区块链交易管理器100本身识别的身份和相关联的凭证。所述凭证与有权通过区块链交易管理器外部的进程使用该api的任何用户应用共享,并且在每个api调用的情况下被提供回区块链交易管理器100。其次,经由etm控制台120访问的特征使用单独的基于json web令牌(jwt)的认证方法。这允许通过etm控制台的唯一管理者身份创建附加用户,该管理者身份在部署期间配置。两种方式都可可以访问的特征——例如获得交易状态——可以通过任一方式进行认证,并且由两个单独的api端点提供服务以允许这样做。
[0195]
etm控制台
[0196]
表3示出了可以从etm控制台120获得的功能。除了检索交易及其状态之外,这些功能对经由rest api连接的用户应用不可用。
[0197]
控制台的功能
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
访问要求
ꢀꢀꢀꢀꢀ
对用户应用可用
[0198]
添加用户
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
管理者
ꢀꢀꢀꢀꢀꢀꢀ

[0199]
查看或编辑用户配置文件
ꢀꢀꢀꢀꢀ
管理者
ꢀꢀꢀꢀꢀꢀꢀ

[0200]
添加或编辑网络(即,包含
ꢀꢀꢀꢀ
管理者
ꢀꢀꢀꢀꢀꢀꢀ

[0201]
经由到邻近节点的远程过程
[0202]
调用访问一个特定的区块链
[0203]
所需的信息的数据记录)
[0204][0205]
表3
[0206]
区块链交易管理器的结构
[0207]
关于系统构造的附加细节——集中在部署之前存在的设计和配置(即,静态架构、预定义数据模式和预启动配置)——在下面关于图3至图9进行描述。请注意,提及的用于存储和排队的技术是占位符。本领域技术人员将理解,可以基于其他性能考虑为每种技术选择替代方案。
[0208]
图3示出了在示例实施方式中的区块链交易管理器100的组件的框图。如所示出的,etm控制台120经由rest api 300与部署的etm应用和服务130进行通信,etm应用和服务130依次与所示出的应用和服务组件进行通信。这样的组件包括上面表1中描述的那些组件,包括etm_app 130、etm_发送处理器_服务305、etm_轮询_服务310以及etm_调度_服务315。所述组件还包括子系统,所述子系统包括消息队列子系统320、持久关系数据库325、以及内存数据库330。所述组件还可以包括用于这些技术的支持库,诸如示例实施方式中的支持库,关于:队列支持库335、对象

关系映射340、关系数据库支持345以及内存数据库支持350。所述组件还可以使用区块链支持库360用于与区块链网络对等装置370进行交互。下面将描述关于这些组件的进一步细节。
[0209]
控制台的静态结构
[0210]
如上所述,etm控制台120是为人类用户提供对区块链交易管理功能的子集的访问的应用。etm控制台120的结构的高级概述在图4中示出。
[0211]
图4示出了在示例实施方式中的etm控制台120的框图。如所示出的,在示例实施方式中,etm控制台120可以包括下述软件包:诸如web用户界面框架400、用于web用户界面样式的软件包410、以及用于操纵用户界面事件和api响应的软件包420。所示出的用于主屏幕(430)、服务(440)和拦截器(450)的《文件夹》定型软件包通常包含在执行时被解释的一组代码文件并且与rest api 300进行通信。这对于解释语言来说是典型的,这些单独的文件是最大粒度的代码单位,其可以被适当地视为组件,直到达到服务组件本身的级别为止。因此,示出文件夹组织以代替子组件。其他实施方式可以使用以编译或任何其他形式的代码。
[0212]
etm应用的静态结构
[0213]
图5示出了在示例实施方式中的etm应用130的框图。etm应用130为系统100提供rest端点并且是针对到第一队列的交易的管道。etm应用130的示例实施方式以诸如的语言进行编码,该语言适用于在web应用框架软件包的支持下在web应用服务器的上下文中使用。图5示出了其实施和依从性的关键元素。图4中示出的依从性此处或者针对下文描述的其他业务组件不再重复。还存在用于发布到队列和从队列消费以及与数据
库交互的支持代码,但为了便于描述,此处或针对服务组件中的任何服务组件都没有示出。
[0214]
如图5所示,etm应用130与rest api 300交互并且使用web应用框架软件包500身份/访问管理软件510、用于加密身份凭证的加密库软件包520和访问令牌支持软件包530。再次,用于路由(rest api)540、服务(核心功能)550、模型(数据实体)560的《文件夹》定型软件包以及用于队列事件处理的作业队列/作业处理器通常包含在执行时被解释的一组代码文件,但可以用不同的语言和执行模型来实现。
[0215]
交易处理服务的静态结构
[0216]
图6示出了etm_发送处理器_服务305的示例实施方式。etm_发送处理器_服务305消费来自各种队列的交易并且在其生命周期阶段内适当地作用于所述交易。类似轮询服务组件和调度服务组件,etm_发送处理器_服务305实现为在没有公开api情况下的web应用。如所示出的,etm_发送处理器_服务305使用包括下述的软件包:web应用框架600、区块链交易签名支持软件610和内存数据库记录锁定支持软件620。再次,用于模型(数据实体)630、服务(核心功能)640的《文件夹》定型软件包以及用于队列事件处理的作业队列/作业处理器650通常包含在执行时被解释的一组代码文件,但可以用不同的语言和执行模型来实现。应当理解,“服务”文件夹640包含用于适当地对交易进行操作的逻辑。
[0217]
因为这是将交易发送至区块链网络的一个组件,因此其利用库进行数字签名(区块链交易签名支持610)和临时锁定缓存条目(内存数据库记录锁定支持620)。临时锁定缓存条目用于避免随机数分配中的冲突。
[0218]
轮询服务的静态结构
[0219]
图7示出了etm_轮询_服务310的示例实施方式。etm_轮询_服务310在交易被发送至区块链网络之后跟踪所述交易的状态。etm_轮询_服务310的示例实施方式也使用web应用框架软件包700来实现。再次,用于模型(数据实体)710、服务(核心功能)720的《文件夹》定型软件包以及用于队列事件处理的作业队列/作业处理器730通常包含在执行时被解释的一组代码文件,但可以用不同的语言和执行模型来实现。应当理解,当最终在区块链分类账的挖掘块中找到来自交易的属性时,附加软件包(未示出)有助于对来自交易的属性的解析。
[0220]
调度服务的静态结构
[0221]
图8示出了etm_调度_服务315。etm_调度_服务315处理长时间运行的周期性过程。在示例实施方式中,按时间顺序的作业调度支持软件包800有助于按时间顺序的作业调度。etm_调度_服务315也使用web应用程序框架软件包810来实现。再次,用于模型(数据实体)820、服务(核心功能)830和作业队列840的《文件夹》定型软件包通常包含在执行时被解释的一组代码文件中,但可以使用不同的语言和执行模型来实现。
[0222]
数据库和队列实体模式
[0223]
针对区块链交易管理器100中与交易管理有关的持久存储和队列存储限定的模式在下面的表4中示出。与持久数据库一起使用的这些模式的目的包括:提供交易及所述交易在其生命周期内的进展的持久记录;存储调用应用、用户、区块链网络和节点的属性;以及作为用于在服务组件之间移动交易的队列的替代方案,特别是不需要先进先出队列的etm_调度_服务。
[0224]
基本上相同的模式也用于表示队列内的交易(作为示例实施方式中的json对象)。
下面的表4和图9描述了与交易处理直接有关的五个实体。
[0225]
实体每个记录或对象代表
[0226]
交易原始阶段的简单区块链交易或合同区块链交易或者交易生命周期的后去阶段中的简单交易(图9,900)
[0227]
合同在其生命周期的准备阶段或提交阶段的合同交易(图9,910)
[0228]
错误在处理期间遇到错误的简单交易或合同交易(图9,920)
[0229]
应用已经或可以向区块链交易管理器提交交易的用户应用(图9,930)
[0230]
网络信息区块链交易管理器被配置成向其发送交易的区块链网络和节点(图9,940)
[0231]
表4
[0232]
下面讨论对交易管理重要的字段值。
[0233]
restapi数据模式
[0234]
etm_app服务组件130经由restapi300将各种数据对象传入系统和从系统传出。下面是接受原始交易时期望的json对象的格式的示例:
[0235]
简单交易请求:
[0236]
{
[0237]
"应用":"<此处为应用名称>",
[0238]
"网络":"<此处为网络名称>",
[0239]
"至":"0x0123456789abcdef0123456789abcdef01234567",
[0240]
"来自":"0x9876543210fedcba0x9876543210fedcba987654",
[0241]
"数据":"0xabcdl23000000000000000000000000000001a",
[0242]
"提供者类型":"http",
[0243]
"重试计数":"2"
[0244]
}
[0245]
合同交易请求:
[0246]
{
[0247]
"应用":"<此处为应用名称>",
[0248]
"网络":"<此处为网络名称>测试网络",
[0249]
"来自":"0x9876543210fedcba0x9876543210fedcba987654",
[0250]
"数据":"0xabcdl23000000000000000000000000000001a",
[0251]
"提供者类型":"http",
[0252]
"重试计数":"2"
[0253]
}
[0254]
批量简单交易请求(支持最高达每个请求50个交易)
[0255]
[
[0256]
{
[0257]
"id":200,
[0258]
"应用":"<此处为应用名称>",
[0259]
"网络":"<此处为网络名称>测试网络",
[0260]
"至":"0x0123456789abcdef0123456789abcdef01234567",
[0261]
"来自":"0x9876543210fedcba0x9876543210fedcba987654",
[0262]
"数据":"0xabcdl23000000000000000000000000000001a",
[0263]
"提供者类型":"http",
[0264]
"重试计数":"2"
[0265]
},
[0266]
{
[0267]
"id":201,
[0268]
"应用":"<此处为应用名称>",
[0269]
"网络":"<此处为网络名称>测试网络",
[0270]
"至":"0x0123456789abcdef0123456789abcdef01234567",
[0271]
"来自":"0x9876543210fedcba0x9876543210fedcba987654",
[0272]
"数据":"0xabcdl23000000000000000000000000000001a",
[0273]
"提供者类型":"http",
[0274]
"重试计数":"2"
[0275]
},等...
[0276]
]
[0277]
当简单交易请求或合同交易请求被接受时,区块链交易管理器的响应:
[0278]
{
[0279]
"结果":"交易被成功接收",
[0280]
"tx_id":"12345678

90ab

cdef

1234

567890abcdef"
[0281]
}
[0282]
当批量简单交易请求被接受时,区块链交易管理器的响应:
[0283]
[
[0284]
{
[0285]
"id":200,
[0286]
"结果":"交易被成功接收",
[0287]
"tx_id":"12345678

90ab

cdef

1234

567890abcdef
[0288]
},
[0289]
{
[0290]
"id":201,
[0291]
"结果":"交易被成功接收",
[0292]
"tx_id":"12345678

90ab

cdef

1234

567890abcdef
[0293]
},等...
[0294]
]
[0295]
注意:“tx_id”为上面描述的唯一交易标识符。
[0296]
重要字段值:状态
[0297]
在区块链交易管理器100中,数据字段“状态”限定了交易在其生命周期中的进展的粗粒化点。该字段出现在实体(交易、合同、错误)和代码中——参见在任意服务组件中
的/config/configs/status.json。表5中列出了允许的字段值和每个字段值的含义。
[0298]
字段值
ꢀꢀꢀꢀ
含义
[0299]
tx

received 在被etm_app 130接受与被发送(包括重新发送)至区块链节点110之间的任何交易。
[0300]
tx

error 在处理期间遇到问题的交易,除了由区块链网络执行期间的故障(参见tx

failed)。
[0301]
tx

submitted 被区块链节点110接受但针对其尚未开始轮询的交易。
[0302]
tx

pending 针对其正在进行密集轮询或者已被移交至调度服务组件315以进行慢轮询的交易。
[0303]
tx

failed 通过轮询确定已被挖掘至区块但针对其的执行被报告为失败的交易。
[0304]
tx

success 通过轮询确定已被挖掘至区块并且成功执行的交易。
[0305]
表5
[0306]
在示例实施方式中,区块链交易管理器100是向用户应用提供一组服务的网络应用,包括:
[0307]
请求对交易的接受、验证和排队;
[0308]
交易定价、签名和提交;
[0309]
交易状态轮询和跟踪;
[0310]
调度和定期活动;
[0311]
仪表板和管理功能;以及
[0312]
报告生成和邮寄。
[0313]
区块链交易管理器100还提供随机数管理、迭代成本估计和交易生命周期管理。
[0314]
区块链交易管理器中的交易的生命周期
[0315]
区块链交易管理器100的大多数功能面向确保单个区块链(例如,以太坊)交易的成功,或者处理(希望少得多的频率)失败。因此,可以通过借助于四个区块链交易管理器服务和区块链网络追踪交易的路径来理解系统的大部分操作。以下描述检查了处理正常交易时涉及的活动,以及当交易本身或在其上操作的组件出现问题时的替代处理。
[0316]
正常交易生命周期
[0317]
图10中示出了当交易在其生命周期中进行时由系统进行的涉及无故障准备和发送、快速挖掘和成功执行的活动。
[0318]
如所示出的,在1010处,etm应用130验证原始交易并且将该交易放置在etm_app队列中。
[0319]
然后,在1020处,etm_发送处理器_服务305使原始交易出队,准备原始交易的属性,并且将原始交易放置在持久性队列中。在1030处使准备好的交易出队并且进行数字签名,并且在1040处将经签名的交易发送至区块链网络的节点110。一旦接收到成功响应,在1050处,将该交易以“发送

提交”状态写入数据库,并且将该交易发送至轮询队列。
[0320]
在1060处,etm_轮询_服务310使交易从轮询队列中出队,并且在1070处以“发送

未决”状态更新数据库并且添加至轮询重试队列。在1080处,当在轮询重试队列中时,对区块链节点进行轮询以传输“接收”。在1085处对轮询结果进行评估。如果结果是交易尚未被挖掘,则重复在1080处的轮询。一旦交易被成功挖掘,在1090处,以“发送

成功”状态对数据库进行更新并且从轮询队列中出队。然后,该过程完成。
[0321]
然而,存在在该过程期间可能发生的若干可能的错误。现在将描述对错误的处理。
[0322]
延迟接收流程
[0323]
如果在第一轮轮询内的可配置时间范围期间没有接收到交易被挖掘的指示,则系统将该交易搁置达一定的时间段,并且然后开始第二轮轮询。为了实现这一点,在数据库中对该交易设置标志。定期地,etm_调度_服务315将针对具有该标志设置且状态为“发送

未决”的交易进行查询。在可配置的等待时段之后,清除该标志,并且将交易发布至轮询输入队列中之一,即,etm_tx_polling或etm_contract_polling。这会导致轮询针对该交易再次开始。如果再次轮询没有获得接收,则重复该流程,并且在可配置的迭代数目之后延迟更长。针对未被挖掘交易的这种重复将无限期地继续,直到接收到收据为止。
[0324]
etm_app api错误响应流程
[0325]
在etm应用130将交易放置在原始交易队列中之前,可以识别少数与交易有关的错误状况。在此情况下,经由rest api 300返回错误响应。采用该路径的错误包括原始交易失败验证、数据库不可用和队列不可用。发送处理器修复和重新发送流程
[0326]
如果交易由于网络有关的交易属性如起始燃气而被拒绝,则可以调整该属性并且重新提交。例如,图11示出了用于立即进行交易修复和通过etm_发送处理器_服务305重新发送的过程1100。可以经由该路径处理的问题包括燃气低和燃气超量。如所示出的,在1110处,采用被区块链节点110(例如,以太坊节点)拒绝的已准备的、未经签名的交易,并且在1120处对该交易应用修复算法,以修复交易属性(例如,修改起始燃气)。在1130处,对经修复的交易进行数字签名,并且在1140处重复尝试向区块链节点发送经签名的交易。如果没有后续问题发生,则后面的步骤将对应于图10中的1040处的成功活动流的恢复。
[0327]
经由调度器错误流程的重试
[0328]
一些错误没有通过立即重新发送来解决,但是如果在延迟之后重试则可能成功。在区块链交易管理器100中,这些交易被移交至调度服务315,以在等待时间之后作为原始交易重新排队,在该等待时间期间状况可能得到改善。图12示出了在示例实施方式中的用于处理“可重试”交易错误的过程1200。经由该路径处理的错误包括资金不足、rpc无响应、erm_发送处理器_服务305中的某些数据库错误、以及已知交易错误。
[0329]
如图12所示,由于可重试错误而被拒绝的交易被提供至etm_发送处理器_服务305,在1210处,etm_发送处理器_服务重试向区块链节点发送该交易。如果在1215处该交易被接受,则该交易沿上面关于图10描述的正常路径进行。如果该交易由于可重试错误而被在此拒绝,则在1210处,etm_发送处理器_服务重试将该交易发送至区块链节点。该过程持续,直到超过可配置的重试限制(最大重试数目)为止。在这种情况下,该交易的随机数在1220处被保留在缓存中以使其可用于其他交易,并且在1230处将该交易写入数据库中的错误交易表。在1240处,从数据库中的活动交易表中移除该交易。
[0330]
响应于由etm_调度_服务315生成的按时间顺序的周期性软件事件,在1250处,该服务查询数据库中的错误交易表。在1260处,针对发现的每个错误交易,从发现的每个错误
交易中提取原始交易并且将该原始交易排入原始交易队列中。然后,在1270处,etm_发送处理器_服务305将沿上面关于图10描述的正常路径处理原始交易。
[0331]
交易失败路径
[0332]
如果轮询过程指示交易被挖掘,但是该交易执行失败,则该交易从轮询队列中——类似在图10中的“挖掘并成功”路径中——出队,但该交易状态被写为“发送

失败”。
[0333]
活动定时的概要
[0334]
图13提供了上面描述的活动路径的高级摘要,其中,焦点在于系统有意引入时间延迟的点。如所示出的,从用户应用150接收到的交易被提供至etm应用130并且在1300处对原始交易进行验证。将经验证的原始交易提供给etm_发送处理器_服务305,在1310处,etm_发送处理器_服务准备该交易。rest api 300为这些操作提供时间延迟和重试计数。在每次重试准备交易之前,etm_发送处理器_服务305有意将延迟引入到处理中,以允许引发问题的状况自行解决。如果在超过所提供的重试计数之后该交易没有被成功准备,则在1315处将该交易发送至etm_调度_服务315以在指定的时间段之后将该交易作为原始交易调度重新处理。一旦在1310处成功准备了该交易,则在1320处将该交易发送至区块链。etm_发送处理器_服务305也为该操作提供每次重试的重试计数和有意延迟时间段。如果该交易未被成功准备并且超过重试计数,则在1315处将该交易类似地发送至etm_调度_服务315,以在指定时间段之后将该交易作为原始交易调度重新处理。一旦在1320处将该交易发送至区块链,则在1330处,etm_轮询_服务310针对接收进行轮询并且在1340处记录交易成功或失败。还提供了关于轮询时段的限制(例如,5000毫秒或指定的最大重试数目)。如果轮询已超过最大重试数目,则在1350处,etm_调度_服务315对重新轮询进行调度。例如,如所示出的,可以在前几分钟内尝试重新轮询若干次,并且然后,其后以更长的间隔重试.如果再次轮询没有获得接收,则重复该流程,并且在可配置的迭代数目之后延迟更长。这对未被挖掘交易的这种重复将无限期地继续,直到接收到收据为止。因此,在某些情况下,交易会被保留并且在一定的时间段之后重试,直到被成功处理为止。
[0335]
关于etm中的队列的附加信息
[0336]
虽然已经说明了队列在交易生命周期中的作用,但是与关于图2所提供的相比,更详细地理解队列的内容及其用于可能是有帮助的。
[0337]
每个队列的内容为呈某种形式的交易。描述发布给交易的对象的模式取决于:交易是否是原始的、已准备的或者处于错误状态;以及该交易是简单交易还是智能合同交易。表6列举了其中这些对象中之一被排队或出队的发布关系和消费关系。在描述每个队列保留的内容时,表6使用了结合交易类型和生命周期进展的速记。
[0338]
[0339][0340]
表6
[0341]
表7进一步详述了表6中使用的针对交易类型和生命周期进展的速记术语。用于表示每种类型和状态的交易的数据实体被包括在内。
[0342]
[0343]
[0344][0345]
表7
[0346]
表7中概述的速记状态名称可以用于在状态转换模型中说明上面描述的过程的面
向交易的视图。
[0347]
图14示出了在区块链交易管理过程中的交易的生命周期,区块链交易管理过程被可视化为用于提交至示例实施例方式的单个区块链交易的统一建模语言(uml)状态转换模型1400。如所示出的,etm_app组件130接收并验证交易(即,交易是有效的并且提交者和区块链网络是已知的),此时,可以认为该交易在系统中处于该交易的初始状态,标记为raw_tx 1405。将状态1405下的原始交易提供给交易处理器(etm_发送处理器_服务305),以分配属性并且对交易进行数字签名。如果成功,则可以认为交易已经进入准备交易状态或准备合同状态1410,区别分别取决于该交易是简单交易还是合同交易。该限定适用于图示中提到这种区别的后续状态。当交易处理器将该状态下的交易发送至其邻近的区块链节点110时,该交易可以被视为进入两种状态中之一,这取决于该交易是被成功发送还是被邻近的区块链节点110拒绝,如在1415处的决策伪状态所表示的。如果被拒绝,则交易进入错误交易状态或错误合同交易状态1420。如果被发送,交易进入提交交易状态或提交合同交易状态1430。从1420继续,交易处理器然后潜在重复地重试发送,因此确定新状态——每个伪状态1425。如果任何重试成功,则交易进入提交交易状态或提交合同状态1430。然而,如果交易被拒绝超过可配置的最大重试阈值的次数,则可以认为该交易进入unresolved_errored状态1435。针对unresolved_errored状态下的交易,调度器(etm_调度_服务315)确定该错误是否是可以由交易处理器解决的错误类型。该确定由决策伪状态1440表示。如果是可以由交易处理器解决的错误类型,则该交易返回至原始交易状态1405并且生命周期从该状态继续。另一方面,如果调度器315在决策伪状态1440下确定错误类型将被人工解决,则该交易永久保持在unresolved_errored状态1435下,如由到结束状态伪状态1470的转换所表示的。
[0348]
一旦交易进入提交交易状态或提交合同状态1430,则区块链网络由组件etm_轮询_服务310针对该交易的状态进行重复轮询。该过程的结果确定下一个转换,如由决策伪状态1445所表示的。如果轮询表明交易被挖掘并失败,则交易进入失败交易状态或失败合同状态1450,这是如由到结束为状态1470的转换表示的该交易的最终状态。
[0349]
另一方面,如果在轮询状态1445下轮询期间未发现交易,则交易进入no_receipt_transaction状态或no_receipt_contract状态1455。交易保持在该状态下,同时组件etm_调度_服务315和etm_轮询_服务310协作以针对交易的状态轮询区块链网络。轮询可以无限期地继续,但如果获得结果,则交易的后续状态由该结果来确定,如由决策伪状态1460所表示的。如果轮询表明交易被挖掘并失败,则该交易进入失败交易状态或失败合同状态1450,其如前所述为该交易的最终状态,如由到结束伪状态1470的转换所表示的。
[0350]
最后,如果在决策伪状态1445或决策伪状态1460下考虑的轮询指示交易被挖掘并成功,则交易进入成功交易状态或成功合同状态1465,这是该交易的最终状态,如由到结束伪状态1470的转换所表示的。
[0351]
因此,本文描述的区块链交易管理器100进行操作,以成功地将区块链交易从用户的计算机引导至区块链。
[0352]
计算机实施方式
[0353]
图15是典型的通用计算机1500的框图,通用计算机1500可以被编程为适用于实现本文公开的区块链交易管理器100的一个或更多个实施方式的专用计算机。上面描述的区
块链交易管理器100可以在任何通用处理组件上实现,例如具有足够处理能力、存储器资源和通信吞吐量能力的计算机,以处理置于其上的必要工作负荷。计算机1500包括处理器1502(其可以被称为中央处理器单元或cpu),处理器1502与包括下述的存储器装置通信:辅助存储装置1504、只读存储器(rom)1506、随机存取存储器(ram)1508、输入/输出(i/o)装置1510以及网络连接装置1512。处理器1502可以被实现为一个或更多个cpu芯片或者可以是一个或更多个专用集成电路(asic)的部分。
[0354]
辅助存储装置1504通常包括一个或更多个磁盘驱动器或磁带驱动器,并且用于数据的非易失性存储,并且在ram 1508未大到足以保存全部工作数据的情况下作为溢出数据存储装置。辅助存储装置1504可以被用于存储当这样的程序被选择用于执行时被加载到ram 1508中的程序。rom 1506用于存储在程序执行期间所读取的指令以及可能的数据。rom1506是非易失性存储器装置,其相对于辅助存储装置1504的较大存储器容量通常具有较小的存储器容量。ram 1508用于存储易失性数据并且可能存储指令。对rom 1506和ram 1508两者的访问通常比对辅助存储装置1504的访问更快。
[0355]
本文描述的装置可以被配置成包括存储计算机可读指令的计算机可读非暂态介质和耦合至存储器的一个或更多个处理器,并且当执行计算机可读指令时配置计算机1500以执行上面参照图1至图14描述的方法步骤和操作。计算机可读非暂态介质包括所有类型的计算机可读介质,包括磁存储介质、光存储介质、闪存介质和固态存储介质。
[0356]
应当进一步理解,包括一个或更多个计算机可执行指令的软件可以安装在一个或更多个服务器以/或者与本公开内容一致的消费者和/或生产者域内的一个或更多个路由器和/或一个或更多个装置中并与其一起出售,这些指令有助于如上面参照本公开内容的任何一个步骤或所有步骤描述的处理和操作。替选地,可以在与本公开内容一致的消费者和/或生产者域内获得该软件并将其加载到一个或更多个服务器和/或一个或更多个路由器和/或一个或更多个装置中,包括通过物理介质或分发系统获得该软件,包括例如,从软件创建者拥有的服务器或从软件创建者不拥有但使用的服务器获得该软件。例如,该软件可以被存储在服务器上以通过因特网进行分发。
[0357]
此外,本领域技术人员将理解,本公开内容的应用中不限于说明书中阐述的或附图中示出的构造细节和部件布置。本文中的实施方式能够是其他实施方式,并且能够以各种方式实践或执行。此外,应当理解,本文使用的措辞和术语是出于描述的目的并且不应当被认为是限制性的。本文使用的“包括(including)”、“包括(comprising)”或“具有”及其变型意在涵盖其后列出的项及其等同物以及附加的项。除非另有限制,否则本文中的术语“连接”、“耦接”以及“安装”及其变型被广泛使用,并且涵盖直接和间接的连接、耦接以及安装。另外,术语“连接”和“耦接”及其变型不限于物理或机械连接或耦接。此外,诸如上、下、底部和顶部的术语是相对的,并且用于帮助说明,而不是限制。
[0358]
根据所示出的实施方式采用的示例性装置、系统以及方法的组成要素可以至少部分地以数字电子电路、模拟电子电路或以计算机硬件、固件、软件或其组合实现。例如,这些组成要素可以实现为计算机程序产品诸如有形地包含在信息载体或机器可读存储装置中的计算机程序、程序代码或计算机指令,以由数据处理设备诸如可编程处理器、计算机或多个计算机执行或控制上述的数据处理设备的操作。
[0359]
计算机程序可以以包括编译或解释语言的任何形式的编程语言编写,并且其可以
以任何形式来部署,包括作为独立程序或作为模块、部件、子例程或适于在计算环境中使用的其他单元。计算机程序可以被部署成在一个计算机上或者在一个站点处的或跨多个站点分布并通过通信网络互连的多个计算机上执行。此外,本领域技术人员可以很容易地将用于实现本文描述的技术的功能程序、代码和代码段解释为在本公开内容的范围内。与示例性实施方式相关联的方法步骤可以通过由一个或更多个可编程处理器执行计算机程序、代码或指令以执行功能(例如,通过对输入数据进行操作并且/或者生成输出)来执行。例如,方法步骤也可以由专用逻辑电路例如fpga(现场可编程门阵列)或asic(专用集成电路)执行,并且设备可以被实现为上述的专用逻辑电路。
[0360]
结合本文公开的实施方式描述的各种示例性逻辑块、模块以及电路可以通过以下来实现或执行:通用处理器、数字信号处理器(dsp)、asic、fpga或其他可编程逻辑器件、分立的门或晶体管逻辑、分立硬件部件或被设计成执行本文描述的功能的其任意组合。通用处理器可以是微处理器,但是替选地,处理器可以是任何常规的处理器、控制器、微控制器或状态机。处理器也可以被实现为计算装置的组合,例如dsp和微处理器的组合、多个微处理器、一个或更多个微处理器与dsp内核的结合、或者任何其他这样的配置。
[0361]
适用于执行计算机程序的处理器包括作为示例的通用微处理器和专用微处理器两者以及任何种类的数字计算机的任一个或更多个处理器。通常,处理器将从只读存储器或随机存取存储器或从上述两者接收指令和数据。计算机的基本元件是用于执行指令的处理器以及用于存储指令和数据的一个或更多个存储器器件。通常,计算机还将包括或可操作地耦接至用于存储数据的一个或更多个大容量存储装置例如磁盘、磁光盘或光盘以从其接收数据或向其传送数据或两者兼具。适用于包含计算机程序指令和数据的信息载体包括所有形式的非易失性存储器,包括作为示例的半导体存储装置,例如电可编程只读存储器或rom(eprom)、电可擦除可编程rom(eeprom)、闪存装置以及数据存储盘(例如,磁盘、内部硬盘或可移动盘、磁光盘以及cd

rom盘和dvd

rom盘)。可以由专用逻辑电路补充处理器和存储器或者处理器和存储器可以并入专用逻辑电路中。
[0362]
本领域技术人员理解,可以使用各种不同工艺和技术中的任何工艺和技术来表示信息和信号。例如,贯穿以上描述所提及的数据、指令、命令、信息、信号、比特、符号以及芯片可以由电压、电流、电磁波、磁场或粒子、光场或粒子或其任意组合表示。
[0363]
本领域技术人员进一步理解,结合本文公开的实施方式描述的各种说明性逻辑块、模块、电路和算法步骤可以实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,上面已经大体上在其功能方面描述了各种说明性部件、块、模块、电路和步骤。将此功能实现为硬件还是软件取决于施加在整个系统上的特定应用和设计约束。技术人员可以针对每个特定应用以不同方式实现所描述的功能,但是这种实施决策不应被解释为导致脱离本公开内容的范围。软件模块可以驻留在ram存储器、闪存存储器、rom、eprom、eeprom、寄存器、硬盘、可拆除盘、cd

rom或现有技术中已知的任何其他形式的存储介质中。示例性存储介质耦接至处理器,使得处理器可以从存储介质读取信息和向存储介质写入信息。在替选实施方式中,存储介质可以是处理器的组成部分。换句话说,处理器和存储介质可以驻留在集成电路中或者被实现为分立组件。
[0364]
如本文所使用的,“机器可读介质”意指能够暂时地或永久地存储指令和数据的装置,并且可以包括但不限于随机存取存储器(ram)、只读存储器(rom)、缓冲存储器、闪存、光
学介质、磁介质、高速缓冲存储器、其他类型的存储装置(例如,可擦除可编程只读存储器(eeprom)以及/或者其任何合适的组合。术语“机器可读介质”应被视为包括能够存储处理器指令的单个介质或多个介质(例如,集中式或分布式数据库,或相关联的高速缓存和服务器)。术语“机器可读介质”还应被视为包括能够存储由一个或更多个处理器执行的指令的任何介质或多种介质的组合,使得所述指令在由一个或更多个处理器执行时使一个或更多个处理器执行本文描述的任一种或更多种方法。因此,“机器可读介质”是指单个存储设备或装置,以及包括多个存储设备或装置的“基于云”的存储系统或存储网络。本文使用的术语“机器可读介质”排除信号本身。
[0365]
上述描述和附图仅意在通过示例的方式并且不意在以任何方式限制说明性实施方式,除非在所附权利要求书中阐述。注意,上面已经描述的各种示例性实施方式中的各种元件的各种技术方面可以以多种其他方式组合,所有这些都被认为在本公开内容的范围内。
[0366]
因此,虽然出于说明的目的公开了示例性实施方式,但是本领域技术人员将理解各种修改、添加和替换是可能的。因此,本公开内容不限于上述实施方式,而是可以在所附权利要求书的范围内以及所附权利要求书的等同方案的全部范围内进行修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1