linux web3j,【思前享后web3j】web3j开始

小猿“思前享后”为大家分享优质内容!————Share猿

Hi大家好:

我是Share猿,Share是英文(SHARE),猿是猿猴的猿,在微信公众号、微博、简书、掘金、今日头条、CSDN都可以通过搜索“Share猿”找到我,我等你哦!小猿 “思前享后”为大家分享优质的内容!今天小猿为大家分享:开始

722995ca61fe

web3j.png

大家可以用最新的web3j构建项目。

2.1Maven(java8)

org.web3j

core

3.3.1

2.2.Gradle(java8)

java

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

Android

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

2.3.开始一个客户端

如果你还没有运行一个Ethereum客户端,比如Geth可以如下运行:

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

Parity(钱包)

$ parity --chain testnet

或者用Infura,他提供了免费的客户端

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

想进一步学习web3j和Infura,可以到运用他们的章节去查看。

2.4.发送请求

发送一个同步请求

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

Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().send();

String clientVersion = web3ClientVersion.getWeb3ClientVersion();

发送一个异步请求给Android

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

Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().sendAsync().get();

String clientVersion = web3ClientVersion.getWeb3ClientVersion();

用于RxJava Observable

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/

2.5.IPC

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.

2.6.基于java包装的智能合约的运用

在JVM中web3j可以自动生成智能合约,部署运行智能合约。

常用生成智能合约的相关代码:

$ 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

用java代码实现智能合约

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的智能合约编写方法。

2.7.过滤器

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 -> {

...

});

服务即是不用也要一直可以开着

subscription.unsubscribe();

注意:在Infura中不支持过滤器。

2.8.交易

web3j可以为以太坊钱包和以太坊客户端交易提供服务。

发送以太坊给另一个账号通过你的以太坊钱包秘钥

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

Credentials credentials = WalletUtils.loadCredentials("password", "/path/to/walletfile");

TransactionReceipt transactionReceipt = Transfer.sendFunds(

web3, credentials, "0x

|",

BigDecimal.valueOf(1.0), Convert.Unit.ETHER)

.send();

创建自定义的交易

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

Credentials credentials = WalletUtils.loadCredentials("password", "/path/to/walletfile");

// get the next available nonce

EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(

address, DefaultBlockParameterName.LATEST).send();

BigInteger nonce = ethGetTransactionCount.getTransactionCount();

// create our transaction

RawTransaction rawTransaction = RawTransaction.createEtherTransaction(

nonce, , , , );

// sign & send our transaction

byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction, credentials);

String hexValue = Numeric.toHexString(signedMessage);

EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).send();

// ...

如此,基于web3j进行以太坊的交易和转移很简单!

用管理员身份运行以太坊命令行(确保你有你钱包的秘钥)

Admin web3j = Admin.build(new HttpService()); // defaults to http://localhost:8545/

PersonalUnlockAccount personalUnlockAccount = web3j.personalUnlockAccount("0x000...", "a password").sendAsync().get();

if (personalUnlockAccount.accountUnlocked()) {

// send a transaction

}

如果你想运用Parity的命令行、Trace、Geth命令行的API,你可以用 org.web3j:parity 和org.web3j:geth modules respectively.

2.9.命令行工具

在每个web3j的jar中都有命令行工具,命令行工具允许你通过一些简单的命令去操作web3j相关功能。

钱包的创建

钱包密码管理

交易

一般的Solidity智能合约

2.10.更多详情

在java 8中构建:

web3j提供安全的响应类型,它的类型在java 8有都有封装。

异步请求被封装到了java8的CompletableFutures。web3j提供了一个异步的封装类,所有的异常都能被及时的捕获到,因为CompletableFutures对一些异常缺乏支持,经常会造成捕捉不到异常。

java8和Android的构建:

高负载的情况下返回BigInteger,对于简单的返回可以通过Response.getResual()获得String。

还可以通过包容的响应参数包括原始JSON有效负载,在HttpService和IpcService类中出现。

→→→目录阅读(小猿英语没过四级,翻译的过程中难免会有好多翻译不到位的地方,如果有错请在评论区及时指正!谢谢!!)

扫描以下公众号关注小猿↓↓↓↓↓↓↓↓

722995ca61fe

image

更多资讯请在简书、微博、今日头条、掘金、CSDN都可以通过搜索“Share猿”找到小猿哦!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值