@covenance/dlc
Version:
Crypto and Bitcoin functions for Covenance DLC implementation
65 lines (51 loc) • 2.29 kB
text/typescript
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());
});
});