主页 > 怎么在华为下imtoken > 如何通过java打包以太坊智能合约

如何通过java打包以太坊智能合约

怎么在华为下imtoken 2023-03-03 05:21:58

本文主要讲解“如何通过java打包以太坊智能合约”。 打包以太坊智能合约”!

web3j简介

web3j 是一个轻量级、高度模块化、响应式、类型安全的 Java 和 Android 类库如何查看以太坊的智能合约,它提供了丰富的 API,用于处理以太坊智能合约并与以太坊网络上的客户端(节点)集成。

它可用于开发以太坊区块链,而无需为您的应用程序平台编写集成代码。

dmeo 示例可以快速启动

为了快速入门,有一个 Web3j 演示项目可用,它演示了使用 Web3j 开发以太坊的许多核心功能,包括:

web3j 开发入门

首先将最新版本的 web3j 安装到项目中。

行家

Java 8:


  org.web3j
  core
  3.4.0

安卓:


  org.web3j
  core
  3.3.1-android

如何查看以太坊的智能合约_以太坊智能合约编写_怎么查以太坊公链查智能合约

摇篮

Java 8:

compile ('org.web3j:core:3.4.0')

安卓:

compile ('org.web3j:core:3.3.1-android')

启动客户端

您需要启动一个以太坊客户端。 当然,如果你已经启动了,就不需要重新启动了。

如果是geth,就这样启动:

$ geth --rpcapi personal,db,eth,net,web3 --rpc --rinkeby

如果奇偶校验开始:

$ parity --chain testnet

如果使用 Infura 客户端提供的免费云服务,可以这样启动:

Web3j web3 = Web3j.build(new HttpService("https://morden.infura.io/your-token"));

如果您想了解有关 infura 的更多信息,请参阅将 Infura 与 web3j 结合使用。

网上关于如何获取以太坊的相关文档如何查看以太坊的智能合约,可以看这个:文档的testnet部分。

当不需要Web3j实例时,需要调用shutdown方法释放其占用的资源。

web3.shutdown()

发送请求

如何查看以太坊的智能合约_怎么查以太坊公链查智能合约_以太坊智能合约编写

发送同步请求

Web3j web3 = Web3j.build(new HttpService());  // defaults to http://localhost:8545/
Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().send();
String clientVersion = web3ClientVersion.getWeb3ClientVersion();

** 使用 CompletableFuture (Future on Android) 发送异步请求**

Web3j web3 = Web3j.build(new HttpService());  // defaults to http://localhost:8545/
Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().sendAsync().get();
String clientVersion = web3ClientVersion.getWeb3ClientVersion();

* 可使用 RxJava 观察

Web3j web3 = Web3j.build(new HttpService());  // defaults to http://localhost:8545/
web3.web3ClientVersion().observable().subscribe(x -> {
    String clientVersion = x.getWeb3ClientVersion();
    ...
});

注意你如何使用 Android

Web3j web3 = Web3jFactory.build(new HttpService());  // defaults to http://localhost:8545/
...

工控机

Web3j 还支持通过文件套接字快速运行进程间通信 (IPC),允许客户端在同一主机上同时运行 Web3j。 创建服务时,可以使用相关的IPCService代替HTTPService来实现。

怎么查以太坊公链查智能合约_如何查看以太坊的智能合约_以太坊智能合约编写

// OS X/Linux/Unix:
Web3j web3 = Web3j.build(new UnixIpcService("/path/to/socketfile"));
...
// Windows
Web3j web3 = Web3j.build(new WindowsIpcService("/path/to/namedpipefile"));
...

注意:IPC 通信在 web3j-android 中不可用。

通过java打包以太坊智能合约

Web3j可以在不脱离JVM的情况下自动打包智能合约代码,用于以太坊智能合约部署和交互。

打包代码,需要先编译智能合约:

$ solc .sol --bin --abi --optimize -o /

然后用web3j的命令行工具打包代码:

web3j solidity generate /path/to/.bin /path/to/.abi -o /path/to/src/main/java -p com.your.organisation.name

接下来,您可以创建和部署智能合约:

Web3j web3 = Web3j.build(new HttpService());  // defaults to http://localhost:8545/
Credentials credentials = WalletUtils.loadCredentials("password", "/path/to/walletfile");
YourSmartContract contract = YourSmartContract.deploy(

以太坊智能合约编写_如何查看以太坊的智能合约_怎么查以太坊公链查智能合约

        ,         GAS_PRICE, GAS_LIMIT,         , ..., ).send();  // constructor params

或者使用现有的智能合约:

YourSmartContract contract = YourSmartContract.load(
        "0x
|", , GAS_PRICE, GAS_LIMIT);

然后你可以与智能合约进行交互:

TransactionReceipt transactionReceipt = contract.someMethod(
             ,
             ...).send();

调用智能合约:

Type result = contract.someMethod(, ...).send();

有关包装的更多信息可以在这里找到:Solidity smart contract wrappers

过滤器

web3j的响应式功能可以让观察者通过事件通知消息订阅者变得非常简单,并且可以记录在区块链中。 接收所有新块并将它们添加到区块链:

Subscription subscription = web3j.blockObservable(false).subscribe(block -> {
    ...
});

接收所有新交易并将它们添加到区块链:

如何查看以太坊的智能合约_以太坊智能合约编写_怎么查以太坊公链查智能合约

Subscription subscription = web3j.transactionObservable().subscribe(tx -> {
    ...
});

接收所有已提交给网络进行处理的交易。 (它们在一个块之前统一分配。)

Subscription subscription = web3j.pendingTransactionObservable().subscribe(tx -> {
    ...
});

或者您将所有块重置为最新位置,然后当有新块时您会收到通知。

Subscription subscription = catchUpToLatestAndSubscribeToNewBlocksObservable(
        )
        .subscribe(block -> {
            ...
});

还支持主题过滤:

EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST,
        DefaultBlockParameterName.LATEST, )
             .addSingleTopic(...)|.addOptionalTopics(..., ...)|...;
web3j.ethLogObservable(filter).subscribe(log -> {
    ...
});