SmartMesh Developer Community

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无法交易的问题就成功解决了

上一篇下一篇

猜你喜欢

热点阅读