Java调用web3j操作Spectrum 光谱链无法进行交易问
2018-12-29 本文已影响5人
i_fan
一. 前提工作
1.运行Spectrum,并保证账户里有smt,然后发布一个云笔记的智能合约,如果不明白如何操作,https://www.jianshu.com/p/84f06e264ee1 阅读这篇文章的前半部分,运行起Spectrum,并发布云笔记的合约
2. 将合约代码转换成Java Bean
2.1 将remix中的BYTECODE 保存成 xxx.bin,ABI 保存成xxx.abi
2.2 进入https://github.com/web3j/web3j/releases/tag/v3.3.1网站,下载web3j-3.3.1.tar,并解压。进入目录bin下,将greeter.bin和greeter.abi,复制到目录下,在此目录命令行执行web3j solidity generate --javaTypes xxx.bin xxx.abi -o src/ -p com.your.organisation.name
2.3 将生成的javabean复制到你的项目中即可
二. 利用web3j操作Spectrum光谱链
定义了一些常用的函数
获取credentials 获取httpservice 获取web3j 获取交易价格以上函数并没有什么需要注意的地方,需要进行注意的是下面的这个获取合约的函数
错误的获取智能合约的函数(仅在Spectrum) question当你使用如上的方式来获取合约时,将会产生一个异常,且你将提示出的hash在 光谱链测试网浏览器 上进行查询时你会看到如下的结果,提示你此次交易是无法识别的
unkonw transaction原因猜测:当你使用上述方法获取智能合约时,他会有默认的一个chainId,而测试网规定,chainId必须是3,主网chainId必须是20180430,而默认的chainId并不是3(此处用的是测试网),所以交易无法识别
解决办法:
修改获取智能合约的函数:代码如下
注意点:不再使用上述方法来load智能合约,采用另一个load方法,利用transactionManager来执行chainId
正确操作Spectrum的获取智能合约方法
再次进行测试,结果如下,不报错,且打印出了交易哈希
测试新的获取合约方法将上面的合约地址 0xea1d1246a17a414463ad6f7880de2b753b1e45b38ec06f120ef104e5c2748e42 复制到 光谱链测试网浏览器 上进行查询,发现交易能够进行查询
查询交易到此,Java利用web3j操作Spectrum无法交易的问题就成功解决了