java连接区块链 很简单 ,调用智能合约要麻烦一些.

先说连接 区块链查询数据.

1 maven 项目导入 web3j 的依赖.

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

  

2 需要 链上开启 rpc 端口 . 不开启 本地可以通过 指定  geth.ipc 连接.

package com.cxygg.testweb3j;

import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameterName;
import org.web3j.protocol.core.methods.response.EthGetBalance;
import org.web3j.protocol.http.HttpService;
import org.web3j.utils.Convert; public class Web3jDemo2 { private static final String RPC_URL = "http://192.168.1.199:9001";
private static final Web3j web3j = Web3j.build(new HttpService(RPC_URL)); public static void main(String[] args) throws Exception { getAge(); } public static void getAge() throws Exception {
// 这里要填写真实的钱包地址
EthGetBalance ethGetBalance = web3j
.ethGetBalance("0xbcbbd4e9bbf41a149652da55c42a4b28b6e39599", DefaultBlockParameterName.LATEST).send(); if (ethGetBalance != null) {
System.out.println("余额:" + Convert.fromWei(ethGetBalance.getBalance().toString(), Convert.Unit.ETHER));
} } }

  

发布和调用智能合约部分

调用智能合约通过 abi 文件  和  合约二进制文件生成 java的 代理类,然后调用。

truffle   和 zeppelin-solidity  的使用

truffle是一个基于Javascript开发的一套智能合约开发框架,使用Solidity语言编写合约。truffle有一套自动的项目构建机制

1 安装  npm

  brew install npm

2 安装 truffle

  npm install -g truffle

3 下载 zeppelin-solidity 包

  npm install zeppelin-solidity

4 编写合约

   建立项目 truffle unbox 项目名  ,编写合约

  

5 得到bin 文件和 abi 文件。

6 使用 bin文件 和 abi 文件生成Java 对象.(  需要安装 web3j )

web3j solidity generate -b <编译的bin文件地址> -a <编译的abi文件地址> -o <输出目录> -p <java包名>
web3j solidity generate -b ./tokenExchange.bin -a .\tokenExchange.abi -o ./ -p data

生成了 Java对象 ,结合  Web3j  就可以发布合约和调用合约了。

备注:我使用的版本: 版本不同可能有奇怪的问题

appledeMacBook-Pro:~ apple$ truffle version

Truffle v5.0.36 (core: 5.0.36)

Solidity v0.5.8 (solc-js)

Node v12.10.0

Web3.js v1.2.1

java 调用区块链 发布和调用智能合约的更多相关文章

  1. 区块链学习5:智能合约Smart contract原理及发展历程科普知识

    ☞ ░ 前往老猿Python博文目录 ░ 一.智能合约的定义 通俗来说,智能合约就是一种在计算机系统上,当一定条件满足的情况下可被自动执行的合约,智能合约体现为一段代码及其运行环境.例如银行信用卡的自 ...

  2. geth建立私链以及发布第一个智能合约

    原博客地址 https://blog.csdn.net/qq_36124194/article/details/83686740 geth建立私链 初始化genesis.json文件 geth --d ...

  3. java中使用axis发布和调用webService及dom4j解析xml字符串

    工作中需要调用webService服务,这里记录一下如何在java中发布和调用webService. 需要的jar包: webService服务端: import javax.jws.WebMetho ...

  4. java开发区块链只需150行代码

    本文目的是通过java实战开发教程理解区块链是什么.将通过实战入门学习,用Java自学开发一个很基本的区块链,并在此基础上能扩展如web框架应用等.这个基本的java区块链也实现简单的工作量证明系统. ...

  5. JAVA版本区块链钱包核心代码

    Block.java package com.ppblock.blockchain.core; import java.io.Serializable; /** * 区块 * @author yang ...

  6. 使用web3+solc编译发布以太坊智能合约

    一.环境安装: 1.安装web3工程:npm install web3 2.安装solc工程:npm install solc二.在node环境中使用 先引用所需环境: var fs = requir ...

  7. 用Java实现简单的区块链

    用 Java 实现简单的区块链 1. 概述 本文中,我们将学习区块链技术的基本概念.也将根据概念使用 Java 来实现一个基本的应用程序. 进一步,我们将讨论一些先进的概念以及该技术的实际应用. 2. ...

  8. android和java以太坊开发区块链应用使用web3j类库

    如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建.钱包创建.交易转账,交易与状态.智能合约开发与交互.过滤器和 ...

  9. 一、Bitcoin比特币与BlockChain区块链技术

    一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...

随机推荐

  1. 如果json中的key需要首字母大写怎么解决?

    一般我们命名都是驼峰式的,可是有时候和第三方接口打交道,也会遇到一些奇葩,比如首字母大写........额 这是个什么鬼,对方这么要求,那我们也得这么写呀. 于是乎,第一种方式:把类中的字段首字母大写 ...

  2. phonegap 开发指南系列(3) ----在Eclipse中Android开发环境搭建

      前提条件:已在Eclipse中安装好Android SDK 和 ADT. 1.下载PhoneGap,解压. 2.用Eclipse新建一个安卓项目. 3.将phoneGap解压包里的Android文 ...

  3. 【JZOJ6370】基础 fake 练习题

    description 装饰者坐在树荫下听着长者讲述以前的故事: 大神 yk 非常喜欢树,便钦点班里的 n 个小蒟蒻站在一棵 n 个点以 1 为根的树上,并且每个点上恰好有 1 个小蒟蒻. 大神 yk ...

  4. js基础(条件语句 循环语句)

    条件语句 if语句块的语法形式如下: //只有两种情况下if(条件){要执行的语句块;}else{要执行的语句块;} //多种情况下if(条件){要执行的语句块;}else if(条件){要执行的语句 ...

  5. Windows shutdown

    用法: shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f]    ...

  6. csps模拟84Smooth,Six,Walker题解

    题面:https://www.cnblogs.com/Juve/articles/11733280.html smooth: 暴力强筛到7e7有60分... 正解: 维护一个队列,存所有的B-光滑数, ...

  7. golang中time包的使用

    一.代码 package main; import ( "time" "fmt" ) func main() { //time.Time代表一个纳秒精度的时间点 ...

  8. Vue Virtual Dom 和 Diff原理(面试必备) 极简版

    我又来了,这是Vue面试三板斧的最后一招,当然也是极其简单了,先说Virtual Dom,来一句概念: 用js来模拟DOM中的节点.传说中的虚拟DOM. 再来一张图: 是不是一下子秒懂  没懂再来一张 ...

  9. 类的反射实例(servlet的抽取)

    类的反射实例 具体以后我们写的时候不用写BaseServlet,因为各种框架都已经给我们写好了 所以,user对应的servlet的界面长这样:

  10. PAT甲级——A1109 Group Photo【25】

    Formation is very important when taking a group photo. Given the rules of forming K rows with Npeopl ...