UNPKG

@covenance/dlc

Version:

Crypto and Bitcoin functions for Covenance DLC implementation

65 lines (51 loc) 2.29 kB
import { expect } from 'chai'; import { Transaction, Address, PrivateKey, Script, Networks, PublicKey } from '../../src/btc'; import { createDlcInitTx, createRepaymentCet } from '../../src/cet/transactions'; import { PrivKey, PubKey } from '../../src/crypto/types'; import { Point, utils } from '../../src/crypto/secp256k1'; describe('createRepaymentCet', () => { let borrowerKey: PrivateKey; let borrowerPubKey: PublicKey; let borrowerAddress: Address; let borrowerDlcPrivateKey: PrivKey; let borrowerDlcPubKey: PubKey; let lenderDlcPrivateKey: PrivKey; let lenderDlcPubKey: PubKey; let dlcUtxo: any; before(() => { borrowerKey = new PrivateKey(); borrowerPubKey = borrowerKey.toPublicKey(); borrowerAddress = new Address(borrowerPubKey, Networks.testnet, 'witnesspubkeyhash'); borrowerDlcPrivateKey = utils.randomPrivateKey(); borrowerDlcPubKey = Point.fromPrivateKey(borrowerDlcPrivateKey); lenderDlcPrivateKey = utils.randomPrivateKey(); lenderDlcPubKey = Point.fromPrivateKey(lenderDlcPrivateKey); const collateralAmount = 100000; // 0.001 BTC const collateralUtxos = [{ txId: 'a'.repeat(64), outputIndex: 0, satoshis: collateralAmount * 1.3, script: (Script as any).buildWitnessV0Out(borrowerAddress) }]; const dlcInitTx = createDlcInitTx( collateralUtxos, collateralAmount, borrowerDlcPubKey, lenderDlcPubKey, borrowerAddress ); dlcUtxo = dlcInitTx.dlcUtxo; }); it('should create a valid repayment CET that returns full collateral to borrower', () => { const collateralAmount = dlcUtxo.satoshis; const repaymentCet = createRepaymentCet(dlcUtxo, collateralAmount, borrowerAddress); expect(repaymentCet).to.be.instanceOf(Transaction); expect(repaymentCet.inputs.length).to.equal(1); expect(repaymentCet.outputs.length).to.equal(1); expect(repaymentCet.inputs[0].prevTxId.toString('hex')).to.equal(dlcUtxo.txId); expect(repaymentCet.inputs[0].outputIndex).to.equal(dlcUtxo.outputIndex); expect(repaymentCet.outputs[0].satoshis).to.equal(collateralAmount); expect(repaymentCet.outputs[0].script.toString()) .to.equal((Script as any).buildWitnessV0Out(borrowerAddress).toString()); }); });