Hi Guest

More contents, please log on!

Bitmere.com 区块链技术 Content

比原链Java版本离线签名

yuan081608
57 0 0
    tx_signer
    Javaimplementationofsigningtransactionofflinetobytomd.
    Pre
    Getthesourcecode
    $gitclonehttps://github.com/Bytom/bytom.git$GOPATH/src/github.com/bytom
    gitcheckout
    $gitcheckoutdev
    Whyneeddevbranch?Becauseyoucouldcalldecodetransactionapifromdevbranchandobtaintx_idandsomeinputsids.
    Build
    $cd$GOPATH/src/github.com/bytom
    $makebytomd#buildbytomd
    $makebytomcli#buildbytomcli
    Whensuccessfullybuildingtheproject,thebytomandbytomclibinaryshouldbepresentincmd/bytomdandcmd/bytomclidirectory,respectively.
    Initialize
    Firstofall,initializethenode:
    $cd./cmd/bytomd
    $./bytomdinit--chain_idsolonet
    launch
    $./bytomdnode--mining
    Usage
    Buildjar

    firstgetsourcecode
    gitclonehttps://github.com/successli/tx_signer.git
    getjarpackage
    $mvnassembly:assembly-Dmaven.test.skip=true
    Youcangetajarwithdependencies,andyoucanuseitinyourproject.

    Testcases
    Need3Parameters:
    PrivateKeysArray
    TemplateObject
    AftercallbuildtransactionapireturnaTemplatejsonobject.buildtransactionapi
    usebytomjavasdkreturnaTemplateobject.
    RawTransaction
    calldecoderaw-transactionapifromdevbranch.decoderaw-transactionapi
    Callmethod:
    //returnaTemplateobjectsignedofflinebasically.
    Templateresult=signatures.generateSignatures(privates,template,rawTransaction);
    //useresult'sraw_transactioncallsigntransactionapitobuildanotherdatabutnotneedpasswordorprivatekey.
    Single-keyExample:
    @Test
    //使用SDK来构造Template对象参数,单签
    publicvoidtestSignSingleKey()throwsBytomException{
    Clientclient=Client.generateClient();
    Stringasset_id="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
    Stringaddress="sm1qvyus3s5d7jv782syuqe3qrh65fx23lgpzf33em";
    //buildtransactionobtainaTemplateobject
    Templatetemplate=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_transactionobtainaRawTransactionobject
    RawTransactiondecodedTx=RawTransaction.decode(client,template.rawTransaction);
    logger.info("decodeTx:"+decodedTx.toJson());
    //needaprivatekeyarray
    String[]privateKeys=newString[]{"10fdbc41a4d3b8e5a0f50dd3905c1660e7476d4db3dbd9454fa4347500a633531c487e8174ffc0cfa76c3be6833111a9b8cd94446e37a76ee18bb21a7d6ea66b"};
    logger.info("privatekey:"+privateKeys[0]);
    //callofflinesignmethodtoobtainabasicofflinesignedtemplate
    Signaturessignatures=newSignaturesImpl();
    TemplatebasicSigned=signatures.generateSignatures(privateKeys,template,decodedTx);
    logger.info("basicsignedraw:"+basicSigned.toJson());
    //callsigntransactionapitocalculatewholeraw_transactionid
    //signpasswordisNoneoranotherrandomString
    Templateresult=newTransaction.SignerBuilder().sign(client,
    basicSigned,"");
    logger.info("resultraw_transaction:"+result.toJson());
    //successtosubmittransaction
    }
    Multi-keysExample:
    Needanaccounthastwoormorekeys.
    @Test
    //使用SDK来构造Template对象参数,多签
    publicvoidtestSignMultiKeys()throwsBytomException{
    Clientclient=Client.generateClient();
    Stringasset_id="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
    Stringaddress="sm1qvyus3s5d7jv782syuqe3qrh65fx23lgpzf33em";
    //buildtransactionobtainaTemplateobject
    //account0G1RPP6OG0A06hastwokeys
    Templatetemplate=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_transactionobtainaRawTransactionobject
    RawTransactiondecodedTx=RawTransaction.decode(client,template.rawTransaction);
    logger.info("decodeTx:"+decodedTx.toJson());
    //needaprivatekeyarray
    String[]privateKeys=newString[]{"08bdbd6c22856c5747c930f64d0e5d58ded17c4473910c6c0c3f94e485833a436247976253c8e29e961041ad8dfad9309744255364323163837cbef2483b4f67",
    "40c821f736f60805ad59b1fea158762fa6355e258601dfb49dda6f672092ae5adf072d5cab2ceaaa0d68dd3fe7fa04869d95afed8c20069f446a338576901e1b"};
    logger.info("privatekey1:"+privateKeys[0]);
    logger.info("privatekey2:"+privateKeys[1]);
    //callofflinesignmethodtoobtainabasicofflinesignedtemplate
    Signaturessignatures=newSignaturesImpl();
    TemplatebasicSigned=signatures.generateSignatures(privateKeys,template,decodedTx);
    logger.info("basicsignedraw:"+basicSigned.toJson());
    //callsigntransactionapitocalculatewholeraw_transactionid
    //signpasswordisNoneoranotherrandomString
    Templateresult=newTransaction.SignerBuilder().sign(client,
    basicSigned,"");
    logger.info("resultraw_transaction:"+result.toJson());
    //successtosubmittransaction
    }
    Multi-keysandMulti-inputsExample:
    @Test
    //使用SDK来构造Template对象参数,多签,多输入
    publicvoidtestSignMultiKeysMultiInputs()throwsBytomException{
    Clientclient=Client.generateClient();
    Stringasset_id="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
    Stringaddress="sm1qvyus3s5d7jv782syuqe3qrh65fx23lgpzf33em";
    //buildtransactionobtainaTemplateobject
    Templatetemplate=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_transactionobtainaRawTransactionobject
    RawTransactiondecodedTx=RawTransaction.decode(client,template.rawTransaction);
    logger.info("decodeTx:"+decodedTx.toJson());
    //needaprivatekeyarray
    String[]privateKeys=newString[]{"08bdbd6c22856c5747c930f64d0e5d58ded17c4473910c6c0c3f94e485833a436247976253c8e29e961041ad8dfad9309744255364323163837cbef2483b4f67",
    "40c821f736f60805ad59b1fea158762fa6355e258601dfb49dda6f672092ae5adf072d5cab2ceaaa0d68dd3fe7fa04869d95afed8c20069f446a338576901e1b",
    "08bdbd6c22856c5747c930f64d0e5d58ded17c4473910c6c0c3f94e485833a436247976253c8e29e961041ad8dfad9309744255364323163837cbef2483b4f67"};
    logger.info("privatekey1:"+privateKeys[0]);
    logger.info("privatekey2:"+privateKeys[1]);
    //callofflinesignmethodtoobtainabasicofflinesignedtemplate
    Signaturessignatures=newSignaturesImpl();
    TemplatebasicSigned=signatures.generateSignatures(privateKeys,template,decodedTx);
    logger.info("basicsignedraw:"+basicSigned.toJson());
    //callsigntransactionapitocalculatewholeraw_transactionid
    //signpasswordisNoneoranotherrandomString
    Templateresult=newTransaction.SignerBuilder().sign(client,
    basicSigned,"");
    logger.info("resultraw_transaction:"+result.toJson());
    //successtosubmittransaction
    }

BitMere.com is Information release platform,just provides information storage space services.
The opinions expressed are solely those of the author,Does not constitute advice, please treat with caution.
You have to log in before you can reply Login | 立即注册

Points Rules

Write the first review

yuan081608 小学生
  • Follow

    0

  • Following

    0

  • Articles

    2

Promoted