diff --git a/app/admin.js b/app/admin.js index 3d7cc7f..bab324d 100755 --- a/app/admin.js +++ b/app/admin.js @@ -466,4 +466,4 @@ const run = co(function *(testArgs) { }); // For admin script and unit testing of functions -module.exports = { run, validateKey, saveKeys, db , requireDB }; +module.exports = { run, validateKey, saveKeys, db }; diff --git a/app/sign.js b/app/sign.js index 58fbafe..73d9a6e 100644 --- a/app/sign.js +++ b/app/sign.js @@ -90,8 +90,7 @@ const handleSignUtxo = function(recoveryRequest, key, skipConfirm) { throw new Error(`Unsupported coin: ${recoveryRequest.coin}`); } - const txHex = getTransactionHexFromRequest(recoveryRequest); - const transaction = utxoLib.Transaction.fromHex(txHex, network); + const transaction = utxoLib.Transaction.fromHex(recoveryRequest.transactionHex, network); const outputs = transaction.outs.map(out => ({ address: utxoLib.address.fromOutputScript(out.script, network), @@ -161,8 +160,7 @@ const handleSignUtxo = function(recoveryRequest, key, skipConfirm) { const handleSignEthereum = function(recoveryRequest, key, skipConfirm) { const EthTx = require('ethereumjs-tx'); - const txHex = getTransactionHexFromRequest(recoveryRequest); - const transaction = new EthTx(txHex); + const transaction = new EthTx(recoveryRequest.tx); const decimals = coinDecimals[recoveryRequest.coin]; const customMessage = recoveryRequest.custom ? recoveryRequest.custom.message : 'None'; @@ -194,10 +192,8 @@ const handleSignXrp = function(recoveryRequest, key, skipConfirm) { const rippleKeypairs = require('ripple-keypairs'); const rippleParse = require('ripple-binary-codec'); - const txHex = getTransactionHexFromRequest(recoveryRequest); - const decimals = coinDecimals[recoveryRequest.coin]; - const transaction = rippleParse.decode(txHex); + const transaction = rippleParse.decode(recoveryRequest.tx); const customMessage = recoveryRequest.custom ? recoveryRequest.custom.message : 'None'; const outputs = [{ @@ -216,9 +212,9 @@ const handleSignXrp = function(recoveryRequest, key, skipConfirm) { const backupAddress = rippleKeypairs.deriveAddress(backupKeyNode.keyPair.getPublicKeyBuffer().toString('hex')); const privateKeyHex = backupKeyNode.keyPair.getPrivateKeyBuffer().toString('hex'); - const cosignedTx = utils.signXrpWithPrivateKey(txHex, privateKeyHex, { signAs: backupAddress }); + const cosignedTx = utils.signXrpWithPrivateKey(recoveryRequest.txHex, privateKeyHex, { signAs: backupAddress }); - return rippleApi.combine([ txHex, cosignedTx.signedTransaction ]).signedTransaction; + return rippleApi.combine([ recoveryRequest.txHex, cosignedTx.signedTransaction ]).signedTransaction; }; const handleSignXlm = function(recoveryRequest, key, skipConfirm) { @@ -232,8 +228,7 @@ const handleSignXlm = function(recoveryRequest, key, skipConfirm) { const decimals = coinDecimals[recoveryRequest.coin]; - const txHex = getTransactionHexFromRequest(recoveryRequest); - const transaction = new stellar.Transaction(txHex); + const transaction = new stellar.Transaction(recoveryRequest.tx); const customMessage = recoveryRequest.custom ? recoveryRequest.custom.message : 'None'; if (transaction.operations.length !== 1) { @@ -276,8 +271,7 @@ const handleSignXlm = function(recoveryRequest, key, skipConfirm) { const handleSignErc20 = function(recoveryRequest, key, skipConfirm) { const EthTx = require('ethereumjs-tx'); - const txHex = getTransactionHexFromRequest(recoveryRequest); - const transaction = new EthTx(txHex); + const transaction = new EthTx(recoveryRequest.tx); const customMessage = recoveryRequest.custom ? recoveryRequest.custom.message : 'None'; const txData = transaction.data; @@ -333,23 +327,6 @@ const parseKey = function(rawkey, coin, path) { return rawkey; } -/** - Not all recoveryRequest files are formatted the same. Sometimes they have 'tx', 'txHex', or 'transactionHex' - This function gets and gets and returns the transaction hex in all of these cases - */ -const getTransactionHexFromRequest = function(recoveryRequest) { - if (recoveryRequest.txHex){ - return recoveryRequest.txHex - } - if (recoveryRequest.transactionHex){ - return recoveryRequest.transactionHex - } - if (recoveryRequest.tx){ - return recoveryRequest.tx - } - throw new Error("The recovery request did not provide a transaction hex"); -} - const handleSign = function(args) { const file = args.file; diff --git a/test/admin.js b/test/admin.js index ba6f125..e127fd6 100644 --- a/test/admin.js +++ b/test/admin.js @@ -206,7 +206,6 @@ describe('Offline Admin Tool', function() { path: '0' }; const keyList = [key]; - admin.requireDB(); yield admin.saveKeys(keyList, 'xpub'); const foundKey = yield MasterKey.findOne({ pub: xpub }); foundKey.should.have.property('signature'); diff --git a/test/sign.js b/test/sign.js index dcba1fc..3873c65 100644 --- a/test/sign.js +++ b/test/sign.js @@ -92,18 +92,6 @@ describe('Offline Signing Tool', function() { txHex.should.equal('0400008085202f89020f0b5e4de0186891e6f05528cf783b4b1d3912b5db54ccc2b6adc7b3d0e0092000000000fdfd0000473044022046bb07e69c18ac51a9e50b750ea4013741d28a3339c088b9dba19044423c70ab022047512defffc1f82fb71f637421063e7e54b91008ecb2f9c64fdc87f3aa1fa2cf01483045022100bd9797dc2737c7e2b64ca665aceca4cce57fbb88707858d86158bd78e90d6787022053fd1ce4f536cad2f4955c7219a2ef1c817147a1e8ad2ede95195e7416560f6b014c69522103738278e8d328d5a4f0fc369b9c49d551680d20db5c0be6997637a336964b5a2a2102b8a0a4ea660a24c2430c4e64c0b3f6b86683330aa852b8a47f0c9f98d3a9e67f21023764b4a19de42a5e3fc2d91ad6bdf8f5fcb637dbd0d3cd9258b28d5510347b0f53aeffffffff6aeabeea4a8e68c97eecd6823738beaa7ecf19f2988063bccfe0682ec1e7601400000000fdfe0000483045022100a51e4b0f556dbcb28d822f68e69ec34b3d2c9e145d4b45b64dd9f88097fe1ca102201fe64cd1b024033f7ad1126fd1f92628a95e44e633b0c5bcaaa5aca0a7b7fb1a01483045022100e32e9c6647f4ed8caa0f1ae7522cf7c42c881a9bc05041a85a3c1d57b67277aa022033846b58221f6f76defc6c5ebb735f7b82b824649e331a9eca94f00298fd6910014c695221027b919dc63f04713640e10904587b3b5cbd11f85a0d36c0d96598978f8587dfa0210272c7941f0a14cef6ce1b8d3d6d01826a829af391fb3c280798312d14e20ef50b210311d81eb4601cc7c4b99736471f55cde928f7d4a4201f974be4fc29c53bcf51d353aeffffffff0150f2e50e0000000017a914e1baafe8b024cb09df46b5f9ae292fa4d4c782c68700000000000000000000000000000000000000'); }); - it('throws error if no transaction hex is provided in recoveryRequest file', function() { - const recoveryRequest = JSON.parse(fs.readFileSync('./test/transactions/tzec.json', { encoding: 'utf8' })); - delete recoveryRequest.tx; - delete recoveryRequest.transactionHex; - const key = 'xprv9s21ZrQH143K3qsoJZSJteRRZXgNHtAw5sRC1tsSy6U1D7rvKUsTTVewmx77AiAZJngxnEWMw9EcMxid73171mV7mdNFQigNpPPuDSZGULW'; - try { - signingTool.handleSignUtxo(recoveryRequest, key, true).should.throw(); - } catch (err) { - err.message.should.equal('The recovery request did not provide a transaction hex'); - } - }); - it('parses a private key from 24 words and a path', function() { const key = 'bone,penalty,bundle,plug,february,roof,rely,angry,inspire,auto,indicate,shell,assist,unhappy,unable,clarify,pond,check,size,key,donor,midnight,inquiry,avoid'; const path = 'm/0';