web3j获得的sha3值和solidity为什么会不同?
我正在尝试使用web3j来监控我的智能合约事件。我发现主题的第一个参数是事件名称的哈希值。因此,我想用web3j将事件名称哈希然后就可以映射得到我想要的事件。但是,我发现它的价值是不同的。不知道是什么情况。
代码如下:
// my smart contract event EVWithdraw(address user ,uint256 amount ,bytes32 ticketID);
我在智能合约中调用EVWithdraw(address,uint256,bytes32)
:
function getsha3(string func) public constant returns(bytes32) { return sha3("EVWithdraw(address,uint256,bytes32)"); } // returns 0x953d0c27f84a9649b0e121099ffa9aeb7ed83e65eaed41d3627f895790c72d41
我的java代码:
String hashed = Hash.sha3("EVWithdraw(address,uint256,bytes32)"); // returns 0x5e148119b535e6da59d359ccb21e1987190bf984ea6998cc09de3b3d056603bf
为什么值是不同?我跟踪了Sha3
类,好像也使用了keccak256
。这是编码问题吗?
问题的答案
web3j Sha3函数需要一个十六进制编码的字符串值。如果你先把字符串string转换成字节bytes,就ok了。如下:
Hash.sha3("EVWithdraw(address,uint256,bytes32)".getBytes(StandardCharsets.UTF_8))
原文《以太坊常见问题和错误》中的:
http://cw.hubwiz.com/card/c/ethereum-FAQ/1/2/5/
另外推荐一些之前的教程:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
合约错误:org.web3j.protocol.exceptions.TransactionException:Error processi...
在执行一个 ERC20 智能合约的transfer调用时发生的org.web3j的一个交易错误: org.web3j.protocol.exceptions.TransactionException: Error processing request: unknown transaction。 Credentials credentials = null; try { this.initWeb3Client(); credentials = WalletUtils.loadCredentials(pwd, path); MyToken mt = MyToken.load(ADDRESS,web3j, credentials, BigInteger.valueOf(20_000_000_000L),BigInteger.valueOf(4_300_000L)); TransactionReceipt tr = oso.transfer(address,value).send(); System.out.println("hash:"+tr.getTransactionHash()); }...
- 下一篇
如何在Linux或Ubuntu18下安装virtualenv
1.输入命令:linux@ubuntu:~$ sudo apt-get install python-virtualenv 2.virtualenv加所想建的项目名字,建立虚拟环境 linux@ubuntu:~$ virtualenv python2 3. 新建一个以python3的虚拟环境: linux@ubuntu:~$ virtualenv -p /home/linux/anaconda3/bin/python py3 linux@ubuntu:~$ cd py3 linux@ubuntu:~/py3$ cd bin (base) linux@ubuntu:~/py3/bin$ source activate 4.新建立虚拟环境管理包:pip install virtualenvwrapper linux@ubuntu:~$ pip install virtualenvwrapper -1.配置virtualenvwrapper linux@ubuntu:~$ sudo find / -name virtualenvwrapper.sh /home/linux/anaconda...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS关闭SELinux安全模块
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 设置Eclipse缩进为4个空格,增强代码规范
- Windows10,CentOS7,CentOS8安装Nodejs环境