以太坊 方法签名

  最近在工作中使用web3j调用合约,发现一个比较头疼的问题?复杂一点的合约参数多了,函数的方法签名老是出错。在这之前调用合约方法一直都是拼接合约的函数签名以及参数。为了能快速的获取每个合约的函数签名,我在思考是否便捷可行解决方案?而不是使用老套的方法,在remix IDE中编写函数,用其编译获取函数签名。

  通常以太坊合约开发后,需要先进行编译,部署时需要二进制字节编码bytecode,或者是abi文件。其中abi文件是合约函数,变量,事件组成的一组输入输出的json串。而bytecode是根据abi文件生成的二进制字节码。其中bytecode包含了合约中函数签名。那bytecode的函数签名是如何生成的呢?什么又是函数签名?

 

一.以太坊函数签名

  区块链中合约代码执行,需要指定某个合约地址的某个函数,其中这个执行的函数是使用Keccak-256(SHA-3)编码后的散列,取散列的前四个字节作为函数签名。官方定义:"签名被定义为没有数据位置说明符的基本原型规范表达式,即具有带括号的参数类型列表的函数名称"。通俗的说就是:将函数名,带顺序的变量类型以及参数括号进行Keccak-256编码后,取前四个字节的二进制字符串,即以太坊的合约函数签名。

 

二.函数签名生成

  在java中可以使用bcpkix-jdk15on工具类的Keccak.Digest256将合约函数方法名及参数类型做hash计算,转换成16进制后取前8位的四个字节。

代码如下:

Keccak.Digest256 digest256 = new Keccak.Digest256();
System.out.println(Hex.toHexString(digest256.digest("setMap(bytes32,string,address[],bytes32)".getBytes())).substring(0, 8));

可以得到此函数签名为:dc913337

还有一种特殊的签名,叫event事件签名:

Keccak.Digest256 digest256 = new Keccak.Digest256(); 

System.out.println(Hex.toHexString(digest256.digest("LogCreate(address)".getBytes())));

得到的事件签名值:

b8f132fb6526e0405f3ce4f3bab301f1d4409b1e7f2c01c2037d6cf845c831cb

关于合约函数签名文档生成,我在业余时间写了个java小工具,目前已在github上开源,地址已经放在文末。那么为什么需要这个合约签名文档呢?

 

三.开发协调

  以太坊合约函数签名文档,可以理解成接口文档,主要作用有:

第一:由于合约开发者和合约调用者,可能是不同的开发人员。调用合约者需要知道合约的函数签名,同时也可以验证自己拼接的函数签名以及参数是否正确。

第二:调用者需要知道合约原始的方法名以及参数类型,尤其是明确需要知道参数的顺序,否则无法生成正确的函数签名。那么此时就需要合约方法的文档来作为调用者参考媒介。出于此功能的需要,就自己动手丰衣足食做了个规范化的合约函数签名文档生成工具。

  在生成合约函数签名文档之前,需要使用truffle或者solc。truffle是以太坊合约开发的脚手架,使用truffle将完成开发的合约编译成json文件。或者使用solc将合约编译成abi文件。最后使用 ethSignUtil.jar 工具生成函数签名文档以及合约接口文档。简单看下效果图

函数签名:

 

合约接口:

 

 

关于合约函数签名文档生成的具体用法,请移步至github:

https://github.com/zhjgit/Ethereum-util

 

持续关注"刻意链习"公众号,获取更多区块链技术知识。转载请注明文章出处,原创技术贴,侵权必纠。

             

转载于:https://www.cnblogs.com/sumingk/articles/10091305.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

训练 GPT-3,为什么原有的深度学习框架吃不消?

来源:AI前线作者:一流科技 CEO 袁进辉近年来,深度学习被广泛应用到各个领域,包括计算机视觉、语言理解、语音识别、广告推荐等。在这些不同领域中,一个共同的特点就是模型规模越来越大,比如 GPT-3 模型的参…

Canny边缘检测原理及其python实现

Canny边缘检测原理及其python实现 转载请注明出处:©️ Sylvan Ding Canny边缘检测算法 多数分割算法均基于灰度值的两个基本性质之一:不连续性和相似性。图像的边缘检测就是基于灰度的不连续性(灰度突变)来实现图像分割的。…

离奇的梦境,能够防范大脑过拟合

来源:混沌巡洋舰 1 )梦让我们对世界的理解不再那么简单化关于为什么大脑进化出夜间做梦?神经科学界提出了各种假说,诸如通过梦来调节情绪,巩固记忆,或梦可以帮助我们选择性的遗忘,对我们应对现实世界的问题…

RGB空间中的彩色图像分割原理及其python实现

RGB空间中的彩色图像分割 ⭐️ 为尊重原创性!转载请注明出处:©️ Sylvan Ding’s Blog 概述 本文论述了基于欧式距离和曼哈顿距离的彩色图像分割算法,并用python实现了各个算法。之后将二者的优势结合,提出了改进后的曼哈顿…

路飞学城Python-Day171

Evernote Export 线性结构:python的列表操作列表是如何存储的:顺序存储的,是一块连续的内存,内存是一堆格子,列表是一串连续的编号32位机器上一个整数占4个字节数组和列表有2点不同,1.数组的元素类型要求是…

HarmonyOS 2面世!是没有退路还是时机成熟?中国操作系统崛起元年或已到来

来源:21Tech(News-21)作者:倪雨晴编辑:张星6月2日晚间,华为鸿蒙操作系统HarmonyOS迎来重要时刻,华为正式发布多款搭载HarmonyOS 2的新产品,包括HUAWEI Mate 40系列新版本、Mate X2新版本、HUAWEI WATCH 3系…

操作系统:线程同步

操作系统:线程同步 使用Linux无名信号量实现了读写者线程的互斥和同步。 实验环境 环境:Linux语言:CCMake:3.17.1GCC:7.5.0IDE:Clion 2020.3.1 实验目标 理解进程同步的两种制约关系:互斥与…

中国工程院2021年院士增选第二轮候选人名单公布

来源:先进制造业中国工程院2021年院士增选进入第二轮评审候选人名单(按候选人姓名拼音排序)未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城…

vsftpd部署流程和常见问题详解

vsftpd部署流程和常见问题详解 ⭐️ 网上关于在云服务器里配置vsftpd的文章鱼龙混杂,没有一篇是可以彻底解决问题的,有些问题虽简单,但也让初学者感到困惑。本文详细说明vsftpd的部署流程和一些常见问题的解决方法,详述用户创建过…

谷歌发布史上最强人类大脑「地图」,1.3亿个突触,在线可视3D神经元「森林」!...

来源:Google AI Blog编辑:yaxin, LQ (新智元)突触,是神经网络的「桥梁」。我们知道,人类大脑有860亿个神经元,因为有了突触,才可以把神经元上的电信号传递到下一个神经元。长久以来&…

智慧食堂项目策划书(商业计划书/立项计划)

金鹰物联智慧食堂项目策划书(商业计划书/立项计划) ©️ 金鹰物联项目组,转载请注明出处! ⭐️ 技术部分请参考博文:基于YOLOv5的中式快餐店菜品识别系统 文章目录金鹰物联智慧食堂项目策划书(商业计划…

pipelineDB学习笔记-2. Stream (流)

一、流的定义: 所谓的“流”(stream)在pipelineDB中是指那些被允许的数据库客服端推送到 Continuous View(连续视图) 的时序化数据的一种“抽象”。流中的每一个raw(数据列)或者event(事件),看起来是和普通…

银行家算法之Python实现[操作系统实验]

银行家算法 银行家算法是著名的死锁避免算法,其思想是:把操作系统视为银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源。进程…

城市智能化发展中,AI公司应该做什么?

来源:虎嗅APP题图来源:视觉中国在上海长宁区的部分区域,你会发现共享单车总是能够整整齐齐的排列,并且在每一个你需要的街道路边,都能找到空闲的单车,既不会车辆爆满,也不会无车可骑。这些城市细微之处的体…

getchar(),putchar()用法

1.getchar函数可以接收用户输入的多个字符,只用等用户按下回车键后,getchar()函数才会从键盘缓冲区依次读出字符; 2.getchar()和putchar()结合使用,可以将读取的字符输出到屏幕; 3.函数原型: int getchar…

[操作系统]页面置换算法实验及C++实现(OPT、FIFO、LRU)

虚拟内存页面置换算法实验(OPT、FIFO、LRU) 进程运行时,若其访问的页面不再内存中而需将其调入,但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区。选择调出页面的算法就称为页面…

智谱AI多项成果惊艳亮相2021北京智源大会

来源:学术头条2021 年 6 月 1 日,由北京智源人工智能研究院(以下简称 “智源”)主办的 2021 北京智源大会在北京中关村国家自主创新示范区会议中心成功开幕。包括 Yoshua Bengio、David Patterson 等图灵奖获得者在内的两百余位国…

python-字典方法

1.字典的格式化字符串在转换说明符%后面加上键(圆括号括起来);phonebook{"A":45,"B":"56"} s"As phone number is %(A)s." print(s%phonebook) 运行结果: #字典方法: #clear():清楚字典中的所有的项…

获得诺贝尔奖的底层小职员 | 从来没有一个高手,是在一夜之间强大起来的

来源:Pinterest优选2019年初NHK的一个访谈纪录片,看哭了很多网友。“感动,这才是真正的大神啊!”纪录片的主人公,是2002年的诺贝尔化学奖得主——田中耕一。十九年前,他的获奖几乎是“都市传说”般的爆炸新…

光辉岁月:人工智能的那些人和事(1)

来源:图灵人工智能源头茫昧虽难觅,活水奔流喜不休。——法国数学家亨利庞加莱(Henri Poincare)目前,人工智能(Artificial Intelligence,AI)正在迅速崛起。现已面世的AI应用&#xff…