Java版本离线签名怎么实现

免费建站   2024年05月10日 17:52  

本篇内容介绍了“Java版本离线签名怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Build jar

first get source code

gitclonehttps://github.com/successli/tx_signer.git

get jar package

$mvnassembly:assembly-Dmaven.test.skip=true

You can get a jar with dependencies, and you can use it in your project.

Test cases

Need 3 Parameters:

Private Keys Array

Template Object

After call build transaction api return a Template json object. build transaction api

use bytom sdk return a Template object.

Raw Transaction

call decode raw-transaction api from dev branch. decode raw-transaction api

Call method:

//returnaTemplateobjectsignedofflinebasically.Templateresult=signatures.generateSignatures(privates,template,rawTransaction);//useresult'sraw_transactioncallsigntransactionapitobuildanotherdatabutnotneedpasswordorprivatekey.

Single-key Example:

@Test//使用SDK来构造Template对象参数,单签publicvoidtestSignSingleKey()throwsBytomException{Clientclient=Client.generateClient();Stringasset_id="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";Stringaddress="sm1qvyus3s5d7jv782syuqe3qrh75fx23lgpzf33em";//buildtransactionobtainaTemplateobjectTemplatetemplate=newTransaction.Builder().addAction(newTransaction.Action.SpendFromAccount().setAccountId("0G0NLBNU00A02").setAssetId(asset_id).setAmount(40000000)).addAction(newTransaction.Action.SpendFromAccount().setAccountId("0G0NLBNU00A02").setAssetId(asset_id).setAmount(300000000)).addAction(newTransaction.Action.ControlWithAddress().setAddress(address).setAssetId(asset_id).setAmount(30000000)).build(client);logger.info("template:"+template.toJson());//useTemplateobject'sraw_transactionidtodecoderaw_transactionobtainaRawTransactionobjectRawTransactiondecodedTx=RawTransaction.decode(client,template.rawTransaction);logger.info("decodeTx:"+decodedTx.toJson());//needaprivatekeyarrayString[]privateKeys=newString[]{"10fdbc41a4d3b8e5a0f50dd3905c1660e7476d4db3dbd9454fa4347500a633531c487e8174ffc0cfa76c3be6833111a9b8cd94446e37a76ee18bb21a7d6ea66b"};logger.info("privatekey:"+privateKeys[0]);//callofflinesignmethodtoobtainabasicofflinesignedtemplateSignaturessignatures=newSignaturesImpl();TemplatebasicSigned=signatures.generateSignatures(privateKeys,template,decodedTx);logger.info("basicsignedraw:"+basicSigned.toJson());//callsigntransactionapitocalculatewholeraw_transactionid//signpasswordisNoneoranotherrandomStringTemplateresult=newTransaction.SignerBuilder().sign(client,basicSigned,"");logger.info("resultraw_transaction:"+result.toJson());//successtosubmittransaction}

Multi-keys Example:

Need an account has two or more keys.

@Test//使用SDK来构造Template对象参数,多签publicvoidtestSignMultiKeys()throwsBytomException{Clientclient=Client.generateClient();Stringasset_id="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";Stringaddress="sm1qvyus3s5d7jv782syuqe3qrh75fx23lgpzf33em";//buildtransactionobtainaTemplateobject//account0G1RPP6OG0A06hastwokeysTemplatetemplate=newTransaction.Builder().setTtl(10).addAction(newTransaction.Action.SpendFromAccount().setAccountId("0G1RPP6OG0A06").setAssetId(asset_id).setAmount(40000000)).addAction(newTransaction.Action.SpendFromAccount().setAccountId("0G1RPP6OG0A06").setAssetId(asset_id).setAmount(300000000)).addAction(newTransaction.Action.ControlWithAddress().setAddress(address).setAssetId(asset_id).setAmount(30000000)).build(client);logger.info("template:"+template.toJson());//useTemplateobject'sraw_transactionidtodecoderaw_transactionobtainaRawTransactionobjectRawTransactiondecodedTx=RawTransaction.decode(client,template.rawTransaction);logger.info("decodeTx:"+decodedTx.toJson());//needaprivatekeyarrayString[]privateKeys=newString[]{"08bdbd6c22856c5747c930f64d0e5d58ded17c4473910c6c0c3f94e485833a436247976253c8e29e961041ad8dfad9309744255364323163837cbef2483b4f67","40c821f736f60805ad59b1fea158762fa6355e258601dfb49dda6f672092ae5adf072d5cab2ceaaa0d68dd3fe7fa04869d95afed8c20069f446a338576901e1b"};logger.info("privatekey1:"+privateKeys[0]);logger.info("privatekey2:"+privateKeys[1]);//callofflinesignmethodtoobtainabasicofflinesignedtemplateSignaturessignatures=newSignaturesImpl();TemplatebasicSigned=signatures.generateSignatures(privateKeys,template,decodedTx);logger.info("basicsignedraw:"+basicSigned.toJson());//callsigntransactionapitocalculatewholeraw_transactionid//signpasswordisNoneoranotherrandomStringTemplateresult=newTransaction.SignerBuilder().sign(client,basicSigned,"");logger.info("resultraw_transaction:"+result.toJson());//successtosubmittransaction}

Multi-keys and Multi-inputs Example:

@Test//使用SDK来构造Template对象参数,多签,多输入publicvoidtestSignMultiKeysMultiInputs()throwsBytomException{Clientclient=Client.generateClient();Stringasset_id="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";Stringaddress="sm1qvyus3s5d7jv782syuqe3qrh75fx23lgpzf33em";//buildtransactionobtainaTemplateobjectTemplatetemplate=newTransaction.Builder().setTtl(10)//1input.addAction(newTransaction.Action.SpendFromAccount().setAccountId("0G1RPP6OG0A06")//Multi-keysaccount.setAssetId(asset_id).setAmount(40000000)).addAction(newTransaction.Action.SpendFromAccount().setAccountId("0G1RPP6OG0A06").setAssetId(asset_id).setAmount(300000000))//2input.addAction(newTransaction.Action.SpendFromAccount().setAccountId("0G1Q6V1P00A02")//Multi-keysaccount.setAssetId(asset_id).setAmount(40000000)).addAction(newTransaction.Action.SpendFromAccount().setAccountId("0G1Q6V1P00A02").setAssetId(asset_id).setAmount(300000000)).addAction(newTransaction.Action.ControlWithAddress().setAddress(address).setAssetId(asset_id).setAmount(60000000)).build(client);logger.info("template:"+template.toJson());//useTemplateobject'sraw_transactionidtodecoderaw_transactionobtainaRawTransactionobjectRawTransactiondecodedTx=RawTransaction.decode(client,template.rawTransaction);logger.info("decodeTx:"+decodedTx.toJson());//needaprivatekeyarrayString[]privateKeys=newString[]{"08bdbd6c22856c5747c930f64d0e5d58ded17c4473910c6c0c3f94e485833a436247976253c8e29e961041ad8dfad9309744255364323163837cbef2483b4f67","40c821f736f60805ad59b1fea158762fa6355e258601dfb49dda6f672092ae5adf072d5cab2ceaaa0d68dd3fe7fa04869d95afed8c20069f446a338576901e1b","08bdbd6c22856c5747c930f64d0e5d58ded17c4473910c6c0c3f94e485833a436247976253c8e29e961041ad8dfad9309744255364323163837cbef2483b4f67"};logger.info("privatekey1:"+privateKeys[0]);logger.info("privatekey2:"+privateKeys[1]);//callofflinesignmethodtoobtainabasicofflinesignedtemplateSignaturessignatures=newSignaturesImpl();TemplatebasicSigned=signatures.generateSignatures(privateKeys,template,decodedTx);logger.info("basicsignedraw:"+basicSigned.toJson());//callsigntransactionapitocalculatewholeraw_transactionid//signpasswordisNoneoranotherrandomStringTemplateresult=newTransaction.SignerBuilder().sign(client,basicSigned,"");logger.info("resultraw_transaction:"+result.toJson());//successtosubmittransaction}

“Java版本离线签名怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部