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

Java SDK 快速開始

更新時(shí)間:

本文通過示例闡述如何 運(yùn)行應(yīng)用,展示 示例執(zhí)行流程,并指導(dǎo)如何 指定密碼學(xué)套件

運(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)生成下載。

  • 準(zhǔn)備 TEE 硬件隱私合約鏈文件。

    如果使用 TEE 硬件隱私合約鏈,還需要使用一個(gè) tee_rsa_public_key.pem文件,此文件可從已存在的 TEE 硬件隱私合約鏈申請(qǐng),如果使用的是標(biāo)準(zhǔn)的合約鏈,則不需要使用此文件。

    文件名稱

    文件說明

    文件來源

    tee_rsa_public_key.pem 

    TEE 硬件隱私合約鏈,節(jié)點(diǎn)對(duì)外公開的 RSA 公鑰文件 

    通過 BaaS 平臺(tái)下載。 

  • 看合約鏈節(jié)點(diǎn)信息。

    要與合約鏈交互,您需要獲取鏈節(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.keytrustCa及 user.key文件放入到 resources目錄中,如下圖所示:

    1

    說明

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

  3. 在 pom.xml中添加依賴。將 SDK 與項(xiàng)目使用的依賴引入到 pom.xml,并在 resources中添加 log4j的配置文件。

    重要

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

    完整 pom 依賴可參考:

    <dependencies>
         <dependency>
             <groupId>com.alipay.mychainx</groupId>
             <artifactId>mychainx-sdk</artifactId>
             <!--請(qǐng)使用最新 SDK 版本 -->
             <version>0.10.2.12</version>
         </dependency>
         <dependency>
             <groupId>org.bouncycastle</groupId>
             <artifactId>bcpkix-jdk15on</artifactId>
             <version>1.60</version>
         </dependency>
         <dependency>
             <groupId>io.netty</groupId>
             <artifactId>netty-all</artifactId>
             <version>4.1.29.Final</version>
         </dependency>
         <dependency>
             <groupId>io.netty</groupId>
             <artifactId>netty-tcnative-boringssl-static</artifactId>
             <version>2.0.17.Final</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
             <version>1.7.25</version>
         </dependency>
           <dependency>
               <groupId>commons-io</groupId>
               <artifactId>commons-io</artifactId>
               <version>2.6</version>
           </dependency>
           <dependency>
               <groupId>com.alibaba</groupId>
               <artifactId>fastjson</artifactId>
               <version>1.2.83</version>
           </dependency>
           <dependency>
               <groupId>com.google.guava</groupId>
               <artifactId>guava</artifactId>
               <version>20.0</version>
           </dependency>
           <dependency>
               <groupId>org.apache.commons</groupId>
               <artifactId>commons-collections4</artifactId>
               <version>4.2</version>
           </dependency>
           <dependency>
               <groupId>org.apache.commons</groupId>
               <artifactId>commons-lang3</artifactId>
               <version>3.5</version>
           </dependency>
    </dependencies>
    
     <build>
         <extensions>
             <extension>
                 <groupId>kr.motd.maven</groupId>
                 <artifactId>os-maven-plugin</artifactId>
                 <version>1.6.1</version>
             </extension>
         </extensions>
     </build>

    在某些情況下,可能會(huì)出現(xiàn)如下異常:

    2

    異常原因有可能是 Netty 加載失敗,可以嘗試修改 netty 依賴,如下所示:

    <dependency>
              <groupId>com.alipay.mychainx</groupId>
              <artifactId>mychainx-sdk</artifactId>
              <!--請(qǐng)使用最新 SDK 版本 -->
              <version>0.10.2.12</version>
              <exclusions>
                  <exclusion>
                      <groupId>io.netty</groupId>
                      <artifactId>netty-tcnative-openssl-static</artifactId>
                  </exclusion>
              </exclusions>
    </dependency>

    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.

示例執(zhí)行流程

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

     //step 1: init logger.
     initLogger();
    
     //step 2:init mychain env.
     env = initMychainEnv();
    
     //step 3: start sdk.
     MychainClient  sdk = new MychainClient();
     sdk.init(env);
  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. 申購積分。

     //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();

指定密碼學(xué)套件

合約鏈的鏈環(huán)境可能使用以下兩種密碼學(xué)套件中的一種:

  • classic:使用國際商用密碼算法,包括 SHA256 摘要、ECC 公鑰算法、AES 對(duì)稱加密等,標(biāo)準(zhǔn)合約鏈默認(rèn)為此套件配置;

  • china-sm:使用中國國家商用密碼算法,包括 SM3 摘要、SM2 公鑰算法、SM4 對(duì)稱加密等,國密算法合約鏈默認(rèn)為此套件配置。

如果不清楚 SDK 連接的目標(biāo)合約鏈?zhǔn)褂玫氖悄囊环N密碼套件,可咨詢?cè)撴湹墓芾韱T。構(gòu)建 ClientEnv時(shí),必須明確指定 SignerBase。示例如下:

Pkcs8KeyOperator pkcs8KeyOperator = new Pkcs8KeyOperator();
Keypair keyPair = pkcs8KeyOperator.load(privateKeyPath, keyPassword);
SignerBase signerBase = MyCrypto.getInstance().createSigner(keyPair);
說明

SDK 與合約平臺(tái)之間的 SSL 通信不受密碼學(xué)套件影響,由頒發(fā)證書的 PKI 機(jī)構(gòu)決定。