首页 > 编程知识 正文

eclipse下载web插件,以太坊有哪三种网络

时间:2023-05-04 16:25:26 阅读:159905 作者:3597

1 Java Web3J 概述

Web3j是一种轻量级、响应型和安全类型的Java库,与Ethereum网络上的客户端(节点)集成。 这样就可以使用Ethereum区块链,而不需要为平台编写自己的统一代码的额外开销。

1.1 Web3J 提供的功能

用HTTP和IPC实现Ethereum的JSON-RPC客户端API

Ethereum钱包支持

使用过滤器函数编程功能的API

自动生成用于从本地Java代码创建、部署、处理和调用智能合约的Java智能合约包装器

支持Parity的个人和Geth个人客户端API

因为支持Infura,所以不需要自己运行Ethereum客户端

在集成测试中,我们展示了上述几个场景

命令行工具

1.2 Web3J的依赖的库(中间件)

RxJava函数式编程的API中间件

Apachehttp客户端中间件

失眠花瓣Core用于快速JSON序列化/反序列化中间件

Bouncy Castle加密解密和Java Scrypt加密中间件

一种javaPoet中间件,用于生成智能约定java包装类的java源代码(.Java )

JVA的UNIX域套接字的*nix系统进程间通信API中间件

1.3 启动Ethereum客户端

$ geth --fast --cache = 512 networkid 2 - -rpcapi “personal,db,eth,net,web3” --rpc --dev

1.4 Web3J的进程间通信IPC

Web3j还支持通过文件套接字加速与Web3j在同一主机上运行的客户端的进程间通信(IPC )。 创建服务时,连接只需使用相关的IpcService实现,而不是HttpService。

//OS X/Linux/Unix;

web3jweb3=web 3j.build (newunixipcservice (/path/to/socket file ) );

1.5 Web3J的过滤器

Web3j的函数式编程的特性使设置观察者变得容易,可以通知订阅者以了解在区块链中设置的事件。

1.5.1 区块过滤器

当所有新块添加到块链中时,将接收这些块:

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

查看最近的当前块,如果想更容易创建新的后续块,请:

subscription subscription=catchuptolatestandsubscribetonewblocksobservable ()

startBlockNumber,fullTxObjects )

. subscribe(block-{

);

1.5.2 交易过滤器

所有新交易添加到区块链时,都收到了这些交易:

subscription subscription=web 3j.transaction observable ().subscribe ) tx-{

);

1.5.3 待处理的交易过滤器

当所有要处理的事务处理提交到网络时,即在分组为块之前接收这些事务处理。

subscription subscription=web3j.pendingtransactionobservable ().subscribe ) tx-{

);

1.5.4 使用Web3J交易

Web3j支持使用Ethereum客户端管理命令来发送ether eum wallet文件(推荐)和事务处理。 要使用Ethereum钱包文件将Ether发送到另一方:

Web3j web3 = Web3j,build(new HttpService());//defaults to http://localhost:8545/Credentials credentials = Walle

tUtils.loadCredentials("password","/path/to/walletfile");
TransactionReceipt transactionReceipt = Transfer.sendFunds(web3,credentials,"0×04",BigDecimal.valueOf(1.0),Convert.Unit.ETHER);
Web3j web3 = Web3j,build(new HttpService());//defaults to http://localhost:8545/Credentials credentials = WalletUtils.loadCredentials("password","/path/to/walletfile");

如果想自定义交易

  1. 获取可用的nonce

EthGetTransactionCount ethGetTransactionCount = web3j.ethGetTransactionCount(address,DefaultBlockParameterName.LATEST).sendAsync().get();BigInteger nonce = ethGet TransactionCount.getTransactionCount();

   2. 创建交易

RawTransaction rawTransaction = RawTransaction.createEtherTransaction(nonce,<gas price>,<gas limit>,<toAddress>,<value>);

 3. 签名并发送交易

byte[] signedMessage = TransactionEncoder.signMessage(rawTransaction,credentials);
String hexValue = Numeric.toHexString(signedMessage);
EthSendTransaction ethSendTransaction = web3j.ethSendRawTransaction(hexValue).sendAsync().get();

    4. 使用web3j的智能合约包装器要简单得多 

Parity parity = Parity.build(new HttpService());//dedaults to http://localhost:8545/PersonalUnlockAccount personalUnlockAccount = parity.personalUnlockAccount["0×000...","a password"].sendAsync().get();
if (personalUnlockAccount.accountUnlocked()){
parity.personalSignAndSendTransaction()
}

1.6 使用Web3J智能合约

使用Java智能合约包装器处理智能合约 web3j可以自动生成智能合约包装器代码,以便在不离开Java的情况下部署和与智能合约进行交互,生成包装代码

1.6.1 编译智能合约

 $ solc .sol --要减肥的手套 --abi --optimize -o 

1.6.2 然后使用Web3J的命令行工具生成包装器代码

1.6.3 创建并部署智能合约

Web3j  web3 = web3j .build(new HttpService());
YourSmartContract contract = YourSmartContract.deploy(<web3j>,<credential>,GAS_PRICE,GAS_LIMIT,<initialEtherValue>,<paramL>,...,<paramN>).get();//构造函数参数

1.6.4 使用已存在的智能合约

YourSmartContract contract = YourSmartContract.load("0×<adress>",<web3j>,<credentials>,GAS_PRICE,GAS_LIMIT)

 

原文链接:https://mp.weixin.qq.com/s/NOuI7ZtsD6VOupp67AEZIA

 

关于我:蓝莲花(wndmd),微信/QQ:86606813,公众号:xm123798。HPB芯链(http://www.hpb.io)创始人。致力于推动区块链应用落地。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。