基于XGBoost的以太坊交易智能定价模型

2022-10-17 11:12冯云霞薛蓉蓉
计算机工程与应用 2022年20期
关键词:以太合约区块

冯云霞,薛蓉蓉

青岛科技大学 信息科学技术学院,山东 青岛 266061

自2013年以太坊概念[1]被提出以后,目前已成为全球知名公有区块链项目,全球最大的区块链开源社区。以太坊是一个支持智能合约功能的公共区块链平台。有众多节点参与,组成P2P网络。节点可以发起交易,也可以进行记账。然而,具备图灵完备的以太坊,可以模拟任何计算机算法,这可能引发恶意行为。例如在交易内部执行无限循环而形成死循环,占用计算资源,破坏以太坊网络以及发送无意义交易浪费矿工计算资源等。为了避免恶意行为,以太坊对交易采用收费机制。其基本思想是发行以太币,在公有链上发起交易都需要支付一定的以太币。以太坊上所有的账户管理和智能合约[2]的部署都需要花费以太币,以太币账户需要获取以太币,促使矿工挖矿。矿工挖出新区块,可以获得一定的奖励。

当前的以太币交易机制中将交易分为三种,转账交易、智能合约创建和智能合约执行三种[3]。其中,智能合约创建和调用这两者交易消耗的计算资源差别较大,仅用以太币收费机制无法保证公平和效率。为了解决这个问题,以太坊引入GAS机制,Gas是基本的工作量成本单位,用于计量在以太坊上执行操作所需的计算、存储资源和带宽。利用Gas量化交易的复杂度,保证公平性。但是,以太币价格上涨和用户量激增等问题的出现,导致以太坊的交易成本越来越高,因此,目前已有学者提出通过优化智能合约减少Gas消耗,通过节能Gas字节、对智能合约流程编码等方式降低交易成本。有学者从预测以太坊交易确认时间从而在节省用户时间的角度提高工作效率。也有学者从利用机器学习算法预测下一个区块最低交易Gas价格。然而,现有的交易Gas价格设置方式的不足主要表现在以下两方面:

(1)以太坊用户在发起交易时自主设置Gas总量和Gas价格,而矿工在选择交易打包时以Gas价格降序排列进行选择,若用户设置Gas价格较高,则交易完成打包时间较短,反之则需要时间较长。这使得同一个区块内交易Gas价格相差较大。现有的交易机制并不能平衡交易Gas成本和共识时间。

(2)若直接以预测的下一区块的最低Gas价格作为交易的Gas推荐价格,但由于交易类型多样,交易打包失败风险增大。

本文通过EtherScan获取以太坊历史交易数据,统计2 000个区块的最高GasPrice和最低GasPrice,分别展示,如图1所示。

从图1可以看出,最高GasPrice远超最低GasPrice,且经计算,最高GasPrice的平均值为61.3,最低GasPrice的平均值为5.1,如果用户能够按照最低GasPrice进行交易,能够降低约91%的成本。

图1 区块最高和最低Gas价格对比Fig.1 Comparison of highest and lowest Gas price

由于Gas价格受多种因素的影响,而影响以太坊交易池的外部因素有很多,主要有经济因素和区块因素和交易自身因素。因此自以太坊诞生以来,研究人员采用各种方法研究Gas价格的波动。随着机器学习的广泛应用,越来越多学者将现代预测方法应用于价格预测中,如决策树预测[4]、神经网络预测[5]、支持向量机预测[6]、深度学习预测[7]等。XGBoost由Chen在2016年提出,并在文献[8]中证明了其模型的计算复杂度低、运行速度快、准确度高等特点。采用XGBoost模型进行Gas价格预测,在提高预测精度同时也提高预测速率。

综上所述,现有的以太坊交易机制并不能帮助用户在交易成本和共识时间之间达到平衡。为了解决这个问题,本文提出了一个基于XGBoost的以太坊智能定价模型,本文主要贡献如下:

(1)通过研究以太坊交易机制,结合以太坊历史交易数据,分析影响区块最小Gas价格的因子,依据数据挖掘和机器学习等方法,设计区块最小Gas价格预测方案,用来预测下一个区块最小Gas价格。

(2)基于区块最小Gas价格预测方案,结合交易Gas价格影响因子,提出以太坊交易智能定价模型(ETH_XGB),帮助用户制定合理的Gas价格,在节省交易成本同时能提高交易成功率。实验表明,ETH_XGB模型能够帮助用户节省约72.5%的交易成本,交易准确率在92%,提升了预测精度。

1 相关工作

区块链技术起源于论文《比特币:一种电对点电子现金系统》[9],由化名为“中本聪”(Satoshi Nakamoto)的学者在2008年发表在密码学邮件组。近年来区块链技术已展现出巨大的潜在应用价值,并在多个领域引发了技术革命浪潮。区块链的出现也重新定义了智能合约,智能合约作为一种嵌入式可编程的程序代码,可以内置在区块链上运行,形成可编程控制的软件系统。以太坊区块链平台于2015年被以太坊基金会发布,为开发者提供了开源的区块链搭建和智能合约发布平台。在智能合约开发领域,使用以太坊区块链平台居多,相关研究主要也是基于以太坊区块链平台。通过依靠区块链技术以及智能合约的特性,目前也有很多业务流程转移到以太坊平台执行,但同时也带来了成本花费问题。文献[10-11]发现欠优化的智能合约成本更高,创建者和使用者都会被收取较高的费用,通过对现有的Solidity智能合约进行调查,发现大量智能合约代码中包含消耗Gas巨大的字节码,提出利用节省Gas的字节码帮助节省成本,开发GASPER,帮助开发人员分析智能合约字节码。文献[12]从自动生成智能合约角度测试,实现智能合约的优化测试用例,通过自动生成具有成本效益的代表性测试序列来降低Gas成本。文献[13]中使用空间优化的数据结构对智能合约执行过程中每个任务的前提条件进行编码,提出一种优化智能合约执行业务流程的方式,通过减少业务流程智能合约执行所需的操作次数,降低调用智能合约所需的Gas消耗。文献[14]中通过加强EVM减少进行危险交易的风险,达到减少Gas消耗的目的。

以上都是从减少Gas消耗角度降低交易成本,有相关学者和技术人员从Gas价格的角度开展研究。Ether-Scan和EthGasStation通过根据用户输入的GasPrice预测以太坊交易确认时间从而在节省用户时间的角度提高工作效率,具体原则是将过去1 000个区块的交易分组根据交易的GasPrice,以及平均计算每组交易的确认时间,从而获得GasPrice和确认时间的映射。用户可以输入GasPrice来计算相应的通过此映射确认时间。而文献[15-16]在区块链历史交易信息中挖掘与比特币的供求有关的特征,用于训练模型,提出比特币预测定价模型。文献[17]通过挖掘和分析以太坊历史交易数据,提出了基于机器学习回归的Gas价格预测模型(MLR),通过对比多个机器学习模型,提出MLR_XGB模型预测精度最高,通过预测下一区块最低的交易价格的方式减少交易成本,模型准确性能够达到74.9%。但是文献[14]只关注了下一区块的最小GasPrice,准确度不高,交易会存在打包失败的风险。

2 预备知识

2.1 以太坊交易机制

以太坊的交易主要是指一条外部账户发送到区块链上另一账户的消息的签名数据包,交易是以太坊整体架构中的重要部分,它将以太坊的账户连接起来,起到价值的传递作用。

以太坊交易数据结构可以定义为:

其中,hashTX表示交易的哈希值,tgl表示这个交易允许消耗的最大Gas数量,gp为发送者愿意支付给矿工的Gas价格,from表示交易发送者的地址,to表示交易接收者的地址,value是发送者转移给接受者的以太币数量,data是存在的数据字段,如果存在,则表示交易时一个创建或者调用智能合约交易;time为交易确认时间;r、s、v表示交易签名的三个部分,由发送者的私钥对交易hash进行签名生成,size为交易数量。

所有的交易被组成一个个“块”,在以太坊中,区块被定义为记录一段时间内发生的交易和状态结果的数据结构,区块结构可以定义为:

其中,hashB为区块哈希值,num为区块号,bgl为区块Gas总量,d为挖矿难度,td为全网挖矿难度。ep为以太币价格,mr为矿工奖励,TX为区块中包含的所有交易集合。

交易处理过程,是从账户发送交易请求开始,到包含该交易的区块被共识节点同步结束。具体交易机制[18]。如图2所示,发送交易者按照格式要求在以太坊网络发起交易请求,该请求将会被传送到其他网络节点。网络上的节点在同步该交易时,首先检查交易的有效性。对于符合要求的交易请求,网络上的节点会将其放在交易存储池中,并向其他节点转发,而在矿工选择交易打包时,则优先选择Gas价格高的交易,在交易执行时,对于转账交易,获得记账权的节点将该交易和其他交易一起打包到区块中;对于合约调用交易,矿工打包到区块后,并在本地的EVM上运行被调用的合约代码,直到代码运行结束或Gas用完;对于合约创建交易,矿工打包到区块后,根据其提供的交易费用和合约代码,创建合约账户,并在账户空间中部署合约。其他共识节点收到该区块后,验证区块,并同步该区块,将其添加到本地的区块链中。

图2 以太坊交易机制Fig.2 Ethereum transaction mechanism

2.2 XGBoost

XGBoost是一种集成学习算法,对处理大规模的表格数据有很大的优势。XGBoost可以进行各个特征变量对模型输出量的重要性排序,便于模型结构选择,提高预测精度。XGBoost的原理是由多颗决策树进行迭代运算,最后所有的决策树结果进行累计得到最终结果。对基于树模型的XGBoost算法建模可以简述为树模型结构和其叶子节点输出值的确定。具体包括:定义树的复杂度;XGBoost中的Boosting Tree模型建立;改写目标函数;树结构的打分函数;正则化学习目标等内容。XGBoost的目标函数为:

其中,l是误差函数,体现了模型预测值和真实值偏差的程度;为了防止过拟合,定义了正则化项以惩罚Ω(fk)复杂模型。

通过泰勒展开、定义树的复杂程度以及叶子节点归组等推导后,最终目标函数可写为:

XGBoost算法基于树模型,可以认为是树模型结构和其叶子节点输出值的确定。XGBoost算法利用迭代的方式,将弱学习器不断叠加成强学习器,每次迭代产生的残差用于矫正,矫正后的预测器优化指定的损失函数,在损失函数中加入正则项,建立XGBoost模型的目标函数。

3 基于XGBoost算法的交易Gas价格预测(ETH_XGB)

3.1 本文方案

为了解决Gas定价不合理和交易打包风险较大的问题,本文首先分析以太坊交易机制,结合以太坊历史交易数据,提取Gas价格影响因子,预测区块最小Gas价格,再利用区块的最小Gas价格,结合实际交易Gas价格影响因素,建立以太坊交易智能定价模型(ETH_XGB),帮助用户制定合理的Gas价格,以实现Gas合理定价和减少交易打包风险,在节省交易成本同时能提高交易成功率。具体设计方案如下:

步骤1提取Gas价格影响因子。

分析以太坊交易机制,在以太坊交易历史数据中提取出影响Gas价格的因素,确定Gas价格影响因子为:

利用特征融合将区块Gas影响因子和交易影响因子结合起来,分析各变量与区块最小Gas价格之间的权重。

步骤2设计区块最小Gas价格预测方案。

利用XGBoost算法分析各变量与区块最小Gas价格之间的权重,增加Gas价格受变量影响程度的数据样本数量,对训练样本进行修正,并且合理地选择模型的输入、输出,确定模型结构。将以太坊区块数据按照7∶3的比例划分训练集和测试集,使用XGBoost建立Gas价格预测方法,预测区块的最小Gas价格。

步骤3预测交易Gas价格。

依据区块最小Gas价格预测结果,根据用户实际交易的类型分析实际交易Gas价格趋势,依据实际交易Gas影响因素,预测交易合理的Gas价格,建立交易Gas价格预测模型。

3.2 方案分析

为了避免选择不合理评估标准影响观测实验结果,因此,依据JANG的论文工作选择评估标准。评估模型结果采用以下四个评估标准:

均方根误差用来衡量预测值和实际值之间的偏差,是预测值和真值偏差的平方和与预测次数比值的平方根。均方根误差越小,预测模型精度越高。

其中,yi是真实的区块最小GasPrice值是预测的区块的最小GasPrice值。

MAE是平均绝对误差,能更好地反映预测值误差,MAE的值越小,则模型预测精度越高。

皮尔逊相关系数的值越大,表示预测值和真实值之间的相关性越强。皮尔逊相关系数越接近于1或者-1,相关度越高,皮尔逊相关系数越接近于0,相关度越弱。

通常情况下可以通过以下取值范围判断两者的相关强度:0.8~1.0,极强相关;0.6~0.8,强相关;0.4~0.6,中度程度相关;0.2~0.4,弱相关;0~0.2,极弱相关或者无相关。

准确率用来衡量预测结果的正确性,预测结果如果能够高于区块最小Gas价格,并且低于实际交易Gas价格,则意味着预测准确。

C1,预测的交易Gas价格小于区块的最低Gas价格,则交易无法在预期时间内正常打包。这种情况虽然大大节省了交易成本,但是交易无法成功打包。C2,预测的交易Gas价格大于或等于区块Gas最低价,小于交易的实际价格。这种情况为理想情况,能够在预期时间内正常打包,而且节省交易成本。C3,预测的交易Gas价格高于实际交易的价格,这种情况交易可以成功打包,但是交易成本过高。

4 实验

4.1 数据来源

本文利用web3j轻量级的Java库,在Ethereum网络上搭建一个节点,获取11月17日—11月23日的实时交易数据,交易数据包括20 030个区块,2 579 030笔交易。将数据打包bulk导入到Elasticsearch。本实验的仿真平台为Pycharm,使用Python语言进行编程,分别用到Python中的sklearn、pandas、numpy等包。

4.2 数据处理

ETH_XGB模型在构建之前,通过建模法对交易数据进行清洗,将交易失败的数据清洗掉,交易成功的数据占到总交易数据的93%,经过统计总计239 872条交易数据。为了防止原始数据可能存在乱序及缺值的情况,对数据集进行插值、排序等操作,得到规整的区块链交易数据,进一步构建完整有效的数据集。将清洗后的交易数据进行归一化处理。

为了消除各个字段不同度量单位和方差对于预测结果的不良影响,因此,本文对数据进行归一化处理。

在选取的归一化公式为:

式(10)中,xi为GAS价格数据,xmin和xmax分别为样本数据中的最小值和最大值;x为数据归一化后的数值。

对模型的输出值进行逆归一化后,得到预测的GAS价格值,逆归一化公式为:

式(11)中,y为预测后的GAS价格,x*为模型预测后输出的数值。

4.3 实验结果与分析

在搭建完成模型后,对20 030条区块数据进行数据集拆分,训练集和测试集以7∶3的比例划分,预测区块最小Gas价格,再利用区块最低Gas价格,将239 875笔交易进行拆分训练和测试,预测交易的Gas价格,测试ETH_XGB模型的预测性能,计算模型的均方根误差(RMSE)、平均绝对误差(MAE)、皮尔逊相关系数(PC)和预测准确率(Accuracy)。

XGBoost有多个参数,由于部分模型参数对结果影响较大,在优化改进模型时要对参数进行优化,结合网格搜索法对模型参数进行寻优。其中学习率learning_rate设置为0.01,树的棵树n_estimators设置为475,树的深度max_depth设置为3,样本采样率设置为0.9,最小叶子权重min_child_weight设置为1,决策树的剪枝力度设置为0.5,其余参数都设置为默认参数。ETH_XGB模型的Gas价格预测结果如图3所示。

图3 ETH_XGB模型Gas价格预测结果Fig.3 ETH_XGB model predict result for Gas price

图3显示的是ETH_XGB模型的预测值与真实值的折线图(由于空间问题,随机选择测试集中421~520位)。为了进一步验证ETH_XGB模型在Gas价格预测中的有效性,与同类型的集成模型梯度增强决策树(GBDT)和Liu的MLR模型进行比较,采取相同的测试集。

对比图3和图4可知,ETH_XGB模型在预测值和实际值的拟合度上表现更好,其预测性能明显高于MLR模型,与GBDT模型相比也有明显的优势。进一步测试模型有效性,随机选择100个区块,计算100个区块总的交易节省费用,详细信息如表1所示,三栏分别介绍研究模型、节省的以太币和相应的美元,也计算每个区块节省交易费用的比例。

表1 模型节省成本Table 1 Model costing savings

由表1可知,ETH_XGB模型可以节省总计51 359.43美元,可以帮助用户节省72.5%交易成本,而MLR模型能帮助用户节省57.5%的交易成本,GBDT仅能帮助用户节省30.17%的交易成本.进一步表明ETH_XGB模型在Gas价格预测中的应用具有一定的优势。

进一步测试模型的预测准确率,将测试集分为100组,观察ETH_XGB模型和对比模型的预测准确率。由图5可以观测到,ETH_XGB模型预测准确率明显高于MLR模型和GBDT模型,ETH_XGB模型的平均预测准确率为92%,MLR模型的平均预测准确率为63.3%,GBDT模型仅为47.85%。因此,ETH_XGB模型预测精度高于MLR模型和GBDT模型,预测成功率更高。

进一步验证模型的性能,依然将测试集分为100组进行测试,图6为ETH_XGB模型、MLR模型和GBDT模型的均方根误差、平均绝对值误差和皮尔逊相关系数的表现。

ETH_XGB模型的RMSE值和MAE值均小于MLR模型和GBDT模型,测试组的平均RMSE值相较与MLR提升了20.14%,相比较GBDT提升了49.98%;其MAE值相比较MLR提升了22.88%,相比较GBDT提升了59.06%。ETH_XGB模型的平均PC系数为0.86,而MLR模型和GBDT模型的平均PC系数分别为0.63、0.48,由PC系数可知,GBDT模型的预测值和真实值之间是中度程度相关,MLR模型预测值与真实值之间仅是强相关的关系,而本文的ETH_XGB模型的预测值与真实值之间是极强相关。实验结果显示出ETH_XGB模型良好的评分预测能力,且证明了相较于MLR模型和GBDT模型,ETH_XGB模型具有更高的精确性和更好的稳定性。

5 结束语

本文将XGBoost算法引入以太坊定价模型,模型利用以太坊历史数据分析Gas价格影响因素利用XGBoost算法建立模型,实现交易智能定价。ETH_XGB模型通过结合交易Gas价格影响变量,使得推荐效果明显改善,相较于其他Gas价格预测模型,ETH_XGB既能够帮助用户节省72.5%的交易成本,且交易准确率能够达到92%。本模型适用于在包含丰富的以太坊交易数据下进行Gas价格推荐的场景,ETH_XGB模型能够在有效避免过拟合的同时提高评分预测精度。

在未来的工作中,可以考虑探索更多影响交易Gas价格的因素,通过扩展实时数据和考虑交易确认时间的不同来改进以太坊交易智能定价模型,相信在未来对以太坊交易的更多探索能够使交易定价模型性能得到进一步的提升。

猜你喜欢
以太合约区块
探索太空奥秘 还原宇宙本真
以太万物理论概述
《红楼梦》的数字化述评——兼及区块链的启示
一场区块链引发的全民狂欢
以太坊又爆漏洞黑客大战一触即发
区块链助力企业创新
区块链投机者