@bsv/sdk 1.2.17 → 1.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/cjs/package.json +1 -1
  2. package/dist/cjs/src/primitives/BigNumber.js +85 -89
  3. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  4. package/dist/cjs/src/primitives/PublicKey.js +5 -2
  5. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  6. package/dist/cjs/src/primitives/Random.js +3 -2
  7. package/dist/cjs/src/primitives/Random.js.map +1 -1
  8. package/dist/cjs/src/primitives/utils.js +71 -62
  9. package/dist/cjs/src/primitives/utils.js.map +1 -1
  10. package/dist/cjs/src/totp/totp.js +0 -1
  11. package/dist/cjs/src/totp/totp.js.map +1 -1
  12. package/dist/cjs/src/transaction/Beef.js +26 -40
  13. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  14. package/dist/cjs/src/transaction/BeefParty.js +1 -1
  15. package/dist/cjs/src/transaction/BeefTx.js +75 -73
  16. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  17. package/dist/cjs/src/transaction/MerklePath.js +12 -1
  18. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  19. package/dist/cjs/src/transaction/Transaction.js +70 -96
  20. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  21. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +20 -2
  22. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  23. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  24. package/dist/esm/src/primitives/BigNumber.js +85 -89
  25. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  26. package/dist/esm/src/primitives/PublicKey.js +5 -2
  27. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  28. package/dist/esm/src/primitives/Random.js +2 -2
  29. package/dist/esm/src/primitives/Random.js.map +1 -1
  30. package/dist/esm/src/primitives/utils.js +70 -61
  31. package/dist/esm/src/primitives/utils.js.map +1 -1
  32. package/dist/esm/src/totp/totp.js +0 -1
  33. package/dist/esm/src/totp/totp.js.map +1 -1
  34. package/dist/esm/src/transaction/Beef.js +25 -39
  35. package/dist/esm/src/transaction/Beef.js.map +1 -1
  36. package/dist/esm/src/transaction/BeefParty.js +1 -1
  37. package/dist/esm/src/transaction/BeefTx.js +76 -74
  38. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  39. package/dist/esm/src/transaction/MerklePath.js +12 -1
  40. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  41. package/dist/esm/src/transaction/Transaction.js +71 -97
  42. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  43. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +20 -2
  44. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  45. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  46. package/dist/types/src/primitives/BigNumber.d.ts +24 -22
  47. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  48. package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
  49. package/dist/types/src/primitives/utils.d.ts +17 -17
  50. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  51. package/dist/types/src/transaction/Beef.d.ts +9 -12
  52. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  53. package/dist/types/src/transaction/BeefParty.d.ts +1 -1
  54. package/dist/types/src/transaction/BeefTx.d.ts +5 -2
  55. package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
  56. package/dist/types/src/transaction/ChainTracker.d.ts +6 -0
  57. package/dist/types/src/transaction/ChainTracker.d.ts.map +1 -1
  58. package/dist/types/src/transaction/MerklePath.d.ts +1 -0
  59. package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
  60. package/dist/types/src/transaction/Transaction.d.ts +6 -0
  61. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  62. package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts +2 -1
  63. package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
  64. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  65. package/dist/umd/bundle.js +1 -1
  66. package/docs/compat.md +13 -11
  67. package/docs/primitives.md +152 -188
  68. package/docs/transaction.md +78 -76
  69. package/package.json +1 -1
  70. package/src/primitives/BigNumber.ts +111 -111
  71. package/src/primitives/PublicKey.ts +5 -2
  72. package/src/primitives/Random.ts +2 -2
  73. package/src/primitives/utils.ts +92 -77
  74. package/src/totp/totp.ts +0 -1
  75. package/src/transaction/Beef.ts +20 -43
  76. package/src/transaction/BeefParty.ts +1 -1
  77. package/src/transaction/BeefTx.ts +89 -57
  78. package/src/transaction/ChainTracker.ts +6 -0
  79. package/src/transaction/MerklePath.ts +13 -1
  80. package/src/transaction/Transaction.ts +77 -100
  81. package/src/transaction/__tests/Beef.test.ts +9 -9
  82. package/src/transaction/__tests/MerklePath.test.ts +23 -2
  83. package/src/transaction/__tests/Transaction.benchmarks.test.ts +1 -1
  84. package/src/transaction/__tests/Transaction.test.ts +3 -3
  85. package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +2 -2
  86. package/src/transaction/chaintrackers/WhatsOnChain.ts +20 -2
  87. package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +32 -1
@@ -1,7 +1,7 @@
1
1
  import { hash256 } from '../primitives/Hash.js';
2
2
  import { toHex, toArray } from '../primitives/utils.js';
3
3
  import Transaction from './Transaction.js';
4
- import { BEEF_MAGIC, BEEF_MAGIC_TXID_ONLY_EXTENSION } from './Beef.js';
4
+ import { BEEF_V2, TX_DATA_FORMAT } from './Beef.js';
5
5
  /**
6
6
  * A single bitcoin transaction associated with a `Beef` validity proof set.
7
7
  *
@@ -37,24 +37,32 @@ export default class BeefTx {
37
37
  get txid() {
38
38
  if (this._txid)
39
39
  return this._txid;
40
- if (this._tx)
41
- return this._txid = this._tx.id('hex');
42
- if (this._rawTx)
43
- return this._txid = toHex(hash256(this._rawTx));
40
+ if (this._tx) {
41
+ this._txid = this._tx.id('hex');
42
+ return this._txid;
43
+ }
44
+ if (this._rawTx) {
45
+ this._txid = toHex(hash256(this._rawTx));
46
+ return this._txid;
47
+ }
44
48
  throw new Error('Internal');
45
49
  }
46
50
  get tx() {
47
51
  if (this._tx)
48
52
  return this._tx;
49
- if (this._rawTx)
50
- return this._tx = Transaction.fromBinary(this._rawTx);
53
+ if (this._rawTx) {
54
+ this._tx = Transaction.fromBinary(this._rawTx);
55
+ return this._tx;
56
+ }
51
57
  return undefined;
52
58
  }
53
59
  get rawTx() {
54
60
  if (this._rawTx)
55
61
  return this._rawTx;
56
- if (this._tx)
57
- return this._rawTx = this._tx.toBinary();
62
+ if (this._tx) {
63
+ this._rawTx = this._tx.toBinary();
64
+ return this._rawTx;
65
+ }
58
66
  return undefined;
59
67
  }
60
68
  /**
@@ -65,21 +73,27 @@ export default class BeefTx {
65
73
  if (typeof tx === 'string') {
66
74
  this._txid = tx;
67
75
  }
76
+ else if (Array.isArray(tx)) {
77
+ this._rawTx = tx;
78
+ }
68
79
  else {
69
- if (Array.isArray(tx)) {
70
- this._rawTx = tx;
71
- }
72
- else {
73
- this._tx = tx;
74
- }
80
+ this._tx = tx;
75
81
  }
76
82
  this.bumpIndex = bumpIndex;
77
83
  this.updateInputTxids();
78
84
  }
85
+ static fromTx(tx, bumpIndex) {
86
+ return new BeefTx(tx, bumpIndex);
87
+ }
88
+ static fromRawTx(rawTx, bumpIndex) {
89
+ return new BeefTx(rawTx, bumpIndex);
90
+ }
91
+ static fromTxid(txid, bumpIndex) {
92
+ return new BeefTx(txid, bumpIndex);
93
+ }
79
94
  updateInputTxids() {
80
- if (this.hasProof || !this.tx)
81
- // If we have a proof, or don't have a parsed transaction
82
- {
95
+ if (this.hasProof || !this.tx) {
96
+ // If we have a proof, or don't have a parsed transaction
83
97
  this.inputTxids = [];
84
98
  }
85
99
  else {
@@ -90,15 +104,15 @@ export default class BeefTx {
90
104
  this.inputTxids = Object.keys(inputTxids);
91
105
  }
92
106
  }
93
- toWriter(writer, magic) {
94
- if (magic === BEEF_MAGIC) {
95
- // V1
96
- if (this.isTxidOnly) {
97
- // Encode just the txid of a known transaction using the txid
98
- writer.writeUInt32LE(BEEF_MAGIC_TXID_ONLY_EXTENSION);
99
- writer.writeReverse(toArray(this._txid, 'hex'));
100
- }
101
- else if (this._rawTx) {
107
+ toWriter(writer, version) {
108
+ const writeByte = (bb) => {
109
+ writer.writeUInt8(bb);
110
+ };
111
+ const writeTxid = () => {
112
+ writer.writeReverse(toArray(this._txid, 'hex'));
113
+ };
114
+ const writeTx = () => {
115
+ if (this._rawTx) {
102
116
  writer.write(this._rawTx);
103
117
  }
104
118
  else if (this._tx) {
@@ -107,72 +121,60 @@ export default class BeefTx {
107
121
  else {
108
122
  throw new Error('a valid serialized Transaction is expected');
109
123
  }
124
+ };
125
+ const writeBumpIndex = () => {
110
126
  if (this.bumpIndex === undefined) {
111
- writer.writeUInt8(0);
127
+ writeByte(TX_DATA_FORMAT.RAWTX); // 0
112
128
  }
113
129
  else {
114
- writer.writeUInt8(1);
115
- writer.writeVarIntNum(this.bumpIndex);
130
+ writeByte(TX_DATA_FORMAT.RAWTX_AND_BUMP_INDEX); // 1
131
+ writer.writeVarIntNum(this.bumpIndex); // the index of the associated bump
116
132
  }
117
- }
118
- else {
119
- // V2
133
+ };
134
+ if (version === BEEF_V2) {
120
135
  if (this.isTxidOnly) {
121
- // Encode just the txid of a known transaction using the txid
122
- writer.writeUInt8(2);
123
- writer.writeReverse(toArray(this._txid, 'hex'));
124
- }
125
- else {
126
- if (this.bumpIndex === undefined) {
127
- writer.writeUInt8(0);
128
- }
129
- else {
130
- writer.writeUInt8(1);
131
- writer.writeVarIntNum(this.bumpIndex);
132
- }
133
- if (this._rawTx) {
134
- writer.write(this._rawTx);
135
- }
136
- else if (this._tx) {
137
- writer.write(this._tx.toBinary());
138
- }
139
- else {
140
- throw new Error('a valid serialized Transaction is expected');
141
- }
136
+ writeByte(TX_DATA_FORMAT.TXID_ONLY);
137
+ writeTxid();
142
138
  }
143
- }
144
- }
145
- static fromReader(br, magic) {
146
- let tx;
147
- let bumpIndex;
148
- if (magic === BEEF_MAGIC) {
149
- // V1
150
- const version = br.readUInt32LE();
151
- if (version === BEEF_MAGIC_TXID_ONLY_EXTENSION) {
152
- // This is the extension to support known transactions
153
- tx = toHex(br.readReverse(32));
139
+ else if (this.bumpIndex !== undefined) {
140
+ writeByte(TX_DATA_FORMAT.RAWTX_AND_BUMP_INDEX);
141
+ writer.writeVarIntNum(this.bumpIndex);
142
+ writeTx();
154
143
  }
155
144
  else {
156
- br.pos -= 4; // Unread the version...
157
- tx = Transaction.fromReader(br);
145
+ writeByte(TX_DATA_FORMAT.RAWTX);
146
+ writeTx();
158
147
  }
159
- bumpIndex = br.readUInt8() ? br.readVarIntNum() : undefined;
160
148
  }
161
149
  else {
150
+ writeTx();
151
+ writeBumpIndex();
152
+ }
153
+ }
154
+ static fromReader(br, version) {
155
+ let data;
156
+ let bumpIndex;
157
+ let beefTx;
158
+ if (version === BEEF_V2) {
162
159
  // V2
163
160
  const format = br.readUInt8();
164
- if (format === 2) {
165
- // txid only
166
- tx = toHex(br.readReverse(32));
161
+ if (format === TX_DATA_FORMAT.TXID_ONLY) {
162
+ beefTx = BeefTx.fromTxid(toHex(br.readReverse(32)));
167
163
  }
168
164
  else {
169
- if (format === 1) {
165
+ if (format === TX_DATA_FORMAT.RAWTX_AND_BUMP_INDEX) {
170
166
  bumpIndex = br.readVarIntNum();
171
167
  }
172
- tx = Transaction.fromReader(br);
168
+ data = Transaction.fromReader(br);
169
+ beefTx = BeefTx.fromTx(data, bumpIndex);
173
170
  }
174
171
  }
175
- const beefTx = new BeefTx(tx, bumpIndex);
172
+ else {
173
+ // V1
174
+ data = Transaction.fromReader(br);
175
+ bumpIndex = br.readUInt8() ? br.readVarIntNum() : undefined;
176
+ beefTx = BeefTx.fromTx(data, bumpIndex);
177
+ }
176
178
  return beefTx;
177
179
  }
178
180
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BeefTx.js","sourceRoot":"","sources":["../../../../src/transaction/BeefTx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BeefTx.js","sourceRoot":"","sources":["../../../../src/transaction/BeefTx.ts"],"names":[],"mappings":"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"}
@@ -162,6 +162,10 @@ export default class MerklePath {
162
162
  toHex() {
163
163
  return toHex(this.toBinary());
164
164
  }
165
+ //
166
+ indexOf(txid) {
167
+ return this.path[0].find(l => l.hash === txid).offset;
168
+ }
165
169
  /**
166
170
  * Computes the Merkle root from the provided transaction ID.
167
171
  *
@@ -174,7 +178,7 @@ export default class MerklePath {
174
178
  txid = this.path[0].find(leaf => Boolean(leaf?.hash)).hash;
175
179
  }
176
180
  // Find the index of the txid at the lowest level of the Merkle tree
177
- const index = this.path[0].find(l => l.hash === txid).offset;
181
+ const index = this.indexOf(txid);
178
182
  if (typeof index !== 'number') {
179
183
  throw new Error(`This proof does not contain the txid: ${txid}`);
180
184
  }
@@ -248,6 +252,13 @@ export default class MerklePath {
248
252
  */
249
253
  async verify(txid, chainTracker) {
250
254
  const root = this.computeRoot(txid);
255
+ if (this.indexOf(txid) === 0) {
256
+ // Coinbase transaction outputs can only be spent once they're 100 blocks deep.
257
+ const height = await chainTracker.currentHeight();
258
+ if (this.blockHeight + 100 < height) {
259
+ return false;
260
+ }
261
+ }
251
262
  // Use the chain tracker to determine whether this is a valid merkle root at the given block height
252
263
  return await chainTracker.isValidRootForHeight(root, this.blockHeight);
253
264
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MerklePath.js","sourceRoot":"","sources":["../../../../src/transaction/MerklePath.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MerklePath.js","sourceRoot":"","sources":["../../../../src/transaction/MerklePath.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import MerklePath from './MerklePath.js';
7
7
  import Spend from '../script/Spend.js';
8
8
  import { defaultBroadcaster } from './broadcasters/DefaultBroadcaster.js';
9
9
  import { defaultChainTracker } from './chaintrackers/DefaultChainTracker.js';
10
- import { ATOMIC_BEEF, BEEF_MAGIC } from './Beef.js';
10
+ import { ATOMIC_BEEF, BEEF_V1 } from './Beef.js';
11
11
  import P2PKH from '../script/templates/P2PKH.js';
12
12
  /**
13
13
  * Represents a complete Bitcoin transaction. This class encapsulates all the details
@@ -52,6 +52,26 @@ export default class Transaction {
52
52
  metadata;
53
53
  merklePath;
54
54
  cachedHash;
55
+ // Recursive function for adding merkle proofs or input transactions
56
+ static addPathOrInputs(obj, transactions, BUMPs) {
57
+ if (typeof obj.pathIndex === 'number') {
58
+ const path = BUMPs[obj.pathIndex];
59
+ if (typeof path !== 'object') {
60
+ throw new Error('Invalid merkle path index found in BEEF!');
61
+ }
62
+ obj.tx.merklePath = path;
63
+ }
64
+ else {
65
+ for (const input of obj.tx.inputs) {
66
+ const sourceObj = transactions[input.sourceTXID];
67
+ if (typeof sourceObj !== 'object') {
68
+ throw new Error(`Reference to unknown TXID in BEEF: ${input.sourceTXID}`);
69
+ }
70
+ input.sourceTransaction = sourceObj.tx;
71
+ this.addPathOrInputs(sourceObj, transactions, BUMPs);
72
+ }
73
+ }
74
+ }
55
75
  /**
56
76
  * Creates a new transaction, linked to its inputs and their associated merkle paths, from a BEEF (BRC-62) structure.
57
77
  * Optionally, you can provide a specific TXID to retrieve a particular transaction from the BEEF data.
@@ -71,28 +91,7 @@ export default class Transaction {
71
91
  if (!transactions[targetTXID]) {
72
92
  throw new Error(`Transaction with TXID ${targetTXID} not found in BEEF data.`);
73
93
  }
74
- // Recursive function for adding merkle proofs or input transactions
75
- const addPathOrInputs = (obj) => {
76
- if (typeof obj.pathIndex === 'number') {
77
- const path = BUMPs[obj.pathIndex];
78
- if (typeof path !== 'object') {
79
- throw new Error('Invalid merkle path index found in BEEF!');
80
- }
81
- obj.tx.merklePath = path;
82
- }
83
- else {
84
- for (let i = 0; i < obj.tx.inputs.length; i++) {
85
- const input = obj.tx.inputs[i];
86
- const sourceObj = transactions[input.sourceTXID];
87
- if (typeof sourceObj !== 'object') {
88
- throw new Error(`Reference to unknown TXID in BEEF: ${input.sourceTXID}`);
89
- }
90
- input.sourceTransaction = sourceObj.tx;
91
- addPathOrInputs(sourceObj);
92
- }
93
- }
94
- };
95
- addPathOrInputs(transactions[targetTXID]);
94
+ this.addPathOrInputs(transactions[targetTXID], transactions, BUMPs);
96
95
  return transactions[targetTXID].tx;
97
96
  }
98
97
  /**
@@ -155,28 +154,7 @@ export default class Transaction {
155
154
  for (const txid of unusedTxTxids) {
156
155
  throw new Error(`Unrelated transaction with TXID ${txid} found in Atomic BEEF data.`);
157
156
  }
158
- // Build the transaction by linking inputs and merkle paths
159
- const addPathOrInputs = (obj) => {
160
- if (typeof obj.pathIndex === 'number') {
161
- const path = BUMPs[obj.pathIndex];
162
- if (typeof path !== 'object') {
163
- throw new Error('Invalid merkle path index found in BEEF!');
164
- }
165
- obj.tx.merklePath = path;
166
- }
167
- else {
168
- for (let i = 0; i < obj.tx.inputs.length; i++) {
169
- const input = obj.tx.inputs[i];
170
- const sourceObj = transactions[input.sourceTXID];
171
- if (typeof sourceObj !== 'object') {
172
- throw new Error(`Reference to unknown TXID in BEEF: ${input.sourceTXID}`);
173
- }
174
- input.sourceTransaction = sourceObj.tx;
175
- addPathOrInputs(sourceObj);
176
- }
177
- }
178
- };
179
- addPathOrInputs(transactions[subjectTXID]);
157
+ this.addPathOrInputs(transactions[subjectTXID], transactions, BUMPs);
180
158
  return transactions[subjectTXID].tx;
181
159
  }
182
160
  /**
@@ -188,8 +166,8 @@ export default class Transaction {
188
166
  static parseBEEFData(reader) {
189
167
  // Read the version
190
168
  const version = reader.readUInt32LE();
191
- if (version !== BEEF_MAGIC) {
192
- throw new Error(`Invalid BEEF version. Expected ${BEEF_MAGIC}, received ${version}.`);
169
+ if (version !== BEEF_V1) {
170
+ throw new Error(`Invalid BEEF version. Expected ${BEEF_V1}, received ${version}.`);
193
171
  }
194
172
  // Read the BUMPs
195
173
  const numberOfBUMPs = reader.readVarIntNum();
@@ -469,7 +447,14 @@ export default class Transaction {
469
447
  };
470
448
  }
471
449
  const fee = await modelOrFee.computeFee(this);
472
- // change = inputs - fee - non-change outputs
450
+ const change = this.calculateChange(fee);
451
+ if (change <= 0) {
452
+ this.outputs = this.outputs.filter(output => !output.change);
453
+ return;
454
+ }
455
+ this.distributeChange(change, changeDistribution);
456
+ }
457
+ calculateChange(fee) {
473
458
  let change = 0;
474
459
  for (const input of this.inputs) {
475
460
  if (typeof input.sourceTransaction !== 'object') {
@@ -478,67 +463,57 @@ export default class Transaction {
478
463
  change += input.sourceTransaction.outputs[input.sourceOutputIndex].satoshis;
479
464
  }
480
465
  change -= fee;
481
- let changeCount = 0;
482
466
  for (const out of this.outputs) {
483
467
  if (!out.change) {
484
468
  change -= out.satoshis;
485
469
  }
486
- else {
487
- changeCount++;
488
- }
489
- }
490
- if (change <= changeCount) {
491
- // There is not enough change to distribute among the change outputs.
492
- // We'll remove all change outputs and leave the extra for the miners.
493
- for (let i = 0; i < this.outputs.length; i++) {
494
- if (this.outputs[i].change) {
495
- this.outputs.splice(i, 1);
496
- i--;
497
- }
498
- }
499
- return;
500
470
  }
501
- // Distribute change among change outputs
471
+ return change;
472
+ }
473
+ distributeChange(change, changeDistribution) {
502
474
  let distributedChange = 0;
475
+ const changeOutputs = this.outputs.filter(out => out.change);
503
476
  if (changeDistribution === 'random') {
504
- // Implement Benford's Law distribution for change outputs
505
- const changeOutputs = this.outputs.filter(out => out.change);
506
- let changeToUse = change;
507
- // Helper function to generate a number approximating Benford's Law
508
- const benfordNumber = (min, max) => {
509
- const d = Math.floor(Math.random() * 9) + 1;
510
- return Math.floor(min + (max - min) * Math.log10(1 + 1 / d) / Math.log10(10));
511
- };
512
- const benfordNumbers = Array(changeOutputs.length).fill(1);
513
- changeToUse -= changeOutputs.length;
514
- distributedChange += changeOutputs.length;
515
- for (let i = 0; i < changeOutputs.length - 1; i++) {
516
- const portion = benfordNumber(0, changeToUse);
517
- benfordNumbers[i] += portion;
518
- distributedChange += portion;
519
- changeToUse -= portion;
520
- }
521
- for (let i = 0; i < this.outputs.length; i++) {
522
- if (this.outputs[i].change) {
523
- const t = benfordNumbers.shift();
524
- this.outputs[i].satoshis = t;
525
- }
526
- }
477
+ distributedChange = this.distributeRandomChange(change, changeOutputs);
527
478
  }
528
479
  else if (changeDistribution === 'equal') {
529
- const perOutput = Math.floor(change / changeCount);
530
- for (const out of this.outputs) {
531
- if (out.change) {
532
- distributedChange += perOutput;
533
- out.satoshis = perOutput;
534
- }
535
- }
480
+ distributedChange = this.distributeEqualChange(change, changeOutputs);
536
481
  }
537
- // if there's any remaining change, add it to the last output
538
482
  if (distributedChange < change) {
539
483
  this.outputs[this.outputs.length - 1].satoshis += (change - distributedChange);
540
484
  }
541
485
  }
486
+ distributeRandomChange(change, changeOutputs) {
487
+ let distributedChange = 0;
488
+ let changeToUse = change;
489
+ const benfordNumbers = Array(changeOutputs.length).fill(1);
490
+ changeToUse -= changeOutputs.length;
491
+ distributedChange += changeOutputs.length;
492
+ for (let i = 0; i < changeOutputs.length - 1; i++) {
493
+ const portion = this.benfordNumber(0, changeToUse);
494
+ benfordNumbers[i] += portion;
495
+ distributedChange += portion;
496
+ changeToUse -= portion;
497
+ }
498
+ for (const output of this.outputs) {
499
+ if (output.change)
500
+ output.satoshis = benfordNumbers.shift();
501
+ }
502
+ return distributedChange;
503
+ }
504
+ distributeEqualChange(change, changeOutputs) {
505
+ let distributedChange = 0;
506
+ const perOutput = Math.floor(change / changeOutputs.length);
507
+ for (const out of changeOutputs) {
508
+ distributedChange += perOutput;
509
+ out.satoshis = perOutput;
510
+ }
511
+ return distributedChange;
512
+ }
513
+ benfordNumber(min, max) {
514
+ const d = Math.floor(Math.random() * 9) + 1;
515
+ return Math.floor(min + (max - min) * Math.log10(1 + 1 / d) / Math.log10(10));
516
+ }
542
517
  /**
543
518
  * Utility method that returns the current fee based on inputs and outputs
544
519
  *
@@ -840,9 +815,8 @@ export default class Transaction {
840
815
  * @throws Error if there are any missing sourceTransactions unless `allowPartial` is true.
841
816
  */
842
817
  toBEEF(allowPartial) {
843
- this.outputs.length;
844
818
  const writer = new Writer();
845
- writer.writeUInt32LE(4022206465);
819
+ writer.writeUInt32LE(BEEF_V1);
846
820
  const BUMPs = [];
847
821
  const txs = [];
848
822
  // Recursive function to add paths and input transactions for a TX