@chainvue/verus-sdk 0.6.0 → 0.6.1
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/bundle.js +188 -59
- package/dist/currency/index.d.ts.map +1 -1
- package/dist/currency/index.js +11 -2
- package/dist/currency/index.js.map +1 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +127 -9
- package/dist/identity/index.js.map +1 -1
- package/dist/signing/index.d.ts.map +1 -1
- package/dist/signing/index.js +6 -0
- package/dist/signing/index.js.map +1 -1
- package/dist/transfer/index.d.ts.map +1 -1
- package/dist/transfer/index.js +15 -3
- package/dist/transfer/index.js.map +1 -1
- package/dist/utxo/index.d.ts +2 -2
- package/dist/utxo/index.d.ts.map +1 -1
- package/dist/utxo/index.js +43 -12
- package/dist/utxo/index.js.map +1 -1
- package/package.json +1 -1
package/dist/utxo/index.js
CHANGED
|
@@ -74,16 +74,20 @@ function decodeUtxo(utxo, systemId) {
|
|
|
74
74
|
/**
|
|
75
75
|
* Estimate transaction fee based on input/output counts
|
|
76
76
|
*/
|
|
77
|
-
function estimateFee(numInputs, numOutputs, feePerKb = index_js_1.DEFAULT_FEE_PER_KB, hasSmartOutputs = false) {
|
|
77
|
+
function estimateFee(numInputs, numOutputs, feePerKb = index_js_1.DEFAULT_FEE_PER_KB, hasSmartOutputs = false, extraBytes = 0) {
|
|
78
78
|
const outputSize = hasSmartOutputs ? SMART_OUTPUT_SIZE : P2PKH_OUTPUT_SIZE;
|
|
79
|
-
|
|
79
|
+
// `extraBytes` accounts for pre-built outputs whose real size dwarfs the
|
|
80
|
+
// fixed per-output estimate (e.g. an identity output embedding a multi-KB
|
|
81
|
+
// contentMultimap). Without it a large tx is fee-estimated far below the
|
|
82
|
+
// relay minimum and the daemon rejects it.
|
|
83
|
+
const txSize = TX_OVERHEAD + numInputs * INPUT_SIZE + numOutputs * outputSize + extraBytes;
|
|
80
84
|
const fee = (BigInt(txSize) * feePerKb + 999n) / 1000n; // ceil(txSize * feePerKb / 1000)
|
|
81
85
|
return fee > MIN_FEE ? fee : MIN_FEE;
|
|
82
86
|
}
|
|
83
87
|
/**
|
|
84
88
|
* Select UTXOs to cover required amounts
|
|
85
89
|
*/
|
|
86
|
-
function selectUtxos(utxos, requiredNative, requiredCurrencies = new Map(), numOutputs = 2, systemId = index_js_1.NETWORK_CONFIG.mainnet.chainId, feePerKb = index_js_1.DEFAULT_FEE_PER_KB, hasSmartOutputs = false) {
|
|
90
|
+
function selectUtxos(utxos, requiredNative, requiredCurrencies = new Map(), numOutputs = 2, systemId = index_js_1.NETWORK_CONFIG.mainnet.chainId, feePerKb = index_js_1.DEFAULT_FEE_PER_KB, hasSmartOutputs = false, extraOutputBytes = 0) {
|
|
87
91
|
// Reject duplicate outpoints up front. An outpoint can only be spent once, so
|
|
88
92
|
// the same (txid, outputIndex) twice is always a caller error. Left unchecked
|
|
89
93
|
// its value is double-counted here (corrupting the funds accounting) and the
|
|
@@ -137,17 +141,36 @@ function selectUtxos(utxos, requiredNative, requiredCurrencies = new Map(), numO
|
|
|
137
141
|
}
|
|
138
142
|
}
|
|
139
143
|
}
|
|
140
|
-
// Phase 2: Select UTXOs for native amount + fee
|
|
144
|
+
// Phase 2: Select UTXOs for native amount + fee.
|
|
145
|
+
// Prefer pure-native UTXOs so token-carrying UTXOs are only spent when needed;
|
|
146
|
+
// if one IS pulled in for its native value, its non-native currencies must be
|
|
147
|
+
// returned as change (below) — otherwise that token value is silently burned.
|
|
148
|
+
const carriesToken = (u) => {
|
|
149
|
+
for (const [currency, amount] of u.currencyValues) {
|
|
150
|
+
if (currency !== systemId && amount > 0n)
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
return false;
|
|
154
|
+
};
|
|
141
155
|
const nativeOnly = decoded
|
|
142
156
|
.filter((u) => !selected.includes(u))
|
|
143
|
-
.sort((a, b) =>
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if (
|
|
147
|
-
|
|
157
|
+
.sort((a, b) => {
|
|
158
|
+
const at = carriesToken(a) ? 1 : 0;
|
|
159
|
+
const bt = carriesToken(b) ? 1 : 0;
|
|
160
|
+
if (at !== bt)
|
|
161
|
+
return at - bt; // pure-native first
|
|
162
|
+
return b.satoshis > a.satoshis ? 1 : b.satoshis < a.satoshis ? -1 : 0;
|
|
163
|
+
});
|
|
164
|
+
const countCurrencyChanges = () => {
|
|
165
|
+
let n = 0;
|
|
166
|
+
for (const [currency, needed] of remaining) {
|
|
167
|
+
if (currency !== systemId && needed < 0n)
|
|
168
|
+
n++;
|
|
148
169
|
}
|
|
149
|
-
|
|
150
|
-
|
|
170
|
+
return n;
|
|
171
|
+
};
|
|
172
|
+
let changeOutputCount = countCurrencyChanges();
|
|
173
|
+
let fee = estimateFee(selected.length + 1, numOutputs + 1 + changeOutputCount, feePerKb, hasSmartOutputs, extraOutputBytes);
|
|
151
174
|
while (remainingNative + fee > 0n) {
|
|
152
175
|
const next = nativeOnly.shift();
|
|
153
176
|
if (!next) {
|
|
@@ -156,7 +179,15 @@ function selectUtxos(utxos, requiredNative, requiredCurrencies = new Map(), numO
|
|
|
156
179
|
}
|
|
157
180
|
selected.push(next);
|
|
158
181
|
remainingNative -= next.satoshis;
|
|
159
|
-
|
|
182
|
+
// Fold any non-native currency carried by this UTXO into `remaining` so it
|
|
183
|
+
// becomes change (a negative balance) rather than being spent with no output.
|
|
184
|
+
for (const [currency, amount] of next.currencyValues) {
|
|
185
|
+
if (currency === systemId || amount <= 0n)
|
|
186
|
+
continue;
|
|
187
|
+
remaining.set(currency, (remaining.get(currency) || 0n) - amount);
|
|
188
|
+
}
|
|
189
|
+
changeOutputCount = countCurrencyChanges();
|
|
190
|
+
fee = estimateFee(selected.length, numOutputs + 1 + changeOutputCount, feePerKb, hasSmartOutputs, extraOutputBytes);
|
|
160
191
|
}
|
|
161
192
|
// Calculate change
|
|
162
193
|
const totalNativeIn = selected.reduce((sum, u) => sum + u.satoshis, 0n);
|
package/dist/utxo/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utxo/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AA+CH,gCA2BC;AAKD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utxo/index.ts"],"names":[],"mappings":"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"}
|