From ea7aa808fc8ec90faa8568d548169847bf711c88 Mon Sep 17 00:00:00 2001 From: Max Polizzo Date: Wed, 24 May 2023 16:56:04 -0600 Subject: [PATCH] WIP Fix: post-163 tests in messaging package --wip-- [skip ci] --- .../__tests__/messages/ContractInfo.spec.ts | 3 +- .../DigitDecompositionEventDescriptor.spec.ts | 2 +- .../__tests__/messages/DlcAccept.spec.ts | 580 +++++++++--------- .../__tests__/messages/DlcCancel.spec.ts | 2 +- .../messages/DlcTransactions.spec.ts | 2 +- .../messages/EnumEventDescriptor.spec.ts | 2 +- .../messages/EventDescriptor.spec.ts | 2 +- .../messages/NodeAnnouncementMessage.spec.ts | 7 +- .../messages/OracleAnnouncement.spec.ts | 2 +- .../messages/OracleAttestation.spec.ts | 2 +- .../__tests__/messages/OracleEvent.spec.ts | 2 +- .../messages/OracleEventContainer.spec.ts | 2 +- .../messages/OracleIdentifier.spec.ts | 2 +- .../__tests__/messages/OracleInfo.spec.ts | 2 +- .../__tests__/messages/OrderAccept.spec.ts | 8 +- .../messages/OrderNegotiationFields.spec.ts | 300 +++------ .../lib/messages/ContractDescriptor.ts | 8 +- packages/messaging/lib/messages/DlcAccept.ts | 10 - .../messaging/lib/messages/FundingInput.ts | 8 - .../lib/messages/OrderNegotiationFields.ts | 8 +- 20 files changed, 391 insertions(+), 563 deletions(-) diff --git a/packages/messaging/__tests__/messages/ContractInfo.spec.ts b/packages/messaging/__tests__/messages/ContractInfo.spec.ts index 38d2c0b3..c850c809 100644 --- a/packages/messaging/__tests__/messages/ContractInfo.spec.ts +++ b/packages/messaging/__tests__/messages/ContractInfo.spec.ts @@ -10,7 +10,6 @@ import { import { ContractInfo, ContractInfoType, - DisjointContractInfo, SingleContractInfo, } from '../../lib/messages/ContractInfo'; import { SingleOracleInfo } from '../../lib/messages/OracleInfo'; @@ -24,7 +23,7 @@ import { RoundingIntervals } from '../../lib/messages/RoundingIntervals'; chai.use(chaiAsPromised); const expect = chai.expect; -describe('ContractInfoV0', () => { +describe('ContractInfo', () => { describe('serialize', () => { it('serializes', () => { const instance = new SingleContractInfo(); diff --git a/packages/messaging/__tests__/messages/DigitDecompositionEventDescriptor.spec.ts b/packages/messaging/__tests__/messages/DigitDecompositionEventDescriptor.spec.ts index 7e27f1bd..8f2bfcca 100644 --- a/packages/messaging/__tests__/messages/DigitDecompositionEventDescriptor.spec.ts +++ b/packages/messaging/__tests__/messages/DigitDecompositionEventDescriptor.spec.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { DigitDecompositionEventDescriptorV0Pre167 } from '../../lib/messages/pre-167/EventDescriptor'; -describe('DigitDecompositionEventDescriptorV0', () => { +describe('DigitDecompositionEventDescriptorV0Pre167', () => { describe('serialize', () => { it('serializes', () => { const instance = new DigitDecompositionEventDescriptorV0Pre167(); diff --git a/packages/messaging/__tests__/messages/DlcAccept.spec.ts b/packages/messaging/__tests__/messages/DlcAccept.spec.ts index bde40d15..cbd957c6 100644 --- a/packages/messaging/__tests__/messages/DlcAccept.spec.ts +++ b/packages/messaging/__tests__/messages/DlcAccept.spec.ts @@ -1,290 +1,290 @@ -// import { sigToDER } from '@node-lightning/crypto'; -// import { BitcoinNetworks } from 'bitcoin-networks'; -// import { expect } from 'chai'; - -// import { CetAdaptorSignatures } from '../../lib/messages/CetAdaptorSignatures'; -// import { DlcAccept, DlcAcceptV0 } from '../../lib/messages/DlcAccept'; -// import { FundingInput } from '../../lib/messages/FundingInput'; -// import { MessageType } from '../../lib/MessageType'; - -// describe('DlcAccept', () => { -// const bitcoinNetwork = BitcoinNetworks.bitcoin_regtest; -// let instance: DlcAcceptV0; - -// const type = Buffer.from('a71c', 'hex'); - -// const protocolVersion = Buffer.from('00000001', 'hex'); - -// const tempContractId = Buffer.from( -// '960fb5f7960382ac7e76f3e24eb6b00059b1e68632a946843c22e1f65fdf216a', -// 'hex', -// ); - -// const acceptCollateralSatoshis = Buffer.from('0000000005f5e100', 'hex'); - -// const fundingPubKey = Buffer.from( -// '026d8bec9093f96ccc42de166cb9a6c576c95fc24ee16b10e87c3baaa4e49684d9', -// 'hex', -// ); - -// const payoutSPKLen = Buffer.from('0016', 'hex'); -// const payoutSPK = Buffer.from( -// '001436054fa379f7564b5e458371db643666365c8fb3', -// 'hex', -// ); - -// const payoutSerialID = Buffer.from('000000000018534a', 'hex'); - -// const fundingInputsLen = Buffer.from('01', 'hex'); -// const fundingInput = Buffer.from( -// '000000000000dae8' + // input_serial_id -// '29' + // prevtx_len -// '02000000000100c2eb0b000000001600149ea3bf2d6eb9c2ffa35e36f41e117403ed7fafe900000000' + // prevtx -// '00000000' + // prevtx_vout -// 'ffffffff' + // sequence -// '006b' + // max_witness_len -// '0000', // redeem_script_len -// 'hex', -// ); - -// const changeSPKLen = Buffer.from('0016', 'hex'); -// const changeSPK = Buffer.from( -// '0014074c82dbe058212905bacc61814456b7415012ed', -// 'hex', -// ); - -// const changeSerialID = Buffer.from('00000000000d8117', 'hex'); - -// const cetAdaptorSignatures = Buffer.from( -// '03' + // nb_signatures -// '016292f1b5c67b675aea69c95ec81e8462ab5bb9b7a01f810f6d1a7d1d886893b3605fe7fcb75a14b1b1de917917d37e9efac6437d7a080da53fb6dbbcfbfbe7a8' + // ecdsa_adaptor_signature_1 -// '01efbecb2bce89556e1fb4d31622628830e02a6d04c487f67aca20e9f60fb127f985293541cd14e2bf04e4777d50953531e169dd37c65eb3cc17d6b5e4dbe58487f9fae1f68f603fe014a699a346b14a63048c26c9b31236d83a7e369a2b29a292' + // dleq_proof_1 -// '00e52fe05d832bcce4538d9c27f3537a0f2086b265b6498f30cf667f77ff2fa87606574bc9a915ef57f7546ebb6852a490ad0547bdc52b19791d2d0f0cc0acabab' + // ecdsa_adaptor_signature_2 -// '01f32459001a28850fa8ee4278111deb0494a8175f02e31a1c18b39bd82ec64026a6f341bcd5ba169d67b855030e36bdc65feecc0397a07d3bc514da69811ec5485f5553aebda782bc5ac9b47e8e11d701a38ef2c2b7d8af3906dd8dfc759754ce' + // dleq_proof_2 -// '006f769592c744141a5ddface6e98f756a9df1bb75ad41508ea013bdfee133b396d85be51f870bf2e0ae836bfa984109dab96cc6f4ab2a7f118bc6b0b25a4c70d4' + // ecdsa_adaptor_signature_3 -// '01c768c1d677c6ff0b7ea69fdf29aff1000794227db368dff16e838d1f44c4afe9e952ee63d603f7b14de13c1d73b363cc2b1740d0b688e73d8e71cddf40f8e7e912df413903779c4e5d6644c504c8609baec8fdcb90d6d341cf316748f5d7945f', -// 'hex', -// ); - -// const refundSignature = Buffer.from( -// '7c8ad6de287b62a1ed1d74ed9116a5158abc7f97376d201caa88e0f9daad68fcda4c271cc003512e768f403a57e5242bd1f6aa1750d7f3597598094a43b1c7bb', -// 'hex', -// ); - -// const negotiationFields = Buffer.from('00', 'hex'); - -// const dlcAcceptHex = Buffer.concat([ -// type, -// protocolVersion, -// tempContractId, -// acceptCollateralSatoshis, -// fundingPubKey, -// payoutSPKLen, -// payoutSPK, -// payoutSerialID, -// fundingInputsLen, -// fundingInput, -// changeSPKLen, -// changeSPK, -// changeSerialID, -// cetAdaptorSignatures, -// refundSignature, -// negotiationFields, -// ]); - -// beforeEach(() => { -// instance = new DlcAcceptV0(); -// instance.protocolVersion = parseInt(protocolVersion.toString('hex'), 16); -// instance.tempContractId = tempContractId; -// instance.acceptCollateralSatoshis = BigInt(100000000); -// instance.fundingPubKey = fundingPubKey; -// instance.payoutSPK = payoutSPK; -// instance.payoutSerialId = BigInt(1594186); -// instance.fundingInputs = [FundingInput.deserialize(fundingInput)]; -// instance.changeSPK = changeSPK; -// instance.changeSerialId = BigInt(885015); -// instance.cetSignatures = CetAdaptorSignatures.deserialize( -// cetAdaptorSignatures, -// ); -// instance.refundSignature = refundSignature; -// }); - -// describe('deserialize', () => { -// it('should throw if incorrect type', () => { -// instance.type = 0x123; -// expect(function () { -// DlcAccept.deserialize(instance.serialize()); -// }).to.throw(Error); -// }); - -// it('has correct type', () => { -// expect(DlcAccept.deserialize(instance.serialize()).type).to.equal( -// instance.type, -// ); -// }); - -// it('deserializes without cets', () => { -// const dlcAccept = DlcAccept.deserialize(instance.serialize(), false); -// expect(dlcAccept.cetSignatures.sigs.length).to.be.equal(0); -// }); -// }); - -// describe('DlcAcceptV0', () => { -// describe('serialize', () => { -// it('serializes', () => { -// expect(instance.serialize().toString('hex')).to.equal( -// dlcAcceptHex.toString('hex'), -// ); -// }); - -// it('serializes a dlcAccept without cets', () => { -// const _dlcAcceptWithoutSigs = DlcAccept.deserialize( -// instance.serialize(), -// false, -// ); -// const dlcAcceptWithoutSigsHex = _dlcAcceptWithoutSigs -// .serialize() -// .toString('hex'); -// const dlcAcceptWithoutSigs = DlcAccept.deserialize( -// Buffer.from(dlcAcceptWithoutSigsHex, 'hex'), -// true, -// ); - -// expect(dlcAcceptWithoutSigs.cetSignatures.sigs.length).to.be.equal(0); -// }); -// }); - -// describe('deserialize', () => { -// it('deserializes', () => { -// const instance = DlcAcceptV0.deserialize(dlcAcceptHex); - -// expect(instance.tempContractId).to.deep.equal(tempContractId); -// expect(Number(instance.acceptCollateralSatoshis)).to.equal(100000000); -// expect(instance.fundingPubKey).to.deep.equal(fundingPubKey); -// expect(instance.payoutSPK).to.deep.equal(payoutSPK); -// expect(Number(instance.payoutSerialId)).to.equal(1594186); -// expect(instance.fundingInputs[0].serialize().toString('hex')).to.equal( -// fundingInput.toString('hex'), -// ); -// expect(instance.changeSPK).to.deep.equal(changeSPK); -// expect(Number(instance.changeSerialId)).to.equal(885015); -// expect(instance.cetSignatures.serialize().toString('hex')).to.equal( -// cetAdaptorSignatures.toString('hex'), -// ); -// expect(instance.refundSignature).to.deep.equal(refundSignature); -// expect(instance.negotiationFields).to.equal(null); -// }); - -// it('has correct type', () => { -// expect(DlcAcceptV0.deserialize(dlcAcceptHex).type).to.equal( -// MessageType.DlcAcceptV0, -// ); -// }); -// }); - -// describe('toJSON', () => { -// it('convert to JSON', async () => { -// const json = instance.toJSON(); -// expect(json.message.temporaryContractId).to.equal( -// tempContractId.toString('hex'), -// ); -// expect(json.message.fundingPubkey).to.equal( -// fundingPubKey.toString('hex'), -// ); -// expect(json.message.payoutSpk).to.equal(payoutSPK.toString('hex')); -// expect(json.message.fundingInputs[0].prevTx).to.equal( -// instance.fundingInputs[0].prevTx.serialize().toString('hex'), -// ); -// expect(json.message.changeSpk).to.equal(changeSPK.toString('hex')); -// expect(json.message.refundSignature).to.equal( -// sigToDER(refundSignature).toString('hex'), -// ); -// }); -// }); - -// describe('withoutSigs', () => { -// it('does not contain sigs', () => { -// const instance = DlcAcceptV0.deserialize(dlcAcceptHex).withoutSigs(); -// expect(instance['cetSignatures']).to.not.exist; -// }); -// }); - -// describe('getAddresses', () => { -// it('should get addresses', async () => { -// const expectedFundingAddress = -// 'bcrt1qrhzxd53jmv7znf0ywvcvpm06ndhgp5fcxjy57k'; -// const expectedChangeAddress = -// 'bcrt1qqaxg9klqtqsjjpd6e3scz3zkkaq4qyhd7rg6dd'; -// const expectedPayoutAddress = -// 'bcrt1qxcz5lgme7atykhj9sdcakepkvcm9eran32jk9c'; - -// const instance = DlcAcceptV0.deserialize(dlcAcceptHex); - -// const { -// fundingAddress, -// changeAddress, -// payoutAddress, -// } = instance.getAddresses(bitcoinNetwork); - -// expect(fundingAddress).to.equal(expectedFundingAddress); -// expect(changeAddress).to.equal(expectedChangeAddress); -// expect(payoutAddress).to.equal(expectedPayoutAddress); -// }); -// }); - -// describe('validate', () => { -// it('should throw if payout_spk is invalid', () => { -// instance.payoutSPK = Buffer.from('fff', 'hex'); -// expect(function () { -// instance.validate(); -// }).to.throw(Error); -// }); -// it('should throw if change_spk is invalid', () => { -// instance.changeSPK = Buffer.from('fff', 'hex'); -// expect(function () { -// instance.validate(); -// }).to.throw(Error); -// }); -// it('should throw if fundingpubkey is not a valid pubkey', () => { -// instance.fundingPubKey = Buffer.from( -// '00f003aa11f2a97b6be755a86b9fd798a7451c670196a5245b7bae971306b7c87e', -// 'hex', -// ); -// expect(function () { -// instance.validate(); -// }).to.throw(Error); -// }); -// it('should throw if fundingpubkey is not in compressed secp256k1 format', () => { -// instance.fundingPubKey = Buffer.from( -// '045162991c7299223973cabc99ef5087d7bab2dafe61f78e5388b2f9492f7978123f51fd05ef0693790c0b2d4f30848363a3f3fbcf2bd53a05ba0fd5bb708c3184', -// 'hex', -// ); -// expect(function () { -// instance.validate(); -// }).to.throw(Error); -// }); -// it('should throw if inputSerialIds arent unique', () => { -// instance.fundingInputs = [ -// FundingInput.deserialize(fundingInput), -// FundingInput.deserialize(fundingInput), -// ]; -// expect(function () { -// instance.validate(); -// }).to.throw(Error); -// }); -// it('should ensure funding inputs are segwit', () => { -// instance.fundingInputs = [FundingInput.deserialize(fundingInput)]; -// expect(function () { -// instance.validate(); -// }).to.throw(Error); -// }); - -// it('should throw if funding amount less than accept collateral satoshis', () => { -// instance.acceptCollateralSatoshis = BigInt(3e8); -// expect(function () { -// instance.validate(); -// }).to.throw(Error); -// }); -// }); -// }); -// }); +import { sigToDER } from '@node-lightning/crypto'; +import { BitcoinNetworks } from 'bitcoin-networks'; +import { expect } from 'chai'; + +import { CetAdaptorSignatures } from '../../lib/messages/CetAdaptorSignatures'; +import { DlcAccept, DlcAcceptV0 } from '../../lib/messages/DlcAccept'; +import { FundingInput } from '../../lib/messages/FundingInput'; +import { MessageType } from '../../lib/MessageType'; + +describe('DlcAccept', () => { + const bitcoinNetwork = BitcoinNetworks.bitcoin_regtest; + let instance: DlcAcceptV0; + + const type = Buffer.from('a71c', 'hex'); + + const protocolVersion = Buffer.from('00000001', 'hex'); + + const tempContractId = Buffer.from( + '960fb5f7960382ac7e76f3e24eb6b00059b1e68632a946843c22e1f65fdf216a', + 'hex', + ); + + const acceptCollateralSatoshis = Buffer.from('0000000005f5e100', 'hex'); + + const fundingPubKey = Buffer.from( + '026d8bec9093f96ccc42de166cb9a6c576c95fc24ee16b10e87c3baaa4e49684d9', + 'hex', + ); + + const payoutSPKLen = Buffer.from('0016', 'hex'); + const payoutSPK = Buffer.from( + '001436054fa379f7564b5e458371db643666365c8fb3', + 'hex', + ); + + const payoutSerialID = Buffer.from('000000000018534a', 'hex'); + + const fundingInputsLen = Buffer.from('01', 'hex'); + const fundingInput = Buffer.from( + '000000000000dae8' + // input_serial_id + '29' + // prevtx_len + '02000000000100c2eb0b000000001600149ea3bf2d6eb9c2ffa35e36f41e117403ed7fafe900000000' + // prevtx + '00000000' + // prevtx_vout + 'ffffffff' + // sequence + '006b' + // max_witness_len + '0000', // redeem_script_len + 'hex', + ); + + const changeSPKLen = Buffer.from('0016', 'hex'); + const changeSPK = Buffer.from( + '0014074c82dbe058212905bacc61814456b7415012ed', + 'hex', + ); + + const changeSerialID = Buffer.from('00000000000d8117', 'hex'); + + const cetAdaptorSignatures = Buffer.from( + '03' + // nb_signatures + '016292f1b5c67b675aea69c95ec81e8462ab5bb9b7a01f810f6d1a7d1d886893b3605fe7fcb75a14b1b1de917917d37e9efac6437d7a080da53fb6dbbcfbfbe7a8' + // ecdsa_adaptor_signature_1 + '01efbecb2bce89556e1fb4d31622628830e02a6d04c487f67aca20e9f60fb127f985293541cd14e2bf04e4777d50953531e169dd37c65eb3cc17d6b5e4dbe58487f9fae1f68f603fe014a699a346b14a63048c26c9b31236d83a7e369a2b29a292' + // dleq_proof_1 + '00e52fe05d832bcce4538d9c27f3537a0f2086b265b6498f30cf667f77ff2fa87606574bc9a915ef57f7546ebb6852a490ad0547bdc52b19791d2d0f0cc0acabab' + // ecdsa_adaptor_signature_2 + '01f32459001a28850fa8ee4278111deb0494a8175f02e31a1c18b39bd82ec64026a6f341bcd5ba169d67b855030e36bdc65feecc0397a07d3bc514da69811ec5485f5553aebda782bc5ac9b47e8e11d701a38ef2c2b7d8af3906dd8dfc759754ce' + // dleq_proof_2 + '006f769592c744141a5ddface6e98f756a9df1bb75ad41508ea013bdfee133b396d85be51f870bf2e0ae836bfa984109dab96cc6f4ab2a7f118bc6b0b25a4c70d4' + // ecdsa_adaptor_signature_3 + '01c768c1d677c6ff0b7ea69fdf29aff1000794227db368dff16e838d1f44c4afe9e952ee63d603f7b14de13c1d73b363cc2b1740d0b688e73d8e71cddf40f8e7e912df413903779c4e5d6644c504c8609baec8fdcb90d6d341cf316748f5d7945f', // dleq_proof_3 + 'hex', + ); + + const refundSignature = Buffer.from( + '7c8ad6de287b62a1ed1d74ed9116a5158abc7f97376d201caa88e0f9daad68fcda4c271cc003512e768f403a57e5242bd1f6aa1750d7f3597598094a43b1c7bb', + 'hex', + ); + + const negotiationFields = Buffer.from('00', 'hex'); + + const dlcAcceptHex = Buffer.concat([ + type, + protocolVersion, + tempContractId, + acceptCollateralSatoshis, + fundingPubKey, + payoutSPKLen, + payoutSPK, + payoutSerialID, + fundingInputsLen, + fundingInput, + changeSPKLen, + changeSPK, + changeSerialID, + cetAdaptorSignatures, + refundSignature, + negotiationFields, + ]); + + beforeEach(() => { + instance = new DlcAcceptV0(); + instance.protocolVersion = parseInt(protocolVersion.toString('hex'), 16); + instance.temporaryContractId = tempContractId; + instance.acceptCollateral = BigInt(100000000); + instance.fundingPubKey = fundingPubKey; + instance.payoutSPK = payoutSPK; + instance.payoutSerialId = BigInt(1594186); + instance.fundingInputs = [FundingInput.deserialize(fundingInput)]; + instance.changeSPK = changeSPK; + instance.changeSerialId = BigInt(885015); + instance.cetSignatures = CetAdaptorSignatures.deserialize( + cetAdaptorSignatures, + ); + instance.refundSignature = refundSignature; + }); + + describe('deserialize', () => { + it('should throw if incorrect type', () => { + instance.type = 0x123; + expect(function () { + DlcAccept.deserialize(instance.serialize()); + }).to.throw(Error); + }); + + it('has correct type', () => { + expect(DlcAccept.deserialize(instance.serialize()).type).to.equal( + instance.type, + ); + }); + + it('deserializes without cets', () => { + const dlcAccept = DlcAccept.deserialize(instance.serialize(), false); + expect(dlcAccept.cetSignatures.sigs.length).to.be.equal(0); + }); + }); + + describe('DlcAcceptV0', () => { + describe('serialize', () => { + it('serializes', () => { + expect(instance.serialize().toString('hex')).to.equal( + dlcAcceptHex.toString('hex'), + ); + }); + + it('serializes a dlcAccept without cets', () => { + const _dlcAcceptWithoutSigs = DlcAccept.deserialize( + instance.serialize(), + false, + ); + const dlcAcceptWithoutSigsHex = _dlcAcceptWithoutSigs + .serialize() + .toString('hex'); + const dlcAcceptWithoutSigs = DlcAccept.deserialize( + Buffer.from(dlcAcceptWithoutSigsHex, 'hex'), + true, + ); + + expect(dlcAcceptWithoutSigs.cetSignatures.sigs.length).to.be.equal(0); + }); + }); + + describe('deserialize', () => { + it('deserializes', () => { + const instance = DlcAcceptV0.deserialize(dlcAcceptHex); + + expect(instance.temporaryContractId).to.deep.equal(tempContractId); + expect(Number(instance.acceptCollateral)).to.equal(100000000); + expect(instance.fundingPubKey).to.deep.equal(fundingPubKey); + expect(instance.payoutSPK).to.deep.equal(payoutSPK); + expect(Number(instance.payoutSerialId)).to.equal(1594186); + expect(instance.fundingInputs[0].serialize().toString('hex')).to.equal( + fundingInput.toString('hex'), + ); + expect(instance.changeSPK).to.deep.equal(changeSPK); + expect(Number(instance.changeSerialId)).to.equal(885015); + expect(instance.cetSignatures.serialize().toString('hex')).to.equal( + cetAdaptorSignatures.toString('hex'), + ); + expect(instance.refundSignature).to.deep.equal(refundSignature); + expect(instance.negotiationFields).to.equal(null); + }); + + it('has correct type', () => { + expect(DlcAcceptV0.deserialize(dlcAcceptHex).type).to.equal( + MessageType.DlcAcceptV0, + ); + }); + }); + + describe('toJSON', () => { + it('convert to JSON', async () => { + const json = instance.toJSON(); + expect(json.message.temporaryContractId).to.equal( + tempContractId.toString('hex'), + ); + expect(json.message.fundingPubkey).to.equal( + fundingPubKey.toString('hex'), + ); + expect(json.message.payoutSpk).to.equal(payoutSPK.toString('hex')); + expect(json.message.fundingInputs[0].prevTx).to.equal( + instance.fundingInputs[0].prevTx.serialize().toString('hex'), + ); + expect(json.message.changeSpk).to.equal(changeSPK.toString('hex')); + expect(json.message.refundSignature).to.equal( + sigToDER(refundSignature).toString('hex'), + ); + }); + }); + + describe('withoutSigs', () => { + it('does not contain sigs', () => { + const instance = DlcAcceptV0.deserialize(dlcAcceptHex).withoutSigs(); + expect(instance['cetSignatures']).to.not.exist; + }); + }); + + describe('getAddresses', () => { + it('should get addresses', async () => { + const expectedFundingAddress = + 'bcrt1qrhzxd53jmv7znf0ywvcvpm06ndhgp5fcxjy57k'; + const expectedChangeAddress = + 'bcrt1qqaxg9klqtqsjjpd6e3scz3zkkaq4qyhd7rg6dd'; + const expectedPayoutAddress = + 'bcrt1qxcz5lgme7atykhj9sdcakepkvcm9eran32jk9c'; + + const instance = DlcAcceptV0.deserialize(dlcAcceptHex); + + const { + fundingAddress, + changeAddress, + payoutAddress, + } = instance.getAddresses(bitcoinNetwork); + + expect(fundingAddress).to.equal(expectedFundingAddress); + expect(changeAddress).to.equal(expectedChangeAddress); + expect(payoutAddress).to.equal(expectedPayoutAddress); + }); + }); + + describe('validate', () => { + it('should throw if payout_spk is invalid', () => { + instance.payoutSPK = Buffer.from('fff', 'hex'); + expect(function () { + instance.validate(); + }).to.throw(Error); + }); + it('should throw if change_spk is invalid', () => { + instance.changeSPK = Buffer.from('fff', 'hex'); + expect(function () { + instance.validate(); + }).to.throw(Error); + }); + it('should throw if fundingpubkey is not a valid pubkey', () => { + instance.fundingPubKey = Buffer.from( + '00f003aa11f2a97b6be755a86b9fd798a7451c670196a5245b7bae971306b7c87e', + 'hex', + ); + expect(function () { + instance.validate(); + }).to.throw(Error); + }); + it('should throw if fundingpubkey is not in compressed secp256k1 format', () => { + instance.fundingPubKey = Buffer.from( + '045162991c7299223973cabc99ef5087d7bab2dafe61f78e5388b2f9492f7978123f51fd05ef0693790c0b2d4f30848363a3f3fbcf2bd53a05ba0fd5bb708c3184', + 'hex', + ); + expect(function () { + instance.validate(); + }).to.throw(Error); + }); + it('should throw if inputSerialIds arent unique', () => { + instance.fundingInputs = [ + FundingInput.deserialize(fundingInput), + FundingInput.deserialize(fundingInput), + ]; + expect(function () { + instance.validate(); + }).to.throw(Error); + }); + it('should ensure funding inputs are segwit', () => { + instance.fundingInputs = [FundingInput.deserialize(fundingInput)]; + expect(function () { + instance.validate(); + }).to.throw(Error); + }); + + it('should throw if funding amount less than accept collateral satoshis', () => { + instance.acceptCollateral = BigInt(3e8); + expect(function () { + instance.validate(); + }).to.throw(Error); + }); + }); + }); +}); diff --git a/packages/messaging/__tests__/messages/DlcCancel.spec.ts b/packages/messaging/__tests__/messages/DlcCancel.spec.ts index f3f28184..68ee947e 100644 --- a/packages/messaging/__tests__/messages/DlcCancel.spec.ts +++ b/packages/messaging/__tests__/messages/DlcCancel.spec.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { DlcCancelV0 } from '../../lib/messages/DlcCancel'; -describe('DlcCancelV0', () => { +describe('DlcCancel', () => { const contractId = Buffer.from( 'c1c79e1e9e2fa2840b2514902ea244f39eb3001a4037a52ea43c797d4f841269', 'hex', diff --git a/packages/messaging/__tests__/messages/DlcTransactions.spec.ts b/packages/messaging/__tests__/messages/DlcTransactions.spec.ts index c6193d2b..658dca6f 100644 --- a/packages/messaging/__tests__/messages/DlcTransactions.spec.ts +++ b/packages/messaging/__tests__/messages/DlcTransactions.spec.ts @@ -8,7 +8,7 @@ import { } from '../../lib/messages/DlcTransactions'; import { MessageType } from '../../lib/MessageType'; -describe('DlcTransactionsV0', () => { +describe('DlcTransactions', () => { const contractId = Buffer.from( '6010a7e779c5079493ad06abbcaca06b8a04d501890cd724104d1df6e20968e8', 'hex', diff --git a/packages/messaging/__tests__/messages/EnumEventDescriptor.spec.ts b/packages/messaging/__tests__/messages/EnumEventDescriptor.spec.ts index 8b5b52fd..c8090992 100644 --- a/packages/messaging/__tests__/messages/EnumEventDescriptor.spec.ts +++ b/packages/messaging/__tests__/messages/EnumEventDescriptor.spec.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { EnumEventDescriptorV0Pre167 } from '../../lib/messages/pre-167/EventDescriptor'; -describe('EnumEventDescriptorV0', () => { +describe('EnumEventDescriptor', () => { const outcomeOne = Buffer.from('64756d6d7931', 'hex').toString(); const outcomeTwo = Buffer.from('64756d6d7932', 'hex').toString(); diff --git a/packages/messaging/__tests__/messages/EventDescriptor.spec.ts b/packages/messaging/__tests__/messages/EventDescriptor.spec.ts index a2fea68b..126f1b83 100644 --- a/packages/messaging/__tests__/messages/EventDescriptor.spec.ts +++ b/packages/messaging/__tests__/messages/EventDescriptor.spec.ts @@ -6,7 +6,7 @@ import { MessageType, } from '../../lib'; -describe('EventDescriptorV0', () => { +describe('EventDescriptor', () => { const instance = new DigitDecompositionEventDescriptorV0Pre167(); instance.base = 2; instance.isSigned = false; diff --git a/packages/messaging/__tests__/messages/NodeAnnouncementMessage.spec.ts b/packages/messaging/__tests__/messages/NodeAnnouncementMessage.spec.ts index 074a93cf..c3b37637 100644 --- a/packages/messaging/__tests__/messages/NodeAnnouncementMessage.spec.ts +++ b/packages/messaging/__tests__/messages/NodeAnnouncementMessage.spec.ts @@ -1,4 +1,3 @@ -// tslint:disable: no-unused-expression import { BitField } from '@node-lightning/core'; import { expect } from 'chai'; @@ -31,7 +30,7 @@ describe('NodeAnnouncementMessage', () => { ); }); - it('should have featuers', () => { + it('should have features', () => { expect(result.features.toNumber()).to.equal(0); }); @@ -61,7 +60,7 @@ describe('NodeAnnouncementMessage', () => { ); }); - it('should valid addresses', () => { + it('should have valid addresses', () => { expect(result.addresses.length).to.equal(1); expect(result.addresses[0].type).to.equal(51396); expect(result.addresses[0].host).to.equal('mm.test.com'); @@ -100,7 +99,7 @@ describe('NodeAnnouncementMessage', () => { }); }); - describe.skip('.verifySignatures', () => { + describe('verifySignatures', () => { it('should verify valid sigs', () => { const instance = NodeAnnouncementMessage.deserialize( Buffer.from( diff --git a/packages/messaging/__tests__/messages/OracleAnnouncement.spec.ts b/packages/messaging/__tests__/messages/OracleAnnouncement.spec.ts index 3c9d798e..525ec5d8 100644 --- a/packages/messaging/__tests__/messages/OracleAnnouncement.spec.ts +++ b/packages/messaging/__tests__/messages/OracleAnnouncement.spec.ts @@ -4,7 +4,7 @@ import { DigitDecompositionEventDescriptorV0Pre167 } from '../../lib/messages/pr import { OracleAnnouncementV0Pre167 } from '../../lib/messages/pre-167/OracleAnnouncement'; import { OracleEventV0Pre167 } from '../../lib/messages/pre-167/OracleEvent'; -describe('OracleAnnouncementV0', () => { +describe('OracleAnnouncement', () => { const announcementSig = Buffer.from( 'fab22628f6e2602e1671c286a2f63a9246794008627a1749639217f4214cb4a9' + '494c93d1a852221080f44f697adb4355df59eb339f6ba0f9b01ba661a8b108d4', diff --git a/packages/messaging/__tests__/messages/OracleAttestation.spec.ts b/packages/messaging/__tests__/messages/OracleAttestation.spec.ts index 50de6382..60128fe7 100644 --- a/packages/messaging/__tests__/messages/OracleAttestation.spec.ts +++ b/packages/messaging/__tests__/messages/OracleAttestation.spec.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { OracleAttestationV0Pre167 } from '../../lib/messages/pre-167/OracleAttestation'; -describe('OracleAttestationV0', () => { +describe('OracleAttestation', () => { const attestationSig = Buffer.from( '424c11a44c2e522f90bbe4abab6ec1bc8ab44c9b29316ce6e1d0d7d08385a474' + 'de6b75f1da183a2a4f9ad144b48bf1026cee9687221df58f04128db79ca17e2a', diff --git a/packages/messaging/__tests__/messages/OracleEvent.spec.ts b/packages/messaging/__tests__/messages/OracleEvent.spec.ts index 2fe2bcae..cf28afe4 100644 --- a/packages/messaging/__tests__/messages/OracleEvent.spec.ts +++ b/packages/messaging/__tests__/messages/OracleEvent.spec.ts @@ -6,7 +6,7 @@ import { } from '../../lib/messages/pre-167/EventDescriptor'; import { OracleEventV0Pre167 } from '../../lib/messages/pre-167/OracleEvent'; -describe('OracleEventV0', () => { +describe('OracleEvent', () => { const oracleNonce = Buffer.from( '3cfba011378411b20a5ab773cb95daab93e9bcd1e4cce44986a7dda84e01841b', 'hex', diff --git a/packages/messaging/__tests__/messages/OracleEventContainer.spec.ts b/packages/messaging/__tests__/messages/OracleEventContainer.spec.ts index bd75decd..e3ba3d65 100644 --- a/packages/messaging/__tests__/messages/OracleEventContainer.spec.ts +++ b/packages/messaging/__tests__/messages/OracleEventContainer.spec.ts @@ -4,7 +4,7 @@ import { OracleAnnouncementV0Pre167 } from '../../lib/messages/pre-167/OracleAnn import { OracleAttestationV0Pre167 } from '../../lib/messages/pre-167/OracleAttestation'; import { OracleEventContainerV0Pre167 } from '../../lib/messages/pre-167/OracleEventContainer'; -describe('OracleEventContainerV0', () => { +describe('OracleEventContainer', () => { describe('serialize', () => { it('serializes', () => { const instance = new OracleEventContainerV0Pre167(); diff --git a/packages/messaging/__tests__/messages/OracleIdentifier.spec.ts b/packages/messaging/__tests__/messages/OracleIdentifier.spec.ts index cdd6426c..da11ecd0 100644 --- a/packages/messaging/__tests__/messages/OracleIdentifier.spec.ts +++ b/packages/messaging/__tests__/messages/OracleIdentifier.spec.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { OracleIdentifierV0 } from '../../lib/messages/OracleIdentifier'; -describe('OracleIdentifierV0', () => { +describe('OracleIdentifier', () => { const oraclePubkey = Buffer.from( '5d1bcfab252c6dd9edd7aea4c5eeeef138f7ff7346061ea40143a9f5ae80baa9', 'hex', diff --git a/packages/messaging/__tests__/messages/OracleInfo.spec.ts b/packages/messaging/__tests__/messages/OracleInfo.spec.ts index 874b4a3b..03df8f23 100644 --- a/packages/messaging/__tests__/messages/OracleInfo.spec.ts +++ b/packages/messaging/__tests__/messages/OracleInfo.spec.ts @@ -3,7 +3,7 @@ import { expect } from 'chai'; import { SingleOracleInfo } from '../../lib/messages/OracleInfo'; import { OracleAnnouncementV0Pre167 } from '../../lib/messages/pre-167/OracleAnnouncement'; -describe('OracleInfoV0', () => { +describe('OracleInfo', () => { describe('serialize', () => { it('serializes', () => { const instance = new SingleOracleInfo(); diff --git a/packages/messaging/__tests__/messages/OrderAccept.spec.ts b/packages/messaging/__tests__/messages/OrderAccept.spec.ts index 78c90e22..ada8625b 100644 --- a/packages/messaging/__tests__/messages/OrderAccept.spec.ts +++ b/packages/messaging/__tests__/messages/OrderAccept.spec.ts @@ -12,13 +12,15 @@ describe('OrderAccept', () => { it('serializes', () => { const instance = new OrderAcceptV0(); + instance.protocolVersion = 1; instance.tempOrderId = tempOrderId; instance.negotiationFields = null; expect(instance.serialize().toString("hex")).to.equal( "f534" + // type order_accept_v0 + "00000001" + // protocol_version "960fb5f7960382ac7e76f3e24eb6b00059b1e68632a946843c22e1f65fdf216a" + // temp_order_id - "00" // order_negotiation_fields + "00" // has_negotiation_fields ); // prettier-ignore }); }); @@ -27,13 +29,15 @@ describe('OrderAccept', () => { it('deserializes', () => { const buf = Buffer.from( "f534" + // type order_accept_v0 + "00000001" + // protocol_version "960fb5f7960382ac7e76f3e24eb6b00059b1e68632a946843c22e1f65fdf216a" + // temp_order_id - "00" // order_negotiation_fields + "00" // has_negotiation_fields , "hex" ); // prettier-ignore const instance = OrderAcceptV0.deserialize(buf); + expect(instance.protocolVersion).to.equal(1); expect(instance.tempOrderId).to.deep.equal(tempOrderId); expect(instance.negotiationFields).to.equal(null); }); diff --git a/packages/messaging/__tests__/messages/OrderNegotiationFields.spec.ts b/packages/messaging/__tests__/messages/OrderNegotiationFields.spec.ts index 4c9e1994..33895809 100644 --- a/packages/messaging/__tests__/messages/OrderNegotiationFields.spec.ts +++ b/packages/messaging/__tests__/messages/OrderNegotiationFields.spec.ts @@ -1,238 +1,86 @@ -// import { expect } from 'chai'; +import { expect } from 'chai'; -// import { -// OrderNegotiationFields, -// OrderNegotiationFieldsV0, -// OrderNegotiationFieldsV1, -// } from '../../lib/messages/OrderNegotiationFields'; -// import { OrderOfferV0 } from '../../lib/messages/OrderOffer'; -// import { MessageType } from '../../lib/MessageType'; +import { OrderNegotiationFields } from '../../lib/messages/OrderNegotiationFields'; -// describe('OrderNegotiationFields', () => { -// describe('OrderNegotiationFieldsV0', () => { -// describe('serialize', () => { -// it('serializes', () => { -// const instance = new OrderNegotiationFields(); +const contractDescriptorHex = + '00' + // type enumerated_contract_descriptor + '03' + // num_outcomes + '20' + // outcome_1_length + 'c5a7affd51901bc7a51829b320d588dc7af0ad1f3d56f20a1d3c60c9ba7c6722' + // outcome_1 + '0000000000000000' + // payout_1 + '20' + // outcome_2_length + 'adf1c23fbeed6611efa5caa0e9ed4c440c450a18bc010a6c867e05873ac08ead' + // outcome_2 + '00000000092363a3' + // payout_2 + '20' + // outcome_3_length + '6922250552ad6bb10ab3ddd6981b530aa9a6fd05725bf85b59e3e51163905288' + // outcome_3 + '000000000bebc200'; // payout_3 -// expect(instance.serialize().toString('hex')).to.equal( -// 'fdff36' + // type order_negotiation_fields_v0 -// '00', // length -// ); -// }); -// }); +const oracleEventDescriptorHex = + 'fdd806' + // type enum_event_descriptor + '10' + // length + '0002' + // num_outcomes + '06' + // outcome_1_len + '64756d6d7931' + // outcome_1 + '06' + // outcome_2_len + '64756d6d7932'; // outcome_2 -// describe('deserialize', () => { -// it('deserializes', () => { -// const buf = Buffer.from( -// "fdff36" + // type order_negotiation_fields_v0 -// "00" // length -// , "hex" -// ); // prettier-ignore +const oracleEventHex = + 'fdd822' + // type oracle_event + '40' + // length + '0001' + // nb_nonces + '3cfba011378411b20a5ab773cb95daab93e9bcd1e4cce44986a7dda84e01841b' + // oracle_nonces + '00000000' + // event_maturity_epoch + oracleEventDescriptorHex + + '05' + // event_id_length + '64756d6d79'; // event_id; -// const unknownInstance = OrderNegotiationFields.deserialize(buf); +const oracleAnnouncementHex = + 'fdd824' + // type oracle_announcement + 'a4' + // length + 'fab22628f6e2602e1671c286a2f63a9246794008627a1749639217f4214cb4a9' + // announcement_signature_r + '494c93d1a852221080f44f697adb4355df59eb339f6ba0f9b01ba661a8b108d4' + // announcement_signature_s + 'da078bbb1d34e7729e38e2ae34236e776da121af442626fa31e31ae55a279a0b' + // oracle_public_key + oracleEventHex; -// if (unknownInstance.type === MessageType.OrderNegotiationFieldsV0) { -// const instance = unknownInstance as OrderNegotiationFieldsV0; +const oracleInfoHex = + '00' + // type single_oracle_info; + oracleAnnouncementHex; -// expect(Number(instance.length)).to.equal(0); -// } -// }); -// }); -// }); +const contractInfoHex = + '00' + // type single_contract_info + '000000000bebc200' + // total_collateral + contractDescriptorHex + + oracleInfoHex; -// describe('OrderNegotiationFieldsV1', () => { -// describe('serialize', () => { -// it('serializes', () => { -// const instance = new OrderNegotiationFieldsV1(); +const orderNegotiationFieldsHex = + contractInfoHex + + '0000000005f5e100' + // offer_collateral + '0000000000000001' + // fee_rate_per_vb + '00000064' + // cet_locktime + '000000c8'; // refund_locktime -// instance.length = BigInt(12); -// instance.orderOffer = OrderOfferV0.deserialize( -// Buffer.from( -// 'f532' + // type -// '06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f' + // chain_hash -// 'fdd82e' + // type contract_info -// 'fd0131' + // length -// '000000000bebc200' + // total_collateral -// 'fda710' + // type contract_descriptor -// '79' + // length -// '03' + // num_outcomes -// 'c5a7affd51901bc7a51829b320d588dc7af0ad1f3d56f20a1d3c60c9ba7c6722' + // outcome_1 -// '0000000000000000' + // payout_1 -// 'adf1c23fbeed6611efa5caa0e9ed4c440c450a18bc010a6c867e05873ac08ead' + // outcome_2 -// '00000000092363a3' + // payout_2 -// '6922250552ad6bb10ab3ddd6981b530aa9a6fd05725bf85b59e3e51163905288' + // outcome_3 -// '000000000bebc200' + // payout_3 -// 'fda712' + // type oracle_info -// 'a8' + // length -// 'fdd824' + // type oracle_announcement -// 'a4' + // length -// 'fab22628f6e2602e1671c286a2f63a9246794008627a1749639217f4214cb4a9' + // announcement_signature_r -// '494c93d1a852221080f44f697adb4355df59eb339f6ba0f9b01ba661a8b108d4' + // announcement_signature_s -// 'da078bbb1d34e7729e38e2ae34236e776da121af442626fa31e31ae55a279a0b' + // oracle_public_key -// 'fdd822' + // type oracle_event -// '40' + // length -// '0001' + // nb_nonces -// '3cfba011378411b20a5ab773cb95daab93e9bcd1e4cce44986a7dda84e01841b' + // oracle_nonces -// '00000000' + // event_maturity_epoch -// 'fdd806' + // type enum_event_descriptor -// '10' + // length -// '0002' + // num_outcomes -// '06' + // outcome_1_len -// '64756d6d7931' + // outcome_1 -// '06' + // outcome_2_len -// '64756d6d7932' + // outcome_2 -// '05' + // event_id_length -// '64756d6d79' + // event_id -// '0000000005f5e100' + // total_collateral_satoshis -// '0000000000000001' + // fee_rate_per_vb -// '00000064' + // cet_locktime -// '000000c8', // refund_locktime -// 'hex', -// ), -// ); +describe('OrderNegotiationFields', () => { + describe('serialize', () => { + it('serializes', () => { + const instance = OrderNegotiationFields.deserialize( + Buffer.from(orderNegotiationFieldsHex, 'hex'), + ); -// expect(instance.serialize().toString('hex')).to.equal( -// 'fdff38' + // type order_negotiation_fields_v1 -// 'fd0171' + // length -// 'f532' + // type -// '06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f' + // chain_hash -// 'fdd82e' + // type contract_info -// 'fd0131' + // length -// '000000000bebc200' + // total_collateral -// 'fda710' + // type contract_descriptor -// '79' + // length -// '03' + // num_outcomes -// 'c5a7affd51901bc7a51829b320d588dc7af0ad1f3d56f20a1d3c60c9ba7c6722' + // outcome_1 -// '0000000000000000' + // payout_1 -// 'adf1c23fbeed6611efa5caa0e9ed4c440c450a18bc010a6c867e05873ac08ead' + // outcome_2 -// '00000000092363a3' + // payout_2 -// '6922250552ad6bb10ab3ddd6981b530aa9a6fd05725bf85b59e3e51163905288' + // outcome_3 -// '000000000bebc200' + // payout_3 -// 'fda712' + // type oracle_info -// 'a8' + // length -// 'fdd824' + // type oracle_announcement -// 'a4' + // length -// 'fab22628f6e2602e1671c286a2f63a9246794008627a1749639217f4214cb4a9' + // announcement_signature_r -// '494c93d1a852221080f44f697adb4355df59eb339f6ba0f9b01ba661a8b108d4' + // announcement_signature_s -// 'da078bbb1d34e7729e38e2ae34236e776da121af442626fa31e31ae55a279a0b' + // oracle_public_key -// 'fdd822' + // type oracle_event -// '40' + // length -// '0001' + // nb_nonces -// '3cfba011378411b20a5ab773cb95daab93e9bcd1e4cce44986a7dda84e01841b' + // oracle_nonces -// '00000000' + // event_maturity_epoch -// 'fdd806' + // type enum_event_descriptor -// '10' + // length -// '0002' + // num_outcomes -// '06' + // outcome_1_len -// '64756d6d7931' + // outcome_1 -// '06' + // outcome_2_len -// '64756d6d7932' + // outcome_2 -// '05' + // event_id_length -// '64756d6d79' + // event_id -// '0000000005f5e100' + // total_collateral_satoshis -// '0000000000000001' + // fee_rate_per_vb -// '00000064' + // cet_locktime -// '000000c8', // refund_locktime -// ); -// }); -// }); + expect(instance.serialize().toString('hex')).to.equal( + orderNegotiationFieldsHex, + ); + }); + }); -// describe('deserialize', () => { -// it('deserializes', () => { -// const buf = Buffer.from( -// 'fdff38' + // type order_negotiation_fields_v1 -// 'fd0171' + // length -// 'f532' + // type -// '06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f' + // chain_hash -// 'fdd82e' + // type contract_info -// 'fd0131' + // length -// '000000000bebc200' + // total_collateral -// 'fda710' + // type contract_descriptor -// '79' + // length -// '03' + // num_outcomes -// 'c5a7affd51901bc7a51829b320d588dc7af0ad1f3d56f20a1d3c60c9ba7c6722' + // outcome_1 -// '0000000000000000' + // payout_1 -// 'adf1c23fbeed6611efa5caa0e9ed4c440c450a18bc010a6c867e05873ac08ead' + // outcome_2 -// '00000000092363a3' + // payout_2 -// '6922250552ad6bb10ab3ddd6981b530aa9a6fd05725bf85b59e3e51163905288' + // outcome_3 -// '000000000bebc200' + // payout_3 -// 'fda712' + // type oracle_info -// 'a8' + // length -// 'fdd824' + // type oracle_announcement -// 'a4' + // length -// 'fab22628f6e2602e1671c286a2f63a9246794008627a1749639217f4214cb4a9' + // announcement_signature_r -// '494c93d1a852221080f44f697adb4355df59eb339f6ba0f9b01ba661a8b108d4' + // announcement_signature_s -// 'da078bbb1d34e7729e38e2ae34236e776da121af442626fa31e31ae55a279a0b' + // oracle_public_key -// 'fdd822' + // type oracle_event -// '40' + // length -// '0001' + // nb_nonces -// '3cfba011378411b20a5ab773cb95daab93e9bcd1e4cce44986a7dda84e01841b' + // oracle_nonces -// '00000000' + // event_maturity_epoch -// 'fdd806' + // type enum_event_descriptor -// '10' + // length -// '0002' + // num_outcomes -// '06' + // outcome_1_len -// '64756d6d7931' + // outcome_1 -// '06' + // outcome_2_len -// '64756d6d7932' + // outcome_2 -// '05' + // event_id_length -// '64756d6d79' + // event_id -// '0000000005f5e100' + // total_collateral_satoshis -// '0000000000000001' + // fee_rate_per_vb -// '00000064' + // cet_locktime -// '000000c8', // refund_locktime -// "hex" -// ); // prettier-ignore + describe('deserialize', () => { + it('deserializes', () => { + const instance = OrderNegotiationFields.deserialize( + Buffer.from(orderNegotiationFieldsHex, 'hex'), + ); -// const unknownInstance = OrderNegotiationFields.deserialize(buf); - -// if (unknownInstance.type === MessageType.OrderNegotiationFieldsV1) { -// const instance = unknownInstance as OrderNegotiationFieldsV1; - -// expect(Number(instance.length)).to.equal(369); -// expect(instance.orderOffer.serialize().toString('hex')).to.equal( -// 'f532' + // type -// '06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f' + // chain_hash -// 'fdd82e' + // type contract_info -// 'fd0131' + // length -// '000000000bebc200' + // total_collateral -// 'fda710' + // type contract_descriptor -// '79' + // length -// '03' + // num_outcomes -// 'c5a7affd51901bc7a51829b320d588dc7af0ad1f3d56f20a1d3c60c9ba7c6722' + // outcome_1 -// '0000000000000000' + // payout_1 -// 'adf1c23fbeed6611efa5caa0e9ed4c440c450a18bc010a6c867e05873ac08ead' + // outcome_2 -// '00000000092363a3' + // payout_2 -// '6922250552ad6bb10ab3ddd6981b530aa9a6fd05725bf85b59e3e51163905288' + // outcome_3 -// '000000000bebc200' + // payout_3 -// 'fda712' + // type oracle_info -// 'a8' + // length -// 'fdd824' + // type oracle_announcement -// 'a4' + // length -// 'fab22628f6e2602e1671c286a2f63a9246794008627a1749639217f4214cb4a9' + // announcement_signature_r -// '494c93d1a852221080f44f697adb4355df59eb339f6ba0f9b01ba661a8b108d4' + // announcement_signature_s -// 'da078bbb1d34e7729e38e2ae34236e776da121af442626fa31e31ae55a279a0b' + // oracle_public_key -// 'fdd822' + // type oracle_event -// '40' + // length -// '0001' + // nb_nonces -// '3cfba011378411b20a5ab773cb95daab93e9bcd1e4cce44986a7dda84e01841b' + // oracle_nonces -// '00000000' + // event_maturity_epoch -// 'fdd806' + // type enum_event_descriptor -// '10' + // length -// '0002' + // num_outcomes -// '06' + // outcome_1_len -// '64756d6d7931' + // outcome_1 -// '06' + // outcome_2_len -// '64756d6d7932' + // outcome_2 -// '05' + // event_id_length -// '64756d6d79' + // event_id -// '0000000005f5e100' + // total_collateral_satoshis -// '0000000000000001' + // fee_rate_per_vb -// '00000064' + // cet_locktime -// '000000c8', // refund_locktime -// ); -// } -// }); -// }); -// }); -// }); + expect(instance.serialize().toString('hex')).to.equal( + orderNegotiationFieldsHex, + ); + }); + }); +}); diff --git a/packages/messaging/lib/messages/ContractDescriptor.ts b/packages/messaging/lib/messages/ContractDescriptor.ts index 64200cbd..e9c0c07a 100644 --- a/packages/messaging/lib/messages/ContractDescriptor.ts +++ b/packages/messaging/lib/messages/ContractDescriptor.ts @@ -91,7 +91,7 @@ export class EnumeratedContractDescriptor const strBuf = reader.readBytes(Number(strLen)); instance.outcomes.push({ - outcome: strBuf.toString('utf8'), + outcome: strBuf.toString('hex'), localPayout: reader.readUInt64BE(), }); } @@ -148,8 +148,10 @@ export class EnumeratedContractDescriptor dataWriter.writeBigSize(this.outcomes.length); for (const outcome of this.outcomes) { - dataWriter.writeBigSize(outcome.outcome.length); - dataWriter.writeBytes(Buffer.from(outcome.outcome)); + const outcomeWriter = new BufferWriter(); + outcomeWriter.writeBytes(Buffer.from(outcome.outcome, 'hex')); + dataWriter.writeBigSize(outcomeWriter.size); + dataWriter.writeBytes(outcomeWriter.toBuffer()); dataWriter.writeUInt64BE(outcome.localPayout); } diff --git a/packages/messaging/lib/messages/DlcAccept.ts b/packages/messaging/lib/messages/DlcAccept.ts index fd2328fe..a5a45d5d 100644 --- a/packages/messaging/lib/messages/DlcAccept.ts +++ b/packages/messaging/lib/messages/DlcAccept.ts @@ -68,26 +68,16 @@ export class DlcAcceptV0 extends DlcAccept implements IDlcMessage { assert(type === this.type, `Expected DlcAcceptV0, got type ${type}`); instance.protocolVersion = reader.readUInt32BE(); - console.log('test1'); instance.temporaryContractId = reader.readBytes(32); instance.acceptCollateral = reader.readUInt64BE(); - console.log('instance.acceptCollateral', instance.acceptCollateral); instance.fundingPubKey = reader.readBytes(33); - console.log('instance.fundingPubKey', instance.fundingPubKey); const payoutSPKLen = reader.readUInt16BE(); - console.log('test2'); instance.payoutSPK = reader.readBytes(payoutSPKLen); - console.log('test3'); instance.payoutSerialId = reader.readUInt64BE(); - console.log('instance.payoutSerialId', instance.payoutSerialId); - console.log('test4'); const fundingInputsLen = reader.readBigSize(); - console.log('fundingInputsLen', fundingInputsLen); - console.log('test5'); for (let i = 0; i < fundingInputsLen; i++) { instance.fundingInputs.push(FundingInput.deserialize(reader)); } - console.log('test6'); const changeSPKLen = reader.readUInt16BE(); instance.changeSPK = reader.readBytes(changeSPKLen); instance.changeSerialId = reader.readUInt64BE(); diff --git a/packages/messaging/lib/messages/FundingInput.ts b/packages/messaging/lib/messages/FundingInput.ts index d225392f..879b805a 100644 --- a/packages/messaging/lib/messages/FundingInput.ts +++ b/packages/messaging/lib/messages/FundingInput.ts @@ -23,21 +23,13 @@ export class FundingInput implements IDlcMessage { const instance = new FundingInput(); instance.inputSerialId = reader.readUInt64BE(); - console.log('instance.inputSerialId', instance.inputSerialId); - console.log('test7'); const prevTxLen = reader.readBigSize(); - console.log('prevTxLen', prevTxLen); - console.log('test8'); instance.prevTx = Tx.decode( StreamReader.fromBuffer(reader.readBytes(Number(prevTxLen))), ); - console.log('test9'); instance.prevTxVout = reader.readUInt32BE(); - console.log('test10'); instance.sequence = new Sequence(reader.readUInt32LE()); - console.log('test11'); instance.maxWitnessLen = reader.readUInt16BE(); - console.log('test12'); const redeemScriptLen = reader.readUInt16BE(); instance.redeemScript = reader.readBytes(redeemScriptLen); diff --git a/packages/messaging/lib/messages/OrderNegotiationFields.ts b/packages/messaging/lib/messages/OrderNegotiationFields.ts index e3acea37..9ebac2ea 100644 --- a/packages/messaging/lib/messages/OrderNegotiationFields.ts +++ b/packages/messaging/lib/messages/OrderNegotiationFields.ts @@ -1,17 +1,14 @@ import { BufferReader, BufferWriter } from '@node-lightning/bufio'; -import { MessageType } from '../MessageType'; -import { ContractDescriptor } from './ContractDescriptor'; import { ContractInfo, IDisjointContractInfoJSON, ISingleContractInfoJSON, } from './ContractInfo'; import { IDlcMessage } from './DlcMessage'; -import { IOrderOfferJSON, OrderOffer } from './OrderOffer'; /** - * OrderNegotiationFields V1 contains preferences of the acceptor of a order + * OrderNegotiationFields V1 contains preferences of the acceptor of an order * offer which are taken into account during DLC construction. */ export class OrderNegotiationFields implements IDlcMessage { @@ -35,9 +32,6 @@ export class OrderNegotiationFields implements IDlcMessage { return instance; } - /** - * The type for order_negotiation_fields_v1 message. order_negotiation_fields_v1 = 65336 - */ public contractInfo: ContractInfo; public offerCollateral: bigint;