opb-sdk-java (open alliance chain SDK java)
https://mvnrepository.com/artifact/io.github.bianjieai
<dependency>
<groupId>io.github.bianjieai</groupId>
<artifactId>opb-sdk</artifactId>
<version>${version}</version>
</dependency>从 Asset 页面下载jar包,并手动将jar包上传到私服
KeyManagerkm = KeyManagerFactory.createDefault();
Stringmnemonic = km.add();
System.out.println("助记词:" + mnemonic);
System.out.println("地址:" + km.getCurrentKeyInfo().getAddress());Stringmnemonic="opera xxx ...";
KeyManagerkm=KeyManagerFactory.createDefault();
km.recover(mnemonic);BigIntegerprivKey=newBigInteger("3c49175daf981965679bf88d2690e22144424e16c84e9d397ddb58b63603eeec",16);
KeyManagerkm=KeyManagerFactory.createKeyManger(AlgoEnum.SM2);
km.recover(privKey);Stringkeystore="-----BEGIN TENDERMINT PRIVATE KEY-----\n"+
"salt: 183EF9B57DEF8EF8C3AD9D21DE672E1B\n"+
"type: sm2\n"+
"kdf: bcrypt\n"+
"\n"+
"cpreEPwi0X3yIdsAIf94fR6s8L1TnDAQd/r4ifID6GmQX5a+4ehMmnTp2JjDpUe5\n"+
"kpgRI7CzF0DjKpPLvY9V9ZSXJFN42LHWscxqQ1E=\n"+
"=nJvd\n"+
"-----END TENDERMINT PRIVATE KEY-----";
InputStreaminput=newByteArrayInputStream(keystore.getBytes(StandardCharsets.UTF_8));
KeyManagerkm=KeyManagerFactory.createDefault();
km.recover(input,"123456");BigIntegerprivKey=newBigInteger("3c49175daf981965679bf88d2690e22144424e16c84e9d397ddb58b63603eeec",16);
KeyManagerkm=KeyManagerFactory.createDefault();
km.recover(privKey);
Stringkeystore=km.export("123456");
System.out.println(keystore);Stringmnemonic = "opera vivid pride shallow brick crew found resist decade neck expect apple chalk belt sick author know try tank detail tree impact hand best";
KeyManagerkm = KeyManagerFactory.createDefault();
km.recover(mnemonic);
// projectID: 填你的 projectIDStringnodeUri = "http://47.100.192.234:26657";
StringgrpcAddr = "47.100.192.234:9090";
StringchainId = "testing";
ClientConfigclientConfig = newClientConfig(nodeUri, grpcAddr, chainId);
OpbConfigopbConfig = null;
OpbClientclient = newOpbClient(clientConfig, opbConfig, km);
assertEquals("iaa1ytemz2xqq2s73ut3ys8mcd6zca2564a5lfhtm3", km.getCurrentKeyInfo().getAddress());Stringmnemonic = "opera vivid pride shallow brick crew found resist decade neck expect apple chalk belt sick author know try tank detail tree impact hand best";
KeyManagerkm = KeyManagerFactory.createDefault();
km.recover(mnemonic);
// projectID: 填你的 projectIDStringnodeUri = "https://opbningxia.bsngate.com:18602/api/${projectID}/rpc";
StringgrpcAddr = "opbningxia.bsngate.com:18603";
StringchainId = "wenchangchain";
ClientConfigclientConfig = newClientConfig(nodeUri, grpcAddr, chainId);
OpbConfigopbConfig = newOpbConfig(${projectID}, ${projectKey}, km.getCurrentKeyInfo().getAddress()); // 如果没有 projectKey 传null// 开启 TLS 连接opbConfig.setRequireTransportSecurity(true);
OpbClientclient = newOpbClient(clientConfig, opbConfig, km);
assertEquals("iaa1ytemz2xqq2s73ut3ys8mcd6zca2564a5lfhtm3", km.getCurrentKeyInfo().getAddress());// 该 client 类型:opbClientBaseClientbaseClient = client.getBaseClient();
TxEnginetxEngine = baseClient.getTxEngine();
// 以 editNft 交易为例构造 txBodyTx.MsgEditNFTmsg = Tx.MsgEditNFT
.newBuilder()
.setDenomId(denomID)
.setId(id)
.setName(name)
.setUri(uri)
.setData(data)
.setSender(baseClient.getCurrentAddr())
.build();
List<GeneratedMessageV3> msgs = Collections.singletonList(msg);
TxOuterClass.TxBodytxBody = txEngine.buildTxBody(msgs);
byte[] txBodyBz = txBody.toByteArray();参见前一下小结,需要先构造 txBody (see previous of this content, construct txBody first)
TxOuterClass.TxBodytxBody = txEngine.buildTxBody(msgs);
TxOuterClass.Txtx = txEngine.signTx(txBody, baseTx, baseClient.queryAccount());
TxOuterClass.AuthInfoauthInfo = tx.getAuthInfo();
byte[] authInfoBz = authInfo.toByteArray();// 使用 txEngine 签名交易TxOuterClass.Txtx = txEngine.signTx(txBody, baseTx, baseClient.queryAccount());
byte[] txBz = tx.toByteArray();
// 使用 rpcClient 将签名好的 txBz 直接发送到区块链RpcClientrpcClient = baseClient.getRpcClient();
ResultTxresultTx = rpcClient.broadcastTx(txBz, BroadcastMode.Commit);
// ---// 当然也可以自己使用 httpClient 进行发送,将 txBz 进行 base64 编码,并使用 jsonRpc 发送, 代码如下JsonRpcjsonRpc = JsonRpc.WrapTxBytes(txBytes, "broadcast_tx_commit");
Stringstr = httpUtils.post(rpcUri, JSON.toJSONString(jsonRpc)); // rpcUri: 链uri,第二个参数post 的bodyStringtxHash = client.getBaseClient().buildTxHash(msg, baseTx, account);BaseTxbaseTx = newBaseTx(200000, newFee("200000", "uirita"), BroadcastMode.Commit);
StringdenomID = "denomid" + newRandom().nextInt(1000);
StringdenomName = "test_name" + newRandom().nextInt(1000);
Stringschema = "no shcema";
IssueDenomRequestreq = newIssueDenomRequest()
.setId(denomID)
.setName(denomName)
.setSchema(schema);
ResultTxresultTx = nftClient.issueDenom(req, baseTx);BaseTxbaseTx = newBaseTx(200000, newFee("200000", "uirita"), BroadcastMode.Commit);
MintNFTRequestmintReq = newMintNFTRequest()
.setDenom(denomID)
.setId(nftID)
.setName(nftName)
.setUri(uri)
.setData(data)
.setRecipient(km.getAddr());
ResultTxresultTx = nftClient.mintNft(mintReq, baseTx);BaseTxbaseTx = newBaseTx(200000, newFee("200000", "uirita"), BroadcastMode.Commit);
StringnewName = "new_name";
StringnewUri = "http://xx.com";
StringnewData = "new_data";
EditNFTRequesteditReq = newEditNFTRequest()
.setDenom(denomID)
.setName(newName)
.setId(nftID)
.setUri(newUri)
.setData(newData);
ResultTxresultTx = nftClient.editNft(editReq, baseTx);BaseTxbaseTx = newBaseTx(200000, newFee("200000", "uirita"), BroadcastMode.Commit);
BurnNFTRequestburnNFTReq = newBurnNFTRequest()
.setDenom(denomID)
.setId(nftID);
ResultresultTx = nftClient.burnNft(burnNFTReq, baseTx);QueryDenomRespdenom = nftClient.queryDenom(denomID);
// next is findAllList<QueryDenomResp> denoms = nftClient.queryDenoms(null);QueryOwnerRespowner = nftClient.queryOwner(denomID, km.getAddr());BaseTxbaseTx = newBaseTx(200000, newFee("300000", "stake"), BroadcastMode.Commit);
Stringclass_ = "denom01";
Stringid = "nft26";
StringdestChainName = "iris-test1";
StringrelayerChainName = "";
Stringreceiver = "iaa14u80vaseg99lxej9cvlmfz96xe8mvv6p6g469p";
ResultTxresultTx = tibcClient.nftTransfer(class_, id, receiver, destChainName, relayerChainName, baseTx);BaseTxbaseTx = newBaseTx(200000, newFee("300000", "stake"), BroadcastMode.Commit);
StringdestChain = "iris-test1";
StringsourceChain = "iris-test2";
longsequence = 2;
QueryOuterClass.QueryPacketCommitmentResponsecommitment = tibcClient.packetCommitment(destChain, sourceChain, sequence);Perm.Rolerole = Perm.Role.BLACKLIST_ADMIN;
ResultTxresultTx = permClient.assignRoles(acc, Collections.singletonList(role), baseTx);
assertNotNull(resultTx.getResult().getHash());List<Perm.Role> roles = permClient.queryRoles(acc);permClient.unAssignRoles(acc, Collections.singletonList(role), baseTx);查看 permClient 下的方法 (see method in perClient.java)