区块链智能合约函数调用方法及装置制造方法及图纸

技术编号:37419822 阅读:8 留言:0更新日期:2023-04-30 09:42
本申请提供一种区块链智能合约函数调用方法及装置,该方法应用于区块链网络中的智能合约,所述区块链智能合约函数调用方法包括:接收客户应用程序的第一交易请求;对第一交易请求进行解析,以获取原始交易数据和签名数据;将原始交易数据及对应的签名数据作为事件参数向链下预言机发送验签通知,以通知链下预言机对原始交易数据进行验签;接收链下预言机对原始交易数据的验签结果;将验签成功的原始交易数据作为合约调用函数的参数进行目标合约函数的调用。利用本申请,将验签的环节从链上转移至链下,使智能合约处理交易的逻辑变得简洁,降低了合约的复杂性以及由此所导致的单次调用gas消耗过高的问题。次调用gas消耗过高的问题。次调用gas消耗过高的问题。

【技术实现步骤摘要】
区块链智能合约函数调用方法及装置


[0001]本申请涉及区块链
,特别涉及一种区块链智能合约函数调用方法及装置。

技术介绍

[0002]区块链本质上是一个分布式的共享账本,由成千上万个节点组成。具有去中心化、数据难以篡改、不可伪造、安全可信、可以溯源、多方协同共识等特点。
[0003]以太坊区块链环境下的验签是指使用椭圆曲线签名验证算法对提交上链的交易数据的不可篡改性和不可否定性进行验证和确认。通过验签可以认定来自某一地址的交易数据是被地址对应私钥的拥有者所认同并且未经篡改。这通常也是对交易数据进行验证的理由和目的。交易验签是目前所有区块链都原生支持的功能。
[0004]使用椭圆曲线签名验证算法不仅能够签名、验签交易数据,理论上可以使用公私密钥对对任何数据进行签名和验签。以太坊中的元交易就是基于这种过程的典型应用。所谓元交易(Meta transaction),就是让用户用自己的密钥来签名交易数据并发送给“中继者(relay)”,中继者再向区块链发起真正的交易并为其支付Gas费。交易的目标合约提取原始用户签名的数据及对应的签名,根据椭圆曲线验签算法对其进行验签,若验签通过则认可被签名的原始数据,进而确定原始用户及其意图,并相应地处理合约的调用。元交易的本质是对合约函数调用数据进行签名,通过外层交易进行包装并发送至目标合约,最终在链上进行验签并执行合约函数的过程,其优势在于不受区块链原生交易的限制,可对待签名认证的数据内容及格式进行定制。
[0005]然而,链上验签的业务逻辑是以智能合约的形式存在于区块链上,这样的验签方式存在以下弊端:
[0006]第一,其核心是依赖于以太坊节点上的一个预编译函数ecrecover,实现该函数的字节码较为复杂,这会在原生交易的成本上额外增加gas消耗。
[0007]第二,链上验签使用智能合约实现业务逻辑,需要使用额外的字节码组合、拼接原始数据形成待hash数据,然后再进行hash计算,这些动作也都需要消耗gas。
[0008]第三,由于以太坊自身设计的原因,存在参数上限问题,即智能合约函数的参数、返回值、局部变量的总数相加不能超过16,否则编译无法通过。解决这一问题的办法是使用数组类变量或将多个数据组合为单个数据。然而,要进行链上验签,必须先恢复出原始数据,这也必然要求增加一定数量的操作码进行数据分解,这样的动作从业务逻辑角度来看基本属于无用之功,只能导致更多的gas消耗。然而,链上验签应用通常都会含有不同类型的多个原始数据,这会进一步使得上述矛盾变得更加尖锐。
[0009]第四,因为验签逻辑是以智能合约的模式存在于链上,一旦业务逻辑发生改变,则必须对原有的智能合约进行升级。对于一个没有设计升级策略的合约,验签逻辑根本无法变更。即使一开始就为智能合约的升级设计了较好的方案,智能合约的升级通常也会导致业务不连续、存储结构兼容和数据迁移成本等问题。
[0010]第五,另外,预编译函数ecrecover是以太坊网络提供的专有函数,其验签算法也是专门针对以太坊环境实现的,其它区块链网络不一定提供类似功能的函数或使用了不同于以太坊网络的签名验签算法。当然,可以使用智能合约编程的方式来手动实现这样的验签函数,但其复杂程度以及不完善的优化通常会带来不容忽视的gas消耗以及合约自身体积的膨胀,得不偿失,有时甚至根本就无法实现这样的链上验签功能。

技术实现思路

[0011]本申请的目的在于提供一种区块链智能合约函数调用方法及装置,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的一个或者多个问题。
[0012]为实现上述目的及其他相关目的,本申请提供一种应用于区块链网络中的智能合约,所述区块链智能合约函数调用方法包括:
[0013]接收客户应用程序的第一交易请求,所述第一交易请求中包括原始交易数据及签名数据,其中,所述原始交易数据是所述客户应用程序对客户预调用的目标合约函数及对应的目标参数进行编码后获得的数据,所述签名数据是所述客户应用程序使用用户私钥对所述原始交易数据签名后获取的数据;
[0014]对所述第一交易请求进行解析,以获取所述原始交易数据和所述签名数据;
[0015]将所述原始交易数据及对应的所述签名数据作为事件参数向链下预言机发送验签通知,以通知所述链下预言机对所述原始交易数据进行验签;
[0016]接收所述链下预言机对所述原始交易数据的验签结果;
[0017]将验签成功的所述原始交易数据作为合约调用函数的参数进行所述目标合约函数的调用。
[0018]在本申请的一可选实施例中,对所述第一交易请求进行解析,以获取所述原始交易数据和所述签名数据之后还包括:
[0019]对解析获取的所述原始交易数据分配标识序号,并暂存所述原始交易数据及对应的所述标识序号。
[0020]在本申请的一可选实施例中,为解析获取的所述原始交易数据分配一个标识序号,并暂存所述原始交易数据及对应的所述标识序号,具体包括:
[0021]通过内部的计数器为解析获取的所述原始交易数据分配唯一的计数标识,作为所述原始交易数据的标识序号;
[0022]以所述标识序号为索引为解析获取的所述原始交易数据开辟存储空间并将其暂存在所述智能合约的状态变量中。
[0023]在本申请的一可选实施例中,将所述原始交易数据及对应的所述签名数据作为事件参数向链下预言机发送验签通知,以通知所述链下预言机对所述原始交易数据进行验签,包括:
[0024]将所述原始交易数据及对应的所述签名数据和所述标识序号作为事件参数向链下预言机发送验签通知,以通知所述链下预言机对所述原始交易数据进行验签。
[0025]在本申请的一可选实施例中,所述链下预言机通过如下方式对所述原始交易数据进行验签:
[0026]所述链下预言机从所述验签通知中提取出所述原始交易数据及对应的所述签名
数据和所述标识序号;
[0027]所述链下预言机对所述原始交易数据进行哈希计算,以获取哈希值;
[0028]所述链下预言机通过预设验签算法对所述原始交易数据的哈希值和所述签名数据进行验签,以获取验签结果。
[0029]在本申请的一可选实施例中,所述链下预言机通过预设验签算法对所述原始交易数据的哈希值和所述签名数据进行验签,以获取验签结果,具体包括:
[0030]所述链下预言机将计算获取的所述哈希值和所述签名数据作为参数,调用公钥恢复算法计算获取恢复公钥;
[0031]所述链下预言机将所述恢复公钥与预先存储的公钥数据库进行匹配:当所述公钥数据库存在与所述恢复公钥相对应的匹配公钥时,则表示验签成功,反之,则表示验签失败。
[0032]在本申请的一可选实施例中,接收所述链下预言机对所述原始交易数据的验签结果,具体包括:
[0033]接收所述链下预言机对所述原始交易数据的验签结果及对应的所述标识序号。
[0034]在本申请的一可选实施例中,当所述验签结果为成功本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种区块链智能合约函数调用方法,其特征在于,应用于区块链网络中的智能合约,所述区块链智能合约函数调用方法包括:接收客户应用程序的第一交易请求,所述第一交易请求中包括原始交易数据及签名数据,其中,所述原始交易数据是所述客户应用程序对客户预调用的目标合约函数及对应的目标参数进行编码后获得的数据,所述签名数据是所述客户应用程序使用用户私钥对所述原始交易数据签名后获取的数据;对所述第一交易请求进行解析,以获取所述原始交易数据和所述签名数据;将所述原始交易数据及对应的所述签名数据作为事件参数向链下预言机发送验签通知,以通知所述链下预言机对所述原始交易数据进行验签;接收所述链下预言机对所述原始交易数据的验签结果;将验签成功的所述原始交易数据作为合约调用函数的参数进行所述目标合约函数的调用。2.根据权利要求1所述的区块链智能合约函数调用方法,其特征在于,对所述第一交易请求进行解析,以获取所述原始交易数据和所述签名数据之后还包括:对解析获取的所述原始交易数据分配标识序号,并暂存所述原始交易数据及对应的所述标识序号。3.根据权利要求2所述的区块链智能合约函数调用方法,其特征在于,为解析获取的所述原始交易数据分配一个标识序号,并暂存所述原始交易数据及对应的所述标识序号,具体包括:通过内部的计数器为解析获取的所述原始交易数据分配唯一的计数标识,作为所述原始交易数据的标识序号;以所述标识序号为索引为解析获取的所述原始交易数据开辟存储空间并将其暂存在所述智能合约的状态变量中。4.根据权利要求2所述的区块链智能合约函数调用方法,其特征在于,将所述原始交易数据及对应的所述签名数据作为事件参数向链下预言机发送验签通知,以通知所述链下预言机对所述原始交易数据进行验签,包括:将所述原始交易数据及对应的所述签名数据和所述标识序号作为事件参数向链下预言机发送验签通知,以通知所述链下预言机对所述原始交易数据进行验签。5.根据权利要求4所述的区块链智能合约函数调用方法,其特征在于,所述链下预言机通过如下方式对所述原始交易数据进行验签:所述链下预言机从所述验签通知中提取出所述原始交易数据及对应的所述签名数据和所述标识序号;所述链下预言机对所述原始交易数据进行哈希计算,以获取哈希值;所述链下预言机通过预设验签算法对所述原始交易数据的哈希值和所述签名数据进行验签,以获取验签结果。6.根据权利要求5所述的区块链智能合约函数调用方法,其特征在于,所述链下预言机通过预设验签算法对所述原始交...

【专利技术属性】
技术研发人员:孙云
申请(专利权)人:上海摩联信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1