日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Java SDK 快速開始

更新時(shí)間:

本文通過示例闡述如何 運(yùn)行應(yīng)用并展示 示例執(zhí)行流程

運(yùn)行應(yīng)用

應(yīng)用運(yùn)行的過程主要分為 4 步:

  1. 準(zhǔn)備環(huán)境

  2. 編寫應(yīng)用

  3. 編譯應(yīng)用

  4. 執(zhí)行應(yīng)用

準(zhǔn)備環(huán)境

  • 準(zhǔn)備 SSL 連接文件。

    要與 BaaS 平臺(tái)建立 SSL 連接,您需準(zhǔn)備四個(gè)證書文件:CA 機(jī)構(gòu)的根證書(trustCa)、客戶端的證書文件(client.crt)、客戶端的私鑰文件(client.key)以及用戶的賬戶私鑰文件(user.key)。這四個(gè)文件的詳細(xì)說明如下。

    文件

    說明

    來源

    client.crt

    客戶端的證書文件

    使用 BaaS 提供的 密鑰生成工具 生成證書請(qǐng)求文件 client.csr,提交請(qǐng)求文件到 BaaS 平臺(tái)申請(qǐng)證書,申請(qǐng)成功后可下載此 crt 文件。

    client.key

    客戶端的私鑰文件

    通過 BaaS 提供的 密鑰生成工具 生成。

    trustCa

    存儲(chǔ) CA 證書的 trustStore

    通過 BaaS 平臺(tái)下載,trustCa 文件密碼為 mychain。

    user.key

    賬戶私鑰文件

    通過 BaaS 提供的 密鑰生成工具 手動(dòng)生成,或自動(dòng)生成。

  • 獲取鏈節(jié)點(diǎn) IP 和端口號(hào)。

    要與合約鏈交互,您需要獲取鏈節(jié)點(diǎn)的 IP 地址和端口號(hào)。在 BaaS 平臺(tái),通過查看目標(biāo)合約鏈詳情,在區(qū)塊瀏覽器中查看節(jié)點(diǎn)詳情,可獲取鏈節(jié)點(diǎn)的 IP 地址和端口號(hào)。

編寫應(yīng)用

  1. 使用 IntelliJ IDEA 創(chuàng)建一個(gè)基于 Maven 構(gòu)建的空項(xiàng)目(Demo)。創(chuàng)建完成后,項(xiàng)目目錄結(jié)構(gòu)應(yīng)如下:

    1545295559042-521770ec-412b-49ed-935e-a6b644bb0949.png

  2. 在上圖中的 java 目錄創(chuàng)建自定義包名,例如:com.example.demo,并將 DemoSample.java(點(diǎn)擊下載 DemoSample.java 文件)中的內(nèi)容完整拷貝至創(chuàng)建的包中,并將 SDK 必須使用的 client.crtclient.keytrustCauser.key 文件放入到 resources 目錄中,如下圖所示:

    1

    說明

    Demo 項(xiàng)目中需要使用合約源代碼編譯后的字節(jié)碼。有關(guān)合約源代碼,參見 Solidity 合約開發(fā);Solidity 編譯工具參見 Solidity 合約編譯工具。

  3. pom.xml 中添加依賴。將 SDK 與要演示使用的 slf4j-log4j12 引入到 pom.xml 中,并在 resources 中添加 log4j 的配置文件,如下圖所示。

    重要

    在本步驟中,SDK 依賴的版本號(hào)請(qǐng)使用最新版本。

    pom

    帶有 slf4j-log4j12 的完整 pom 依賴可參考:

    <dependencies>
         <dependency>
             <groupId>com.alipay.mychainx</groupId>
             <artifactId>mychainx-sdk</artifactId>
             <!--請(qǐng)使用最新 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 文件內(nèi)容如下:

     log4j.rootLogger=INFO, R
    
     # 日志輸出位置為控制臺(tái)
     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
    
     # mychain-sdk日志開關(guān)配置
     log4j.logger.MychainClient=OFF

    如果您使用的是logback的日志框架,則日志開關(guān)的配置方法如下:

    <logger name="MychainClient" level="OFF"/>

編譯應(yīng)用

在項(xiàng)目根路徑運(yùn)行 mvn clean compile,執(zhí)行項(xiàng)目編譯。

執(zhí)行應(yīng)用

DemoSample.java 中,運(yùn)行該項(xiàng)目。生成的日志文件位于 項(xiàng)目根路徑 ./sdk.log,若從日志中搜索到“Hand shake success”,則代表與區(qū)塊鏈平臺(tái)連接成功。

預(yù)期輸出如下:

create testAccount1 success.
create testAccount2 success.
deploy contract success.
issue success.
transfer success.
check account balance success.

錯(cuò)誤信息

當(dāng)收到交易的結(jié)果以后,若交易執(zhí)行不正確,可以跟進(jìn)錯(cuò)誤碼去定位錯(cuò)誤原因。

  • ErrorCodeMychainBaseResulterrorCode 字段用來表示交易發(fā)送或者執(zhí)行錯(cuò)誤的原因。

當(dāng)發(fā)送的請(qǐng)求是交易相關(guān)的內(nèi)容時(shí),可根據(jù)交易的返回值字段中獲得關(guān)于交易執(zhí)行錯(cuò)誤更詳細(xì)的錯(cuò)誤碼。以部署合約為例:

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,代表交易執(zhí)行成功,反之代表交易執(zhí)行失敗,可以通過 result 的值從MychainErrorCodeEnum中 查找錯(cuò)誤原因。

  • result.isSuccess() 可以作為交易是否發(fā)送成功的標(biāo)志。若交易發(fā)送失敗,可通過 result.getErrorCode() 獲取錯(cuò)誤碼。

示例執(zhí)行流程

  1. 初始化環(huán)境。

     //step 1: init logger.
     initLogger();
    
     //step 2:init mychain env.
     env = initMychainEnv();
  2. 創(chuàng)建賬戶交易。

     //step 4: init account that will be created.
     initAccount();
    
     //step 5: init private key list which will be used during transaction.
     initPrivateKeyList();
    
     //step 6: execute create two accounts.
     createAccount();
  3. 部署智能合約。

     //step 7 : deploy a contract using testAccount1.
     deployContract();
  4. 申購(gòu)積分。

     //step 8:issue 100 credits to testAccount2.
     issue();
  5. 進(jìn)行賬戶間轉(zhuǎn)賬。

     //step 9 : transfer 50 credits from testAccount2 to testAccount1
     transfer();
  6. 查詢賬戶余額。

     //step 10 : query testAccount2 whose balance should be 50.
     BigInteger balance = query(test2PrivateKeyArrayList,testAccount2);
    
     //step 11 : compare to expect balance.
     expect(balance,BigInteger.valueOf(50));
  7. 關(guān)閉 SDK 連接。

     //step 12 : sdk shut down
     sdk.shutDown();