@gobob/bob-sdk 3.1.1 → 3.1.2
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.
|
@@ -80,6 +80,7 @@ export interface InscriptionJson<InscriptionId, SatPoint> {
|
|
|
80
80
|
content_type: string | null;
|
|
81
81
|
effective_content_type: string | null;
|
|
82
82
|
fee: number;
|
|
83
|
+
metaprotocol: string | null;
|
|
83
84
|
height: number;
|
|
84
85
|
id: InscriptionId;
|
|
85
86
|
next: InscriptionId | null;
|
|
@@ -101,8 +102,10 @@ export declare class OrdinalsClient {
|
|
|
101
102
|
getInscriptionsFromBlock(height: number): Promise<InscriptionsJson<InscriptionId>>;
|
|
102
103
|
getInscriptionsFromOutPoint(outPoint: OutPoint): Promise<OutputJson>;
|
|
103
104
|
getOutputsFromAddress(address: string, type?: 'cardinal' | 'inscribed' | 'runic' | 'any'): Promise<OutputJson[]>;
|
|
105
|
+
getOutputsFromOutPoints(outpoints: string[]): Promise<OutputJson[]>;
|
|
104
106
|
getInscriptionsFromSat(sat: number): Promise<SatJson<InscriptionId>>;
|
|
105
107
|
getInscriptionsFromStartBlock(startHeight: number): Promise<InscriptionsJson<InscriptionId>>;
|
|
106
108
|
private getJson;
|
|
109
|
+
private postJson;
|
|
107
110
|
private parseInscriptionsJson;
|
|
108
111
|
}
|
|
@@ -100,6 +100,9 @@ class OrdinalsClient {
|
|
|
100
100
|
searchParams.append('type', type);
|
|
101
101
|
return this.getJson(`${this.basePath}/outputs/${address}?${searchParams}`);
|
|
102
102
|
}
|
|
103
|
+
getOutputsFromOutPoints(outpoints) {
|
|
104
|
+
return this.postJson(`${this.basePath}/outputs`, outpoints);
|
|
105
|
+
}
|
|
103
106
|
async getInscriptionsFromSat(sat) {
|
|
104
107
|
const satJson = await this.getJson(`${this.basePath}/sat/${sat}`);
|
|
105
108
|
return {
|
|
@@ -120,7 +123,21 @@ class OrdinalsClient {
|
|
|
120
123
|
if (!response.ok) {
|
|
121
124
|
throw new Error(response.statusText);
|
|
122
125
|
}
|
|
123
|
-
return
|
|
126
|
+
return response.json();
|
|
127
|
+
}
|
|
128
|
+
async postJson(url, body) {
|
|
129
|
+
const response = await fetch(url, {
|
|
130
|
+
method: 'POST',
|
|
131
|
+
headers: {
|
|
132
|
+
'Content-Type': 'application/json',
|
|
133
|
+
Accept: 'application/json',
|
|
134
|
+
},
|
|
135
|
+
body: JSON.stringify(body),
|
|
136
|
+
});
|
|
137
|
+
if (!response.ok) {
|
|
138
|
+
throw new Error(response.statusText);
|
|
139
|
+
}
|
|
140
|
+
return response.json();
|
|
124
141
|
}
|
|
125
142
|
parseInscriptionsJson(inscriptionsJson) {
|
|
126
143
|
const ids = inscriptionsJson.ids.map((id) => InscriptionId.fromString(id));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ordinal-api/index.ts"],"names":[],"mappings":";;;AAIa,QAAA,qBAAqB,GAAG,qBAAqB,CAAC;AAM9C,QAAA,qBAAqB,GAAG,oCAAoC,CAAC;AAM7D,QAAA,qBAAqB,GAAG,oCAAoC,CAAC;AAQ1E,IAAc,aAAa,CAa1B;AAbD,WAAc,aAAa;IACvB,SAAgB,QAAQ,CAAC,EAAiB;QACtC,OAAO,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAFe,sBAAQ,WAEvB,CAAA;IAED,SAAgB,UAAU,CAAC,EAAU;QAEjC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO;YACH,IAAI;YACJ,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;SAC7B,CAAC;IACN,CAAC;IAPe,wBAAU,aAOzB,CAAA;AACL,CAAC,EAba,aAAa,6BAAb,aAAa,QAa1B;AAQD,IAAc,QAAQ,CAarB;AAbD,WAAc,QAAQ;IAClB,SAAgB,QAAQ,CAAC,EAAY;QACjC,OAAO,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAFe,iBAAQ,WAEvB,CAAA;IAED,SAAgB,UAAU,CAAC,EAAU;QAEjC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO;YACH,IAAI;YACJ,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;SAC3B,CAAC;IACN,CAAC;IAPe,mBAAU,aAOzB,CAAA;AACL,CAAC,EAba,QAAQ,wBAAR,QAAQ,QAarB;AAQD,IAAc,QAAQ,CAgBrB;AAhBD,WAAc,QAAQ;IAClB,SAAgB,QAAQ,CAAC,EAAY;QACjC,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;IAC5D,CAAC;IAFe,iBAAQ,WAEvB,CAAA;IAED,SAAgB,UAAU,CAAC,EAAU;QAEjC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO;YACH,QAAQ,EAAE;gBACN,IAAI;gBACJ,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;aAC3B;YACD,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;SAC/B,CAAC;IACN,CAAC;IAVe,mBAAU,aAUzB,CAAA;AACL,CAAC,EAhBa,QAAQ,wBAAR,QAAQ,QAgBrB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ordinal-api/index.ts"],"names":[],"mappings":"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"}
|
package/dist/wallet/utxo.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Transaction } from '@scure/btc-signer';
|
|
2
2
|
import { AddressType, Network } from 'bitcoin-address-validation';
|
|
3
|
-
import { UTXO } from '../esplora';
|
|
3
|
+
import { EsploraClient, UTXO } from '../esplora';
|
|
4
|
+
import { OrdinalsClient } from '../ordinal-api';
|
|
4
5
|
export type BitcoinNetworkName = Exclude<Network, 'regtest'>;
|
|
5
6
|
export declare const getBtcNetwork: (name: BitcoinNetworkName) => {
|
|
6
7
|
bech32: string;
|
|
@@ -8,6 +9,7 @@ export declare const getBtcNetwork: (name: BitcoinNetworkName) => {
|
|
|
8
9
|
scriptHash: number;
|
|
9
10
|
wif: number;
|
|
10
11
|
};
|
|
12
|
+
export declare const findSafeUtxos: (utxos: UTXO[], cardinalOutputsSet: Set<string>, esploraClient: EsploraClient, ordinalsClient: OrdinalsClient) => Promise<UTXO[]>;
|
|
11
13
|
export interface Input {
|
|
12
14
|
txid: string;
|
|
13
15
|
index: number;
|
package/dist/wallet/utxo.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getBtcNetwork = void 0;
|
|
3
|
+
exports.findSafeUtxos = exports.getBtcNetwork = void 0;
|
|
4
4
|
exports.createBitcoinPsbt = createBitcoinPsbt;
|
|
5
5
|
exports.getInputFromUtxoAndTx = getInputFromUtxoAndTx;
|
|
6
6
|
exports.estimateTxFee = estimateTxFee;
|
|
@@ -10,6 +10,7 @@ const base_1 = require("@scure/base");
|
|
|
10
10
|
const bitcoin_address_validation_1 = require("bitcoin-address-validation");
|
|
11
11
|
const esplora_1 = require("../esplora");
|
|
12
12
|
const ordinal_api_1 = require("../ordinal-api");
|
|
13
|
+
const inscription_1 = require("../inscription");
|
|
13
14
|
const bitcoinNetworks = {
|
|
14
15
|
mainnet: btc_signer_1.NETWORK,
|
|
15
16
|
testnet: btc_signer_1.TEST_NETWORK,
|
|
@@ -18,6 +19,63 @@ const getBtcNetwork = (name) => {
|
|
|
18
19
|
return bitcoinNetworks[name];
|
|
19
20
|
};
|
|
20
21
|
exports.getBtcNetwork = getBtcNetwork;
|
|
22
|
+
const isCardinalOutput = (output) => output.inscriptions.length === 0 && Object.keys(output.runes).length === 0;
|
|
23
|
+
const isCardinalTx = async (outpoint, cardinalOutputsSet, esploraClient, ordinalsClient) => {
|
|
24
|
+
const transaction = await esploraClient.getTransaction(outpoint.txid);
|
|
25
|
+
if (transaction.status.confirmed)
|
|
26
|
+
return cardinalOutputsSet.has(ordinal_api_1.OutPoint.toString(outpoint));
|
|
27
|
+
const outputs = await ordinalsClient.getOutputsFromOutPoints(transaction.vin.map(ordinal_api_1.OutPoint.toString));
|
|
28
|
+
const results = await Promise.all(transaction.vin.map(async (vin, index) => {
|
|
29
|
+
if (cardinalOutputsSet.has(ordinal_api_1.OutPoint.toString(vin)))
|
|
30
|
+
return true;
|
|
31
|
+
const inscriptions = await (0, inscription_1.getTxInscriptions)(esploraClient, vin.txid);
|
|
32
|
+
if (inscriptions.length > 0)
|
|
33
|
+
return false;
|
|
34
|
+
const output = outputs[index];
|
|
35
|
+
if (output.indexed) {
|
|
36
|
+
return isCardinalOutput(output);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return isCardinalTx(vin, cardinalOutputsSet, esploraClient, ordinalsClient);
|
|
40
|
+
}
|
|
41
|
+
}));
|
|
42
|
+
return results.every((result) => result === true);
|
|
43
|
+
};
|
|
44
|
+
const findSafeUtxos = async (utxos, cardinalOutputsSet, esploraClient, ordinalsClient) => {
|
|
45
|
+
const results = await Promise.all(utxos.map(async (utxo) => {
|
|
46
|
+
if (cardinalOutputsSet.has(ordinal_api_1.OutPoint.toString(utxo)))
|
|
47
|
+
return true;
|
|
48
|
+
const inscriptions = await (0, inscription_1.getTxInscriptions)(esploraClient, utxo.txid);
|
|
49
|
+
if (inscriptions.length > 0)
|
|
50
|
+
return false;
|
|
51
|
+
return isCardinalTx(utxo, cardinalOutputsSet, esploraClient, ordinalsClient);
|
|
52
|
+
}));
|
|
53
|
+
return utxos.filter((_, index) => results[index]);
|
|
54
|
+
};
|
|
55
|
+
exports.findSafeUtxos = findSafeUtxos;
|
|
56
|
+
const getSafeUtxos = async (address, esploraClient, ordinalsClient) => {
|
|
57
|
+
const [utxos, cardinalOutputs] = await Promise.all([
|
|
58
|
+
esploraClient.getAddressUtxos(address),
|
|
59
|
+
ordinalsClient.getOutputsFromAddress(address, 'cardinal'),
|
|
60
|
+
]);
|
|
61
|
+
const cardinalOutputsSet = new Set(cardinalOutputs.map((output) => output.outpoint));
|
|
62
|
+
return (0, exports.findSafeUtxos)(utxos, cardinalOutputsSet, esploraClient, ordinalsClient);
|
|
63
|
+
};
|
|
64
|
+
const collectPossibleInputs = async (fromAddress, publicKey) => {
|
|
65
|
+
const addressInfo = (0, bitcoin_address_validation_1.getAddressInfo)(fromAddress);
|
|
66
|
+
const esploraClient = new esplora_1.EsploraClient(addressInfo.network);
|
|
67
|
+
const ordinalsClient = new ordinal_api_1.OrdinalsClient(addressInfo.network);
|
|
68
|
+
const safeUtxos = await getSafeUtxos(fromAddress, esploraClient, ordinalsClient);
|
|
69
|
+
if (safeUtxos.length === 0) {
|
|
70
|
+
throw new Error('No confirmed UTXOs');
|
|
71
|
+
}
|
|
72
|
+
return Promise.all(safeUtxos.map(async (utxo) => {
|
|
73
|
+
const hex = await esploraClient.getTransactionHex(utxo.txid);
|
|
74
|
+
const transaction = btc_signer_1.Transaction.fromRaw(Buffer.from(hex, 'hex'), { allowUnknownOutputs: true });
|
|
75
|
+
const input = getInputFromUtxoAndTx(addressInfo.network, utxo, transaction, addressInfo.type, publicKey);
|
|
76
|
+
return input;
|
|
77
|
+
}));
|
|
78
|
+
};
|
|
21
79
|
async function createBitcoinPsbt(fromAddress, toAddress, amount, publicKey, opReturnData, feeRate, confirmationTarget = 3) {
|
|
22
80
|
const addressInfo = (0, bitcoin_address_validation_1.getAddressInfo)(fromAddress);
|
|
23
81
|
const utxoSelectionStrategy = 'default';
|
|
@@ -31,27 +89,12 @@ async function createBitcoinPsbt(fromAddress, toAddress, amount, publicKey, opRe
|
|
|
31
89
|
throw new Error('Public key is required to spend from the selected address type');
|
|
32
90
|
}
|
|
33
91
|
}
|
|
92
|
+
let possibleInputs = [];
|
|
34
93
|
const esploraClient = new esplora_1.EsploraClient(addressInfo.network);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
let outputsFromAddress = [];
|
|
38
|
-
[confirmedUtxos, feeRate, outputsFromAddress] = await Promise.all([
|
|
39
|
-
esploraClient.getAddressUtxos(fromAddress),
|
|
94
|
+
[possibleInputs, feeRate] = await Promise.all([
|
|
95
|
+
collectPossibleInputs(fromAddress, publicKey),
|
|
40
96
|
feeRate === undefined ? esploraClient.getFeeEstimate(confirmationTarget) : feeRate,
|
|
41
|
-
ordinalsClient.getOutputsFromAddress(fromAddress, 'cardinal'),
|
|
42
97
|
]);
|
|
43
|
-
if (confirmedUtxos.length === 0) {
|
|
44
|
-
throw new Error('No confirmed UTXOs');
|
|
45
|
-
}
|
|
46
|
-
const outpointsSet = new Set(outputsFromAddress.map((output) => output.outpoint));
|
|
47
|
-
const possibleInputs = [];
|
|
48
|
-
await Promise.all(confirmedUtxos.map(async (utxo) => {
|
|
49
|
-
const hex = await esploraClient.getTransactionHex(utxo.txid);
|
|
50
|
-
const transaction = btc_signer_1.Transaction.fromRaw(Buffer.from(hex, 'hex'), { allowUnknownOutputs: true });
|
|
51
|
-
const input = getInputFromUtxoAndTx(addressInfo.network, utxo, transaction, addressInfo.type, publicKey);
|
|
52
|
-
if (outpointsSet.has(ordinal_api_1.OutPoint.toString(utxo)))
|
|
53
|
-
possibleInputs.push(input);
|
|
54
|
-
}));
|
|
55
98
|
const outputs = [
|
|
56
99
|
{
|
|
57
100
|
address: toAddress,
|
|
@@ -78,8 +121,7 @@ async function createBitcoinPsbt(fromAddress, toAddress, amount, publicKey, opRe
|
|
|
78
121
|
dust: BigInt(546),
|
|
79
122
|
});
|
|
80
123
|
if (!transaction || !transaction.tx) {
|
|
81
|
-
console.debug('
|
|
82
|
-
console.debug('outputsFromAddress', outputsFromAddress);
|
|
124
|
+
console.debug('possibleInputs', possibleInputs);
|
|
83
125
|
console.debug(`fromAddress: ${fromAddress}, toAddress: ${toAddress}, amount: ${amount}`);
|
|
84
126
|
console.debug(`publicKey: ${publicKey}, opReturnData: ${opReturnData}`);
|
|
85
127
|
console.debug(`feeRate: ${feeRate}, confirmationTarget: ${confirmationTarget}`);
|
|
@@ -135,27 +177,12 @@ async function estimateTxFee(fromAddress, amount, publicKey, opReturnData, feeRa
|
|
|
135
177
|
}
|
|
136
178
|
}
|
|
137
179
|
const toAddress = fromAddress;
|
|
180
|
+
let possibleInputs = [];
|
|
138
181
|
const esploraClient = new esplora_1.EsploraClient(addressInfo.network);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
let outputsFromAddress = [];
|
|
142
|
-
[confirmedUtxos, feeRate, outputsFromAddress] = await Promise.all([
|
|
143
|
-
esploraClient.getAddressUtxos(fromAddress),
|
|
182
|
+
[possibleInputs, feeRate] = await Promise.all([
|
|
183
|
+
collectPossibleInputs(fromAddress, publicKey),
|
|
144
184
|
feeRate === undefined ? esploraClient.getFeeEstimate(confirmationTarget) : feeRate,
|
|
145
|
-
ordinalsClient.getOutputsFromAddress(fromAddress, 'cardinal'),
|
|
146
185
|
]);
|
|
147
|
-
if (confirmedUtxos.length === 0) {
|
|
148
|
-
throw new Error('No confirmed UTXOs');
|
|
149
|
-
}
|
|
150
|
-
const outpointsSet = new Set(outputsFromAddress.map((output) => output.outpoint));
|
|
151
|
-
const possibleInputs = [];
|
|
152
|
-
await Promise.all(confirmedUtxos.map(async (utxo) => {
|
|
153
|
-
const hex = await esploraClient.getTransactionHex(utxo.txid);
|
|
154
|
-
const transaction = btc_signer_1.Transaction.fromRaw(Buffer.from(hex, 'hex'), { allowUnknownOutputs: true });
|
|
155
|
-
const input = getInputFromUtxoAndTx(addressInfo.network, utxo, transaction, addressInfo.type, publicKey);
|
|
156
|
-
if (outpointsSet.has(ordinal_api_1.OutPoint.toString(utxo)))
|
|
157
|
-
possibleInputs.push(input);
|
|
158
|
-
}));
|
|
159
186
|
const outputs = [
|
|
160
187
|
{
|
|
161
188
|
address: toAddress,
|
|
@@ -186,8 +213,7 @@ async function estimateTxFee(fromAddress, amount, publicKey, opReturnData, feeRa
|
|
|
186
213
|
dust: BigInt(546),
|
|
187
214
|
});
|
|
188
215
|
if (!transaction || !transaction.tx) {
|
|
189
|
-
console.debug('
|
|
190
|
-
console.debug('outputsFromAddress', outputsFromAddress);
|
|
216
|
+
console.debug('possibleInputs', possibleInputs);
|
|
191
217
|
console.debug(`fromAddress: ${fromAddress}, amount: ${amount}`);
|
|
192
218
|
console.debug(`publicKey: ${publicKey}, opReturnData: ${opReturnData}`);
|
|
193
219
|
console.debug(`feeRate: ${feeRate}, confirmationTarget: ${confirmationTarget}`);
|
|
@@ -202,20 +228,11 @@ async function getBalance(address) {
|
|
|
202
228
|
const addressInfo = (0, bitcoin_address_validation_1.getAddressInfo)(address);
|
|
203
229
|
const esploraClient = new esplora_1.EsploraClient(addressInfo.network);
|
|
204
230
|
const ordinalsClient = new ordinal_api_1.OrdinalsClient(addressInfo.network);
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
const total = outputs.reduce((acc, output) => {
|
|
211
|
-
if (cardinalOutputsSet.has(ordinal_api_1.OutPoint.toString(output))) {
|
|
212
|
-
return acc + output.value;
|
|
213
|
-
}
|
|
214
|
-
return acc;
|
|
215
|
-
}, 0);
|
|
216
|
-
const confirmed = outputs.reduce((acc, output) => {
|
|
217
|
-
if (cardinalOutputsSet.has(ordinal_api_1.OutPoint.toString(output)) && output.confirmed) {
|
|
218
|
-
return acc + output.value;
|
|
231
|
+
const safeUtxos = await getSafeUtxos(address, esploraClient, ordinalsClient);
|
|
232
|
+
const total = safeUtxos.reduce((acc, utxo) => acc + utxo.value, 0);
|
|
233
|
+
const confirmed = safeUtxos.reduce((acc, utxo) => {
|
|
234
|
+
if (utxo.confirmed) {
|
|
235
|
+
return acc + utxo.value;
|
|
219
236
|
}
|
|
220
237
|
return acc;
|
|
221
238
|
}, 0);
|
package/dist/wallet/utxo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utxo.js","sourceRoot":"","sources":["../../src/wallet/utxo.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"utxo.js","sourceRoot":"","sources":["../../src/wallet/utxo.ts"],"names":[],"mappings":"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"}
|