java类库的使用_java类库EthereumJ使用区块链

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

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

以太坊 Facade

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

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

创建Facade对象非常简单:

1Ethereum ethereum = EthereumFactory.createEthereum();

连接到以太坊网络

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

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

1.连接到以太坊网络

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

1

2

3

4

5String ip = "http://localhost";

int port = 8345;

String nodeId = "a4de274d3a159e10c2c9a68c326511236381b84c9ec...";

ethereum.connect(ip, port, nodeId);

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16public 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()方法中所做的那样:

1

2EthBean eBean = new EthBean();

Executors.newSingleThreadExecutor().submit(eBean::start);

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32public 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本身就是一个冗长的主题:

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

2.访问区块链对象

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

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

1ethereum.getBlockchain();

3.返回以太坊帐户地址

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

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

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

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

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

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

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

1

2org.ethereum.core.Account account = new Account();

account.init(key);

其他功能

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

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

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

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

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

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

如果希望快速进行java以太坊开发,那请看我们精心打造的教程:

java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。

其他以太坊教程如下:

以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。

以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。

python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。

php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。

C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值