CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-bitcoinjs-lib

Client-side Bitcoin JavaScript library for node.js and browsers with comprehensive Bitcoin protocol support

Overall
score

99%

Overview
Eval results
Files

task.mdevals/scenario-10/

Transaction Sequence Number Manager

Build a utility module that manages Bitcoin transaction input sequence numbers for different use cases including time-locked transactions and transaction replacement scenarios.

Requirements

Your implementation should provide functionality to:

  1. Create a transaction with custom sequence numbers: Build a Bitcoin transaction that allows setting specific sequence values for each input to control transaction replaceability and time locks.

  2. Enable Replace-By-Fee (RBF): Configure transaction inputs to signal that the transaction can be replaced with a higher-fee version before confirmation.

  3. Implement relative time locks: Set sequence numbers to enforce waiting periods based on block count (e.g., must wait 10 blocks after the previous transaction confirms).

  4. Handle final transactions: Create transactions with sequence numbers that indicate the transaction is final and cannot be replaced.

Implementation Details

Create a module src/sequenceManager.js that exports the following functions:

  • createTransactionWithSequence(inputs, outputs, sequenceValues): Creates a transaction with custom sequence numbers for each input
  • enableRBF(transaction): Modifies a transaction to enable Replace-By-Fee signaling
  • setRelativeTimeLock(sequenceNumber, blocks): Calculates the appropriate sequence number for a relative block-based time lock
  • isFinal(sequenceNumber): Checks if a sequence number indicates a final transaction

The module should handle standard Bitcoin transaction construction and properly encode sequence numbers according to BIP 68 and BIP 125 specifications.

Test Cases { .tests }

Test 1: RBF-enabled transaction { .test }

// File: src/sequenceManager.test.js
const { createTransactionWithSequence, enableRBF } = require('./sequenceManager');

test('should create RBF-enabled transaction', () => {
  const inputs = [{ txid: 'abc123...', vout: 0 }];
  const outputs = [{ address: 'bc1q...', value: 50000 }];
  const tx = createTransactionWithSequence(inputs, outputs, [0xfffffffd]);

  // Verify sequence number signals RBF (< 0xfffffffe)
  expect(tx.ins[0].sequence).toBe(0xfffffffd);
});

Test 2: Relative time lock { .test }

// File: src/sequenceManager.test.js
const { setRelativeTimeLock } = require('./sequenceManager');

test('should calculate sequence for 10 block relative timelock', () => {
  const sequence = setRelativeTimeLock(10);

  // Should return sequence number encoding 10 blocks
  expect(sequence).toBe(10);
});

Test 3: Final transaction { .test }

// File: src/sequenceManager.test.js
const { isFinal } = require('./sequenceManager');

test('should identify final sequence number', () => {
  expect(isFinal(0xffffffff)).toBe(true);
  expect(isFinal(0xfffffffd)).toBe(false);
});

Dependencies { .dependencies }

bitcoinjs-lib { .dependency }

Provides Bitcoin transaction construction and manipulation functionality.

Install with Tessl CLI

npx tessl i tessl/npm-bitcoinjs-lib

tile.json