JAvaクラスライブラリweb 3 j開発以太坊インテリジェント契約快速入門

9284 ワード

web 3 jの概要
web 3 jは、軽量レベル、高度なモジュール化、応答性、タイプの安全なJavaおよびAndroidクラスライブラリであり、イーサ坊スマート契約の処理、およびイーサ坊ネットワーク上のクライアント(ノード)との統合に使用される豊富なAPIを提供します.
Javaアプリケーションプラットフォームの統合コードを記述することなく、太坊ブロックチェーンの開発を行うことができます.
クイックスタート
迅速に起動するには、Web 3 j demoのサンプルプロジェクトがあります.Web 3 jによってイーサー坊を開発した多くのコアフィーチャーを示しています.
  • イーサネットネットワークに接続するノード
  • イーサー坊財布ファイル
  • をロード
  • は、1つのアドレスから別のアドレス
  • にイーサドルを送信する.
  • インテリジェント契約
  • をネットワークに導入
  • 導入されたインテリジェント契約から値
  • を読み出す
  • は、導入されたスマート契約の値
  • を更新します.
  • スマート契約によって記録されたイベントを表示する
  • web 3 j入門
    まず、最新バージョンのweb 3 jをプロジェクトにインストールします.
    Maven
    Java 8:
    
      org.web3j
      core
      3.4.0
    

    Android:
    
      org.web3j
      core
      3.3.1-android
    

    Gradle
    Java 8:
    compile ('org.web3j:core:3.4.0')

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

    クライアントの起動
    イーサー坊クライアントを起動する必要があります.もちろん、起動したら再起動する必要はありません.
    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"));

    infuraをさらに知りたい場合は、Using Infura with web 3 jを参照してください.
    ネット上でどのようにエーテル貨幣の関連ドキュメントを獲得するかは、testnet section of the docsを見ることができます.
    Web 3 jインスタンスを必要としない場合、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の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/
    ...

    IPC
    Web 3 jはまた、ファイルソケットによるプロセス間通信(IPC)の高速実行をサポートし、クライアントが同じホスト上でWeb 3 jを同時に実行することをサポートする.サービスを作成する際には、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通信はweb 3 j-androidでは使用できません.
    Javaパッケージによるイーサ坊インテリジェント契約
    Web 3 jは、スマート契約コードを自動的にパッケージ化し、JVMから離れずにイーサ坊スマート契約の導入とインタラクションを行うことができます.
    コードをパッケージ化するには、まずスマート契約をコンパイルする必要があります.
    $ solc .sol --bin --abi --optimize -o /

    Web 3 jのコマンドラインツールでコードをパッケージ化します.
    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
    Filters
    web 3 jの応答関数は、観察者がイベントを介してメッセージ購読者に通知することを容易にし、ブロックチェーンに記録することができる.新しいブロックをすべて受信し、ブロックチェーンに追加します.
    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ではfiltersはサポートされていません.
    フィルタとイベントの詳細については、Filters and EventsとWeb 3 jRxのインタフェースを参照してください.
    取引
    Web 3 jは、イーサ坊財布ファイル(推奨)とトランザクションを送信するためのイーサ坊クライアント管理コマンドをサポートします.
    イーサ財布ファイルを使用して、他の人にイーサコインを送信します.
    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();
    // ...

    Web 3 jのTransferを使用してエーテル取引を行うのはずっと簡単です.
    イーサー坊クライアントの管理コマンドを使用します(財布の鍵がクライアントに格納されている場合):
    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’s PersonalまたはTrace機能、またはGeth’s PersonalクライアントAPIsを使用する場合は、org.web3j:parityおよびorg.web3j:gethモジュールを使用します.
    コマンドラインツール
    web 3 jのjarパッケージは、各バージョンにコマンドラインツールを提供します.コマンドラインツールを使用すると、いくつかのコマンドでweb 3 jの機能を直接使用できます.
  • ウォレット作成
  • 財布パスワード管理
  • 資金は財布から別の
  • に移転した.
  • solidityが作成したインテリジェント契約機能パッケージ
  • コマンドラインに関する詳細については、ドキュメントを参照してください.
    その他の詳細
    java8 bulid:
  • Web 3 jは、すべての応答タイプに対する安全なアクセスを提供する.オプションまたはnull応答java 8がサポートされています.
  • 非同期要求パッケージはjava 8のCompletableFuturesにあります.Web 3 jは、すべての非同期要求を囲むパッケージングツールを提供し、実行中に廃棄するだけでなく、異常をキャプチャできることを保証する.完全検査ではサポートされていない異常が多いため、これらの異常は通常、検出されていない異常と判断され、検出プロセスに問題が発生します.詳細については、Async.run()とその関連testを参照してください.

  • Java 8のAndroidバージョンでは:
  • パケット数はBigIntegersとして返されます.単純な結果については、 Response.getResult()によって文字列タイプの数の結果を取得することができる.
  • はまた、HttpServiceクラスおよびIpcServiceクラスに存在するincludeRawResponseパラメータによって、生のJSONパケットを応答に配置することもできる.

  • Web 3 jsは太坊インテリジェント契約を開発し、迅速に入門します.
    エーテル坊の開発に興味がある場合は、いくつかのチュートリアルをインストールします.
    1.ブロックチェーン初心者に適したイーサー坊DApp開発:イーサー坊dapp入門実戦2.ブロックチェーン、星間ファイルシステム(IPFS)、Node.jsとMongoDBでイーサー坊DApp電子商取引プラットフォームを構築:イーサー坊開発電子商取引プラットフォーム3.web 3 jチュートリアル、javaとAndroid Appでイーサー坊ブロックチェーンを開発するチュートリアル、web 3 j開発詳細解.