このガイドでは、Blockchain as a Service (BaaS) プラットフォームに接続し、アカウントの作成、スマートコントラクトのデプロイ、クレジットの発行、アカウント間のクレジット転送、アカウント残高のクエリを実行するサンプル Java アプリケーションを実行する手順を説明します。
このサンプルアプリケーションは、クレジットシステムをシミュレートします。BaaS Java SDK を使用して、以下の操作を実行します。
2 つのブロックチェーンアカウント (
testAccount1とtestAccount2) を作成しますEVM スマートコントラクトをデプロイします
testAccount2に 100 クレジットを発行しますtestAccount2からtestAccount1に 50 クレジットを転送しますtestAccount2の残高をクエリし、50 であることを確認します
このアプリケーションは、4 つの証明書ファイルを使用して SSL 経由で BaaS ノードに接続します。Maven と IntelliJ IDEA を使用して、ローカルでコンパイルおよび実行します。
前提条件
開始する前に、以下が準備できていることを確認してください。
BaaS プラットフォームにデプロイされた BaaS ノード
ノードの IP アドレスとポート番号 (ノードの詳細ページで確認できます)
IntelliJ IDEA がインストール済みであること
Maven がインストール済みであること
Java 開発キット (JDK) がインストール済みであること
ステップ 1: 環境の準備
SSL 証明書ファイルの取得
BaaS プラットフォームへの SSL 接続を確立するには、以下の 4 つの証明書ファイルを生成してダウンロードします。
| ファイル | 説明 | 取得方法 |
|---|---|---|
client.crt | クライアント証明書 | キー生成ツールを使用して証明書リクエストファイル (client.csr) を生成し、BaaS プラットフォームに送信します。承認後、.crt ファイルをダウンロードします。 |
client.key | クライアント秘密鍵 | キー生成ツールを使用してファイルを生成します。 |
trustCa | CA 証明書を含む TrustStore | BaaS プラットフォームからダウンロードします。パスワードは mychain です。 |
user.key | アカウント秘密鍵 | キー生成ツールを使用してファイルを生成します。 |
ノードの IP アドレスとポート番号の取得
BaaS プラットフォームで、ノードの詳細ページを開き、ノードの IP アドレスとポート番号をメモします。アプリケーションはこれらを使用してブロックチェーンに接続します。
ステップ 2: プロジェクトのセットアップ
IntelliJ IDEA で、Maven ベースのデモプロジェクトを作成します。プロジェクトが作成されると、ディレクトリ構造は次のようになります。

javaディレクトリに、com.example.demoという名前のパッケージを作成します。DemoSample.javaの内容をこのパッケージにコピーし、4 つの証明書ファイル (client.crt、client.key、trustCa、user.key) をresourcesディレクトリに配置します。DemoSample.java をダウンロードしてください。デモプロジェクトには、お客様の Solidity コントラクトのソースコードからコンパイルされた EVM バイトコードが必要です。Solidity コントラクトの作成方法の詳細については、Solidity コントラクト開発をご参照ください。コンパイルツールについては、Solidity コントラクトコンパイルツールをご参照ください。

BaaS SDK とロギングの依存関係を
pom.xmlに追加します。常に最新の SDK バージョンを使用してください。<dependencies> <dependency> <groupId>com.alipay.mychainx</groupId> <artifactId>mychainx-sdk</artifactId> <!-- 最新の SDK バージョンを使用 --> <version>0.10.2.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.8.0-alpha0</version> </dependency> </dependencies> <build> <extensions> <extension> <groupId>kr.motd.maven</groupId> <artifactId>os-maven-plugin</artifactId> <version>1.6.1</version> </extension> </extensions> </build>log4j.propertiesをresourcesディレクトリに、以下の内容で追加します。# ルートロガーの設定 log4j.rootLogger=INFO, R # コンソール出力 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n # ファイル出力 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=./sdk.log log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n # 詳細な SDK 内部ログを無効化 log4j.logger.MychainClient=OFFlog4j の代わりに logback を使用する場合は、logback の構成に以下を追加します。
<logger name="MychainClient" level="OFF"/>
ステップ 3: プロジェクトのコンパイル
プロジェクトのルートディレクトリで、以下を実行します。
mvn clean compileステップ 4: アプリケーションの実行
プロジェクトのエントリポイントである DemoSample.java を実行します。ログはプロジェクトのルートディレクトリにある ./sdk.log に書き込まれます。
接続が成功したことを確認するには、sdk.log で "Hand shake success" というメッセージを確認します。
すべての操作が正常に完了すると、コンソール出力は次のようになります。
create testAccount1 success.
create testAccount2 success.
deploy contract success.
issue success.
transfer success.
check account balance success.トラブルシューティング
トランザクションの失敗
errorCode フィールドを MychainBaseResult 内で確認して、失敗の原因を特定してください。
トランザクションの失敗については、トランザクションレシートを使用して詳細を取得します。たとえば、コントラクトをデプロイした後、次のようになります。
MychainBaseResult<ReplyTransactionReceipt> result = sdk.getContractService()
.deployContract(
DeployContractRequest.build(adminAccount.getIdentity(),
Utils.getIdentityByName(testContractId, env), contractCode, VMTypeEnum.EVM,
contractParameters, BigInteger.ZERO, params));
assertTrue(result.isSuccess());
assertEquals(0, result.getData().getTransactionReceipt().getResult());result.getData().getTransactionReceipt().getResult() == 0— トランザクションは正常に実行されました。その他の値については、MychainErrorCodeEnumでエラーを検索してください。result.isSuccess()— トランザクションが送信されたかどうかを示します。falseの場合は、result.getErrorCode()を呼び出してエラーコードを取得します。
実行フローの例
以下に、DemoSample.java での完全な実行シーケンスを示します。
環境の初期化
// ステップ 1: ロガーの初期化 initLogger(); // ステップ 2: BaaS 環境の初期化 env = initMychainEnv();トランザクションの作成
// ステップ 4: アカウントオブジェクトの初期化 initAccount(); // ステップ 5: トランザクション署名用の秘密鍵リストの初期化 initPrivateKeyList(); // ステップ 6: testAccount1 と testAccount2 をオンチェーンで作成 createAccount();スマートコントラクトのデプロイ
// ステップ 7: testAccount1 を使用して EVM コントラクトをデプロイ deployContract();クレジットの発行
// ステップ 8: testAccount2 に 100 クレジットを発行 issue();アカウント転送の実行
// ステップ 9: testAccount2 から testAccount1 に 50 クレジットを転送 transfer();残高のクエリと検証
// ステップ 10: testAccount2 の残高をクエリ (期待値: 50) BigInteger balance = query(test2PrivateKeyArrayList, testAccount2); // ステップ 11: 残高が 50 であることをアサート expect(balance, BigInteger.valueOf(50));SDK 接続の切断
// ステップ 12: SDK 接続のシャットダウン sdk.shutDown();
次のステップ
Solidity コントラクトの作成とコンパイル方法については、Solidity コントラクト開発をご参照ください。
利用可能な操作については、SDK API リファレンスをご参照ください。
BaaS プラットフォームでトランザクションの詳細を表示します。