百里登风

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

天河链Java SDK

一、环境要求

 Java环境

支持JDK1.8至JDK14版本。

 

搭建一条天河链

部署节点当中,至少需要一个节点的通道的端口可访问。

 

二、配置说明

在idea引入maven依赖

<dependency>
    <groupId>org.tichain.java-sdk</groupId>
    <artifactId>tianhe-thbc-java-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

 

配置SDK证书

在应用的主目录下新建sdkConfig目录。在节点的“node/{ip}/sdk”目录下,将链证书(ca.crt)、sdk证书(sdk.crt)和sdk私钥(sdk.key)拷贝到sdkConfig目录下。

这句话怎么理解呢,就是到天河链厂家部署的环境中,找到SDK目录,把对应的证书文件放到idea工程项目下的resources/conf目录下

 同时在该目录下创建config.toml文件。

 

配置网络连接

在应用resources/conf目录下修改“config.toml”中的节点IP和端口,需要与相连接的节点相匹配。

 

账户配置

在应用resources/conf目录下修改“config.toml”进行账户配置,主要用于设置SDK向节点发出交易的账户信息,SDK初始化客户端时,默认读取[account]配置项加载信息。如果不进行账户配置,SDK将会随机生成账户向节点发交易。账户配置详情如下:

1.keyStoreDir:加载账户文件的路径,默认为account。

2.accountFileFormat:账户文件格式,默认为pem,目前支持pem和p12,加载p12格式的账户文件时需要口令。

3.accountAddress:加载的账户地址,默认为空。

4.password:加载p12类型账户的口令。

 account文件这个需要联系天河链的售后人员给,因为天河链目前没有开放给用户自己部署的,

 如果后期需要把代码打包到服务器上面,也需要把这两个account文件上传到服务器。

 

配置证书文件路径

在config.toml配置文件中加上,根据是在win环境下运行还是在linux环境下运行,来选择不同的格式,同时需要把证书文件放到该目录下

 

线程池配置

为了根据业务所在主机的负载,调整Java SDK的处理线程,SDK提供线程的配置。包括:

1、channelProcessorThreadSize处理网络回调的线程数目,默认值为主机的CPU数目。

2、receiptProcessorThreadSize:接收交易的线程数目,默认值为主机的CPU数目。

3、maxBlockingQueueSize:线程池队列等待被处理的最大任务数目,默认值为102400。

 

三、准备智能合约

可参考:https://www.cnblogs.com/braveym/p/18734771

 

四、将合约转成Java类

这一步就需要找天河链的售后帮转了,如果说你们公司采购的天河链把相应的环境部署到你们的服务器上,可以在自己的服务器上面转

只需要把自己编写的智能合约.sol文件发给他们,他们会生成一个java类返回给你

 代码分别如下:

复制代码
package com.thgy.tichain.tichainsdktaiji.contract;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.tianhe.thbc.sdk.abi.FunctionReturnDecoder;
import org.tianhe.thbc.sdk.abi.TypeReference;
import org.tianhe.thbc.sdk.abi.datatypes.Address;
import org.tianhe.thbc.sdk.abi.datatypes.Event;
import org.tianhe.thbc.sdk.abi.datatypes.Function;
import org.tianhe.thbc.sdk.abi.datatypes.Type;
import org.tianhe.thbc.sdk.abi.datatypes.Utf8String;
import org.tianhe.thbc.sdk.abi.datatypes.generated.Int256;
import org.tianhe.thbc.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.tianhe.thbc.sdk.abi.datatypes.generated.tuples.generated.Tuple4;
import org.tianhe.thbc.sdk.client.Client;
import org.tianhe.thbc.sdk.contract.Contract;
import org.tianhe.thbc.sdk.crypto.CryptoSuite;
import org.tianhe.thbc.sdk.crypto.keypair.CryptoKeyPair;
import org.tianhe.thbc.sdk.eventsub.EventCallback;
import org.tianhe.thbc.sdk.model.CryptoType;
import org.tianhe.thbc.sdk.model.TransactionReceipt;
import org.tianhe.thbc.sdk.model.callback.TransactionCallback;
import org.tianhe.thbc.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class GeneralContract4 extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b506110016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a6040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b8152600401620000e591906200024a565b602060405180830381600087803b1580156200010057600080fd5b505af115801562000115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013b919062000159565b506200031f565b600081519050620001538162000305565b92915050565b6000602082840312156200016c57600080fd5b60006200017c8482850162000142565b91505092915050565b6000620001928262000298565b6200019e8185620002a3565b9350620001b0818560208601620002be565b620001bb81620002f4565b840191505092915050565b6000620001d5601383620002a3565b91507f76657273696f6e2c7374617475732c64617461000000000000000000000000006000830152602082019050919050565b600062000217601183620002a3565b91507f747970655f7461626c656e616d655f69640000000000000000000000000000006000830152602082019050919050565b6000606082019050818103600083015262000266818462000185565b905081810360208301526200027b8162000208565b905081810360408301526200029081620001c6565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b60005b83811015620002de578082015181840152602081019050620002c1565b83811115620002ee576000848401525b50505050565b6000601f19601f8301169050919050565b6200031081620002b4565b81146200031c57600080fd5b50565b6125be806200032f6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806326b477fd1461006757806380599e4b1461009a578063859e28d6146100ca578063e33b7749146100fa578063fcd7e3c11461012a578063ff74927b1461015a575b600080fd5b610081600480360381019061007c9190611b3e565b61018a565b6040516100919493929190612141565b60405180910390f35b6100b460048036038101906100af9190611b3e565b6104d5565b6040516100c19190611fb3565b60405180910390f35b6100e460048036038101906100df9190611c2c565b610779565b6040516100f19190611fb3565b60405180910390f35b610114600480360381019061010f9190611c2c565b610bb2565b6040516101219190611fb3565b60405180910390f35b610144600480360381019061013f9190611b3e565b6110b8565b6040516101519190611f98565b60405180910390f35b610174600480360381019061016f9190611bc0565b61146a565b6040516101819190612081565b60405180910390f35b606080606080600061019b866110b8565b90506102676040518060400160405280601281526020017f747970655f7461626c656e616d655f69643a00000000000000000000000000008152508273ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b815260040161020d90612277565b60006040518083038186803b15801561022557600080fd5b505afa158015610239573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906102629190611b7f565b61146a565b6103316040518060400160405280600881526020017f76657273696f6e3a0000000000000000000000000000000000000000000000008152508373ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b81526004016102d7906122cc565b60006040518083038186803b1580156102ef57600080fd5b505afa158015610303573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061032c9190611b7f565b61146a565b6103fb6040518060400160405280600781526020017f7374617475733a000000000000000000000000000000000000000000000000008152508473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b81526004016103a190612321565b60006040518083038186803b1580156103b957600080fd5b505afa1580156103cd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906103f69190611b7f565b61146a565b6104c56040518060400160405280600581526020017f646174613a0000000000000000000000000000000000000000000000000000008152508573ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b815260040161046b90612222565b60006040518083038186803b15801561048357600080fd5b505afa158015610497573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104c09190611b7f565b61146a565b9450945094509450509193509193565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b81526004016105679190612081565b60206040518083038186803b15801561057f57600080fd5b505afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561060157600080fd5b505afa158015610615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1856040518263ffffffff1660e01b81526004016106749190612297565b60006040518083038186803b15801561068c57600080fd5b505afa1580156106a0573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166328bb211786846040518363ffffffff1660e01b81526004016106e19291906120a3565b602060405180830381600087803b1580156106fb57600080fd5b505af115801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611b15565b90507fe3b53f90b0bd9d75f48e547fa40b6fd60f7efd23e36176b16d5b31de6ba330c58186604051610766929190611fce565b60405180910390a1809350505050919050565b6000610784856115ca565b6107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906121a2565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b81526004016108549190612081565b60206040518083038186803b15801561086c57600080fd5b505afa158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a49190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ee57600080fd5b505afa158015610902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109269190611ac3565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516886040518263ffffffff1660e01b81526004016109619190612297565b600060405180830381600087803b15801561097b57600080fd5b505af115801561098f573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff1660e01b81526004016109cc91906122ec565b600060405180830381600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba74866040518263ffffffff1660e01b8152600401610a379190612341565b600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516856040518263ffffffff1660e01b8152600401610aa29190612242565b600060405180830381600087803b158015610abc57600080fd5b505af1158015610ad0573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166331afac3689846040518363ffffffff1660e01b8152600401610b119291906120d3565b602060405180830381600087803b158015610b2b57600080fd5b505af1158015610b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b639190611b15565b90507f389ed7b749d3886f87607d31a1503296060c44015a65afe8da501e62b2b63c218189898989604051610b9c959493929190611ffe565b60405180910390a1809350505050949350505050565b600080855111610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90612202565b60405180910390fd5b60001515610c04866115ca565b151514610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d906121e2565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b8152600401610cd7","9190612081565b60206040518083038186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d279190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7157600080fd5b505afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da99190611ac3565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff1660e01b8152600401610de491906122ec565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba74866040518263ffffffff1660e01b8152600401610e4f9190612341565b600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516856040518263ffffffff1660e01b8152600401610eba9190612242565b600060405180830381600087803b158015610ed457600080fd5b505af1158015610ee8573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3457600080fd5b505afa158015610f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6c9190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1896040518263ffffffff1660e01b8152600401610fa79190612297565b60006040518083038186803b158015610fbf57600080fd5b505afa158015610fd3573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff1663bf2b70a18a85856040518463ffffffff1660e01b815260040161101693929190612103565b602060405180830381600087803b15801561103057600080fd5b505af1158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190611b15565b90507fca5b45f3d53e9121c815580a5cba550e72cb0578a3e3d78a1975e165f124a1f0818a8a8a8a6040516110a1959493929190611ffe565b60405180910390a180945050505050949350505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b815260040161114a9190612081565b60206040518083038186803b15801561116257600080fd5b505afa158015611176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119a9190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1856040518263ffffffff1660e01b81526004016112579190612297565b60006040518083038186803b15801561126f57600080fd5b505afa158015611283573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff1663e8434e3986846040518363ffffffff1660e01b81526004016112c49291906120a3565b60206040518083038186803b1580156112dc57600080fd5b505afa1580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190611a9a565b905060018173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190611b15565b146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd906121c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff1660e01b81526004016114109190612066565b60206040518083038186803b15801561142857600080fd5b505afa15801561143c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114609190611ac3565b9350505050919050565b60608083905060608390506060815183510167ffffffffffffffff8111801561149257600080fd5b506040519080825280601f01601f1916602001820160405280156114c55781602001600182028036833780820191505090505b5090506060819050600080905060008090505b8551811015611546578581815181106114ed57fe5b602001015160f81c60f81b83838060010194508151811061150a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506114d8565b5060008090505b84518110156115bb5784818151811061156257fe5b602001015160f81c60f81b83838060010194508151811061157f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061154d565b50829550505050505092915050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b815260040161165c9190612081565b60206040518083038186803b15801561167457600080fd5b505afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190611ac3565b905060008273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561177857600080fd5b505afa15801561178c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b09190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1866040518263ffffffff1660e01b81526004016117eb9190612297565b60006040518083038186803b15801561180357600080fd5b505afa158015611817573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff1663e8434e3987846040518363ffffffff1660e01b81526004016118589291906120a3565b60206040518083038186803b15801561187057600080fd5b505afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a89190611a9a565b90508073ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f057600080fd5b505afa158015611904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119289190611b15565b6000141561193d576001945050505050611946565b60009450505050505b919050565b60008151905061195a81612515565b92915050565b60008151905061196f8161252c565b92915050565b60008151905061198481612543565b92915050565b6000815190506119998161255a565b92915050565b6000813590506119ae81612571565b92915050565b6000815190506119c381612571565b92915050565b600082601f8301126119da57600080fd5b81356119ed6119e88261239c565b61236f565b91508082526020830160208301858383011115611a0957600080fd5b611a148382846124c2565b50505092915050565b600082601f830112611a2e57600080fd5b8151611a41611a3c8261239c565b61236f565b91508082526020830160208301858383011115611a5d57600080fd5b611a688382846124d1565b50505092915050565b600060208284031215611a8357600080fd5b6000611a918482850161194b565b91505092915050565b600060208284031215611aac57600080fd5b6000611aba84828501611960565b91505092915050565b600060208284031215611ad557600080fd5b6000611ae384828501611975565b91505092915050565b600060208284031215611afe57600080fd5b6000611b0c8482850161198a565b91505092915050565b600060208284031215611b2757600080fd5b6000611b35848285016119b4565b91505092915050565b600060208284031215611b5057600080fd5b600082013567ffffffffffffffff811115611b6a57600080fd5b611b76848285016119c9565b91505092915050565b600060208284031215611b9157600080fd5b600082015167ffffffffffffffff811115611bab57600080fd5b611bb784828501611a1d565b91505092915050565b60008060408385031215611bd357600080fd5b600083013567ffffffffffffffff811115611bed57600080fd5b611bf9858286016119c9565b925050602083013567ffffffffffffffff811115611c1657600080fd5b611c22858286016119c9565b9150509250929050565b60008060008060808587031215611c4257600080fd5b600085013567ffffffffffffffff811115611c5c57600080fd5b611c68878288016119c9565b945050602085013567ffffffffffffffff811115611c8557600080fd5b611c91878288016119c9565b9350506040611ca28782880161199f565b925050606085013567ffffffffffffffff811115611cbf57600080fd5b611ccb878288016119c9565b9150509295","9194509250565b611ce081612468565b82525050565b611cef8161248c565b82525050565b611cfe8161243e565b82525050565b611d0d816124b0565b82525050565b6000611d1e826123c8565b611d2881856123d3565b9350611d388185602086016124d1565b611d4181612504565b840191505092915050565b6000611d596029836123d3565b91507fe4b88ae993bee695b0e68dae747970655f7461626c656e616d655f6964e5b7b260008301527fe7bb8fe5ad98e59ca800000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dbf600e836123d3565b91507f444154415f4e4f545f45584953540000000000000000000000000000000000006000830152602082019050919050565b6000611dff6022836123d3565b91507fe695b0e68daee4b88de5ad98e59ca82ce4bfa1e681afe69bb4e696b0e5a4b1e860008301527fb4a50000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611e65601d836123d3565b91507f747970655f7461626c656e616d655f6964e4b88de883bde4b8bae7a9ba0000006000830152602082019050919050565b6000611ea56004836123d3565b91507f64617461000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000611ee56011836123d3565b91507f747970655f7461626c656e616d655f69640000000000000000000000000000006000830152602082019050919050565b6000611f256007836123d3565b91507f76657273696f6e000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000611f656006836123d3565b91507f73746174757300000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000602082019050611fad6000830184611ce6565b92915050565b6000602082019050611fc86000830184611cf5565b92915050565b6000604082019050611fe36000830185611cf5565b8181036020830152611ff58184611d13565b90509392505050565b600060a0820190506120136000830188611cf5565b81810360208301526120258187611d13565b905081810360408301526120398186611d13565b90506120486060830185611cf5565b818103608083015261205a8184611d13565b90509695505050505050565b600060208201905061207b6000830184611d04565b92915050565b6000602082019050818103600083015261209b8184611d13565b905092915050565b600060408201905081810360008301526120bd8185611d13565b90506120cc6020830184611cd7565b9392505050565b600060408201905081810360008301526120ed8185611d13565b90506120fc6020830184611ce6565b9392505050565b6000606082019050818103600083015261211d8186611d13565b905061212c6020830185611ce6565b6121396040830184611cd7565b949350505050565b6000608082019050818103600083015261215b8187611d13565b9050818103602083015261216f8186611d13565b905081810360408301526121838185611d13565b905081810360608301526121978184611d13565b905095945050505050565b600060208201905081810360008301526121bb81611d4c565b9050919050565b600060208201905081810360008301526121db81611db2565b9050919050565b600060208201905081810360008301526121fb81611df2565b9050919050565b6000602082019050818103600083015261221b81611e58565b9050919050565b6000602082019050818103600083015261223b81611e98565b9050919050565b6000604082019050818103600083015261225b81611e98565b9050818103602083015261226f8184611d13565b905092915050565b6000602082019050818103600083015261229081611ed8565b9050919050565b600060408201905081810360008301526122b081611ed8565b905081810360208301526122c48184611d13565b905092915050565b600060208201905081810360008301526122e581611f18565b9050919050565b6000604082019050818103600083015261230581611f18565b905081810360208301526123198184611d13565b905092915050565b6000602082019050818103600083015261233a81611f58565b9050919050565b6000604082019050818103600083015261235a81611f58565b90506123696020830184611cf5565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561239257600080fd5b8060405250919050565b600067ffffffffffffffff8211156123b357600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006123ef82612448565b9050919050565b6000612401826123e4565b9050919050565b6000612413826123e4565b9050919050565b6000612425826123e4565b9050919050565b6000612437826123e4565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124738261247a565b9050919050565b600061248582612448565b9050919050565b60006124978261249e565b9050919050565b60006124a982612448565b9050919050565b60006124bb8261243e565b9050919050565b82818337600083830152505050565b60005b838110156124ef5780820151818401526020810190506124d4565b838111156124fe576000848401525b50505050565b6000601f19601f8301169050919050565b61251e816123f6565b811461252957600080fd5b50565b61253581612408565b811461254057600080fd5b50565b61254c8161241a565b811461255757600080fd5b50565b6125638161242c565b811461256e57600080fd5b50565b61257a8161243e565b811461258557600080fd5b5056fea264697066735822122026ed7514ae30a52ff2c70f2b556afcf7ca5dfe6b14da70c0db8675db8ea7864964736f6c634300060a0033"};

    public static final String BINARY = String.join("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b506110016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a6040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b8152600401620000e591906200024a565b602060405180830381600087803b1580156200010057600080fd5b505af115801562000115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013b919062000159565b506200031f565b600081519050620001538162000305565b92915050565b6000602082840312156200016c57600080fd5b60006200017c8482850162000142565b91505092915050565b6000620001928262000298565b6200019e8185620002a3565b9350620001b0818560208601620002be565b620001bb81620002f4565b840191505092915050565b6000620001d5601383620002a3565b91507f76657273696f6e2c7374617475732c64617461000000000000000000000000006000830152602082019050919050565b600062000217601183620002a3565b91507f747970655f7461626c656e616d655f69640000000000000000000000000000006000830152602082019050919050565b6000606082019050818103600083015262000266818462000185565b905081810360208301526200027b8162000208565b905081810360408301526200029081620001c6565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b60005b83811015620002de578082015181840152602081019050620002c1565b83811115620002ee576000848401525b50505050565b6000601f19601f8301169050919050565b6200031081620002b4565b81146200031c57600080fd5b50565b6125be806200032f6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806326b477fd1461006757806380599e4b1461009a578063859e28d6146100ca578063e33b7749146100fa578063fcd7e3c11461012a578063ff74927b1461015a575b600080fd5b610081600480360381019061007c9190611b3e565b61018a565b6040516100919493929190612141565b60405180910390f35b6100b460048036038101906100af9190611b3e565b6104d5565b6040516100c19190611fb3565b60405180910390f35b6100e460048036038101906100df9190611c2c565b610779565b6040516100f19190611fb3565b60405180910390f35b610114600480360381019061010f9190611c2c565b610bb2565b6040516101219190611fb3565b60405180910390f35b610144600480360381019061013f9190611b3e565b6110b8565b6040516101519190611f98565b60405180910390f35b610174600480360381019061016f9190611bc0565b61146a565b6040516101819190612081565b60405180910390f35b606080606080600061019b866110b8565b90506102676040518060400160405280601281526020017f747970655f7461626c656e616d655f69643a00000000000000000000000000008152508273ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b815260040161020d90612277565b60006040518083038186803b15801561022557600080fd5b505afa158015610239573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906102629190611b7f565b61146a565b6103316040518060400160405280600881526020017f76657273696f6e3a0000000000000000000000000000000000000000000000008152508373ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b81526004016102d7906122cc565b60006040518083038186803b1580156102ef57600080fd5b505afa158015610303573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061032c9190611b7f565b61146a565b6103fb6040518060400160405280600781526020017f7374617475733a000000000000000000000000000000000000000000000000008152508473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b81526004016103a190612321565b60006040518083038186803b1580156103b957600080fd5b505afa1580156103cd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906103f69190611b7f565b61146a565b6104c56040518060400160405280600581526020017f646174613a0000000000000000000000000000000000000000000000000000008152508573ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b815260040161046b90612222565b60006040518083038186803b15801561048357600080fd5b505afa158015610497573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104c09190611b7f565b61146a565b9450945094509450509193509193565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b81526004016105679190612081565b60206040518083038186803b15801561057f57600080fd5b505afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561060157600080fd5b505afa158015610615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1856040518263ffffffff1660e01b81526004016106749190612297565b60006040518083038186803b15801561068c57600080fd5b505afa1580156106a0573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166328bb211786846040518363ffffffff1660e01b81526004016106e19291906120a3565b602060405180830381600087803b1580156106fb57600080fd5b505af115801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611b15565b90507fe3b53f90b0bd9d75f48e547fa40b6fd60f7efd23e36176b16d5b31de6ba330c58186604051610766929190611fce565b60405180910390a1809350505050919050565b6000610784856115ca565b6107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906121a2565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b81526004016108549190612081565b60206040518083038186803b15801561086c57600080fd5b505afa158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a49190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ee57600080fd5b505afa158015610902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109269190611ac3565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516886040518263ffffffff1660e01b81526004016109619190612297565b600060405180830381600087803b15801561097b57600080fd5b505af115801561098f573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff1660e01b81526004016109cc91906122ec565b600060405180830381600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba74866040518263ffffffff1660e01b8152600401610a379190612341565b600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516856040518263ffffffff1660e01b8152600401610aa29190612242565b600060405180830381600087803b158015610abc57600080fd5b505af1158015610ad0573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166331afac3689846040518363ffffffff1660e01b8152600401610b119291906120d3565b602060405180830381600087803b158015610b2b57600080fd5b505af1158015610b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b639190611b15565b90507f389ed7b749d3886f87607d31a1503296060c44015a65afe8da501e62b2b63c218189898989604051610b9c959493929190611ffe565b60405180910390a1809350505050949350505050565b600080855111610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90612202565b60405180910390fd5b60001515610c04866115ca565b151514610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d906121e2565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b8152600401610cd7","9190612081565b60206040518083038186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d279190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7157600080fd5b505afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da99190611ac3565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff1660e01b8152600401610de491906122ec565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba74866040518263ffffffff1660e01b8152600401610e4f9190612341565b600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516856040518263ffffffff1660e01b8152600401610eba9190612242565b600060405180830381600087803b158015610ed457600080fd5b505af1158015610ee8573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3457600080fd5b505afa158015610f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6c9190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1896040518263ffffffff1660e01b8152600401610fa79190612297565b60006040518083038186803b158015610fbf57600080fd5b505afa158015610fd3573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff1663bf2b70a18a85856040518463ffffffff1660e01b815260040161101693929190612103565b602060405180830381600087803b15801561103057600080fd5b505af1158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190611b15565b90507fca5b45f3d53e9121c815580a5cba550e72cb0578a3e3d78a1975e165f124a1f0818a8a8a8a6040516110a1959493929190611ffe565b60405180910390a180945050505050949350505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b815260040161114a9190612081565b60206040518083038186803b15801561116257600080fd5b505afa158015611176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119a9190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1856040518263ffffffff1660e01b81526004016112579190612297565b60006040518083038186803b15801561126f57600080fd5b505afa158015611283573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff1663e8434e3986846040518363ffffffff1660e01b81526004016112c49291906120a3565b60206040518083038186803b1580156112dc57600080fd5b505afa1580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190611a9a565b905060018173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190611b15565b146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd906121c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff1660e01b81526004016114109190612066565b60206040518083038186803b15801561142857600080fd5b505afa15801561143c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114609190611ac3565b9350505050919050565b60608083905060608390506060815183510167ffffffffffffffff8111801561149257600080fd5b506040519080825280601f01601f1916602001820160405280156114c55781602001600182028036833780820191505090505b5090506060819050600080905060008090505b8551811015611546578581815181106114ed57fe5b602001015160f81c60f81b83838060010194508151811061150a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506114d8565b5060008090505b84518110156115bb5784818151811061156257fe5b602001015160f81c60f81b83838060010194508151811061157f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061154d565b50829550505050505092915050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280600c81526020017f67656e6572616c5f696e666f00000000000000000000000000000000000000008152506040518263ffffffff1660e01b815260040161165c9190612081565b60206040518083038186803b15801561167457600080fd5b505afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190611ac3565b905060008273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561177857600080fd5b505afa15801561178c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b09190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1866040518263ffffffff1660e01b81526004016117eb9190612297565b60006040518083038186803b15801561180357600080fd5b505afa158015611817573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff1663e8434e3987846040518363ffffffff1660e01b81526004016118589291906120a3565b60206040518083038186803b15801561187057600080fd5b505afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a89190611a9a565b90508073ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f057600080fd5b505afa158015611904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119289190611b15565b6000141561193d576001945050505050611946565b60009450505050505b919050565b60008151905061195a81612515565b92915050565b60008151905061196f8161252c565b92915050565b60008151905061198481612543565b92915050565b6000815190506119998161255a565b92915050565b6000813590506119ae81612571565b92915050565b6000815190506119c381612571565b92915050565b600082601f8301126119da57600080fd5b81356119ed6119e88261239c565b61236f565b91508082526020830160208301858383011115611a0957600080fd5b611a148382846124c2565b50505092915050565b600082601f830112611a2e57600080fd5b8151611a41611a3c8261239c565b61236f565b91508082526020830160208301858383011115611a5d57600080fd5b611a688382846124d1565b50505092915050565b600060208284031215611a8357600080fd5b6000611a918482850161194b565b91505092915050565b600060208284031215611aac57600080fd5b6000611aba84828501611960565b91505092915050565b600060208284031215611ad557600080fd5b6000611ae384828501611975565b91505092915050565b600060208284031215611afe57600080fd5b6000611b0c8482850161198a565b91505092915050565b600060208284031215611b2757600080fd5b6000611b35848285016119b4565b91505092915050565b600060208284031215611b5057600080fd5b600082013567ffffffffffffffff811115611b6a57600080fd5b611b76848285016119c9565b91505092915050565b600060208284031215611b9157600080fd5b600082015167ffffffffffffffff811115611bab57600080fd5b611bb784828501611a1d565b91505092915050565b60008060408385031215611bd357600080fd5b600083013567ffffffffffffffff811115611bed57600080fd5b611bf9858286016119c9565b925050602083013567ffffffffffffffff811115611c1657600080fd5b611c22858286016119c9565b9150509250929050565b60008060008060808587031215611c4257600080fd5b600085013567ffffffffffffffff811115611c5c57600080fd5b611c68878288016119c9565b945050602085013567ffffffffffffffff811115611c8557600080fd5b611c91878288016119c9565b9350506040611ca28782880161199f565b925050606085013567ffffffffffffffff811115611cbf57600080fd5b611ccb878288016119c9565b9150509295","9194509250565b611ce081612468565b82525050565b611cef8161248c565b82525050565b611cfe8161243e565b82525050565b611d0d816124b0565b82525050565b6000611d1e826123c8565b611d2881856123d3565b9350611d388185602086016124d1565b611d4181612504565b840191505092915050565b6000611d596029836123d3565b91507fe4b88ae993bee695b0e68dae747970655f7461626c656e616d655f6964e5b7b260008301527fe7bb8fe5ad98e59ca800000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dbf600e836123d3565b91507f444154415f4e4f545f45584953540000000000000000000000000000000000006000830152602082019050919050565b6000611dff6022836123d3565b91507fe695b0e68daee4b88de5ad98e59ca82ce4bfa1e681afe69bb4e696b0e5a4b1e860008301527fb4a50000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611e65601d836123d3565b91507f747970655f7461626c656e616d655f6964e4b88de883bde4b8bae7a9ba0000006000830152602082019050919050565b6000611ea56004836123d3565b91507f64617461000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000611ee56011836123d3565b91507f747970655f7461626c656e616d655f69640000000000000000000000000000006000830152602082019050919050565b6000611f256007836123d3565b91507f76657273696f6e000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000611f656006836123d3565b91507f73746174757300000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000602082019050611fad6000830184611ce6565b92915050565b6000602082019050611fc86000830184611cf5565b92915050565b6000604082019050611fe36000830185611cf5565b8181036020830152611ff58184611d13565b90509392505050565b600060a0820190506120136000830188611cf5565b81810360208301526120258187611d13565b905081810360408301526120398186611d13565b90506120486060830185611cf5565b818103608083015261205a8184611d13565b90509695505050505050565b600060208201905061207b6000830184611d04565b92915050565b6000602082019050818103600083015261209b8184611d13565b905092915050565b600060408201905081810360008301526120bd8185611d13565b90506120cc6020830184611cd7565b9392505050565b600060408201905081810360008301526120ed8185611d13565b90506120fc6020830184611ce6565b9392505050565b6000606082019050818103600083015261211d8186611d13565b905061212c6020830185611ce6565b6121396040830184611cd7565b949350505050565b6000608082019050818103600083015261215b8187611d13565b9050818103602083015261216f8186611d13565b905081810360408301526121838185611d13565b905081810360608301526121978184611d13565b905095945050505050565b600060208201905081810360008301526121bb81611d4c565b9050919050565b600060208201905081810360008301526121db81611db2565b9050919050565b600060208201905081810360008301526121fb81611df2565b9050919050565b6000602082019050818103600083015261221b81611e58565b9050919050565b6000602082019050818103600083015261223b81611e98565b9050919050565b6000604082019050818103600083015261225b81611e98565b9050818103602083015261226f8184611d13565b905092915050565b6000602082019050818103600083015261229081611ed8565b9050919050565b600060408201905081810360008301526122b081611ed8565b905081810360208301526122c48184611d13565b905092915050565b600060208201905081810360008301526122e581611f18565b9050919050565b6000604082019050818103600083015261230581611f18565b905081810360208301526123198184611d13565b905092915050565b6000602082019050818103600083015261233a81611f58565b9050919050565b6000604082019050818103600083015261235a81611f58565b90506123696020830184611cf5565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561239257600080fd5b8060405250919050565b600067ffffffffffffffff8211156123b357600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006123ef82612448565b9050919050565b6000612401826123e4565b9050919050565b6000612413826123e4565b9050919050565b6000612425826123e4565b9050919050565b6000612437826123e4565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124738261247a565b9050919050565b600061248582612448565b9050919050565b60006124978261249e565b9050919050565b60006124a982612448565b9050919050565b60006124bb8261243e565b9050919050565b82818337600083830152505050565b60005b838110156124ef5780820151818401526020810190506124d4565b838111156124fe576000848401525b50505050565b6000601f19601f8301169050919050565b61251e816123f6565b811461252957600080fd5b50565b61253581612408565b811461254057600080fd5b50565b61254c8161241a565b811461255757600080fd5b50565b6125638161242c565b811461256e57600080fd5b50565b61257a8161243e565b811461258557600080fd5b5056fea264697066735822122026ed7514ae30a52ff2c70f2b556afcf7ca5dfe6b14da70c0db8675db8ea7864964736f6c634300060a0033"};

    public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"}],\"name\":\"EventDelete\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"status\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"EventInsert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"status\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"EventUpdate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"status\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"insert\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"}],\"name\":\"remove\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"}],\"name\":\"select\",\"outputs\":[{\"internalType\":\"contract Entry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"}],\"name\":\"selectById\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_a\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_b\",\"type\":\"string\"}],\"name\":\"strConcat\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"status\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"update\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"};

    public static final String ABI = String.join("", ABI_ARRAY);

    public static final String FUNC_INSERT = "insert";

    public static final String FUNC_REMOVE = "remove";

    public static final String FUNC_SELECT = "select";

    public static final String FUNC_SELECTBYID = "selectById";

    public static final String FUNC_STRCONCAT = "strConcat";

    public static final String FUNC_UPDATE = "update";

    public static final Event EVENTDELETE_EVENT = new Event("EventDelete", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event EVENTINSERT_EVENT = new Event("EventInsert", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event EVENTUPDATE_EVENT = new Event("EventUpdate", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
    ;

    public GeneralContract4(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public List<EventDeleteEventResponse> getEventDeleteEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EVENTDELETE_EVENT, transactionReceipt);
        ArrayList<EventDeleteEventResponse> responses = new ArrayList<EventDeleteEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            EventDeleteEventResponse typedResponse = new EventDeleteEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.type_tablename_id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeEventDeleteEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTDELETE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeEventDeleteEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTDELETE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<EventInsertEventResponse> getEventInsertEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EVENTINSERT_EVENT, transactionReceipt);
        ArrayList<EventInsertEventResponse> responses = new ArrayList<EventInsertEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            EventInsertEventResponse typedResponse = new EventInsertEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.type_tablename_id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.version = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.status = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.data = (String) eventValues.getNonIndexedValues().get(4).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeEventInsertEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTINSERT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeEventInsertEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTINSERT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<EventUpdateEventResponse> getEventUpdateEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EVENTUPDATE_EVENT, transactionReceipt);
        ArrayList<EventUpdateEventResponse> responses = new ArrayList<EventUpdateEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            EventUpdateEventResponse typedResponse = new EventUpdateEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.type_tablename_id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.version = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.status = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.data = (String) eventValues.getNonIndexedValues().get(4).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeEventUpdateEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTUPDATE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeEventUpdateEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTUPDATE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public TransactionReceipt insert(String type_tablename_id, String version, BigInteger status, String data) {
        final Function function = new Function(
                FUNC_INSERT, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void insert(String type_tablename_id, String version, BigInteger status, String data, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INSERT, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInsert(String type_tablename_id, String version, BigInteger status, String data) {
        final Function function = new Function(
                FUNC_INSERT, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, BigInteger, String> getInsertInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_INSERT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, BigInteger, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue()
                );
    }

    public Tuple1<BigInteger> getInsertOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_INSERT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public TransactionReceipt remove(String type_tablename_id) {
        final Function function = new Function(
                FUNC_REMOVE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void remove(String type_tablename_id, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REMOVE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemove(String type_tablename_id) {
        final Function function = new Function(
                FUNC_REMOVE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getRemoveInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REMOVE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Tuple1<BigInteger> getRemoveOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_REMOVE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public String select(String type_tablename_id) throws ContractException {
        final Function function = new Function(FUNC_SELECT, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Tuple4<String, String, String, String> selectById(String type_tablename_id) throws ContractException {
        final Function function = new Function(FUNC_SELECTBYID, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple4<String, String, String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue());
    }

    public String strConcat(String _a, String _b) throws ContractException {
        final Function function = new Function(FUNC_STRCONCAT, 
                Arrays.<Type>asList(new Utf8String(_a),
                new Utf8String(_b)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt update(String type_tablename_id, String version, BigInteger status, String data) {
        final Function function = new Function(
                FUNC_UPDATE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void update(String type_tablename_id, String version, BigInteger status, String data, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_UPDATE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdate(String type_tablename_id, String version, BigInteger status, String data) {
        final Function function = new Function(
                FUNC_UPDATE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, BigInteger, String> getUpdateInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_UPDATE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, BigInteger, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue()
                );
    }

    public Tuple1<BigInteger> getUpdateOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_UPDATE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public static GeneralContract4 load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new GeneralContract4(contractAddress, client, credential);
    }

    public static GeneralContract4 deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(GeneralContract4.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class EventDeleteEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;

        public String type_tablename_id;
    }

    public static class EventInsertEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;

        public String type_tablename_id;

        public String version;

        public BigInteger status;

        public String data;
    }

    public static class EventUpdateEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;

        public String type_tablename_id;

        public String version;

        public BigInteger status;

        public String data;
    }
}
复制代码

 

 

复制代码
package com.thgy.tichain.tichainsdktaiji.contract;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.tianhe.thbc.sdk.abi.FunctionReturnDecoder;
import org.tianhe.thbc.sdk.abi.TypeReference;
import org.tianhe.thbc.sdk.abi.datatypes.Address;
import org.tianhe.thbc.sdk.abi.datatypes.Event;
import org.tianhe.thbc.sdk.abi.datatypes.Function;
import org.tianhe.thbc.sdk.abi.datatypes.Type;
import org.tianhe.thbc.sdk.abi.datatypes.Utf8String;
import org.tianhe.thbc.sdk.abi.datatypes.generated.Int256;
import org.tianhe.thbc.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.tianhe.thbc.sdk.abi.datatypes.generated.tuples.generated.Tuple4;
import org.tianhe.thbc.sdk.client.Client;
import org.tianhe.thbc.sdk.contract.Contract;
import org.tianhe.thbc.sdk.crypto.CryptoSuite;
import org.tianhe.thbc.sdk.crypto.keypair.CryptoKeyPair;
import org.tianhe.thbc.sdk.eventsub.EventCallback;
import org.tianhe.thbc.sdk.model.CryptoType;
import org.tianhe.thbc.sdk.model.TransactionReceipt;
import org.tianhe.thbc.sdk.model.callback.TransactionCallback;
import org.tianhe.thbc.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class Transaction extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b506110016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a6040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b8152600401620000e591906200024a565b602060405180830381600087803b1580156200010057600080fd5b505af115801562000115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013b919062000159565b506200031f565b600081519050620001538162000305565b92915050565b6000602082840312156200016c57600080fd5b60006200017c8482850162000142565b91505092915050565b6000620001928262000298565b6200019e8185620002a3565b9350620001b0818560208601620002be565b620001bb81620002f4565b840191505092915050565b6000620001d5601383620002a3565b91507f76657273696f6e2c7374617475732c64617461000000000000000000000000006000830152602082019050919050565b600062000217601183620002a3565b91507f747970655f7461626c656e616d655f69640000000000000000000000000000006000830152602082019050919050565b6000606082019050818103600083015262000266818462000185565b905081810360208301526200027b8162000208565b905081810360408301526200029081620001c6565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b60005b83811015620002de578082015181840152602081019050620002c1565b83811115620002ee576000848401525b50505050565b6000601f19601f8301169050919050565b6200031081620002b4565b81146200031c57600080fd5b50565b6125be806200032f6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806326b477fd1461006757806380599e4b1461009a578063859e28d6146100ca578063e33b7749146100fa578063fcd7e3c11461012a578063ff74927b1461015a575b600080fd5b610081600480360381019061007c9190611b3e565b61018a565b6040516100919493929190612141565b60405180910390f35b6100b460048036038101906100af9190611b3e565b6104d5565b6040516100c19190611fb3565b60405180910390f35b6100e460048036038101906100df9190611c2c565b610779565b6040516100f19190611fb3565b60405180910390f35b610114600480360381019061010f9190611c2c565b610bb2565b6040516101219190611fb3565b60405180910390f35b610144600480360381019061013f9190611b3e565b6110b8565b6040516101519190611f98565b60405180910390f35b610174600480360381019061016f9190611bc0565b61146a565b6040516101819190612081565b60405180910390f35b606080606080600061019b866110b8565b90506102676040518060400160405280601281526020017f747970655f7461626c656e616d655f69643a00000000000000000000000000008152508273ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b815260040161020d90612277565b60006040518083038186803b15801561022557600080fd5b505afa158015610239573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906102629190611b7f565b61146a565b6103316040518060400160405280600881526020017f76657273696f6e3a0000000000000000000000000000000000000000000000008152508373ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b81526004016102d7906122cc565b60006040518083038186803b1580156102ef57600080fd5b505afa158015610303573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061032c9190611b7f565b61146a565b6103fb6040518060400160405280600781526020017f7374617475733a000000000000000000000000000000000000000000000000008152508473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b81526004016103a190612321565b60006040518083038186803b1580156103b957600080fd5b505afa1580156103cd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906103f69190611b7f565b61146a565b6104c56040518060400160405280600581526020017f646174613a0000000000000000000000000000000000000000000000000000008152508573ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b815260040161046b90612222565b60006040518083038186803b15801561048357600080fd5b505afa158015610497573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104c09190611b7f565b61146a565b9450945094509450509193509193565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b81526004016105679190612081565b60206040518083038186803b15801561057f57600080fd5b505afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561060157600080fd5b505afa158015610615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1856040518263ffffffff1660e01b81526004016106749190612297565b60006040518083038186803b15801561068c57600080fd5b505afa1580156106a0573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166328bb211786846040518363ffffffff1660e01b81526004016106e19291906120a3565b602060405180830381600087803b1580156106fb57600080fd5b505af115801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611b15565b90507fe3b53f90b0bd9d75f48e547fa40b6fd60f7efd23e36176b16d5b31de6ba330c58186604051610766929190611fce565b60405180910390a1809350505050919050565b6000610784856115ca565b6107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906121a2565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b81526004016108549190612081565b60206040518083038186803b15801561086c57600080fd5b505afa158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a49190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ee57600080fd5b505afa158015610902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109269190611ac3565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516886040518263ffffffff1660e01b81526004016109619190612297565b600060405180830381600087803b15801561097b57600080fd5b505af115801561098f573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff1660e01b81526004016109cc91906122ec565b600060405180830381600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba74866040518263ffffffff1660e01b8152600401610a379190612341565b600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516856040518263ffffffff1660e01b8152600401610aa29190612242565b600060405180830381600087803b158015610abc57600080fd5b505af1158015610ad0573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166331afac3689846040518363ffffffff1660e01b8152600401610b119291906120d3565b602060405180830381600087803b158015610b2b57600080fd5b505af1158015610b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b639190611b15565b90507f389ed7b749d3886f87607d31a1503296060c44015a65afe8da501e62b2b63c218189898989604051610b9c959493929190611ffe565b60405180910390a1809350505050949350505050565b600080855111610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90612202565b60405180910390fd5b60001515610c04866115ca565b151514610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d906121e2565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b8152600401610cd7","9190612081565b60206040518083038186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d279190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7157600080fd5b505afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da99190611ac3565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff1660e01b8152600401610de491906122ec565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba74866040518263ffffffff1660e01b8152600401610e4f9190612341565b600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516856040518263ffffffff1660e01b8152600401610eba9190612242565b600060405180830381600087803b158015610ed457600080fd5b505af1158015610ee8573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3457600080fd5b505afa158015610f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6c9190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1896040518263ffffffff1660e01b8152600401610fa79190612297565b60006040518083038186803b158015610fbf57600080fd5b505afa158015610fd3573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff1663bf2b70a18a85856040518463ffffffff1660e01b815260040161101693929190612103565b602060405180830381600087803b15801561103057600080fd5b505af1158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190611b15565b90507fca5b45f3d53e9121c815580a5cba550e72cb0578a3e3d78a1975e165f124a1f0818a8a8a8a6040516110a1959493929190611ffe565b60405180910390a180945050505050949350505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b815260040161114a9190612081565b60206040518083038186803b15801561116257600080fd5b505afa158015611176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119a9190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1856040518263ffffffff1660e01b81526004016112579190612297565b60006040518083038186803b15801561126f57600080fd5b505afa158015611283573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff1663e8434e3986846040518363ffffffff1660e01b81526004016112c49291906120a3565b60206040518083038186803b1580156112dc57600080fd5b505afa1580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190611a9a565b905060018173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190611b15565b146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd906121c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff1660e01b81526004016114109190612066565b60206040518083038186803b15801561142857600080fd5b505afa15801561143c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114609190611ac3565b9350505050919050565b60608083905060608390506060815183510167ffffffffffffffff8111801561149257600080fd5b506040519080825280601f01601f1916602001820160405280156114c55781602001600182028036833780820191505090505b5090506060819050600080905060008090505b8551811015611546578581815181106114ed57fe5b602001015160f81c60f81b83838060010194508151811061150a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506114d8565b5060008090505b84518110156115bb5784818151811061156257fe5b602001015160f81c60f81b83838060010194508151811061157f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061154d565b50829550505050505092915050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b815260040161165c9190612081565b60206040518083038186803b15801561167457600080fd5b505afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190611ac3565b905060008273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561177857600080fd5b505afa15801561178c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b09190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1866040518263ffffffff1660e01b81526004016117eb9190612297565b60006040518083038186803b15801561180357600080fd5b505afa158015611817573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff1663e8434e3987846040518363ffffffff1660e01b81526004016118589291906120a3565b60206040518083038186803b15801561187057600080fd5b505afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a89190611a9a565b90508073ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f057600080fd5b505afa158015611904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119289190611b15565b6000141561193d576001945050505050611946565b60009450505050505b919050565b60008151905061195a81612515565b92915050565b60008151905061196f8161252c565b92915050565b60008151905061198481612543565b92915050565b6000815190506119998161255a565b92915050565b6000813590506119ae81612571565b92915050565b6000815190506119c381612571565b92915050565b600082601f8301126119da57600080fd5b81356119ed6119e88261239c565b61236f565b91508082526020830160208301858383011115611a0957600080fd5b611a148382846124c2565b50505092915050565b600082601f830112611a2e57600080fd5b8151611a41611a3c8261239c565b61236f565b91508082526020830160208301858383011115611a5d57600080fd5b611a688382846124d1565b50505092915050565b600060208284031215611a8357600080fd5b6000611a918482850161194b565b91505092915050565b600060208284031215611aac57600080fd5b6000611aba84828501611960565b91505092915050565b600060208284031215611ad557600080fd5b6000611ae384828501611975565b91505092915050565b600060208284031215611afe57600080fd5b6000611b0c8482850161198a565b91505092915050565b600060208284031215611b2757600080fd5b6000611b35848285016119b4565b91505092915050565b600060208284031215611b5057600080fd5b600082013567ffffffffffffffff811115611b6a57600080fd5b611b76848285016119c9565b91505092915050565b600060208284031215611b9157600080fd5b600082015167ffffffffffffffff811115611bab57600080fd5b611bb784828501611a1d565b91505092915050565b60008060408385031215611bd357600080fd5b600083013567ffffffffffffffff811115611bed57600080fd5b611bf9858286016119c9565b925050602083013567ffffffffffffffff811115611c1657600080fd5b611c22858286016119c9565b9150509250929050565b60008060008060808587031215611c4257600080fd5b600085013567ffffffffffffffff811115611c5c57600080fd5b611c68878288016119c9565b945050602085013567ffffffffffffffff811115611c8557600080fd5b611c91878288016119c9565b9350506040611ca28782880161199f565b925050606085013567ffffffffffffffff811115611cbf57600080fd5b611ccb878288016119c9565b9150509295","9194509250565b611ce081612468565b82525050565b611cef8161248c565b82525050565b611cfe8161243e565b82525050565b611d0d816124b0565b82525050565b6000611d1e826123c8565b611d2881856123d3565b9350611d388185602086016124d1565b611d4181612504565b840191505092915050565b6000611d596029836123d3565b91507fe4b88ae993bee695b0e68dae747970655f7461626c656e616d655f6964e5b7b260008301527fe7bb8fe5ad98e59ca800000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dbf600e836123d3565b91507f444154415f4e4f545f45584953540000000000000000000000000000000000006000830152602082019050919050565b6000611dff6022836123d3565b91507fe695b0e68daee4b88de5ad98e59ca82ce4bfa1e681afe69bb4e696b0e5a4b1e860008301527fb4a50000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611e65601d836123d3565b91507f747970655f7461626c656e616d655f6964e4b88de883bde4b8bae7a9ba0000006000830152602082019050919050565b6000611ea56004836123d3565b91507f64617461000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000611ee56011836123d3565b91507f747970655f7461626c656e616d655f69640000000000000000000000000000006000830152602082019050919050565b6000611f256007836123d3565b91507f76657273696f6e000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000611f656006836123d3565b91507f73746174757300000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000602082019050611fad6000830184611ce6565b92915050565b6000602082019050611fc86000830184611cf5565b92915050565b6000604082019050611fe36000830185611cf5565b8181036020830152611ff58184611d13565b90509392505050565b600060a0820190506120136000830188611cf5565b81810360208301526120258187611d13565b905081810360408301526120398186611d13565b90506120486060830185611cf5565b818103608083015261205a8184611d13565b90509695505050505050565b600060208201905061207b6000830184611d04565b92915050565b6000602082019050818103600083015261209b8184611d13565b905092915050565b600060408201905081810360008301526120bd8185611d13565b90506120cc6020830184611cd7565b9392505050565b600060408201905081810360008301526120ed8185611d13565b90506120fc6020830184611ce6565b9392505050565b6000606082019050818103600083015261211d8186611d13565b905061212c6020830185611ce6565b6121396040830184611cd7565b949350505050565b6000608082019050818103600083015261215b8187611d13565b9050818103602083015261216f8186611d13565b905081810360408301526121838185611d13565b905081810360608301526121978184611d13565b905095945050505050565b600060208201905081810360008301526121bb81611d4c565b9050919050565b600060208201905081810360008301526121db81611db2565b9050919050565b600060208201905081810360008301526121fb81611df2565b9050919050565b6000602082019050818103600083015261221b81611e58565b9050919050565b6000602082019050818103600083015261223b81611e98565b9050919050565b6000604082019050818103600083015261225b81611e98565b9050818103602083015261226f8184611d13565b905092915050565b6000602082019050818103600083015261229081611ed8565b9050919050565b600060408201905081810360008301526122b081611ed8565b905081810360208301526122c48184611d13565b905092915050565b600060208201905081810360008301526122e581611f18565b9050919050565b6000604082019050818103600083015261230581611f18565b905081810360208301526123198184611d13565b905092915050565b6000602082019050818103600083015261233a81611f58565b9050919050565b6000604082019050818103600083015261235a81611f58565b90506123696020830184611cf5565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561239257600080fd5b8060405250919050565b600067ffffffffffffffff8211156123b357600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006123ef82612448565b9050919050565b6000612401826123e4565b9050919050565b6000612413826123e4565b9050919050565b6000612425826123e4565b9050919050565b6000612437826123e4565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124738261247a565b9050919050565b600061248582612448565b9050919050565b60006124978261249e565b9050919050565b60006124a982612448565b9050919050565b60006124bb8261243e565b9050919050565b82818337600083830152505050565b60005b838110156124ef5780820151818401526020810190506124d4565b838111156124fe576000848401525b50505050565b6000601f19601f8301169050919050565b61251e816123f6565b811461252957600080fd5b50565b61253581612408565b811461254057600080fd5b50565b61254c8161241a565b811461255757600080fd5b50565b6125638161242c565b811461256e57600080fd5b50565b61257a8161243e565b811461258557600080fd5b5056fea264697066735822122012b974f1eb9a2ffbcd96b0b61a0b22d8037d360738616ee32b9b6dc6291bb5ca64736f6c634300060a0033"};

    public static final String BINARY = String.join("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b506110016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a6040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b8152600401620000e591906200024a565b602060405180830381600087803b1580156200010057600080fd5b505af115801562000115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013b919062000159565b506200031f565b600081519050620001538162000305565b92915050565b6000602082840312156200016c57600080fd5b60006200017c8482850162000142565b91505092915050565b6000620001928262000298565b6200019e8185620002a3565b9350620001b0818560208601620002be565b620001bb81620002f4565b840191505092915050565b6000620001d5601383620002a3565b91507f76657273696f6e2c7374617475732c64617461000000000000000000000000006000830152602082019050919050565b600062000217601183620002a3565b91507f747970655f7461626c656e616d655f69640000000000000000000000000000006000830152602082019050919050565b6000606082019050818103600083015262000266818462000185565b905081810360208301526200027b8162000208565b905081810360408301526200029081620001c6565b905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b60005b83811015620002de578082015181840152602081019050620002c1565b83811115620002ee576000848401525b50505050565b6000601f19601f8301169050919050565b6200031081620002b4565b81146200031c57600080fd5b50565b6125be806200032f6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806326b477fd1461006757806380599e4b1461009a578063859e28d6146100ca578063e33b7749146100fa578063fcd7e3c11461012a578063ff74927b1461015a575b600080fd5b610081600480360381019061007c9190611b3e565b61018a565b6040516100919493929190612141565b60405180910390f35b6100b460048036038101906100af9190611b3e565b6104d5565b6040516100c19190611fb3565b60405180910390f35b6100e460048036038101906100df9190611c2c565b610779565b6040516100f19190611fb3565b60405180910390f35b610114600480360381019061010f9190611c2c565b610bb2565b6040516101219190611fb3565b60405180910390f35b610144600480360381019061013f9190611b3e565b6110b8565b6040516101519190611f98565b60405180910390f35b610174600480360381019061016f9190611bc0565b61146a565b6040516101819190612081565b60405180910390f35b606080606080600061019b866110b8565b90506102676040518060400160405280601281526020017f747970655f7461626c656e616d655f69643a00000000000000000000000000008152508273ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b815260040161020d90612277565b60006040518083038186803b15801561022557600080fd5b505afa158015610239573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906102629190611b7f565b61146a565b6103316040518060400160405280600881526020017f76657273696f6e3a0000000000000000000000000000000000000000000000008152508373ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b81526004016102d7906122cc565b60006040518083038186803b1580156102ef57600080fd5b505afa158015610303573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061032c9190611b7f565b61146a565b6103fb6040518060400160405280600781526020017f7374617475733a000000000000000000000000000000000000000000000000008152508473ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b81526004016103a190612321565b60006040518083038186803b1580156103b957600080fd5b505afa1580156103cd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906103f69190611b7f565b61146a565b6104c56040518060400160405280600581526020017f646174613a0000000000000000000000000000000000000000000000000000008152508573ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff1660e01b815260040161046b90612222565b60006040518083038186803b15801561048357600080fd5b505afa158015610497573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104c09190611b7f565b61146a565b9450945094509450509193509193565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b81526004016105679190612081565b60206040518083038186803b15801561057f57600080fd5b505afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b79190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561060157600080fd5b505afa158015610615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1856040518263ffffffff1660e01b81526004016106749190612297565b60006040518083038186803b15801561068c57600080fd5b505afa1580156106a0573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166328bb211786846040518363ffffffff1660e01b81526004016106e19291906120a3565b602060405180830381600087803b1580156106fb57600080fd5b505af115801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611b15565b90507fe3b53f90b0bd9d75f48e547fa40b6fd60f7efd23e36176b16d5b31de6ba330c58186604051610766929190611fce565b60405180910390a1809350505050919050565b6000610784856115ca565b6107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906121a2565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b81526004016108549190612081565b60206040518083038186803b15801561086c57600080fd5b505afa158015610880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a49190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ee57600080fd5b505afa158015610902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109269190611ac3565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516886040518263ffffffff1660e01b81526004016109619190612297565b600060405180830381600087803b15801561097b57600080fd5b505af115801561098f573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff1660e01b81526004016109cc91906122ec565b600060405180830381600087803b1580156109e657600080fd5b505af11580156109fa573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba74866040518263ffffffff1660e01b8152600401610a379190612341565b600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516856040518263ffffffff1660e01b8152600401610aa29190612242565b600060405180830381600087803b158015610abc57600080fd5b505af1158015610ad0573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166331afac3689846040518363ffffffff1660e01b8152600401610b119291906120d3565b602060405180830381600087803b158015610b2b57600080fd5b505af1158015610b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b639190611b15565b90507f389ed7b749d3886f87607d31a1503296060c44015a65afe8da501e62b2b63c218189898989604051610b9c959493929190611ffe565b60405180910390a1809350505050949350505050565b600080855111610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90612202565b60405180910390fd5b60001515610c04866115ca565b151514610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d906121e2565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b8152600401610cd7","9190612081565b60206040518083038186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d279190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7157600080fd5b505afa158015610d85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da99190611ac3565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516876040518263ffffffff1660e01b8152600401610de491906122ec565b600060405180830381600087803b158015610dfe57600080fd5b505af1158015610e12573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba74866040518263ffffffff1660e01b8152600401610e4f9190612341565b600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516856040518263ffffffff1660e01b8152600401610eba9190612242565b600060405180830381600087803b158015610ed457600080fd5b505af1158015610ee8573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3457600080fd5b505afa158015610f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6c9190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1896040518263ffffffff1660e01b8152600401610fa79190612297565b60006040518083038186803b158015610fbf57600080fd5b505afa158015610fd3573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff1663bf2b70a18a85856040518463ffffffff1660e01b815260040161101693929190612103565b602060405180830381600087803b15801561103057600080fd5b505af1158015611044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110689190611b15565b90507fca5b45f3d53e9121c815580a5cba550e72cb0578a3e3d78a1975e165f124a1f0818a8a8a8a6040516110a1959493929190611ffe565b60405180910390a180945050505050949350505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b815260040161114a9190612081565b60206040518083038186803b15801561116257600080fd5b505afa158015611176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119a9190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1856040518263ffffffff1660e01b81526004016112579190612297565b60006040518083038186803b15801561126f57600080fd5b505afa158015611283573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff1663e8434e3986846040518363ffffffff1660e01b81526004016112c49291906120a3565b60206040518083038186803b1580156112dc57600080fd5b505afa1580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190611a9a565b905060018173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561135e57600080fd5b505afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113969190611b15565b146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd906121c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff1660e01b81526004016114109190612066565b60206040518083038186803b15801561142857600080fd5b505afa15801561143c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114609190611ac3565b9350505050919050565b60608083905060608390506060815183510167ffffffffffffffff8111801561149257600080fd5b506040519080825280601f01601f1916602001820160405280156114c55781602001600182028036833780820191505090505b5090506060819050600080905060008090505b8551811015611546578581815181106114ed57fe5b602001015160f81c60f81b83838060010194508151811061150a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506114d8565b5060008090505b84518110156115bb5784818151811061156257fe5b602001015160f81c60f81b83838060010194508151811061157f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061154d565b50829550505050505092915050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c96040518060400160405280601081526020017f7472616e73616374696f6e5f696e666f000000000000000000000000000000008152506040518263ffffffff1660e01b815260040161165c9190612081565b60206040518083038186803b15801561167457600080fd5b505afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190611aec565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff1660e01b815260040160206040518083038186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190611ac3565b905060008273ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff1660e01b815260040160206040518083038186803b15801561177857600080fd5b505afa15801561178c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b09190611a71565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1866040518263ffffffff1660e01b81526004016117eb9190612297565b60006040518083038186803b15801561180357600080fd5b505afa158015611817573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff1663e8434e3987846040518363ffffffff1660e01b81526004016118589291906120a3565b60206040518083038186803b15801561187057600080fd5b505afa158015611884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a89190611a9a565b90508073ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f057600080fd5b505afa158015611904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119289190611b15565b6000141561193d576001945050505050611946565b60009450505050505b919050565b60008151905061195a81612515565b92915050565b60008151905061196f8161252c565b92915050565b60008151905061198481612543565b92915050565b6000815190506119998161255a565b92915050565b6000813590506119ae81612571565b92915050565b6000815190506119c381612571565b92915050565b600082601f8301126119da57600080fd5b81356119ed6119e88261239c565b61236f565b91508082526020830160208301858383011115611a0957600080fd5b611a148382846124c2565b50505092915050565b600082601f830112611a2e57600080fd5b8151611a41611a3c8261239c565b61236f565b91508082526020830160208301858383011115611a5d57600080fd5b611a688382846124d1565b50505092915050565b600060208284031215611a8357600080fd5b6000611a918482850161194b565b91505092915050565b600060208284031215611aac57600080fd5b6000611aba84828501611960565b91505092915050565b600060208284031215611ad557600080fd5b6000611ae384828501611975565b91505092915050565b600060208284031215611afe57600080fd5b6000611b0c8482850161198a565b91505092915050565b600060208284031215611b2757600080fd5b6000611b35848285016119b4565b91505092915050565b600060208284031215611b5057600080fd5b600082013567ffffffffffffffff811115611b6a57600080fd5b611b76848285016119c9565b91505092915050565b600060208284031215611b9157600080fd5b600082015167ffffffffffffffff811115611bab57600080fd5b611bb784828501611a1d565b91505092915050565b60008060408385031215611bd357600080fd5b600083013567ffffffffffffffff811115611bed57600080fd5b611bf9858286016119c9565b925050602083013567ffffffffffffffff811115611c1657600080fd5b611c22858286016119c9565b9150509250929050565b60008060008060808587031215611c4257600080fd5b600085013567ffffffffffffffff811115611c5c57600080fd5b611c68878288016119c9565b945050602085013567ffffffffffffffff811115611c8557600080fd5b611c91878288016119c9565b9350506040611ca28782880161199f565b925050606085013567ffffffffffffffff811115611cbf57600080fd5b611ccb878288016119c9565b9150509295","9194509250565b611ce081612468565b82525050565b611cef8161248c565b82525050565b611cfe8161243e565b82525050565b611d0d816124b0565b82525050565b6000611d1e826123c8565b611d2881856123d3565b9350611d388185602086016124d1565b611d4181612504565b840191505092915050565b6000611d596029836123d3565b91507fe4b88ae993bee695b0e68dae747970655f7461626c656e616d655f6964e5b7b260008301527fe7bb8fe5ad98e59ca800000000000000000000000000000000000000000000006020830152604082019050919050565b6000611dbf600e836123d3565b91507f444154415f4e4f545f45584953540000000000000000000000000000000000006000830152602082019050919050565b6000611dff6022836123d3565b91507fe695b0e68daee4b88de5ad98e59ca82ce4bfa1e681afe69bb4e696b0e5a4b1e860008301527fb4a50000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611e65601d836123d3565b91507f747970655f7461626c656e616d655f6964e4b88de883bde4b8bae7a9ba0000006000830152602082019050919050565b6000611ea56004836123d3565b91507f64617461000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000611ee56011836123d3565b91507f747970655f7461626c656e616d655f69640000000000000000000000000000006000830152602082019050919050565b6000611f256007836123d3565b91507f76657273696f6e000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000611f656006836123d3565b91507f73746174757300000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000602082019050611fad6000830184611ce6565b92915050565b6000602082019050611fc86000830184611cf5565b92915050565b6000604082019050611fe36000830185611cf5565b8181036020830152611ff58184611d13565b90509392505050565b600060a0820190506120136000830188611cf5565b81810360208301526120258187611d13565b905081810360408301526120398186611d13565b90506120486060830185611cf5565b818103608083015261205a8184611d13565b90509695505050505050565b600060208201905061207b6000830184611d04565b92915050565b6000602082019050818103600083015261209b8184611d13565b905092915050565b600060408201905081810360008301526120bd8185611d13565b90506120cc6020830184611cd7565b9392505050565b600060408201905081810360008301526120ed8185611d13565b90506120fc6020830184611ce6565b9392505050565b6000606082019050818103600083015261211d8186611d13565b905061212c6020830185611ce6565b6121396040830184611cd7565b949350505050565b6000608082019050818103600083015261215b8187611d13565b9050818103602083015261216f8186611d13565b905081810360408301526121838185611d13565b905081810360608301526121978184611d13565b905095945050505050565b600060208201905081810360008301526121bb81611d4c565b9050919050565b600060208201905081810360008301526121db81611db2565b9050919050565b600060208201905081810360008301526121fb81611df2565b9050919050565b6000602082019050818103600083015261221b81611e58565b9050919050565b6000602082019050818103600083015261223b81611e98565b9050919050565b6000604082019050818103600083015261225b81611e98565b9050818103602083015261226f8184611d13565b905092915050565b6000602082019050818103600083015261229081611ed8565b9050919050565b600060408201905081810360008301526122b081611ed8565b905081810360208301526122c48184611d13565b905092915050565b600060208201905081810360008301526122e581611f18565b9050919050565b6000604082019050818103600083015261230581611f18565b905081810360208301526123198184611d13565b905092915050565b6000602082019050818103600083015261233a81611f58565b9050919050565b6000604082019050818103600083015261235a81611f58565b90506123696020830184611cf5565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561239257600080fd5b8060405250919050565b600067ffffffffffffffff8211156123b357600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006123ef82612448565b9050919050565b6000612401826123e4565b9050919050565b6000612413826123e4565b9050919050565b6000612425826123e4565b9050919050565b6000612437826123e4565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124738261247a565b9050919050565b600061248582612448565b9050919050565b60006124978261249e565b9050919050565b60006124a982612448565b9050919050565b60006124bb8261243e565b9050919050565b82818337600083830152505050565b60005b838110156124ef5780820151818401526020810190506124d4565b838111156124fe576000848401525b50505050565b6000601f19601f8301169050919050565b61251e816123f6565b811461252957600080fd5b50565b61253581612408565b811461254057600080fd5b50565b61254c8161241a565b811461255757600080fd5b50565b6125638161242c565b811461256e57600080fd5b50565b61257a8161243e565b811461258557600080fd5b5056fea264697066735822122012b974f1eb9a2ffbcd96b0b61a0b22d8037d360738616ee32b9b6dc6291bb5ca64736f6c634300060a0033"};

    public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"}],\"name\":\"EventDelete\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"status\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"EventInsert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"status\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"EventUpdate\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"status\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"insert\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"}],\"name\":\"remove\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"}],\"name\":\"select\",\"outputs\":[{\"internalType\":\"contract Entry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"}],\"name\":\"selectById\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_a\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_b\",\"type\":\"string\"}],\"name\":\"strConcat\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"type_tablename_id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"status\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"update\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"};

    public static final String ABI = String.join("", ABI_ARRAY);

    public static final String FUNC_INSERT = "insert";

    public static final String FUNC_REMOVE = "remove";

    public static final String FUNC_SELECT = "select";

    public static final String FUNC_SELECTBYID = "selectById";

    public static final String FUNC_STRCONCAT = "strConcat";

    public static final String FUNC_UPDATE = "update";

    public static final Event EVENTDELETE_EVENT = new Event("EventDelete", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event EVENTINSERT_EVENT = new Event("EventInsert", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event EVENTUPDATE_EVENT = new Event("EventUpdate", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
    ;

    protected Transaction(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public List<EventDeleteEventResponse> getEventDeleteEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EVENTDELETE_EVENT, transactionReceipt);
        ArrayList<EventDeleteEventResponse> responses = new ArrayList<EventDeleteEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            EventDeleteEventResponse typedResponse = new EventDeleteEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.type_tablename_id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeEventDeleteEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTDELETE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeEventDeleteEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTDELETE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<EventInsertEventResponse> getEventInsertEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EVENTINSERT_EVENT, transactionReceipt);
        ArrayList<EventInsertEventResponse> responses = new ArrayList<EventInsertEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            EventInsertEventResponse typedResponse = new EventInsertEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.type_tablename_id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.version = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.status = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.data = (String) eventValues.getNonIndexedValues().get(4).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeEventInsertEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTINSERT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeEventInsertEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTINSERT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<EventUpdateEventResponse> getEventUpdateEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(EVENTUPDATE_EVENT, transactionReceipt);
        ArrayList<EventUpdateEventResponse> responses = new ArrayList<EventUpdateEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            EventUpdateEventResponse typedResponse = new EventUpdateEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.type_tablename_id = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.version = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.status = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.data = (String) eventValues.getNonIndexedValues().get(4).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeEventUpdateEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTUPDATE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeEventUpdateEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(EVENTUPDATE_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public TransactionReceipt insert(String type_tablename_id, String version, BigInteger status, String data) {
        final Function function = new Function(
                FUNC_INSERT, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void insert(String type_tablename_id, String version, BigInteger status, String data, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INSERT, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInsert(String type_tablename_id, String version, BigInteger status, String data) {
        final Function function = new Function(
                FUNC_INSERT, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, BigInteger, String> getInsertInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_INSERT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, BigInteger, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue()
                );
    }

    public Tuple1<BigInteger> getInsertOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_INSERT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public TransactionReceipt remove(String type_tablename_id) {
        final Function function = new Function(
                FUNC_REMOVE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void remove(String type_tablename_id, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REMOVE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemove(String type_tablename_id) {
        final Function function = new Function(
                FUNC_REMOVE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<String> getRemoveInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REMOVE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public Tuple1<BigInteger> getRemoveOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_REMOVE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public String select(String type_tablename_id) throws ContractException {
        final Function function = new Function(FUNC_SELECT, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Tuple4<String, String, String, String> selectById(String type_tablename_id) throws ContractException {
        final Function function = new Function(FUNC_SELECTBYID, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple4<String, String, String, String>(
                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue());
    }

    public String strConcat(String _a, String _b) throws ContractException {
        final Function function = new Function(FUNC_STRCONCAT, 
                Arrays.<Type>asList(new Utf8String(_a),
                new Utf8String(_b)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt update(String type_tablename_id, String version, BigInteger status, String data) {
        final Function function = new Function(
                FUNC_UPDATE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void update(String type_tablename_id, String version, BigInteger status, String data, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_UPDATE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdate(String type_tablename_id, String version, BigInteger status, String data) {
        final Function function = new Function(
                FUNC_UPDATE, 
                Arrays.<Type>asList(new Utf8String(type_tablename_id),
                new Utf8String(version),
                new Int256(status),
                new Utf8String(data)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, BigInteger, String> getUpdateInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_UPDATE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, BigInteger, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue()
                );
    }

    public Tuple1<BigInteger> getUpdateOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_UPDATE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public static Transaction load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new Transaction(contractAddress, client, credential);
    }

    public static Transaction deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(Transaction.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class EventDeleteEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;

        public String type_tablename_id;
    }

    public static class EventInsertEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;

        public String type_tablename_id;

        public String version;

        public BigInteger status;

        public String data;
    }

    public static class EventUpdateEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;

        public String type_tablename_id;

        public String version;

        public BigInteger status;

        public String data;
    }
}
复制代码

 

 

五、应用开发

针对两个不同的智能合约编写不同的service类

 

复制代码
package com.thgy.tichain.tichainsdktaiji.service;

import com.thgy.tichain.tichainsdktaiji.client.dto.ContractDTO;
import com.thgy.tichain.tichainsdktaiji.client.vo.ContrcatVO;
import com.thgy.tichain.tichainsdktaiji.contract.GeneralContract4;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.tianhe.thbc.sdk.ThbcSDK;
import org.tianhe.thbc.sdk.abi.datatypes.generated.tuples.generated.Tuple4;
import org.tianhe.thbc.sdk.client.Client;
import org.tianhe.thbc.sdk.crypto.keypair.CryptoKeyPair;
import org.tianhe.thbc.sdk.model.TransactionReceipt;
import org.tianhe.thbc.sdk.transaction.model.exception.ContractException;

import java.util.HashMap;
import java.util.Map;

/**
 * @author gym
 * @date 2025/2/14
 */
@Service
@Slf4j
public class GeneralContract4Service {

    /**
     * 数据上链
     * */
    public ContrcatVO insert(ContractDTO dto){
        //初始化SDK
       // ThbcSDK thbcSDK = ThbcSDK.build("E:\\MyCode\\taiji\\tichain-sdk-demo\\src\\main\\resources\\conf\\config.toml");
        ThbcSDK thbcSDK = ThbcSDK.build("/data/jar/tichain/conf/config.toml");

        // 为群组初始化client
       Client client = thbcSDK.getClient(1);

        // 生成账户的密钥对
        CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();

        // 实例合约对象
        GeneralContract4 generalContract4 =GeneralContract4.load
                ("0x9a595464c540fbd4875aaa046ea0f4b2aad46d01", client, cryptoKeyPair);
        //调用合约上链函数
        TransactionReceipt receipt = generalContract4.insert(
              dto.getType_tablename_id(),dto.getVersion(),dto.getStatus(),dto.getData()
        );
        ContrcatVO contrcatVO = new ContrcatVO();
        contrcatVO.setBlockHash(receipt.getBlockHash());
        contrcatVO.setTransactionHash(receipt.getTransactionHash());
       return contrcatVO;
    }

    /**
     * 链上数据查询
     * */
     public Map<String ,String> getById(String type_tablename_id) throws ContractException {
         //初始化SDK
      // ThbcSDK thbcSDK = ThbcSDK.build("E:\\MyCode\\taiji\\tichain-sdk-demo\\src\\main\\resources\\conf\\config.toml");
        ThbcSDK thbcSDK = ThbcSDK.build("/data/jar/tichain/conf/config.toml");

         // 为群组初始化client
         Client client = thbcSDK.getClient(1);

         // 生成账户的密钥对
         CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();

         // 实例合约对象
         GeneralContract4 generalContract4 =GeneralContract4.load
                 ("0x9a595464c540fbd4875aaa046ea0f4b2aad46d01", client, cryptoKeyPair);

         //调用合约查询函数
         Tuple4<String, String, String, String> chainRet  =generalContract4.selectById(type_tablename_id);
         Map<String,String> ret = new HashMap<>();
         ret.put("type_tablename_id",chainRet.getValue1());
         ret.put("version",chainRet.getValue2());
         ret.put("status",chainRet.getValue3());
         ret.put("data",chainRet.getValue4());
         return ret;
     }

     /**
      * 链上数据修改
      * */
     public ContrcatVO update(ContractDTO dto) {
         //初始化SDK
       //  ThbcSDK thbcSDK = ThbcSDK.build("E:\\MyCode\\taiji\\tichain-sdk-demo\\src\\main\\resources\\conf\\config.toml");
         ThbcSDK thbcSDK = ThbcSDK.build("/data/jar/tichain/conf/config.toml");

         // 为群组初始化client
         Client client = thbcSDK.getClient(1);

         // 生成账户的密钥对
         CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();

         // 实例合约对象
         GeneralContract4 generalContract4 =GeneralContract4.load
                 ("0x9a595464c540fbd4875aaa046ea0f4b2aad46d01", client, cryptoKeyPair);
         //调用合约更新函数
         TransactionReceipt receipt = generalContract4.update(
                 dto.getType_tablename_id(),dto.getVersion(),dto.getStatus(),dto.getData());

         ContrcatVO contrcatVO = new ContrcatVO();
         contrcatVO.setBlockHash(receipt.getBlockHash());
         contrcatVO.setTransactionHash(receipt.getTransactionHash());
         return contrcatVO;
     }

     /**
      *链上数据移除
      **/
     public String remove(String type_tablename_id){
      //  ThbcSDK thbcSDK = ThbcSDK.build("E:\\MyCode\\taiji\\tichain-sdk-demo\\src\\main\\resources\\conf\\config.toml");
         ThbcSDK thbcSDK = ThbcSDK.build("/data/jar/tichain/conf/config.toml");

         // 为群组初始化client
         Client client = thbcSDK.getClient(1);

         // 生成账户的密钥对
         CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();

         // 实例合约对象
         GeneralContract4 generalContract4 =GeneralContract4.load
                 ("0x9a595464c540fbd4875aaa046ea0f4b2aad46d01", client, cryptoKeyPair);
         //调用合约删除函数
         TransactionReceipt receipt = generalContract4.remove(type_tablename_id);
         return receipt.getTransactionHash();
     }
}
复制代码

 

 

复制代码
package com.thgy.tichain.tichainsdktaiji.service;

import com.thgy.tichain.tichainsdktaiji.client.dto.ContractDTO;
import com.thgy.tichain.tichainsdktaiji.client.vo.ContrcatVO;
import com.thgy.tichain.tichainsdktaiji.contract.Transaction;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.tianhe.thbc.sdk.ThbcSDK;
import org.tianhe.thbc.sdk.abi.datatypes.generated.tuples.generated.Tuple4;
import org.tianhe.thbc.sdk.client.Client;
import org.tianhe.thbc.sdk.crypto.keypair.CryptoKeyPair;
import org.tianhe.thbc.sdk.model.TransactionReceipt;
import org.tianhe.thbc.sdk.transaction.model.exception.ContractException;

import java.util.HashMap;
import java.util.Map;

/**
 * @author gym
 * @date 2025/2/18
 */
@Service
@Slf4j
public class TransactionService {
    /**
     * 数据上链
     * */
    public ContrcatVO insert(ContractDTO dto){
        //初始化SDK
     //   ThbcSDK thbcSDK = ThbcSDK.build("E:\\MyCode\\taiji\\tichain-sdk-demo\\src\\main\\resources\\conf\\config.toml");
        ThbcSDK thbcSDK = ThbcSDK.build("/data/jar/tichain/conf/config.toml");

        // 为群组初始化client
        Client client = thbcSDK.getClient(1);

        // 生成账户的密钥对
        CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();

        // 实例合约对象
        Transaction transaction =Transaction.load
                ("0x398ecdb924d31a8aa7cd289f2e5f0e8a365fe7be", client, cryptoKeyPair);
        //调用合约上链函数
        TransactionReceipt receipt = transaction.insert(
                dto.getType_tablename_id(),dto.getVersion(),dto.getStatus(),dto.getData()
        );
        ContrcatVO contrcatVO = new ContrcatVO();
        contrcatVO.setBlockHash(receipt.getBlockHash());
        contrcatVO.setTransactionHash(receipt.getTransactionHash());
        return contrcatVO;
    }

    /**
     * 链上数据查询
     * */
    public Map<String,String> getById(String type_tablename_id) throws ContractException {
        //初始化SDK
      // ThbcSDK thbcSDK = ThbcSDK.build("E:\\MyCode\\taiji\\tichain-sdk-demo\\src\\main\\resources\\conf\\config.toml");
        ThbcSDK thbcSDK = ThbcSDK.build("/data/jar/tichain/conf/config.toml");

        // 为群组初始化client
        Client client = thbcSDK.getClient(1);

        // 生成账户的密钥对
        CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();

        // 实例合约对象
        Transaction transaction =Transaction.load
                ("0x398ecdb924d31a8aa7cd289f2e5f0e8a365fe7be", client, cryptoKeyPair);
        //调用合约查询函数
        Tuple4<String, String, String, String> chainRet  =transaction.selectById(type_tablename_id);
        Map<String,String> ret = new HashMap<>();
        ret.put("type_tablename_id",chainRet.getValue1());
        ret.put("version",chainRet.getValue2());
        ret.put("status",chainRet.getValue3());
        ret.put("data",chainRet.getValue4());
        return ret;
    }

    /**
     * 链上数据修改
     * */
    public ContrcatVO update(ContractDTO dto) {
        //初始化SDK
       // ThbcSDK thbcSDK = ThbcSDK.build("E:\\MyCode\\taiji\\tichain-sdk-demo\\src\\main\\resources\\conf\\config.toml");
        ThbcSDK thbcSDK = ThbcSDK.build("/data/jar/tichain/conf/config.toml");

        // 为群组初始化client
        Client client = thbcSDK.getClient(1);

        // 生成账户的密钥对
        CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();

        // 实例合约对象
        Transaction transaction =Transaction.load
                ("0x398ecdb924d31a8aa7cd289f2e5f0e8a365fe7be", client, cryptoKeyPair);
        //调用合约更新函数
        TransactionReceipt receipt = transaction.update(
                dto.getType_tablename_id(),dto.getVersion(),dto.getStatus(),dto.getData());
        ContrcatVO contrcatVO = new ContrcatVO();
        contrcatVO.setBlockHash(receipt.getBlockHash());
        contrcatVO.setTransactionHash(receipt.getTransactionHash());
        return contrcatVO;
    }

    /**
     *链上数据移除
     **/
    public String remove(String type_tablename_id){
      //  ThbcSDK thbcSDK = ThbcSDK.build("E:\\MyCode\\taiji\\tichain-sdk-demo\\src\\main\\resources\\conf\\config.toml");
        ThbcSDK thbcSDK = ThbcSDK.build("/data/jar/tichain/conf/config.toml");

        // 为群组初始化client
        Client client = thbcSDK.getClient(1);

        // 生成账户的密钥对
        CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();

        // 实例合约对象
        Transaction transaction =Transaction.load
                ("0x398ecdb924d31a8aa7cd289f2e5f0e8a365fe7be", client, cryptoKeyPair);
        //调用合约删除函数
        TransactionReceipt receipt = transaction.remove(type_tablename_id);
        return receipt.getTransactionHash();
    }
}
复制代码

需要注意一下,在实例合约对象时,第一个参数就是合约的地址,该地址来自

 

代码中对应的DTO和VO类:

 

复制代码
package com.thgy.tichain.tichainsdktaiji.client.dto;

import java.math.BigInteger;

/**
 * @author gym
 * @date 2025/2/14
 */
public class ContractDTO {
     String type_tablename_id;
     String version;
     BigInteger status;
     String data;

    public String getType_tablename_id() {
        return type_tablename_id;
    }

    public void setType_tablename_id(String type_tablename_id) {
        this.type_tablename_id = type_tablename_id;
    }

    public BigInteger getStatus() {
        return status;
    }

    public void setStatus(BigInteger status) {
        this.status = status;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}
复制代码

 

 

复制代码
package com.thgy.tichain.tichainsdktaiji.client.vo;


/**
 * @author gym
 * @date 2025/2/22
 */
public class ContrcatVO {
   String transactionHash ;
   String blockHash ;

    public String getTransactionHash() {
        return transactionHash;
    }

    public void setTransactionHash(String transactionHash) {
        this.transactionHash = transactionHash;
    }

    public String getBlockHash() {
        return blockHash;
    }

    public void setBlockHash(String blockHash) {
        this.blockHash = blockHash;
    }
}
复制代码

 

 

SwaggerConfig类:

复制代码
package com.thgy.tichain.tichainsdktaiji.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @author DiomChen
 * @className SwaggerConfig
 * @description
 * @date 2022/11/03/ 10:48:00
 */

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()//build模式,返回一个建造者
                .apis(RequestHandlerSelectors.any())//api的配置路径
                .paths(PathSelectors.any())//扫描路径选择
                .build()
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("TICHAIN-SDK-API") //文档标题
                .description("TICHAIN-SDK-API")//接口概述
                .version("1.0") //版本号
                .termsOfServiceUrl(String.format("url"))//服务的域名
                .license("LICENSE")//证书
                .licenseUrl("https://tichain.tianhecloud.com/")//证书的url
                .build();
    }
}
复制代码

 

Controller层,封装接口


 

复制代码
package com.thgy.tichain.tichainsdktaiji.controller;

import com.thgy.tichain.tichainsdktaiji.client.dto.ContractDTO;
import com.thgy.tichain.tichainsdktaiji.client.vo.ContrcatVO;
import com.thgy.tichain.tichainsdktaiji.service.GeneralContract4Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.tianhe.thbc.sdk.model.TransactionReceipt;
import org.tianhe.thbc.sdk.transaction.model.exception.ContractException;

import java.util.Map;


/**
 * @author gym
 * @date 2025/2/14
 */
@RestController
@RequestMapping("/tichain/general")
@Validated
public class GeneralContract4Controller {
    @Autowired
    GeneralContract4Service generalContract4Service;

    @PostMapping("/insert")
    public ContrcatVO insert(@RequestBody ContractDTO dto) {
        ContrcatVO result=generalContract4Service.insert(dto);
        return result;
    }

    @GetMapping("/select")
    public Map<String , String> select(@RequestParam("typeTableNameId") String typeTableNameId) throws ContractException {
        Map<String , String> result = generalContract4Service.getById(typeTableNameId);
        return result;
    }

    @PostMapping("/update")
    public ContrcatVO update(@RequestBody ContractDTO dto) {
        ContrcatVO result=generalContract4Service.update(dto);
        return result;
    }

    @DeleteMapping("/{type_tablename_id}")
    public String delete(@RequestParam("type_tablename_id") String type_tablename_id) {
       String result = generalContract4Service.remove(type_tablename_id);
       return result;
    }
}
复制代码

 

复制代码
package com.thgy.tichain.tichainsdktaiji.controller;

import com.thgy.tichain.tichainsdktaiji.client.dto.ContractDTO;
import com.thgy.tichain.tichainsdktaiji.client.vo.ContrcatVO;
import com.thgy.tichain.tichainsdktaiji.service.TransactionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.tianhe.thbc.sdk.model.TransactionReceipt;
import org.tianhe.thbc.sdk.transaction.model.exception.ContractException;

import java.util.Map;


/**
 * @author gym
 * @date 2025/2/18
 */
@RestController
@RequestMapping("/tichain/transaction")
@Validated
public class TransactionController {
    @Autowired
    TransactionService transactionService;

    @PostMapping("/insert")
    public ContrcatVO insert(@RequestBody ContractDTO dto) {
        ContrcatVO result=transactionService.insert(dto);
        return result;
    }

    @GetMapping("/select")
    public Map<String , String> select(@RequestParam("typeTableNameId") String typeTableNameId) throws ContractException {
        Map<String , String> result = transactionService.getById(typeTableNameId);
        return result;
    }

    @PostMapping("/update")
    public ContrcatVO update(@RequestBody ContractDTO dto) {
        ContrcatVO result=transactionService.update(dto);
        return result;
    }

    @DeleteMapping("/{type_tablename_id}")
    public String delete(@RequestParam("type_tablename_id") String type_tablename_id) {
        String result = transactionService.remove(type_tablename_id);
        return result;
    }
}
复制代码

 

 

spring boot启动类

 

复制代码
package com.thgy.tichain.tichainsdktaiji;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.ConfigurableApplicationContext;

import org.springframework.scheduling.annotation.EnableScheduling;


//@EnableFeignClients(basePackages = {"com.thgy.tichain.tichainsdktaiji"})
@EnableDiscoveryClient
@SpringBootApplication
@EnableScheduling
public class TiChainSdkDemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(TiChainSdkDemoApplication.class, args);
    }

}
复制代码

 

 application.yml只需要配置一个微服务名称和端口号即可,我在实际项目中需要把该微服务注册到nacos上面

 

 

 

 

 

 

 







 

posted on   百里登峰  阅读(4)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示