@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.
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/primitives/BigNumber.js +85 -89
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js +5 -2
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +3 -2
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +71 -62
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/totp/totp.js +0 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +26 -40
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefParty.js +1 -1
- package/dist/cjs/src/transaction/BeefTx.js +75 -73
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +12 -1
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +70 -96
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +20 -2
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/primitives/BigNumber.js +85 -89
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js +5 -2
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +2 -2
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +70 -61
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/totp/totp.js +0 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +25 -39
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefParty.js +1 -1
- package/dist/esm/src/transaction/BeefTx.js +76 -74
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +12 -1
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +71 -97
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +20 -2
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts +24 -22
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts +17 -17
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +9 -12
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefParty.d.ts +1 -1
- package/dist/types/src/transaction/BeefTx.d.ts +5 -2
- package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
- package/dist/types/src/transaction/ChainTracker.d.ts +6 -0
- package/dist/types/src/transaction/ChainTracker.d.ts.map +1 -1
- package/dist/types/src/transaction/MerklePath.d.ts +1 -0
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts +6 -0
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts +2 -1
- package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +1 -1
- package/docs/compat.md +13 -11
- package/docs/primitives.md +152 -188
- package/docs/transaction.md +78 -76
- package/package.json +1 -1
- package/src/primitives/BigNumber.ts +111 -111
- package/src/primitives/PublicKey.ts +5 -2
- package/src/primitives/Random.ts +2 -2
- package/src/primitives/utils.ts +92 -77
- package/src/totp/totp.ts +0 -1
- package/src/transaction/Beef.ts +20 -43
- package/src/transaction/BeefParty.ts +1 -1
- package/src/transaction/BeefTx.ts +89 -57
- package/src/transaction/ChainTracker.ts +6 -0
- package/src/transaction/MerklePath.ts +13 -1
- package/src/transaction/Transaction.ts +77 -100
- package/src/transaction/__tests/Beef.test.ts +9 -9
- package/src/transaction/__tests/MerklePath.test.ts +23 -2
- package/src/transaction/__tests/Transaction.benchmarks.test.ts +1 -1
- package/src/transaction/__tests/Transaction.test.ts +3 -3
- package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +2 -2
- package/src/transaction/chaintrackers/WhatsOnChain.ts +20 -2
- 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 {
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
127
|
+
writeByte(TX_DATA_FORMAT.RAWTX); // 0
|
|
112
128
|
}
|
|
113
129
|
else {
|
|
114
|
-
|
|
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
|
-
|
|
119
|
-
// V2
|
|
133
|
+
};
|
|
134
|
+
if (version === BEEF_V2) {
|
|
120
135
|
if (this.isTxidOnly) {
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
146
|
-
|
|
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
|
-
|
|
157
|
-
|
|
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 ===
|
|
165
|
-
|
|
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 ===
|
|
165
|
+
if (format === TX_DATA_FORMAT.RAWTX_AND_BUMP_INDEX) {
|
|
170
166
|
bumpIndex = br.readVarIntNum();
|
|
171
167
|
}
|
|
172
|
-
|
|
168
|
+
data = Transaction.fromReader(br);
|
|
169
|
+
beefTx = BeefTx.fromTx(data, bumpIndex);
|
|
173
170
|
}
|
|
174
171
|
}
|
|
175
|
-
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAkB,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,WAAW,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,
|
|
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.
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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 !==
|
|
192
|
-
throw new Error(`Invalid BEEF version. Expected ${
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|