import { Transaction } from './transaction' import * as chai from "chai" import chaiAsPromised from "chai-as-promised" before(() => { chai.should() chai.use(chaiAsPromised) }) describe('Transaction', function () { const etpTx = '0400000002b876d698a8b5c86d2008a0df4abce7d219b038307b8d0f18a5240461d7f8e52c010000006a473044022069b331762136a4be093d46869758e0c5ff352529ad68a1f90a4188e33e6004df0220667a8c18bb9800fecbfa6a6c7a21ac5677778b7729ae56e94c913b2312a43da9012103afa153f4c9ba1bd19ef2f1d765c51e30a4a0705cb61b4efee3c72fc3a11c0e5fffffffffb1b951f88475661a31df3b5879bb0920012bea4df914e42aeb7da0d579ab1563000000006a4730440220664e4deb69ba6de51269aa26ac83e22ad2bc132f28613fccd0c7a09130b1830102204129045f4788635e3eec6cdd324aa66f24db033a62927613d1f5bd1852a10410012103afa153f4c9ba1bd19ef2f1d765c51e30a4a0705cb61b4efee3c72fc3a11c0e5fffffffff02fc28090e000000001976a91486c84a82fd58727b4215e619215d4596325c69fb88ac010000000000000016bc4606000000001976a914e7da370944c15306b3809580110b0a6c653ac5a988ac010000000000000000000000' describe('Decoding', () => { it('Decode ETP Transfer', () => { chai.expect(Transaction.decode('0400000002c7aab7b74a3059a8452edaf9e076203650d74f899d5aa1e225b42d03bdc23889010000006b483045022100d95309298a8577a532755aa10106f48a5879970fdb1285d70d2278bff3e3b01c02202d3eb943e9dd147276ae3ffac280bacdeb69dc5372a1c65c184b81665c295d3c012103afa153f4c9ba1bd19ef2f1d765c51e30a4a0705cb61b4efee3c72fc3a11c0e5fffffffff5014aa36b5ad53b13575e9fc6e52b98651130e9134249fc4d590578b790037a1000000006b483045022100aae86a06bb315eccc6abb684cbc88814f89d6d48f1d083353f0d6832422f23c70220540c8b6226d99ac33ca0922307e76372e3ca12347311bc989a91fc5e80f68341012103afa153f4c9ba1bd19ef2f1d765c51e30a4a0705cb61b4efee3c72fc3a11c0e5fffffffff0226071c07000000001976a91482b8e0818e161f663cbb08c14fc4b68a072ac8d688ac0100000000000000f1cd5004000000001976a914e7da370944c15306b3809580110b0a6c653ac5a988ac010000000000000000000000').toString()).to.equal('0400000002c7aab7b74a3059a8452edaf9e076203650d74f899d5aa1e225b42d03bdc23889010000006b483045022100d95309298a8577a532755aa10106f48a5879970fdb1285d70d2278bff3e3b01c02202d3eb943e9dd147276ae3ffac280bacdeb69dc5372a1c65c184b81665c295d3c012103afa153f4c9ba1bd19ef2f1d765c51e30a4a0705cb61b4efee3c72fc3a11c0e5fffffffff5014aa36b5ad53b13575e9fc6e52b98651130e9134249fc4d590578b790037a1000000006b483045022100aae86a06bb315eccc6abb684cbc88814f89d6d48f1d083353f0d6832422f23c70220540c8b6226d99ac33ca0922307e76372e3ca12347311bc989a91fc5e80f68341012103afa153f4c9ba1bd19ef2f1d765c51e30a4a0705cb61b4efee3c72fc3a11c0e5fffffffff0226071c07000000001976a91482b8e0818e161f663cbb08c14fc4b68a072ac8d688ac0100000000000000f1cd5004000000001976a914e7da370944c15306b3809580110b0a6c653ac5a988ac010000000000000000000000') chai.expect(Transaction.decode(etpTx).getId('hex')).to.equal('edc0fcc62298971afcab5cba1531bec7ab077e3328316edc29d5c59eee59278a') chai.expect(Transaction.decode(Buffer.from(etpTx, 'hex')).getId('hex')).to.equal('edc0fcc62298971afcab5cba1531bec7ab077e3328316edc29d5c59eee59278a') }) it('Decode MST Transfer', ()=>{ const serialized = '0400000002f0e73a7b0676dda7d20f6b01b10e66a1c2e7cf11aeb50df6bdd90a61b25f3ffd020000006a4730440220302d9c22c2c9d1f21a5799dd4fd52c2203f1976edec36f46b403c6fa90aae5bb0220535a4cd9c2bb78c02a9149d0505b8c15c12b1775d6d76a019e6747082c8706d1012102fd2bfb8e744f2b568d7f9d7f9b234ac1da015e87e139884b9fabc401896a8720fffffffff0e73a7b0676dda7d20f6b01b10e66a1c2e7cf11aeb50df6bdd90a61b25f3ffd010000006a47304402205943c365341a51ce6b6a3318d7a429eb7c5317f6d543707d0c90287d084d7e96022027a34d2d2f046725b74b68efe73830fac8b25e2771894b0abbe9f9581ade091f012102fd2bfb8e744f2b568d7f9d7f9b234ac1da015e87e139884b9fabc401896a8720ffffffff0300000000000000001976a9140fc3b69f9c3111e5ade9850326bacd3a42b821e688ac01000000020000000200000003444e4160243e4101000000d05c830e000000001976a914a146498458042bede92dab626dbc5d0ea030694088ac010000000000000000000000000000001976a914a146498458042bede92dab626dbc5d0ea030694088ac01000000020000000200000003444e412c0c4f2f0700000000000000' chai.expect(Transaction.decode(serialized).toString()).to.equal(serialized) }) it('Decode MST Issue', ()=>{ const serialized = '0200000001fde1d5e7921c55e75a7cbbb14b3cac5d54054947361f0265d97524f6bb3e4428010000006b4830450221009440762e2c5e493c2116fb6670cc4fd05387c1e09466f9f4fc8c4a67538f8f7502207d84460468d6649ab39dddf010aea0eaa8e9e4e04fb1f4b55727c1d3a00e270c012103a5b99ffe264d507ac4657a255b13a239a008d53c9911571e88c69748b2b5cd95ffffffff0200000000000000001976a91497e51d23a8523036e685dd723b04e1ff2c80ebe488ac0100000002000000010000000338383800407a10f35a000006000000076269746b696e67224d4d6b4a6a5743594642525837615866394873503542717655697456413875794e6b03383838f020ca8e130000001976a91497e51d23a8523036e685dd723b04e1ff2c80ebe488ac010000000000000000000000' chai.expect(Transaction.decode(serialized).toString()).to.equal(serialized) }) it('Decode MIT Issue', ()=>{ const serialized = '040000000164c452a8faa4b9bfd8fc78203b0000afdc0da1cf7c1bf8b1b9abee632cbcbb43010000006b483045022100c78c3547169c93320c28af8aaecfe84b0f914a5210c24c108cda8aaa2096a60802202af79168b249dfde1a4400f73b81175de24251b39f60430a2a27330f17afd2e90121038226d48686883c899daa4c62be6dd3545d418c745a1731bec7f7925638f44da3ffffffff0200000000000000001976a9140e97a00b76e3df94a6888d7aade87b5797abdedd88accf000000060000000e5a5a6d31383637363433333539340e5a5a6d313836373634333335393401065a6a31333134224d39454b4c4461547668795a586d45736d586d4450434b687741704577697776595400f09aeb0b000000001976a9140e97a00b76e3df94a6888d7aade87b5797abdedd88ac010000000000000000000000' chai.expect(Transaction.decode(serialized).toString()).to.equal(serialized) }) }) describe('Encoding', () => { const transaction = Transaction.decode(Buffer.from(etpTx, 'hex')) it('Calculate txid', ()=>{ chai.expect(transaction.getId('buffer').toString('hex')).to.equal('edc0fcc62298971afcab5cba1531bec7ab077e3328316edc29d5c59eee59278a') chai.expect(transaction.getId('buffer').toString('hex')).to.equal(transaction.getId()) }) it('Decode ETP Transfer', () => { const txObject = transaction.toJSON() chai.expect(txObject.inputs.length).to.equal(2) chai.expect(txObject.outputs.length).to.equal(2) }) it('Endode ETP Transfer as string', () => { chai.expect(transaction.toString()).to.equal(etpTx) }) }) })