UNPKG

divvy-rest

Version:

A RESTful API for submitting payments and monitoring accounts on the Divvy network.

1,476 lines (1,430 loc) 47.9 kB
/* eslint-disable new-cap */ /* eslint-disable valid-jsdoc */ /* eslint-disable max-len */ 'use strict'; var _ = require('lodash'); var addresses = require('./../fixtures').addresses; var SerializedObject = require('divvy-lib').SerializedObject; var fromAccount = addresses.VALID; var toAccount = addresses.COUNTERPARTY; var issuerAccount = addresses.ISSUER; module.exports.VALID_TRANSACTION_HASH = '22F45FBD4DFDE03CF5AED05F3F858C06E9206D07098E469363F9D48D9D019589'; module.exports.VALID_TRANSACTION_HASH_MEMO = 'F9DE78E635A418529A5104A56439F305CE7C42B9F29180F05D77326B9ACD1D33'; module.exports.INVALID_TRANSACTION_HASH = 'XF4AB442A6D4CBB935D66E1DA7309A5FC71C7143ED4049053EC14E3875B0CF9BF'; module.exports.VALID_SUBMITTED_TRANSACTION_HASH = '797A79F825CC5E5149D16D05960457A2E1C21484B41D8C80312601B39227ACE9'; var METADATA = module.exports.METADATA = { AffectedNodes: [ { ModifiedNode: { FinalFields: { Account: fromAccount, BookDirectory: '4627DFFCFF8B5A265EDBD8AE8C14A52325DBFEDAF4F5C32E5E03E788E09BB000', BookNode: '0000000000000000', Flags: 0, OwnerNode: '0000000000000000', Sequence: 58, TakerGets: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '5.648998' }, TakerPays: '6208248802' }, LedgerEntryType: 'Offer', LedgerIndex: '3CFB3C79D4F1BDB1EE5245259372576D926D9A875713422F7169A6CC60AFA68B', PreviousFields: { TakerGets: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '5.65' }, TakerPays: '6209350000' }, PreviousTxnID: '8F571C346688D89AC1F737AE3B6BB5D976702B171CC7B4DE5CA3D444D5B8D6B4', PreviousTxnLgrSeq: 348433 } }, { ModifiedNode: { FinalFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-0.001' }, Flags: 131072, HighLimit: { currency: 'USD', issuer: addresses.ISSUER, value: '1' }, HighNode: '0000000000000000', LowLimit: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '0' }, LowNode: '0000000000000002' }, LedgerEntryType: 'DivvyState', LedgerIndex: '4BD1874F8F3A60EDB0C23F5BD43E07953C2B8741B226648310D113DE2B486F01', PreviousFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '0' } }, PreviousTxnID: '5B2006DAD0B3130F57ACF7CC5CCAC2EEBCD4B57AAA091A6FD0A24B073D08ABB8', PreviousTxnLgrSeq: 343703 } }, { ModifiedNode: { FinalFields: { Account: addresses.VALID, Balance: '9998898762', Flags: 0, OwnerCount: 3, Sequence: 5 }, LedgerEntryType: 'AccountRoot', LedgerIndex: '4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05', PreviousFields: { Balance: '9999999970', Sequence: 4 }, PreviousTxnID: '53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8', PreviousTxnLgrSeq: 343570 } }, { ModifiedNode: { FinalFields: { Account: 'r9tGqzZgKxVFvzKFdUqXAqTzazWBUia8Qr', Balance: '912695302618', Flags: 0, OwnerCount: 10, Sequence: 59 }, LedgerEntryType: 'AccountRoot', LedgerIndex: 'F3E119AAA87AF3607CF87F5523BB8278A83BCB4142833288305D767DD30C392A', PreviousFields: { Balance: '912694201420' }, PreviousTxnID: '8F571C346688D89AC1F737AE3B6BB5D976702B171CC7B4DE5CA3D444D5B8D6B4', PreviousTxnLgrSeq: 348433 } }, { ModifiedNode: { FinalFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-5.5541638883365' }, Flags: 131072, HighLimit: { currency: 'USD', issuer: 'r9tGqzZgKxVFvzKFdUqXAqTzazWBUia8Qr', value: '1000' }, HighNode: '0000000000000000', LowLimit: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '0' }, LowNode: '000000000000000C' }, LedgerEntryType: 'DivvyState', LedgerIndex: 'FA1255C2E0407F1945BCF9351257C7C5C28B0F5F09BB81C08D35A03E9F0136BC', PreviousFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-5.5551658883365' } }, PreviousTxnID: '8F571C346688D89AC1F737AE3B6BB5D976702B171CC7B4DE5CA3D444D5B8D6B4', PreviousTxnLgrSeq: 348433 } } ], TransactionIndex: 0, TransactionResult: 'tesSUCCESS' }; module.exports.binaryTransactionSynth = function(options) { return { date: 416447810, hash: options.hash, inLedger: 348860, ledger_index: 348860, validated: options.validated }; }; module.exports.binaryTransaction = function(options) { options = options || {}; _.defaults(options, { memos: [] }); return { Account: fromAccount, Amount: { currency: 'USD', issuer: addresses.ISSUER, value: '0.001' }, Destination: addresses.ISSUER, Fee: '10', Flags: 0, Memos: options.memos, Paths: [ [ { currency: 'USD', issuer: addresses.COUNTERPARTY, type: 48, type_hex: '0000000000000030' }, { account: addresses.COUNTERPARTY, currency: 'USD', issuer: addresses.COUNTERPARTY, type: 49, type_hex: '0000000000000031' } ] ], SendMax: '1112209', Sequence: 4, SigningPubKey: '02BC8C02199949B15C005B997E7C8594574E9B02BA2D0628902E0532989976CF9D', TransactionType: 'Payment', TxnSignature: '304502204EE3E9D1B01D8959B08450FCA9E22025AF503DEF310E34A93863A85CAB3C0BC5022100B61F5B567F77026E8DEED89EED0B7CAF0E6C96C228A2A65216F0DC2D04D52083' }; }; module.exports.requestPath = function(address, params) { return '/v1/accounts/' + address + '/payments' + (params || ''); }; module.exports.accountTransactionsResponse = function(request, options) { options = options || {}; _.defaults(options, { memos: [], hash: module.exports.VALID_TRANSACTION_HASH, validated: true }); var tx = { Account: fromAccount, Amount: { currency: 'USD', issuer: addresses.ISSUER, value: '0.001' }, Destination: addresses.ISSUER, Fee: '10', Flags: 0, Memos: options.memos, Paths: [ [ { currency: 'USD', issuer: addresses.COUNTERPARTY, type: 48, type_hex: '0000000000000030' }, { account: addresses.COUNTERPARTY, currency: 'USD', issuer: addresses.COUNTERPARTY, type: 49, type_hex: '0000000000000031' } ] ], SendMax: '1112209', Sequence: 4, SigningPubKey: '02BC8C02199949B15C005B997E7C8594574E9B02BA2D0628902E0532989976CF9D', TransactionType: 'Payment', TxnSignature: '304502204EE3E9D1B01D8959B08450FCA9E22025AF503DEF310E34A93863A85CAB3C0BC5022100B61F5B567F77026E8DEED89EED0B7CAF0E6C96C228A2A65216F0DC2D04D52083' }; var meta = { AffectedNodes: [ { ModifiedNode: { FinalFields: { Account: fromAccount, BookDirectory: '4627DFFCFF8B5A265EDBD8AE8C14A52325DBFEDAF4F5C32E5E03E788E09BB000', BookNode: '0000000000000000', Flags: 0, OwnerNode: '0000000000000000', Sequence: 58, TakerGets: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '5.648998' }, TakerPays: '6208248802' }, LedgerEntryType: 'Offer', LedgerIndex: '3CFB3C79D4F1BDB1EE5245259372576D926D9A875713422F7169A6CC60AFA68B', PreviousFields: { TakerGets: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '5.65' }, TakerPays: '6209350000' }, PreviousTxnID: '8F571C346688D89AC1F737AE3B6BB5D976702B171CC7B4DE5CA3D444D5B8D6B4', PreviousTxnLgrSeq: 348433 } }, { ModifiedNode: { FinalFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-0.001' }, Flags: 131072, HighLimit: { currency: 'USD', issuer: addresses.ISSUER, value: '1' }, HighNode: '0000000000000000', LowLimit: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '0' }, LowNode: '0000000000000002' }, LedgerEntryType: 'DivvyState', LedgerIndex: '4BD1874F8F3A60EDB0C23F5BD43E07953C2B8741B226648310D113DE2B486F01', PreviousFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '0' } }, PreviousTxnID: '5B2006DAD0B3130F57ACF7CC5CCAC2EEBCD4B57AAA091A6FD0A24B073D08ABB8', PreviousTxnLgrSeq: 343703 } }, { ModifiedNode: { FinalFields: { Account: addresses.VALID, Balance: '9998898762', Flags: 0, OwnerCount: 3, Sequence: 5 }, LedgerEntryType: 'AccountRoot', LedgerIndex: '4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05', PreviousFields: { Balance: '9999999970', Sequence: 4 }, PreviousTxnID: '53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8', PreviousTxnLgrSeq: 343570 } }, { ModifiedNode: { FinalFields: { Account: 'r9tGqzZgKxVFvzKFdUqXAqTzazWBUia8Qr', Balance: '912695302618', Flags: 0, OwnerCount: 10, Sequence: 59 }, LedgerEntryType: 'AccountRoot', LedgerIndex: 'F3E119AAA87AF3607CF87F5523BB8278A83BCB4142833288305D767DD30C392A', PreviousFields: { Balance: '912694201420' }, PreviousTxnID: '8F571C346688D89AC1F737AE3B6BB5D976702B171CC7B4DE5CA3D444D5B8D6B4', PreviousTxnLgrSeq: 348433 } }, { ModifiedNode: { FinalFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-5.5541638883365' }, Flags: 131072, HighLimit: { currency: 'USD', issuer: 'r9tGqzZgKxVFvzKFdUqXAqTzazWBUia8Qr', value: '1000' }, HighNode: '0000000000000000', LowLimit: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '0' }, LowNode: '000000000000000C' }, LedgerEntryType: 'DivvyState', LedgerIndex: 'FA1255C2E0407F1945BCF9351257C7C5C28B0F5F09BB81C08D35A03E9F0136BC', PreviousFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-5.5551658883365' } }, PreviousTxnID: '8F571C346688D89AC1F737AE3B6BB5D976702B171CC7B4DE5CA3D444D5B8D6B4', PreviousTxnLgrSeq: 348433 } } ], TransactionIndex: 0, TransactionResult: 'tesSUCCESS' }; return JSON.stringify({ id: request.id, status: 'success', type: 'response', result: { transactions: [ { ledger_index: 348860, tx_blob: SerializedObject.from_json(tx).to_hex(), meta: SerializedObject.from_json(meta).to_hex(), validated: options.validated } ] } }); }; module.exports.transactionResponse = function(request, options) { options = options || {}; _.defaults(options, { memos: [], hash: module.exports.VALID_TRANSACTION_HASH, validated: true }); return JSON.stringify({ id: request.id, status: 'success', type: 'response', result: _.extend({ meta: SerializedObject.from_json(METADATA).to_hex(), tx: SerializedObject.from_json(module.exports.binaryTransaction(options)).to_hex() }, module.exports.binaryTransactionSynth(options)) }); }; module.exports.ledgerResponse = function(request) { return JSON.stringify( { id: request.id, status: 'success', type: 'response', result: { ledger: { accepted: true, account_hash: 'EC028EC32896D537ECCA18D18BEBE6AE99709FEFF9EF72DBD3A7819E918D8B96', close_time: 464908910, close_time_human: '2014-Sep-24 21:21:50', close_time_resolution: 10, closed: true, hash: '0F7ED9F40742D8A513AE86029462B7A6768325583DF8EE21B7EC663019DD6A0F', ledger_hash: '0F7ED9F40742D8A513AE86029462B7A6768325583DF8EE21B7EC663019DD6A0F', ledger_index: '9038214', parent_hash: '4BB9CBE44C39DC67A1BE849C7467FE1A6D1F73949EA163C38A0121A15E04FFDE', seqNum: '9038214', totalCoins: '99999973964317514', total_coins: '99999973964317514', transaction_hash: 'ECB730839EB55B1B114D5D1AD2CD9A932C35BA9AB6D3A8C2F08935EAC2BAC239' } } } ); }; module.exports.RESTTransactionResponse = function(options) { options = options || {}; _.defaults(options, { memos: undefined, hash: module.exports.VALID_TRANSACTION_HASH, fromAccount: fromAccount, toAccount: issuerAccount, fee: '0.00001', ledger: '348860', client_resource_id: '', state: 'validated' }); return JSON.stringify({ success: true, payment: { source_account: options.fromAccount, source_tag: '', source_amount: { value: '1.112209', currency: 'XDV', issuer: '' }, source_slippage: '0', destination_account: options.toAccount, destination_tag: '', destination_amount: { currency: 'USD', issuer: options.toAccount, value: '0.001' }, invoice_id: '', paths: '[[{\"currency\":\"USD\",\"issuer\":\"' + addresses.COUNTERPARTY + '\",\"type\":48,\"type_hex\":\"0000000000000030\"},{\"account\":\"' + addresses.COUNTERPARTY + '\",\"currency\":\"USD\",\"issuer\":\"' + addresses.COUNTERPARTY + '\",\"type\":49,\"type_hex\":\"0000000000000031\"}]]', no_direct_divvy: false, partial_payment: false, direction: 'outgoing', result: 'tesSUCCESS', timestamp: '2013-03-12T23:56:50.000Z', fee: options.fee, balance_changes: [ { currency: 'XDV', value: '-1.101208', issuer: '' } ], source_balance_changes: [ { value: '-1.101208', currency: 'XDV', issuer: '' } ], destination_balance_changes: [ { value: '0.001', currency: 'USD', issuer: addresses.COUNTERPARTY } ], order_changes: [ { taker_pays: {currency: 'XDV', issuer: '', value: '-1.101198'}, taker_gets: {currency: 'USD', issuer: addresses.COUNTERPARTY, value: '-0.001002'}, sequence: 58, status: 'open'} ], memos: options.memos }, client_resource_id: options.client_resource_id, hash: options.hash, ledger: options.ledger, state: options.state }); }; module.exports.RESTAccountTransactionsResponse = function(options) { options = options || {}; _.defaults(options, { memos: undefined, hash: module.exports.VALID_TRANSACTION_HASH, fromAccount: fromAccount, toAccount: issuerAccount, fee: '0.00001', ledger: '348860', client_resource_id: '' }); return JSON.stringify({ success: true, payments: [ { payment: { source_account: options.fromAccount, source_tag: '', source_amount: { value: '1.112209', currency: 'XDV', issuer: '' }, source_slippage: '0', destination_account: options.toAccount, destination_tag: '', destination_amount: { currency: 'USD', issuer: options.toAccount, value: '0.001' }, invoice_id: '', paths: '[[{"currency":"USD","issuer":"' + addresses.COUNTERPARTY + '","type":48,"type_hex":"0000000000000030"},{"account":"' + addresses.COUNTERPARTY + '","currency":"USD","issuer":"' + addresses.COUNTERPARTY + '","type":49,"type_hex":"0000000000000031"}]]', no_direct_divvy: false, partial_payment: false, direction: 'outgoing', result: 'tesSUCCESS', timestamp: '2014-09-24T21:21:50.000Z', fee: options.fee, balance_changes: [ { currency: 'XDV', value: '-1.101208', issuer: '' } ], source_balance_changes: [ { value: '-1.101208', currency: 'XDV', issuer: '' } ], destination_balance_changes: [ { value: '0.001', currency: 'USD', issuer: addresses.COUNTERPARTY } ], order_changes: [ {taker_pays: {currency: 'XDV', issuer: '', value: '-1.101198'}, taker_gets: {currency: 'USD', issuer: addresses.COUNTERPARTY, value: '-0.001002'}, sequence: 58, status: 'open' } ], memos: options.memos }, client_resource_id: options.client_resource_id, hash: options.hash, ledger: options.ledger, state: 'validated' } ] }); }; module.exports.RESTTransactionResponseComplexCurrencies = function(options) { options = options || {}; _.defaults(options, { memos: undefined, hash: module.exports.VALID_TRANSACTION_HASH, ledger: '10151421', client_resource_id: '' }); return JSON.stringify({ success: true, payment: { source_account: addresses.VALID, source_tag: '', source_amount: { currency: '0158415500000000C1F76FF6ECB0BAC600000000', issuer: addresses.COUNTERPARTY, value: '0.00000001' }, source_slippage: '0', destination_account: addresses.COUNTERPARTY, destination_tag: '', destination_amount: { currency: '0158415500000000C1F76FF6ECB0BAC600000000', issuer: addresses.COUNTERPARTY, value: '0.00000001' }, invoice_id: '', paths: '[]', no_direct_divvy: false, partial_payment: false, direction: 'outgoing', result: 'tesSUCCESS', timestamp: '2014-11-25T21:03:00.000Z', fee: '0.012', balance_changes: [ { currency: 'XDV', value: '-0.012', issuer: '' }, { currency: '0158415500000000C1F76FF6ECB0BAC600000000', value: '-1e-8', issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B' } ], source_balance_changes: [ { value: '-0.012', currency: 'XDV', issuer: '' }, { value: '-1e-8', currency: '0158415500000000C1F76FF6ECB0BAC600000000', issuer: addresses.COUNTERPARTY } ], destination_balance_changes: [ { value: '1e-8', currency: '0158415500000000C1F76FF6ECB0BAC600000000', issuer: addresses.VALID } ], order_changes: [] }, client_resource_id: options.client_resource_id, hash: options.hash, ledger: options.ledger, state: 'validated' }); }; module.exports.payment = function(options) { options = options || {}; _.defaults(options, { secret: addresses.SECRET, clientResourceId: '1', value: '1', currency: 'XDV', issuer: '', sourceAccount: addresses.VALID, destinationAccount: addresses.COUNTERPARTY }); return { secret: options.secret, client_resource_id: options.clientResourceId, fixed_fee: options.fixed_fee ? String(options.fixed_fee) : undefined, max_fee: options.max_fee ? String(options.max_fee) : undefined, last_ledger_sequence: options.lastLedgerSequence, payment: { source_account: options.sourceAccount, destination_account: options.destinationAccount, destination_amount: { value: options.value, currency: options.currency, issuer: options.issuer }, memos: options.memos } }; }; module.exports.accountInfoResponse = function(request) { return JSON.stringify( { id: request.id, status: 'success', type: 'response', result: { account_data: { Account: fromAccount, Balance: '30999545', Flags: 0, LedgerEntryType: 'AccountRoot', OwnerCount: 2, PreviousTxnID: '272B581E78B8FA3F532A89C506901F7F6625683BEA280FFB8E3B90E29A837E94', PreviousTxnLgrSeq: 9036179, Sequence: 23, index: '819EBB8946A3FF55FBFFE32F3AD429F866B5E5AADC253796E3E068E51D22F569' }, ledger_current_index: 9036069, validated: false } } ); }; module.exports.requestSubmitResponse = function(request, options) { options = options || {}; _.defaults(options, { LastLedgerSequence: 9036180, fee: '12', hash: module.exports.VALID_SUBMITTED_TRANSACTION_HASH }); return JSON.stringify( { id: request.id, status: 'success', type: 'response', result: { engine_result: 'tesSUCCESS', engine_result_code: 0, engine_result_message: 'The transaction was applied.', tx_blob: '12000022000000002400000017201B0089E19461400000000000006468400000000000000C7321029A98439AF7459E256D64635598E8B21047807E6B5E6BEE3A3CCF35DEAD2C2C55744630440220688EDB9DC23AEB60A46DDFCC496B4EFCFB1D2432DC9636E2B88F8462FAAE3C4D022005A8EEC4A60AA34B778089EE7BA4622A3D2F18F9B8A05F9EE6709CB2C1FC89968114A69FF8D7778091B9F273549766DD6C063D984B5F83143DD06317D19C6110CAFF150AE528F58843BE2CA1', tx_json: { Account: fromAccount, Amount: '100', Destination: toAccount, Fee: options.fee, Flags: 0, LastLedgerSequence: options.LastLedgerSequence, Sequence: 23, SigningPubKey: '029A98439AF7459E256D64635598E8B21047807E6B5E6BEE3A3CCF35DEAD2C2C55', TransactionType: 'Payment', TxnSignature: '30440220688EDB9DC23AEB60A46DDFCC496B4EFCFB1D2432DC9636E2B88F8462FAAE3C4D022005A8EEC4A60AA34B778089EE7BA4622A3D2F18F9B8A05F9EE6709CB2C1FC8996', hash: options.hash } } } ); }; module.exports.divvydSuccessResponse = function(request, options) { options = options || {}; _.defaults(options, { LastLedgerSequence: 9036180, Fee: '12', hash: module.exports.VALID_SUBMITTED_TRANSACTION_HASH }); return JSON.stringify( { engine_result: 'tesSUCCESS', engine_result_code: 0, engine_result_message: 'The transaction was applied.', ledger_hash: 'A7DB52A124E7D20C293EC37FD897DBB965480D7BA039A1F7500C761F8FA613E8', ledger_index: 9907427, meta: { AffectedNodes: [ { ModifiedNode: { FinalFields: { Account: toAccount, Balance: '38917451', Flags: 0, OwnerCount: 3, Sequence: 15 }, LedgerEntryType: 'AccountRoot', LedgerIndex: '232B144A8867993B74B65354DFBF94A7E91CDD2AB645E0CDD1C85C953E883D91', PreviousFields: { Balance: '38917450' }, PreviousTxnID: '64E8F8D87E96F01850C5F0092A95FED8B199D70E8E61562BF9C52DE768387466', PreviousTxnLgrSeq: 9907416 } }, { ModifiedNode: { FinalFields: { Account: fromAccount, Balance: '34862528', Flags: 0, OwnerCount: 1, Sequence: 242 }, LedgerEntryType: 'AccountRoot', LedgerIndex: '2BC3AC309793910D16A3CEA95D5514448C6884765E82C2BA29FA6D6692B4F90A', PreviousFields: { Balance: '34862541', Sequence: 241 }, PreviousTxnID: '64E8F8D87E96F01850C5F0092A95FED8B199D70E8E61562BF9C52DE768387466', PreviousTxnLgrSeq: 9907416 } } ], TransactionIndex: 3, TransactionResult: 'tesSUCCESS' }, status: 'closed', transaction: { Account: fromAccount, Amount: '1', Destination: toAccount, Fee: options.Fee, Flags: 2147483648, LastLedgerSequence: options.LastLedgerSequence, Sequence: 241, SigningPubKey: '03D642E6457B8AB4D140E2C66EB4C484FAFB1BF267CB578EC4815FE6CD06379C51', TransactionType: 'Payment', TxnSignature: '30450221008D77CF76ECF30DEF6C882C1E84E668E87EB03FC3B066A696A6B179579CABE36202205E0B3CF18A5101C52BDAEC6B480FAE4324886249FE019EC80597E668D2805546', date: 469160470, hash: options.hash }, type: 'transaction', validated: true } ); }; module.exports.divvydSubmitErrorResponse = function(request, options) { options = options || {}; _.defaults(options, { LastLedgerSequence: 9036180, Fee: '12', amount: '1', hash: module.exports.VALID_SUBMITTED_TRANSACTION_HASH }); return JSON.stringify( { id: request.id, result: { engine_result: options.engineResult, engine_result_code: options.engineResultCode, engine_result_message: options.engineResultMessage, tx_blob: '120000228000000024000000EC201B00971A5861400000000000000168400000000000000C732103D642E6457B8AB4D140E2C66EB4C484FAFB1BF267CB578EC4815FE6CD06379C5174463044022037A4D233ADA7604BCB329C9A254FA29269627B1C327FB39438724F2262F80DAA02202A8DA1B670BE0AB5D8606170E62C4364F1F0A2FC43392DAEE6A64043DC7716FE811426C4CFB3BD05A9AA23936F2E81634C66A9820C948314B92881442877D9FEEFB3190D6B33F731677B5710', tx_json: { Account: fromAccount, Amount: options.amount, Destination: toAccount, Fee: options.Fee, Flags: 2147483648, LastLedgerSequence: options.LastLedgerSequence, Sequence: 236, SigningPubKey: '03D642E6457B8AB4D140E2C66EB4C484FAFB1BF267CB578EC4815FE6CD06379C51', TransactionType: 'Payment', TxnSignature: '3044022037A4D233ADA7604BCB329C9A254FA29269627B1C327FB39438724F2262F80DAA02202A8DA1B670BE0AB5D8606170E62C4364F1F0A2FC43392DAEE6A64043DC7716FE', hash: options.hash } }, status: 'success', type: 'response' } ); }; module.exports.divvydSubscribeRequest = function(request) { return JSON.stringify({ id: request.id, command: 'subscribe', accounts: [ fromAccount ] }); }; module.exports.divvydSubcribeResponse = function(request) { return JSON.stringify({ id: request.id, result: {}, status: 'success', type: 'response' }); }; module.exports.divvydValidatedErrorResponse = function(request, options) { options = options || {}; _.defaults(options, { LastLedgerSequence: 9036180, Fee: '12', amount: '1' }); return JSON.stringify( { engine_result: options.engineResult, engine_result_code: options.engineResultCode, engine_result_message: options.engineResultMessage, ledger_hash: 'D797D779B29900F1ABA65BBCFB18A5675ED8B0B877DDB42983D3250F8280E8BE', ledger_index: 9902672, meta: { AffectedNodes: [ { ModifiedNode: { FinalFields: { Account: fromAccount, Balance: '34862592', Flags: 0, OwnerCount: 1, Sequence: 237 }, LedgerEntryType: 'AccountRoot', LedgerIndex: '2BC3AC309793910D16A3CEA95D5514448C6884765E82C2BA29FA6D6692B4F90A', PreviousFields: { Balance: '34862604', Sequence: 236 }, PreviousTxnID: 'D588A6353D01EF0A8E5E5B1153838D05061D0B332AA8BB85F5C2127215725F91', PreviousTxnLgrSeq: 9902649 } } ], TransactionIndex: 1, TransactionResult: options.engineResult }, status: 'closed', transaction: { Account: fromAccount, Amount: options.amount, Destination: toAccount, Fee: options.Fee, Flags: 2147483648, LastLedgerSequence: options.LastLedgerSequence, Sequence: 236, SigningPubKey: '03D642E6457B8AB4D140E2C66EB4C484FAFB1BF267CB578EC4815FE6CD06379C51', TransactionType: 'Payment', TxnSignature: '3044022037A4D233ADA7604BCB329C9A254FA29269627B1C327FB39438724F2262F80DAA02202A8DA1B670BE0AB5D8606170E62C4364F1F0A2FC43392DAEE6A64043DC7716FE', date: 469138400, hash: options.hash }, type: 'transaction', validated: true } ); }; module.exports.ledgerSequenceTooHighResponse = function(request, lastLedgerSequence) { return JSON.stringify({ id: request.id, status: 'success', type: 'response', result: { engine_result: 'tefMAX_LEDGER', engine_result_code: -186, engine_result_message: 'Ledger sequence too high.', tx_blob: '12000322000000002400000043201B0000000168400000000000000F732102AC2A11C997C04EC6A4139E6189111F90E89D05F9A9DDC3E2CA459CEA89C539D374463044022030177B57C6848DBABD9993F1480AC4CAEA04911FF0C6C0ED40484D10A7FA5FC0022073AD09CAFF94CB23821DF9B5915A47A7370178743279D3D676592F35F3A65F5B8114E81DCB25DAA1DDEFF45145D334C56F12EA63C337', tx_json: { Account: fromAccount, Fee: '15', Flags: 0, LastLedgerSequence: lastLedgerSequence, Sequence: 67, SigningPubKey: '02AC2A11C997C04EC6A4139E6189111F90E89D05F9A9DDC3E2CA459CEA89C539D3', TransactionType: 'AccountSet', TxnSignature: '3044022030177B57C6848DBABD9993F1480AC4CAEA04911FF0C6C0ED40484D10A7FA5FC0022073AD09CAFF94CB23821DF9B5915A47A7370178743279D3D676592F35F3A65F5B', hash: '6A171B18021FC45116B72FC80D82B234B1513EDD58DFFCE0E60CC8722A980E08' } } }); }; module.exports.destinationTagNeededResponse = function(request) { return JSON.stringify({ id: request.id, result: { engine_result: 'tefDST_TAG_NEEDED', engine_result_code: -193, engine_result_message: 'Destination tag required.', tx_blob: '1200002280000000240000004A201B00968D5B61D4838D7EA4C6800000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D168400000000000000C69D3C9A10B165530C70000000000000000000000004254430000000000E81DCB25DAA1DDEFF45145D334C56F12EA63C337732102AC2A11C997C04EC6A4139E6189111F90E89D05F9A9DDC3E2CA459CEA89C539D3744730450221009723AA02F9385CFD89C1B08CC8A03FE362F1A33431C8800EEE81D45A131E64AD02203B61F5B88F6B0B1CDF0EF991161535B7A3C3CBA0F9E716A07FF4BA0E4613152A8114E81DCB25DAA1DDEFF45145D334C56F12EA63C33783140A20B3C85F482532A9578DBB3950B85CA06594D10112010A20B3C85F482532A9578DBB3950B85CA06594D13000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1FF010A20B3C85F482532A9578DBB3950B85CA06594D11000000000000000000000000000000000000000003000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1FF01DD39C650A96EDA48334E70CC4A85B8B2E8502CD31000000000000000000000000000000000000000003000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1FF01DD39C650A96EDA48334E70CC4A85B8B2E8502CD33000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D100', tx_json: { Account: fromAccount, Amount: { currency: 'USD', issuer: toAccount, value: '1' }, Destination: toAccount, Fee: '12', Flags: 2147483648, LastLedgerSequence: 9866587, Paths: [ [ { account: toAccount, type: 1, type_hex: '0000000000000001' }, { currency: 'USD', issuer: toAccount, type: 48, type_hex: '0000000000000030' } ], [ { account: toAccount, type: 1, type_hex: '0000000000000001' }, { currency: 'XDV', type: 16, type_hex: '0000000000000010' }, { currency: 'USD', issuer: toAccount, type: 48, type_hex: '0000000000000030' } ], [ { account: 'rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q', type: 1, type_hex: '0000000000000001' }, { currency: 'XDV', type: 16, type_hex: '0000000000000010' }, { currency: 'USD', issuer: toAccount, type: 48, type_hex: '0000000000000030' } ], [ { account: 'rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q', type: 1, type_hex: '0000000000000001' }, { currency: 'USD', issuer: toAccount, type: 48, type_hex: '0000000000000030' } ] ], SendMax: { currency: 'BTC', issuer: fromAccount, value: '0.002710343781789895' }, Sequence: 74, SigningPubKey: '02AC2A11C997C04EC6A4139E6189111F90E89D05F9A9DDC3E2CA459CEA89C539D3', TransactionType: 'Payment', TxnSignature: '30450221009723AA02F9385CFD89C1B08CC8A03FE362F1A33431C8800EEE81D45A131E64AD02203B61F5B88F6B0B1CDF0EF991161535B7A3C3CBA0F9E716A07FF4BA0E4613152A', hash: module.exports.VALID_SUBMITTED_TRANSACTION_HASH } }, status: 'success', type: 'response' }); }; module.exports.transactionVerifiedResponse = function(options) { options = options || {}; _.defaults(options, { fee: '10', hash: module.exports.VALID_SUBMITTED_TRANSACTION_HASH, ledger: '34886' }); return JSON.stringify( { engine_result: 'tesSUCCESS', engine_result_code: 0, engine_result_message: 'The transaction was applied.', ledger_hash: 'F7D1AFD4B7F9F895A4720ADC612A7D6D87FAE94BAD86EB55C2951C7D311D6F94', ledger_index: options.ledger, status: 'closed', meta: { AffectedNodes: [ { ModifiedNode: { FinalFields: { Account: fromAccount, BookDirectory: '4627DFFCFF8B5A265EDBD8AE8C14A52325DBFEDAF4F5C32E5E03E788E09BB000', BookNode: '0000000000000000', Flags: 0, OwnerNode: '0000000000000000', Sequence: 58, TakerGets: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '5.648998' }, TakerPays: '6208248802' }, LedgerEntryType: 'Offer', LedgerIndex: '3CFB3C79D4F1BDB1EE5245259372576D926D9A875713422F7169A6CC60AFA68B', PreviousFields: { TakerGets: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '5.65' }, TakerPays: '6209350000' }, PreviousTxnID: '8F571C346688D89AC1F737AE3B6BB5D976702B171CC7B4DE5CA3D444D5B8D6B4', PreviousTxnLgrSeq: 348433 } }, { ModifiedNode: { FinalFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-0.001' }, Flags: 131072, HighLimit: { currency: 'USD', issuer: addresses.ISSUER, value: '1' }, HighNode: '0000000000000000', LowLimit: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '0' }, LowNode: '0000000000000002' }, LedgerEntryType: 'DivvyState', LedgerIndex: '4BD1874F8F3A60EDB0C23F5BD43E07953C2B8741B226648310D113DE2B486F01', PreviousFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '0' } }, PreviousTxnID: '5B2006DAD0B3130F57ACF7CC5CCAC2EEBCD4B57AAA091A6FD0A24B073D08ABB8', PreviousTxnLgrSeq: 343703 } }, { ModifiedNode: { FinalFields: { Account: addresses.VALID, Balance: '9998898762', Flags: 0, OwnerCount: 3, Sequence: 5 }, LedgerEntryType: 'AccountRoot', LedgerIndex: '4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05', PreviousFields: { Balance: '9999999970', Sequence: 4 }, PreviousTxnID: '53354D84BAE8FDFC3F4DA879D984D24B929E7FEB9100D2AD9EFCD2E126BCCDC8', PreviousTxnLgrSeq: 343570 } }, { ModifiedNode: { FinalFields: { Account: 'r9tGqzZgKxVFvzKFdUqXAqTzazWBUia8Qr', Balance: '912695302618', Flags: 0, OwnerCount: 10, Sequence: 59 }, LedgerEntryType: 'AccountRoot', LedgerIndex: 'F3E119AAA87AF3607CF87F5523BB8278A83BCB4142833288305D767DD30C392A', PreviousFields: { Balance: '912694201420' }, PreviousTxnID: '8F571C346688D89AC1F737AE3B6BB5D976702B171CC7B4DE5CA3D444D5B8D6B4', PreviousTxnLgrSeq: 348433 } }, { ModifiedNode: { FinalFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-5.5541638883365' }, Flags: 131072, HighLimit: { currency: 'USD', issuer: 'r9tGqzZgKxVFvzKFdUqXAqTzazWBUia8Qr', value: '1000' }, HighNode: '0000000000000000', LowLimit: { currency: 'USD', issuer: addresses.COUNTERPARTY, value: '0' }, LowNode: '000000000000000C' }, LedgerEntryType: 'DivvyState', LedgerIndex: 'FA1255C2E0407F1945BCF9351257C7C5C28B0F5F09BB81C08D35A03E9F0136BC', PreviousFields: { Balance: { currency: 'USD', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-5.5551658883365' } }, PreviousTxnID: '8F571C346688D89AC1F737AE3B6BB5D976702B171CC7B4DE5CA3D444D5B8D6B4', PreviousTxnLgrSeq: 348433 } } ], TransactionIndex: 0, TransactionResult: 'tesSUCCESS' }, transaction: { Account: addresses.VALID, Amount: { currency: 'USD', issuer: addresses.ISSUER, value: '0.001' }, Destination: addresses.ISSUER, Fee: options.fee, Flags: 0, LastLedgerSequence: 9036180, Paths: [ [ { currency: 'USD', issuer: addresses.COUNTERPARTY, type: 48, type_hex: '0000000000000030' }, { account: addresses.COUNTERPARTY, currency: 'USD', issuer: addresses.COUNTERPARTY, type: 49, type_hex: '0000000000000031' } ] ], SendMax: '1112209', Sequence: 4, SigningPubKey: '02BC8C02199949B15C005B997E7C8594574E9B02BA2D0628902E0532989976CF9D', TransactionType: 'Payment', TxnSignature: '304502204EE3E9D1B01D8959B08450FCA9E22025AF503DEF310E34A93863A85CAB3C0BC5022100B61F5B567F77026E8DEED89EED0B7CAF0E6C96C228A2A65216F0DC2D04D52083', date: 416447810, hash: options.hash }, type: 'transaction', validated: true } ); }; module.exports.verifiedResponseComplexCurrency = function(options) { options = options || {}; _.defaults(options, { hash: module.exports.VALID_SUBMITTED_TRANSACTION_HASH, fromAccount: fromAccount, toAccount: toAccount, ledger: '10151421' }); return JSON.stringify({ engine_result: 'tesSUCCESS', engine_result_code: 0, engine_result_message: 'The transaction was applied.', ledger_hash: '4D63F66E96FA9FDD477A3CECE7BCCC474CF69820530F0993853BD74810939B2B', ledger_index: options.ledger, meta: { AffectedNodes: [ { ModifiedNode: { FinalFields: { Account: options.fromAccount, Balance: '38821580', Flags: 0, OwnerCount: 3, Sequence: 23 }, LedgerEntryType: 'AccountRoot', LedgerIndex: '232B144A8867993B74B65354DFBF94A7E91CDD2AB645E0CDD1C85C953E883D91', PreviousFields: { Balance: '38833580', Sequence: 22 }, PreviousTxnID: '3C7368462683AF6731F0CF7D68C9126534599FB8A5842084C6515B8BD3FA8C91', PreviousTxnLgrSeq: 10151364 } }, { ModifiedNode: { FinalFields: { Balance: { currency: '0158415500000000C1F76FF6ECB0BAC600000000', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-0.00000022' }, Flags: 2228224, HighLimit: { currency: '0158415500000000C1F76FF6ECB0BAC600000000', issuer: options.toAccount, value: '107.5942812604172' }, HighNode: '0000000000000000', LowLimit: { currency: '0158415500000000C1F76FF6ECB0BAC600000000', issuer: options.fromAccount, value: '0' }, LowNode: '0000000000000000' }, LedgerEntryType: 'DivvyState', LedgerIndex: '8AB5CFA846695B5BA335D113125D0D5165E979EDC3014333CC594E16A8D4042E', PreviousFields: { Balance: { currency: '0158415500000000C1F76FF6ECB0BAC600000000', issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji', value: '-0.00000021' } }, PreviousTxnID: '3C7368462683AF6731F0CF7D68C9126534599FB8A5842084C6515B8BD3FA8C91', PreviousTxnLgrSeq: 10151364 } } ], TransactionIndex: 19, TransactionResult: 'tesSUCCESS' }, status: 'closed', transaction: { Account: options.fromAccount, Amount: { currency: '0158415500000000C1F76FF6ECB0BAC600000000', issuer: options.toAccount, value: '0.00000001' }, Destination: options.toAccount, Fee: '12000', Flags: 2147483648, LastLedgerSequence: 10151428, Sequence: 22, SigningPubKey: '0347FFA8A09A9C473D0A8D9026B02C12C8065E5E66A787A278B379132950EDA0DD', TransactionType: 'Payment', TxnSignature: '304402203657E0A56CA849B9D0DA1066590FF5E2E4936328027219E23690E8072F9DC1FD02202DED19813D54881183C0385DE362BD15ECD1ADBF54FCD09DACF456C170064D6D', date: 470264580, hash: options.hash }, type: 'transaction', validated: true }); }; module.exports.ledgerSequenceTooHighResponse = function(request) { return JSON.stringify( { id: request.id, result: { engine_result: 'tefMAX_LEDGER', engine_result_code: -186, engine_result_message: 'Ledger sequence too high.', tx_blob: '12000022800000002400000049201B0000000061D4038D7EA4C680000000000000000000000000005553440000000000625E2F1F09A0D769E05C04FAA64F0D2013306C6A68400000000000000C69D34A074F961630D40000000000000000000000004254430000000000E81DCB25DAA1DDEFF45145D334C56F12EA63C337732102AC2A11C997C04EC6A4139E6189111F90E89D05F9A9DDC3E2CA459CEA89C539D37446304402201B2E35F186C177C9DCF52EB8EB7BAA837EE56FA5A4D6D3A5DF28F115346059980220348EE36BBA46F618DCA38EA00008BA0436BA8C3336289E5B718D2FDA63793FBF8114E81DCB25DAA1DDEFF45145D334C56F12EA63C3378314625E2F1F09A0D769E05C04FAA64F0D2013306C6A011201DD39C650A96EDA48334E70CC4A85B8B2E8502CD3300000000000000000000000005553440000000000DD39C650A96EDA48334E70CC4A85B8B2E8502CD301DD39C650A96EDA48334E70CC4A85B8B2E8502CD3FF010A20B3C85F482532A9578DBB3950B85CA06594D1300000000000000000000000005553440000000000DD39C650A96EDA48334E70CC4A85B8B2E8502CD301DD39C650A96EDA48334E70CC4A85B8B2E8502CD3FF010A20B3C85F482532A9578DBB3950B85CA06594D13000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1010A20B3C85F482532A9578DBB3950B85CA06594D1FF01DD39C650A96EDA48334E70CC4A85B8B2E8502CD31000000000000000000000000000000000000000003000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1010A20B3C85F482532A9578DBB3950B85CA06594D100', tx_json: { Account: fromAccount, Amount: [Object], Destination: toAccount, Fee: '12', Flags: 2147483648, LastLedgerSequence: 0, Paths: [Object], SendMax: [Object], Sequence: 73, SigningPubKey: '02AC2A11C997C04EC6A4139E6189111F90E89D05F9A9DDC3E2CA459CEA89C539D3', TransactionType: 'Payment', TxnSignature: '304402201B2E35F186C177C9DCF52EB8EB7BAA837EE56FA5A4D6D3A5DF28F115346059980220348EE36BBA46F618DCA38EA00008BA0436BA8C3336289E5B718D2FDA63793FBF', hash: module.exports.VALID_SUBMITTED_TRANSACTION_HASH } }, status: 'success', type: 'response' } ); }; /** * Construct REST success response * * @param options * @param {String} clientResourceId * @param {String} account * @return {String} REST error response message */ module.exports.RESTSuccessResponse = function(options) { options = options || {}; _.defaults(options, { clientResourceId: '1', account: fromAccount }); return JSON.stringify( { success: true, client_resource_id: options.clientResourceId, status_url: 'http://127.0.0.1:5990/v1/accounts/' + fromAccount + '/payments/' + options.clientResourceId } ); };