美文网首页SmartMesh Developer Community
Java调用web3j操作Spectrum 光谱链无法进行交易问

Java调用web3j操作Spectrum 光谱链无法进行交易问

作者: i_fan | 来源:发表于2018-12-29 13:56 被阅读5次

    一. 前提工作

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

    相关文章

      网友评论

        本文标题:Java调用web3j操作Spectrum 光谱链无法进行交易问

        本文链接:https://www.haomeiwen.com/subject/qwbulqtx.html