`
阅读更多

在本文中,我们将看一下EthereumJ库,它允许我们使用Java与以太坊区块链进行交互。

以太坊作为一种加密货币,利用去中心化、点对点、可编程区块链形式的数据库,以太坊虚拟机(EVM),通过连接不同的节点进行同步和操作。节点通过共识同步区块链,通过挖掘(工作量证明)创建硬币,验证交易,执行以Solidity编写的智能合约,并运行EVM,而区块链的区块,主要包含帐户状态(包括帐户之间的交易)和工作量证明。

以太坊 Facade

org.ethereum.facade.Ethereum类将许多EthereumJ软件包抽象并整合到一个易于使用的界面中。

可以连接到节点以与整个网络同步,并且一旦连接,我们就可以使用区块链。

创建Facade对象非常简单:

Ethereum ethereum = EthereumFactory.createEthereum();

连接到以太坊网络

要连接到网络,我们必须首先连接到一个节点,即运行官方客户端的服务器。节点由org.ethereum.net.rlpx.Node类表示。

在成功建立与节点的连接后,org.ethereum.listener.EthereumListenerAdapter处理客户端检测到的区块链事件。

1.连接到以太坊网络

让我们连接到网络上的节点。这可以手动完成:

String ip = "http://localhost";
int port = 8345;
String nodeId = "a4de274d3a159e10c2c9a68c326511236381b84c9ec...";

ethereum.connect(ip, port, nodeId);

连接到网络也可以使用bean自动完成:

public class EthBean {
    private Ethereum ethereum;

    public void start() {
        ethereum = EthereumFactory.createEthereum();
        ethereum.addListener(new EthListener(ethereum));
    }

    public Block getBestBlock() {
        return ethereum.getBlockchain().getBestBlock();
    }

    public BigInteger getTotalDifficulty() {
        return ethereum.getBlockchain().getTotalDifficulty();
    }
}

然后我们可以将EthBean注入到我们的应用程序配置中。然后它自动连接到以太坊网络并开始下载区块链。

实际上,只需在我们创建的org.ethereum.facade.Ethereum实例中添加org.ethereum.listener.EthereumListenerAdapter实例,就可以方便地封装和抽象大多数连接处理,就像我们在上面的start()方法中所做的那样:

EthBean eBean = new EthBean();
Executors.newSingleThreadExecutor().submit(eBean::start);

2.使用监听器处理区块链

我们还可以将EthereumListenerAdapter子类化,以处理客户端检测到的区块链事件。

要完成此步骤,我们需要创建子类监听器:

public class EthListener extends EthereumListenerAdapter {

    private void out(String t) {
        l.info(t);
    }

    //...

    @Override
    public void onBlock(Block block, List receipts) {
        if (syncDone) {
            out("Net hash rate: " + calcNetHashRate(block));
            out("Block difficulty: " + block.getDifficultyBI().toString());
            out("Block transactions: " + block.getTransactionsList().toString());
            out("Best block (last block): " + ethereum
              .getBlockchain()
              .getBestBlock().toString());
            out("Total difficulty: " + ethereum
              .getBlockchain()
              .getTotalDifficulty().toString());
        }
    }

    @Override
    public void onSyncDone(SyncState state) {
        out("onSyncDone " + state);
        if (!syncDone) {
            out(" ** SYNC DONE ** ");
            syncDone = true;
        }
    }
}

在接收的任何新区块(无论是旧的还是当前的)上触发onBlock()方法。 EthereumJ使用org.ethereum.core.Block类表示和处理区块。

同步完成后,onSyncDone()方法将触发,使我们的本地以太坊数据保持最新状态。

使用区块链

现在我们可以连接到以太坊网络并直接使用区块链,我们将探讨我们经常使用的几个基本但非常重要的操作。

1.提交交易

现在,我们已经连接到区块链,我们可以提交交易。提交一个Transaction相对容易,但创建实际Transaction本身就是一个冗长的主题:

ethereum.submitTransaction(new Transaction(new byte[]));

2.访问区块链对象

getBlockchain()方法返回一个Blockchain facade对象,其中包含用于获取当前网络差异和特定块的getter。

由于我们在前面设置了EthereumListener,因此我们可以使用上述方法访问区块链:

ethereum.getBlockchain();

3.返回以太坊帐户地址

我们也可以返回以太坊地址Address

要获得以太坊Account——我们首先需要验证区块链上的公钥和私钥对。

让我们用新的随机密钥对创建一个新密钥:

org.ethereum.crypto.ECKey key = new ECKey();

让我们从给定的私钥创建一个密钥:

org.ethereum.crypto.ECKey key = ECKey.fromPivate(privKey);

然后我们可以使用我们的密钥来初始化帐户。通过调用.init(),在Account对象上设置了ECKey和相关的Address

org.ethereum.core.Account account = new Account();
account.init(key);

其他功能

框架提供了另外两个主要功能,我们在此不会介绍,但值得一提。

首先,我们有能力编译和执行Solidity智能合约。但是,在Solidity中创建合约,然后编译和执行它们本身就是一个广泛的主题。

其次,尽管该框架支持使用CPU进行有限的挖掘,但鉴于前者缺乏盈利能力,使用GPU挖掘器是推荐的方法。

有关以太坊本身的更多高级主题可以在官方文档中找到。

在本文中,我们展示了如何连接到以太坊网络以及使用区块链的几种重要方法。

与往常一样,此示例中使用的代码可以在GitHub上找到。

 

如果希望快速进行java以太坊开发,那请看我们精心打造的教程: 
java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。

 

汇智网原创翻译,转载请标明出处。这里是原文

1
0
分享到:
评论

相关推荐

    java类库java类库.doc

    本文档主要介绍 Java 类库的结构和使用方法,涵盖了 Java 中一些常用的包和类,例如 java.lang、java.awt、java.io 等。同时,也介绍了 String 类和 StringBuffer 类的使用方法。 Java 类库是 Java API 的一部分,...

    Java类库中文手册

    Java类库中文手册是针对Java开发者的一份重要参考资料,它以CHM(Compiled Help Manual)格式提供,便于离线查阅和快速检索。这份手册详细介绍了Java标准类库中的各种类、接口、方法和异常,是Java学习者和开发者的...

    Java类库参考手册

    《JavaTM 2 Platform Standard Edition 5.0 API 规范》,类库详查,是初学者和初始级、中级Java程序员必备的参考手册。内容包括: 接口(斜体) 类 枚举 异常 错误 注释类型

    JAVA类库转换成C#类库工具

    标题"JAVA类库转换成C#类库工具"以及描述中提到的"C#引用JAVA类库"、"C#调用JAVA类库"和"C#解析JAVA类库"都涉及到一个关键的技术:IKVM。 IKVM是“Java to .NET”的一个开源实现,它允许C#或其他.NET语言直接引用和...

    Java类库下载Q

    1. 核心类库:这是Java平台的基础,包括如`java.lang`、`java.util`和`java.io`等包,提供了基本的数据类型、集合框架、输入/输出操作以及字符串处理等功能。 2. 网络类库:如`java.net`包,提供了网络通信的相关...

    echarts java 类库封装 手册

    echarts java 类库封装 手册 echarts java 类库封装 手册 echarts java 类库封装 手册 echarts java 类库封装 手册

    手机鸿蒙OS的Java类库.zip

    1. **系统服务**:Java类库提供了访问鸿蒙OS系统服务的接口,如设备管理、权限管理、硬件抽象层(HAL)等,使开发者能够方便地与底层操作系统进行交互。 2. **UI框架**:HarmonyOS的Java UI框架允许开发者使用类似...

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

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

    java类库说明文件

    Java类库的简单结构介绍及常用类别的说明文件

    java类库详解(PDF版)

    Java类库是Java编程语言的核心组成部分,它提供了一系列预先定义的类和接口,开发者可以使用这些类和接口来实现各种功能,从而简化编程工作。在Java 1.2版本中,类库已经相当成熟,虽然相比最新的Java版本,它可能...

    java类库详解PDF格式的

    Java 类库是 Java 编程语言的核心组成部分,它提供了丰富的接口和类,使得开发者能够高效地构建复杂的软件系统。这份“Java 类库详解”的 PDF 文档集合,显然是一份详尽的学习资料,涵盖了 Java 类库的多个方面。...

    Java类库大全.docx

    Java 类库是开发者在进行Java编程时不可或缺的资源,它们为开发者提供了丰富的功能,简化了复杂的任务,并且提高了代码的可读性和维护性。本文将详细介绍一些常用的Java类库及其核心功能。 首先,Apache Commons 是...

    Java实训教程 Java软件开发实战 Java类库 全部PPT课件 共7个章节.rar

    Java软件开发实战 Java类库 第4章 集合操作 共31页.pptx Java软件开发实战 Java类库 第5章 io操作 共35页.pptx Java软件开发实战 Java类库 第6章 其它综合 共38页.pptx Java软件开发实战 Java类库 第7章 JDBC 共113...

    Java类库查询辞典1.0

    《Java类库查询辞典1.0》是Java开发者的重要参考资料,主要针对Java类库进行详尽的解析和介绍。这个资源集成了大量的类库信息,帮助开发者更好地理解和使用Java平台的标准API。在这个辞典中,你可以找到关于Java类库...

    经典java例子,涉及到大部分java类库的使用.rar

    1. **Java IO流**:IO流类库允许我们处理输入和输出操作,包括读取文件、网络通信和数据转换。例如,`BufferedReader`和`PrintWriter`用于文本输入输出,`FileInputStream`和`FileOutputStream`用于文件操作。 2. *...

    JAVA_ClassLib.rar_classlib ja_java 类库_java核心_java类库手册

    `JAVA_ClassLib.rar_classlib ja_java 类库_java核心_java类库手册` 这个压缩包文件包含了一份详细的 Java 类库指南,旨在帮助学习者深入理解和运用Java的核心功能。 首先,我们要明白Java类库的重要性。类库是预...

    基于java的开发源码-FTP客户端Java类库 ftp4j.zip

    基于java的开发源码-FTP客户端Java类库 ftp4j.zip 基于java的开发源码-FTP客户端Java类库 ftp4j.zip 基于java的开发源码-FTP客户端Java类库 ftp4j.zip 基于java的开发源码-FTP客户端Java类库 ftp4j.zip 基于java的...

    java2类库 java类库的源文件

    Java 类库是 Java 语言的核心组成部分,它包含了各种预定义的类和接口,为开发者提供了丰富的功能和工具,使得编写程序变得更加便捷。源文件(.java 文件)是这些类库的原始代码,允许开发者深入理解类库的工作原理...

    JAVA类库学习手册

    这是一个专门讲述JAVA类库的手册,内容全面,使用方便,能帮助JAVA初学者很快掌握JAVA的类的使用。

    java类库 java包

    Java类库是一组预先编写好的Java类和接口的集合,这些类和接口提供了各种各样的功能,例如输入/输出操作、网络通信、数据处理等。Java类库是Java平台标准版(Java SE)的一部分,其中包括核心类库如`java.lang`、`...

Global site tag (gtag.js) - Google Analytics