天河链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>
在应用的主目录下新建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上面
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?