java调用区块链智能合约

编程知识 行业动态 更新时间:2024-06-13 00:22:38

背景:

笔者学习了一段时间区块链,打算做一个区块链去中心化应用(DAPP)。智能合约已经通过remix部署到了kovan测试链上,这篇文章介绍用Java版本的web3j框架与链上合约进行交互。


1.导入web3j相关插件和依赖

参考web3j官方教程 Quickstart - Web3j

pom.xml中添加web3j-maven-plugin插件

<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>

			<plugin>
				<groupId>org.web3j</groupId>
				<artifactId>web3j-maven-plugin</artifactId>
				<configuration>
					<soliditySourceFiles/>
				</configuration>
			</plugin>

		</plugins>
	</build>

 pom.xml中添加web3j的依赖

<dependency>
			<groupId>org.web3j</groupId>
			<artifactId>core</artifactId>
			<version>4.8.7</version>
</dependency>

2.生成java包装类

将合约文件拷到src/main/resources下,终端执行如下命令:

mvn web3j:generate-sources

执行成功,能在src/java/org/web3j/model中看到生成的包装类


3.调用合约

下面用的是官方教程里的例子,需要改动的地方如下:

<your_node_url>填写区块链节点

 HelloWorld改成自己生成的包装类的名称(一般和合约名称一致)

<your_contract_address>填写合约的地址(用区块链浏览器查询合约地址)

your_private_key填写自己以太坊钱币的私钥

greeting()改成想调用某个合约函数 

 Web3j web3j = Web3j.build(new HttpService("<your_node_url>"));
 String greeting;
 HelloWorld helloWorld = HelloWorld.load("your_contract_address", web3j, Credentials.create("your_private_key"), new DefaultGasProvider());
 if (helloWorld.isValid()) {
    greeting = helloWorld.greeting().send();
 }
 web3j.shutdown();

4.可能遇到的问题 

(1)如果用的是Spring Boot,Spring Boot在包管理时,会把okhttp的包版本默认为3.xx版本。但是,较高版本的web3j(4.8.7),需要用到4版本的okhttp。

解决方案:

pom.xml中加入如下代码

<properties>
		<okhttp3.version>4.9.0</okhttp3.version>
</properties>

(2) your_node_url应该填什么?

如果是私链,填本机的对应端口。

如果是公链,建议用Infura进行代理。

更多推荐

java调用区块链智能合约

本文发布于:2023-04-02 21:08:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/ddf59c5b2942aa4b4ef2636bd8a241ec.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:区块   合约   智能   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!