首页 > 其他分享 >Spring Boot项目中集成Geth与以太坊区块链进行交互操作实例

Spring Boot项目中集成Geth与以太坊区块链进行交互操作实例

时间:2024-08-23 09:24:25浏览次数:12  
标签:Geth return Spring builder Boot param OkHttpClient web3j private

前置条件已经安装Geth并启动。
现在我们讲一下Spring Boot项目中集成Geth,然后怎么以太坊区块链进行交互操作。

1、添加依赖到工程pom.xml

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

2、添加配置到yml文件

web3j:
#  client-address: http://192.168.99.100:8545
  client-address: http://127.0.0.1:8545
  admin-client: true
  httpTimeoutSeconds: 60000

3、ETH配置类EthConfig.java


/**
 * @author deray.wang
 * @date 2024/04/20 17:18
 */
@Configuration
public class EthConfig {
   
    @Value("${web3j.client-address}")
    private String rpc;

    @Bean
    public Web3j web3j() {
   
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(30*1000, TimeUnit.MILLISECONDS);
        builder.writeTimeout(30*1000, TimeUnit.MILLISECONDS);
        builder.readTimeout(30*1000, TimeUnit.MILLISECONDS);
        OkHttpClient httpClient = builder.build();
        Web3j web3j = Web3j.build(new HttpService(rpc,httpClient,false));
        return web3j;
    }

    /**
     * 初始化admin级别操作的对象
     * @return Admin
     */
    @Bean
    public Admin admin() {
   
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(30*1000, TimeUnit.MILLISECONDS);
        builder.writeTimeout(30*1000, TimeUnit.MILLISECONDS);
        builder.readTimeout(30*1000, TimeUnit.MILLISECONDS);
        OkHttpClient httpClient = builder.build();
        Admin admin = Admin.build(new HttpService(rpc,httpClient,false));
        return admin;
    }

    /**
     * 初始化personal级别操作的对象
     * @return Geth
     */
    @Bean
    public Geth geth() {
   
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(30*1000, TimeUnit.MILLISECONDS);
        builder.writeTimeout(30*1000, TimeUnit.MILLISECONDS);
        builder.readTimeout(30*1000, TimeUnit.MILLISECONDS);
        OkHttpClient httpClient = builder.build();
        Geth geth = Geth.build(new HttpService(rpc,httpClient,false));
        return geth;
    }

}

4、封装两个bean:转账ETH参数类 TransferEchBean.java 和BlockchainTransaction.java

/**
 * 转账ETH参数类
 * @author
 */
@Data
@ApiModel
@ToString
public class TransferEchBean {
   


    @ApiModelProperty("fromAddr")
    private String fromAddr;

    @ApiModelProperty("密码")
    private String privateKey;

    @ApiModelProperty("toAddr")
    private String toAddr;

    @ApiModelProperty("amount")
    private BigDecimal amount;

    @ApiModelProperty("data")
    private String data;

}
/**
 * @author deray.wang
 * @date 2024/04/20 13:44
 */
@Data
public class BlockchainTransaction {
   
    private String id;
    //发送发件人ID
    private Integer fromId;
    //交易金额
    private long value;
    //收件人ID
    private Integer toId;

    private Boolean accepted;
}

5、封装操作区块链的方法 BlockchainService.java

BlockchainService.java类


/**
 * @author deray.wang
 * @date 2024/04/20 13:36
 */
public interface BlockchainService {
   

    /**
     * 获取账户的Nonce
     * @param web3j
     * @param addr
     * @return
     */
    BigInteger getAcountNonce(Web3j web3j, String addr);

    /**
     * 获取账户余额
     * @param web3j
     * @param addr
     * @return
     */
    BigDecimal getAccountBalance(Web3j web3j, String addr);

    /**
     * 查询区块内容
     * @param web3j
     * @param blockNumber
     * @return
     */
    EthBlock getBlockEthBlock(Web3j web3j, BigInteger blockNumber);

    /**
     * 创建钱包
     * @param password
     * @return
     */
    ServiceResponse newAccount(String password);

    /**
     * 地址列表
     * @return
     */
    List<String> getAllAccounts();

    /**
     * 转账ETH
     * @param web3j
     * @param fromAddr
     * @param privateKey
     * @param toAddr
     * @param amount
     * @param data
     * @return
     */
    ServiceResponse transferETHD(Web3j web3j, TransferEchBean filterBean);

    /**
     * 普通转账ETH
     * @param web3j
     * @param filterBean
     * @return
     */
    ServiceResponse tranETH(Web3j web3j, TransferEchBean filterBean

标签:Geth,return,Spring,builder,Boot,param,OkHttpClient,web3j,private
From: https://blog.csdn.net/qq_25987725/article/details/141450739

相关文章

  • springboot[3]_静态资源目录
    介绍一下静态资源目录。1.默认静态资源目录SpringBoot官网文档介绍,默认从/static (或 /public 或 /resources 或/META-INF/resources)目录中,可以获取得到静态资源文件。默认情况下,资源映射到/**,但是我们可以通过设置spring.webflux.static-path-pattern来调整它。https:/......
  • springboot[2]_常用注解
    介绍一些常用注解。springBoot因为很少用到xml来配置bean文件,所以大部分都是用注解来创建和管理相关bean。@Component、@Service、@Repository和@Controller这几个注解效果都是差不多的,都是可以用来创建bean实例的。只是规定使用的方法不同而已。1.@Component自动被compo......
  • springboot[1]_HelloWorld
    1.介绍springboot项目官网:https://spring.io/projects/spring-bootspringboot是一个基于java的开源框架,能够轻松快速地创建基于spring的应用程序。它的目的在于减少一些繁琐的配置,减少甚至不需要配置文件,因为内置了Tomcat服务器,所以可以快速开发并启动一个项目。我们以创建H......
  • springboot[4]_配置mybatis
    在springboot中使用mybatis1.建表在test库中,建立一张animal表,并存入三条数据。CREATETABLE`test`.`animal`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(30)CHARACTERSETlatin1COLLATElatin1_swedish_ciNULLDEFAULTNULL,PRIMARYKEY(`id`)......
  • 基于Springboot的智能菜谱推荐系统(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的智能菜谱推荐系统(有报告)。Javaee项目,springboot项目。资源下载:基于Springboot的智能菜谱推荐系统(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven来......
  • Spring---频率最高面试题1
    01.Spring框架的基本理解     •关键字:核心思想IOC\AOP、作用(解耦、简化),简单描述框架组成·     Spring框架是一款轻量级的开发框架,核心思想是IOC(控制反转)和AOP(面向切面编程),为Java应用程序开发提供组件管理服,用于组件之间的解耦,以及简......
  • Springboot实战——黑马点评之缓存
    Springboot黑马点评——缓存1缓存初识与简单实现1.1根据商铺id的缓存查询基础缓存实现:考虑到有数据会同时存在于数据库和缓存中,所以:Q:数据库和缓存的数据一致性问题?A:三种缓存更新策略用来解决一致性问题1.2缓存更新策略的选择第一种:内存淘汰第二种:超时剔除第三......
  • 基于Springboot+vue的学生网上请假系统
    文章底部获取项目源码联系方式【万字文档+源码】基于Springboot+vue的学生网上请假系统-可用于毕设-课程设计-练手学习1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管......
  • 【源码+论文】基于springboot的信息技术知识竞赛系统的设计与实现
    系统包含:源码+论文所用技术:SpringBoot+Vue+SSM+Mybatis+Mysql免费提供给大家参考或者学习,获取资料请私聊我目录第1章绪论 11.1选题动因 11.2目的和意义 11.3论文结构安排 2第2章开发环境与技术 32.1MYSQL数据库 32.2Tomcat介绍 32.3vue技术 42.4Sp......
  • 【论文+源码】基于springboot搭建的疫情管理系统
    系统包含:源码+论文所用技术:SpringBoot+Vue+SSM+Mybatis+Mysql免费提供给大家参考或者学习,获取资料请私聊我目录目录 III1绪论 11.1研究背景 11.2目的和意义 11.3论文结构安排 22相关技术 32.1springboot框架介绍 32.2B/S结构介绍 32.3Mysql数据......