@1sat/wallet 0.0.3 → 0.0.4
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/OneSatWallet.d.ts +222 -0
- package/dist/OneSatWallet.d.ts.map +1 -0
- package/dist/OneSatWallet.js +754 -0
- package/dist/OneSatWallet.js.map +1 -0
- package/dist/address-sync/AddressManager.d.ts +86 -0
- package/dist/address-sync/AddressManager.d.ts.map +1 -0
- package/dist/address-sync/AddressManager.js +108 -0
- package/dist/address-sync/AddressManager.js.map +1 -0
- package/dist/address-sync/AddressSyncManager.d.ts +204 -0
- package/dist/address-sync/AddressSyncManager.d.ts.map +1 -0
- package/dist/address-sync/AddressSyncManager.js +525 -0
- package/dist/address-sync/AddressSyncManager.js.map +1 -0
- package/dist/address-sync/AddressSyncQueueIdb.d.ts +31 -0
- package/dist/address-sync/AddressSyncQueueIdb.d.ts.map +1 -0
- package/dist/address-sync/AddressSyncQueueIdb.js +356 -0
- package/dist/address-sync/AddressSyncQueueIdb.js.map +1 -0
- package/dist/address-sync/AddressSyncQueueSqlite.d.ts +55 -0
- package/dist/address-sync/AddressSyncQueueSqlite.d.ts.map +1 -0
- package/dist/address-sync/AddressSyncQueueSqlite.js +198 -0
- package/dist/address-sync/AddressSyncQueueSqlite.js.map +1 -0
- package/dist/address-sync/index.d.ts +8 -0
- package/dist/address-sync/index.d.ts.map +1 -0
- package/dist/address-sync/index.js +5 -0
- package/dist/address-sync/index.js.map +1 -0
- package/dist/backup/FileBackupProvider.d.ts +97 -0
- package/dist/backup/FileBackupProvider.d.ts.map +1 -0
- package/dist/backup/FileBackupProvider.js +185 -0
- package/dist/backup/FileBackupProvider.js.map +1 -0
- package/dist/backup/FileRestoreReader.d.ts +59 -0
- package/dist/backup/FileRestoreReader.d.ts.map +1 -0
- package/dist/backup/FileRestoreReader.js +89 -0
- package/dist/backup/FileRestoreReader.js.map +1 -0
- package/dist/backup/index.d.ts +6 -0
- package/dist/backup/index.d.ts.map +1 -0
- package/dist/backup/index.js +5 -0
- package/dist/backup/index.js.map +1 -0
- package/dist/backup/types.d.ts +32 -0
- package/dist/backup/types.d.ts.map +1 -0
- package/dist/backup/types.js +2 -0
- package/dist/backup/types.js.map +1 -0
- package/dist/browser.d.ts +6 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +6 -0
- package/dist/browser.js.map +1 -0
- package/dist/cwi/chrome.d.ts +12 -0
- package/dist/cwi/chrome.d.ts.map +1 -0
- package/dist/cwi/chrome.js +44 -0
- package/dist/cwi/chrome.js.map +1 -0
- package/dist/cwi/event.d.ts +12 -0
- package/dist/cwi/event.d.ts.map +1 -0
- package/dist/cwi/event.js +39 -0
- package/dist/cwi/event.js.map +1 -0
- package/dist/cwi/factory.d.ts +15 -0
- package/dist/cwi/factory.d.ts.map +1 -0
- package/dist/cwi/factory.js +45 -0
- package/dist/cwi/factory.js.map +1 -0
- package/dist/cwi/index.d.ts +12 -0
- package/dist/cwi/index.d.ts.map +1 -0
- package/dist/cwi/index.js +12 -0
- package/dist/cwi/index.js.map +1 -0
- package/dist/cwi/types.d.ts +40 -0
- package/dist/cwi/types.d.ts.map +1 -0
- package/dist/cwi/types.js +40 -0
- package/dist/cwi/types.js.map +1 -0
- package/dist/factory/createWebWallet.d.ts +73 -0
- package/dist/factory/createWebWallet.d.ts.map +1 -0
- package/dist/factory/createWebWallet.js +251 -0
- package/dist/factory/createWebWallet.js.map +1 -0
- package/dist/factory/fullSync.d.ts +58 -0
- package/dist/factory/fullSync.d.ts.map +1 -0
- package/dist/factory/fullSync.js +92 -0
- package/dist/factory/fullSync.js.map +1 -0
- package/dist/factory/index.d.ts +5 -0
- package/dist/factory/index.d.ts.map +1 -0
- package/dist/factory/index.js +3 -0
- package/dist/factory/index.js.map +1 -0
- package/dist/index.d.ts +18 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -21
- package/dist/index.js.map +1 -1
- package/dist/indexers/Bsv21Indexer.d.ts +36 -0
- package/dist/indexers/Bsv21Indexer.d.ts.map +1 -0
- package/dist/indexers/Bsv21Indexer.js +232 -0
- package/dist/indexers/Bsv21Indexer.js.map +1 -0
- package/dist/indexers/CosignIndexer.d.ts +14 -0
- package/dist/indexers/CosignIndexer.d.ts.map +1 -0
- package/dist/indexers/CosignIndexer.js +27 -0
- package/dist/indexers/CosignIndexer.js.map +1 -0
- package/dist/indexers/FundIndexer.d.ts +20 -0
- package/dist/indexers/FundIndexer.d.ts.map +1 -0
- package/dist/indexers/FundIndexer.js +65 -0
- package/dist/indexers/FundIndexer.js.map +1 -0
- package/dist/indexers/InscriptionIndexer.d.ts +33 -0
- package/dist/indexers/InscriptionIndexer.d.ts.map +1 -0
- package/dist/indexers/InscriptionIndexer.js +116 -0
- package/dist/indexers/InscriptionIndexer.js.map +1 -0
- package/dist/indexers/LockIndexer.d.ts +11 -0
- package/dist/indexers/LockIndexer.d.ts.map +1 -0
- package/dist/indexers/LockIndexer.js +44 -0
- package/dist/indexers/LockIndexer.js.map +1 -0
- package/dist/indexers/MapIndexer.d.ts +14 -0
- package/dist/indexers/MapIndexer.d.ts.map +1 -0
- package/dist/indexers/MapIndexer.js +65 -0
- package/dist/indexers/MapIndexer.js.map +1 -0
- package/dist/indexers/OpNSIndexer.d.ts +10 -0
- package/dist/indexers/OpNSIndexer.d.ts.map +1 -0
- package/dist/indexers/OpNSIndexer.js +39 -0
- package/dist/indexers/OpNSIndexer.js.map +1 -0
- package/dist/indexers/OrdLockIndexer.d.ts +18 -0
- package/dist/indexers/OrdLockIndexer.d.ts.map +1 -0
- package/dist/indexers/OrdLockIndexer.js +65 -0
- package/dist/indexers/OrdLockIndexer.js.map +1 -0
- package/dist/indexers/OriginIndexer.d.ts +38 -0
- package/dist/indexers/OriginIndexer.d.ts.map +1 -0
- package/dist/indexers/OriginIndexer.js +241 -0
- package/dist/indexers/OriginIndexer.js.map +1 -0
- package/dist/indexers/Outpoint.d.ts +11 -0
- package/dist/indexers/Outpoint.d.ts.map +1 -0
- package/dist/indexers/Outpoint.js +62 -0
- package/dist/indexers/Outpoint.js.map +1 -0
- package/dist/indexers/SigmaIndexer.d.ts +29 -0
- package/dist/indexers/SigmaIndexer.d.ts.map +1 -0
- package/dist/indexers/SigmaIndexer.js +134 -0
- package/dist/indexers/SigmaIndexer.js.map +1 -0
- package/dist/indexers/index.d.ts +14 -0
- package/dist/indexers/index.d.ts.map +1 -0
- package/dist/indexers/index.js +14 -0
- package/dist/indexers/index.js.map +1 -0
- package/dist/indexers/parseAddress.d.ts +10 -0
- package/dist/indexers/parseAddress.d.ts.map +1 -0
- package/dist/indexers/parseAddress.js +25 -0
- package/dist/indexers/parseAddress.js.map +1 -0
- package/dist/node.d.ts +6 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +6 -0
- package/dist/node.js.map +1 -0
- package/dist/signers/ReadOnlySigner.d.ts +16 -0
- package/dist/signers/ReadOnlySigner.d.ts.map +1 -0
- package/dist/signers/ReadOnlySigner.js +48 -0
- package/dist/signers/ReadOnlySigner.js.map +1 -0
- package/package.json +21 -8
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Indexer, } from '@1sat/types';
|
|
2
|
+
import { parseAddress } from './parseAddress';
|
|
3
|
+
/**
|
|
4
|
+
* FundIndexer identifies P2PKH outputs to owned addresses.
|
|
5
|
+
* These are standard "funding" UTXOs that can be spent normally.
|
|
6
|
+
*
|
|
7
|
+
* Data structure: string (address)
|
|
8
|
+
*
|
|
9
|
+
* Basket: 'fund'
|
|
10
|
+
* Tags: None
|
|
11
|
+
*/
|
|
12
|
+
export class FundIndexer extends Indexer {
|
|
13
|
+
owners;
|
|
14
|
+
network;
|
|
15
|
+
tag = 'fund';
|
|
16
|
+
name = 'Funds';
|
|
17
|
+
constructor(owners = new Set(), network = 'mainnet') {
|
|
18
|
+
super(owners, network);
|
|
19
|
+
this.owners = owners;
|
|
20
|
+
this.network = network;
|
|
21
|
+
}
|
|
22
|
+
async parse(txo) {
|
|
23
|
+
const script = txo.output.lockingScript;
|
|
24
|
+
const satoshis = BigInt(txo.output.satoshis || 0);
|
|
25
|
+
const address = parseAddress(script, 0, this.network);
|
|
26
|
+
if (satoshis < 2n)
|
|
27
|
+
return;
|
|
28
|
+
return {
|
|
29
|
+
data: address,
|
|
30
|
+
tags: [],
|
|
31
|
+
owner: address,
|
|
32
|
+
basket: 'fund',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async summarize(ctx) {
|
|
36
|
+
let satsOut = 0n;
|
|
37
|
+
let satsIn = 0n;
|
|
38
|
+
// Calculate satoshis spent from our addresses (inputs)
|
|
39
|
+
for (const input of ctx.tx.inputs) {
|
|
40
|
+
if (!input.sourceTransaction) {
|
|
41
|
+
// If we don't have source transaction data, we can't determine balance change
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const sourceOutput = input.sourceTransaction.outputs[input.sourceOutputIndex];
|
|
45
|
+
const address = parseAddress(sourceOutput.lockingScript, 0, this.network);
|
|
46
|
+
if (this.owners.has(address)) {
|
|
47
|
+
satsOut += BigInt(sourceOutput.satoshis || 0);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Calculate satoshis received to our addresses (outputs)
|
|
51
|
+
satsIn = ctx.txos.reduce((acc, txo) => {
|
|
52
|
+
if (!txo.data[this.tag])
|
|
53
|
+
return acc;
|
|
54
|
+
const satoshis = BigInt(txo.output.satoshis || 0);
|
|
55
|
+
return acc + (txo.owner && this.owners.has(txo.owner) ? satoshis : 0n);
|
|
56
|
+
}, 0n);
|
|
57
|
+
const balance = Number(satsIn - satsOut);
|
|
58
|
+
if (balance) {
|
|
59
|
+
return {
|
|
60
|
+
amount: balance,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=FundIndexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FundIndexer.js","sourceRoot":"","sources":["../../src/indexers/FundIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,OAAO,GAIP,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,OAAO;IAK/B;IACA;IALR,GAAG,GAAG,MAAM,CAAA;IACZ,IAAI,GAAG,OAAO,CAAA;IAEd,YACQ,SAAS,IAAI,GAAG,EAAU,EAC1B,UAAiC,SAAS;QAEjD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAHf,WAAM,GAAN,MAAM,CAAoB;QAC1B,YAAO,GAAP,OAAO,CAAmC;IAGlD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAQ;QACnB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAA;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QACrD,IAAI,QAAQ,GAAG,EAAE;YAAE,OAAM;QAEzB,OAAO;YACN,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,MAAM;SACd,CAAA;IACF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAiB;QAChC,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,IAAI,MAAM,GAAG,EAAE,CAAA;QAEf,uDAAuD;QACvD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC9B,8EAA8E;gBAC9E,OAAM;YACP,CAAC;YAED,MAAM,YAAY,GACjB,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;YACzD,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;YAEzE,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,OAAO,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;YAC9C,CAAC;QACF,CAAC;QAED,yDAAyD;QACzD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO,GAAG,CAAA;YACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;YACjD,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACvE,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,CAAA;QACxC,IAAI,OAAO,EAAE,CAAC;YACb,OAAO;gBACN,MAAM,EAAE,OAAO;aACf,CAAA;QACF,CAAC;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type IndexSummary, Indexer, type ParseContext, type ParseResult, type Txo } from '@1sat/types';
|
|
2
|
+
export interface File {
|
|
3
|
+
hash: string;
|
|
4
|
+
size: number;
|
|
5
|
+
type: string;
|
|
6
|
+
content: number[];
|
|
7
|
+
}
|
|
8
|
+
export interface Inscription {
|
|
9
|
+
file?: File;
|
|
10
|
+
fields?: {
|
|
11
|
+
[key: string]: string;
|
|
12
|
+
};
|
|
13
|
+
parent?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* InscriptionIndexer identifies and parses ordinal inscriptions.
|
|
17
|
+
* These are outputs with exactly 1 satoshi containing OP_FALSE OP_IF "ord" envelope.
|
|
18
|
+
*
|
|
19
|
+
* Data structure: Inscription with file, fields, and optional parent
|
|
20
|
+
*
|
|
21
|
+
* Basket: None (no basket assignment - this is preliminary data for other indexers)
|
|
22
|
+
* Events: address for owned outputs
|
|
23
|
+
*/
|
|
24
|
+
export declare class InscriptionIndexer extends Indexer {
|
|
25
|
+
owners: Set<string>;
|
|
26
|
+
network: 'mainnet' | 'testnet';
|
|
27
|
+
tag: string;
|
|
28
|
+
name: string;
|
|
29
|
+
constructor(owners?: Set<string>, network?: 'mainnet' | 'testnet');
|
|
30
|
+
parse(txo: Txo): Promise<ParseResult | undefined>;
|
|
31
|
+
summarize(ctx: ParseContext): Promise<IndexSummary | undefined>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=InscriptionIndexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InscriptionIndexer.d.ts","sourceRoot":"","sources":["../../src/indexers/InscriptionIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,YAAY,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,GAAG,EACR,MAAM,aAAa,CAAA;AAMpB,MAAM,WAAW,IAAI;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,OAAO;IAKtC,MAAM;IACN,OAAO,EAAE,SAAS,GAAG,SAAS;IALtC,GAAG,SAAS;IACZ,IAAI,SAAiB;gBAGb,MAAM,cAAoB,EAC1B,OAAO,GAAE,SAAS,GAAG,SAAqB;IAK5C,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IA4FjD,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;CAUrE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { Indexer, } from '@1sat/types';
|
|
2
|
+
import { Inscription as InscriptionTemplate } from '@bopen-io/templates';
|
|
3
|
+
import { OP, Script, Utils } from '@bsv/sdk';
|
|
4
|
+
import { MapIndexer } from './MapIndexer';
|
|
5
|
+
import { parseAddress } from './parseAddress';
|
|
6
|
+
/**
|
|
7
|
+
* InscriptionIndexer identifies and parses ordinal inscriptions.
|
|
8
|
+
* These are outputs with exactly 1 satoshi containing OP_FALSE OP_IF "ord" envelope.
|
|
9
|
+
*
|
|
10
|
+
* Data structure: Inscription with file, fields, and optional parent
|
|
11
|
+
*
|
|
12
|
+
* Basket: None (no basket assignment - this is preliminary data for other indexers)
|
|
13
|
+
* Events: address for owned outputs
|
|
14
|
+
*/
|
|
15
|
+
export class InscriptionIndexer extends Indexer {
|
|
16
|
+
owners;
|
|
17
|
+
network;
|
|
18
|
+
tag = 'insc';
|
|
19
|
+
name = 'Inscriptions';
|
|
20
|
+
constructor(owners = new Set(), network = 'mainnet') {
|
|
21
|
+
super(owners, network);
|
|
22
|
+
this.owners = owners;
|
|
23
|
+
this.network = network;
|
|
24
|
+
}
|
|
25
|
+
async parse(txo) {
|
|
26
|
+
const satoshis = BigInt(txo.output.satoshis || 0);
|
|
27
|
+
if (satoshis !== 1n)
|
|
28
|
+
return;
|
|
29
|
+
const script = txo.output.lockingScript;
|
|
30
|
+
// Use template decode
|
|
31
|
+
const decoded = InscriptionTemplate.decode(script);
|
|
32
|
+
if (!decoded)
|
|
33
|
+
return;
|
|
34
|
+
// Extract owner from script prefix or suffix
|
|
35
|
+
let owner = parseAddress(script, 0, this.network);
|
|
36
|
+
if (!owner && decoded.scriptSuffix) {
|
|
37
|
+
// Try to find owner in suffix (after OP_ENDIF)
|
|
38
|
+
owner = parseAddress(decoded.scriptSuffix, 0, this.network);
|
|
39
|
+
// Also check for OP_CODESEPARATOR pattern
|
|
40
|
+
if (!owner &&
|
|
41
|
+
decoded.scriptSuffix.chunks[0]?.op === OP.OP_CODESEPARATOR) {
|
|
42
|
+
owner = parseAddress(decoded.scriptSuffix, 1, this.network);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Handle MAP field if present (special case)
|
|
46
|
+
// Note: This writes to txo.data.map directly as a side effect
|
|
47
|
+
if (decoded.fields?.has('MAP')) {
|
|
48
|
+
const mapData = decoded.fields.get('MAP');
|
|
49
|
+
if (mapData) {
|
|
50
|
+
const map = MapIndexer.parseMap(Script.fromBinary(Array.from(mapData)), 0);
|
|
51
|
+
if (map) {
|
|
52
|
+
txo.data.map = { data: map, tags: [] };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Convert to wallet-toolbox format
|
|
57
|
+
const insc = {
|
|
58
|
+
file: {
|
|
59
|
+
hash: Utils.toBase64(Array.from(decoded.file.hash)),
|
|
60
|
+
size: decoded.file.size,
|
|
61
|
+
type: decoded.file.type,
|
|
62
|
+
content: Array.from(decoded.file.content),
|
|
63
|
+
},
|
|
64
|
+
fields: {},
|
|
65
|
+
};
|
|
66
|
+
// Extract text content if it's a text-based inscription and small enough
|
|
67
|
+
let content;
|
|
68
|
+
const contentType = decoded.file.type.toLowerCase();
|
|
69
|
+
const isTextContent = contentType.startsWith('text/') || contentType === 'application/json';
|
|
70
|
+
if (isTextContent && decoded.file.size <= 1000) {
|
|
71
|
+
try {
|
|
72
|
+
content = new TextDecoder().decode(decoded.file.content);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Ignore decoding errors
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Convert parent outpoint to string format
|
|
79
|
+
if (decoded.parent) {
|
|
80
|
+
try {
|
|
81
|
+
const reader = new Utils.Reader(Array.from(decoded.parent));
|
|
82
|
+
const txid = Utils.toHex(reader.read(32).reverse());
|
|
83
|
+
const vout = reader.readInt32LE();
|
|
84
|
+
insc.parent = `${txid}_${vout}`;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Ignore parsing errors
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Convert fields to base64 strings
|
|
91
|
+
if (decoded.fields && insc.fields) {
|
|
92
|
+
for (const [key, value] of decoded.fields) {
|
|
93
|
+
if (key !== 'MAP') {
|
|
94
|
+
insc.fields[key] = Utils.toBase64(Array.from(value));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
data: insc,
|
|
100
|
+
tags: [],
|
|
101
|
+
owner,
|
|
102
|
+
content,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
async summarize(ctx) {
|
|
106
|
+
// Clear file content before saving - content is loaded locally but shouldn't be persisted
|
|
107
|
+
for (const txo of ctx.txos) {
|
|
108
|
+
const insc = txo.data[this.tag]?.data;
|
|
109
|
+
if (insc?.file) {
|
|
110
|
+
insc.file.content = [];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=InscriptionIndexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InscriptionIndexer.js","sourceRoot":"","sources":["../../src/indexers/InscriptionIndexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type IndexSummary, Indexer, type ParseContext, type ParseResult, type Txo } from '@1sat/types';
|
|
2
|
+
export interface LockData {
|
|
3
|
+
until: number;
|
|
4
|
+
}
|
|
5
|
+
export declare class LockIndexer extends Indexer {
|
|
6
|
+
tag: string;
|
|
7
|
+
name: string;
|
|
8
|
+
parse(txo: Txo): Promise<ParseResult | undefined>;
|
|
9
|
+
summarize(ctx: ParseContext): Promise<IndexSummary | undefined>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=LockIndexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LockIndexer.d.ts","sourceRoot":"","sources":["../../src/indexers/LockIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,YAAY,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,GAAG,EACR,MAAM,aAAa,CAAA;AAGpB,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAA;CACb;AAED,qBAAa,WAAY,SAAQ,OAAO;IACvC,GAAG,SAAS;IACZ,IAAI,SAAU;IAER,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAoBjD,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;CAsBrE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Indexer, } from '@1sat/types';
|
|
2
|
+
import { Lock } from '@bopen-io/templates';
|
|
3
|
+
export class LockIndexer extends Indexer {
|
|
4
|
+
tag = 'lock';
|
|
5
|
+
name = 'Locks';
|
|
6
|
+
async parse(txo) {
|
|
7
|
+
const lockingScript = txo.output.lockingScript;
|
|
8
|
+
const decoded = Lock.decode(lockingScript, this.network === 'mainnet');
|
|
9
|
+
if (!decoded)
|
|
10
|
+
return;
|
|
11
|
+
const tags = [];
|
|
12
|
+
if (this.owners.has(decoded.address)) {
|
|
13
|
+
tags.push(`lock:until:${decoded.until}`);
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
data: { until: decoded.until },
|
|
17
|
+
tags,
|
|
18
|
+
owner: decoded.address,
|
|
19
|
+
basket: 'lock',
|
|
20
|
+
protocol: 'basket insertion', // Custom Lock script requires manual unlock
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async summarize(ctx) {
|
|
24
|
+
let locksOut = 0n;
|
|
25
|
+
for (const spend of ctx.spends) {
|
|
26
|
+
if (spend.data[this.tag]) {
|
|
27
|
+
const satoshis = BigInt(spend.output.satoshis || 0);
|
|
28
|
+
locksOut += spend.owner && this.owners.has(spend.owner) ? satoshis : 0n;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
let locksIn = 0n;
|
|
32
|
+
for (const txo of ctx.txos) {
|
|
33
|
+
if (txo.data[this.tag]) {
|
|
34
|
+
const satoshis = BigInt(txo.output.satoshis || 0);
|
|
35
|
+
locksIn += txo.owner && this.owners.has(txo.owner) ? satoshis : 0n;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const balance = Number(locksIn - locksOut);
|
|
39
|
+
if (balance) {
|
|
40
|
+
return { amount: balance };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=LockIndexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LockIndexer.js","sourceRoot":"","sources":["../../src/indexers/LockIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,OAAO,GAIP,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAM1C,MAAM,OAAO,WAAY,SAAQ,OAAO;IACvC,GAAG,GAAG,MAAM,CAAA;IACZ,IAAI,GAAG,OAAO,CAAA;IAEd,KAAK,CAAC,KAAK,CAAC,GAAQ;QACnB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAA;QAE9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAA;QACtE,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QACzC,CAAC;QAED,OAAO;YACN,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAc;YAC1C,IAAI;YACJ,KAAK,EAAE,OAAO,CAAC,OAAO;YACtB,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,kBAAkB,EAAE,4CAA4C;SAC1E,CAAA;IACF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAiB;QAChC,IAAI,QAAQ,GAAG,EAAE,CAAA;QACjB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;gBACnD,QAAQ,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;YACxE,CAAC;QACF,CAAC;QAED,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAA;gBACjD,OAAO,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;YACnE,CAAC;QACF,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAA;QAC1C,IAAI,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;QAC3B,CAAC;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Indexer, type ParseResult, type Txo } from '@1sat/types';
|
|
2
|
+
import { Script } from '@bsv/sdk';
|
|
3
|
+
export declare class MapIndexer extends Indexer {
|
|
4
|
+
owners: Set<string>;
|
|
5
|
+
network: 'mainnet' | 'testnet';
|
|
6
|
+
tag: string;
|
|
7
|
+
name: string;
|
|
8
|
+
constructor(owners?: Set<string>, network?: 'mainnet' | 'testnet');
|
|
9
|
+
parse(txo: Txo): Promise<ParseResult | undefined>;
|
|
10
|
+
static parseMap(script: Script, mapPos: number): {
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
} | undefined;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=MapIndexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapIndexer.d.ts","sourceRoot":"","sources":["../../src/indexers/MapIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjE,OAAO,EAAM,MAAM,EAAS,MAAM,UAAU,CAAA;AAE5C,qBAAa,UAAW,SAAQ,OAAO;IAK9B,MAAM;IACN,OAAO,EAAE,SAAS,GAAG,SAAS;IALtC,GAAG,SAAQ;IACX,IAAI,SAAQ;gBAGJ,MAAM,cAAoB,EAC1B,OAAO,GAAE,SAAS,GAAG,SAAqB;IAK5C,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IA4BvD,MAAM,CAAC,QAAQ,CACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,SAAS;CAgCzC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Indexer } from '@1sat/types';
|
|
2
|
+
import { MAP_PREFIX } from '@bopen-io/templates';
|
|
3
|
+
import { OP, Script, Utils } from '@bsv/sdk';
|
|
4
|
+
export class MapIndexer extends Indexer {
|
|
5
|
+
owners;
|
|
6
|
+
network;
|
|
7
|
+
tag = 'map';
|
|
8
|
+
name = 'MAP';
|
|
9
|
+
constructor(owners = new Set(), network = 'mainnet') {
|
|
10
|
+
super(owners, network);
|
|
11
|
+
this.owners = owners;
|
|
12
|
+
this.network = network;
|
|
13
|
+
}
|
|
14
|
+
async parse(txo) {
|
|
15
|
+
const script = txo.output.lockingScript;
|
|
16
|
+
const retPos = script.chunks.findIndex((chunk) => chunk.op === OP.OP_RETURN);
|
|
17
|
+
if (retPos < 0 || !script.chunks[retPos]?.data?.length) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
let chunks = Script.fromBinary(script.chunks[retPos].data).chunks;
|
|
21
|
+
while (chunks.length) {
|
|
22
|
+
if (Utils.toUTF8(chunks[0]?.data || []) === MAP_PREFIX) {
|
|
23
|
+
const map = MapIndexer.parseMap(new Script(chunks), 1);
|
|
24
|
+
const name = (map?.name ??
|
|
25
|
+
map?.subTypeData?.name ??
|
|
26
|
+
'Unknown');
|
|
27
|
+
const tags = name ? [`name:${name}`] : [];
|
|
28
|
+
return map ? { data: map, tags } : undefined;
|
|
29
|
+
}
|
|
30
|
+
const pipePos = chunks.findIndex((chunk) => chunk.data?.length === 1 && chunk.data[0] !== 0x7c);
|
|
31
|
+
if (pipePos > -1) {
|
|
32
|
+
chunks = chunks.slice(pipePos + 1);
|
|
33
|
+
}
|
|
34
|
+
else
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
static parseMap(script, mapPos) {
|
|
39
|
+
if (Utils.toUTF8(script.chunks[mapPos]?.data || []) !== 'SET') {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const map = {};
|
|
43
|
+
for (let i = mapPos + 1; i < script.chunks.length; i += 2) {
|
|
44
|
+
const chunk = script.chunks[i];
|
|
45
|
+
if (chunk.op === OP.OP_RETURN ||
|
|
46
|
+
(chunk.data?.length === 1 && chunk.data[0] !== 0x7c)) {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
const key = Utils.toUTF8(chunk.data || []);
|
|
50
|
+
const value = Utils.toUTF8(script.chunks[i + 1]?.data || []);
|
|
51
|
+
if (key === 'subTypeData') {
|
|
52
|
+
try {
|
|
53
|
+
map[key] = JSON.parse(value);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// If JSON parsing fails, fall through to store as string
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
map[key] = value;
|
|
61
|
+
}
|
|
62
|
+
return map;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=MapIndexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapIndexer.js","sourceRoot":"","sources":["../../src/indexers/MapIndexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Indexer, type ParseResult, type Txo } from '@1sat/types';
|
|
2
|
+
export declare class OpNSIndexer extends Indexer {
|
|
3
|
+
owners: Set<string>;
|
|
4
|
+
network: 'mainnet' | 'testnet';
|
|
5
|
+
tag: string;
|
|
6
|
+
name: string;
|
|
7
|
+
constructor(owners?: Set<string>, network?: 'mainnet' | 'testnet');
|
|
8
|
+
parse(txo: Txo): Promise<ParseResult | undefined>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=OpNSIndexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpNSIndexer.d.ts","sourceRoot":"","sources":["../../src/indexers/OpNSIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,aAAa,CAAA;AAIjE,qBAAa,WAAY,SAAQ,OAAO;IAK/B,MAAM;IACN,OAAO,EAAE,SAAS,GAAG,SAAS;IALtC,GAAG,SAAS;IACZ,IAAI,SAAS;gBAGL,MAAM,cAAoB,EAC1B,OAAO,GAAE,SAAS,GAAG,SAAqB;IAK5C,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;CA2BvD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Indexer } from '@1sat/types';
|
|
2
|
+
import { Utils } from '@bsv/sdk';
|
|
3
|
+
export class OpNSIndexer extends Indexer {
|
|
4
|
+
owners;
|
|
5
|
+
network;
|
|
6
|
+
tag = 'opns';
|
|
7
|
+
name = 'OpNS';
|
|
8
|
+
constructor(owners = new Set(), network = 'mainnet') {
|
|
9
|
+
super(owners, network);
|
|
10
|
+
this.owners = owners;
|
|
11
|
+
this.network = network;
|
|
12
|
+
}
|
|
13
|
+
async parse(txo) {
|
|
14
|
+
const insc = txo.data.insc?.data;
|
|
15
|
+
if (insc?.file?.type !== 'application/op-ns')
|
|
16
|
+
return;
|
|
17
|
+
const tags = [];
|
|
18
|
+
// Extract name from inscription content
|
|
19
|
+
if (insc.file?.content && txo.owner && this.owners.has(txo.owner)) {
|
|
20
|
+
try {
|
|
21
|
+
const content = Utils.toUTF8(insc.file.content);
|
|
22
|
+
const data = JSON.parse(content);
|
|
23
|
+
if (data.name) {
|
|
24
|
+
tags.push(`name:${data.name}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Invalid JSON or missing name field
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// TODO: Add validation against OpNS server (infrastructure not ready yet)
|
|
32
|
+
return {
|
|
33
|
+
data: insc,
|
|
34
|
+
tags,
|
|
35
|
+
basket: 'opns',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=OpNSIndexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpNSIndexer.js","sourceRoot":"","sources":["../../src/indexers/OpNSIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA8B,MAAM,aAAa,CAAA;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAGhC,MAAM,OAAO,WAAY,SAAQ,OAAO;IAK/B;IACA;IALR,GAAG,GAAG,MAAM,CAAA;IACZ,IAAI,GAAG,MAAM,CAAA;IAEb,YACQ,SAAS,IAAI,GAAG,EAAU,EAC1B,UAAiC,SAAS;QAEjD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAHf,WAAM,GAAN,MAAM,CAAoB;QAC1B,YAAO,GAAP,OAAO,CAAmC;IAGlD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAQ;QACnB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAmB,CAAA;QAC/C,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,mBAAmB;YAAE,OAAM;QAEpD,MAAM,IAAI,GAAa,EAAE,CAAA;QAEzB,wCAAwC;QACxC,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gBAChC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACf,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC/B,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,qCAAqC;YACtC,CAAC;QACF,CAAC;QAED,0EAA0E;QAE1E,OAAO;YACN,IAAI,EAAE,IAAI;YACV,IAAI;YACJ,MAAM,EAAE,MAAM;SACd,CAAA;IACF,CAAC;CACD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type IndexSummary, Indexer, type ParseContext, type ParseResult, type Txo } from '@1sat/types';
|
|
2
|
+
export declare class Listing {
|
|
3
|
+
payout: number[];
|
|
4
|
+
price: bigint;
|
|
5
|
+
constructor(payout?: number[], price?: bigint);
|
|
6
|
+
}
|
|
7
|
+
export declare class OrdLockIndexer extends Indexer {
|
|
8
|
+
owners: Set<string>;
|
|
9
|
+
network: 'mainnet' | 'testnet';
|
|
10
|
+
tag: string;
|
|
11
|
+
name: string;
|
|
12
|
+
constructor(owners?: Set<string>, network?: 'mainnet' | 'testnet');
|
|
13
|
+
parse(txo: Txo): Promise<ParseResult | undefined>;
|
|
14
|
+
summarize(ctx: ParseContext): Promise<IndexSummary | undefined>;
|
|
15
|
+
serialize(listing: Listing): string;
|
|
16
|
+
deserialize(str: string): Listing;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=OrdLockIndexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrdLockIndexer.d.ts","sourceRoot":"","sources":["../../src/indexers/OrdLockIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,YAAY,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,GAAG,EACR,MAAM,aAAa,CAAA;AAGpB,qBAAa,OAAO;IAEX,MAAM,EAAE,MAAM,EAAE;IAChB,KAAK;gBADL,MAAM,GAAE,MAAM,EAAO,EACrB,KAAK,SAAK;CAElB;AAED,qBAAa,cAAe,SAAQ,OAAO;IAKlC,MAAM;IACN,OAAO,EAAE,SAAS,GAAG,SAAS;IALtC,GAAG,SAAS;IACZ,IAAI,SAAa;gBAGT,MAAM,cAAoB,EAC1B,OAAO,GAAE,SAAS,GAAG,SAAqB;IAK5C,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAgBjD,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAsBrE,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAOnC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAIjC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Indexer, } from '@1sat/types';
|
|
2
|
+
import { OrdLock } from '@bopen-io/templates';
|
|
3
|
+
export class Listing {
|
|
4
|
+
payout;
|
|
5
|
+
price;
|
|
6
|
+
constructor(payout = [], price = 0n) {
|
|
7
|
+
this.payout = payout;
|
|
8
|
+
this.price = price;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class OrdLockIndexer extends Indexer {
|
|
12
|
+
owners;
|
|
13
|
+
network;
|
|
14
|
+
tag = 'list';
|
|
15
|
+
name = 'Listings';
|
|
16
|
+
constructor(owners = new Set(), network = 'mainnet') {
|
|
17
|
+
super(owners, network);
|
|
18
|
+
this.owners = owners;
|
|
19
|
+
this.network = network;
|
|
20
|
+
}
|
|
21
|
+
async parse(txo) {
|
|
22
|
+
const lockingScript = txo.output.lockingScript;
|
|
23
|
+
const decoded = OrdLock.decode(lockingScript, this.network === 'mainnet');
|
|
24
|
+
if (!decoded)
|
|
25
|
+
return;
|
|
26
|
+
const listing = new Listing(decoded.payout, decoded.price);
|
|
27
|
+
return {
|
|
28
|
+
data: listing,
|
|
29
|
+
tags: [`list:${listing.price}`],
|
|
30
|
+
owner: decoded.seller,
|
|
31
|
+
protocol: 'basket insertion', // OrdLock script requires manual unlock
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async summarize(ctx) {
|
|
35
|
+
// Check if any input was spending a listing
|
|
36
|
+
for (const [vin, spend] of ctx.spends.entries()) {
|
|
37
|
+
if (spend.data[this.tag]) {
|
|
38
|
+
const unlockingScript = ctx.tx.inputs[vin].unlockingScript;
|
|
39
|
+
if (unlockingScript && OrdLock.isPurchase(unlockingScript)) {
|
|
40
|
+
// Purchased via ordlock contract
|
|
41
|
+
return { amount: 1 };
|
|
42
|
+
}
|
|
43
|
+
// Cancelled/reclaimed by owner
|
|
44
|
+
return { amount: 0 };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// Check if any output is creating a listing
|
|
48
|
+
for (const txo of ctx.txos) {
|
|
49
|
+
if (txo.data[this.tag]) {
|
|
50
|
+
return { amount: -1 };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
serialize(listing) {
|
|
55
|
+
return JSON.stringify({
|
|
56
|
+
payout: listing.payout,
|
|
57
|
+
price: listing.price.toString(10),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
deserialize(str) {
|
|
61
|
+
const obj = JSON.parse(str);
|
|
62
|
+
return new Listing(obj.payout, BigInt(obj.price));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=OrdLockIndexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrdLockIndexer.js","sourceRoot":"","sources":["../../src/indexers/OrdLockIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,OAAO,GAIP,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,MAAM,OAAO,OAAO;IAEX;IACA;IAFR,YACQ,SAAmB,EAAE,EACrB,QAAQ,EAAE;QADV,WAAM,GAAN,MAAM,CAAe;QACrB,UAAK,GAAL,KAAK,CAAK;IACf,CAAC;CACJ;AAED,MAAM,OAAO,cAAe,SAAQ,OAAO;IAKlC;IACA;IALR,GAAG,GAAG,MAAM,CAAA;IACZ,IAAI,GAAG,UAAU,CAAA;IAEjB,YACQ,SAAS,IAAI,GAAG,EAAU,EAC1B,UAAiC,SAAS;QAEjD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAHf,WAAM,GAAN,MAAM,CAAoB;QAC1B,YAAO,GAAP,OAAO,CAAmC;IAGlD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAQ;QACnB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAA;QAE9C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAA;QACzE,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAE1D,OAAO;YACN,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,CAAC,QAAQ,OAAO,CAAC,KAAK,EAAE,CAAC;YAC/B,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,QAAQ,EAAE,kBAAkB,EAAE,wCAAwC;SACtE,CAAA;IACF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAiB;QAChC,4CAA4C;QAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,eAAe,GAAG,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAA;gBAC1D,IAAI,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;oBAC5D,iCAAiC;oBACjC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;gBACrB,CAAC;gBACD,+BAA+B;gBAC/B,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;YACrB,CAAC;QACF,CAAC;QAED,4CAA4C;QAC5C,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAA;YACtB,CAAC;QACF,CAAC;IACF,CAAC;IAED,SAAS,CAAC,OAAgB;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC;YACrB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;SACjC,CAAC,CAAA;IACH,CAAC;IAED,WAAW,CAAC,GAAW;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC3B,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IAClD,CAAC;CACD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type OneSatServices } from '@1sat/client';
|
|
2
|
+
import { type IndexSummary, Indexer, type ParseContext, type ParseResult, type Txo } from '@1sat/types';
|
|
3
|
+
import type { Inscription } from './InscriptionIndexer';
|
|
4
|
+
import type { Sigma } from './SigmaIndexer';
|
|
5
|
+
export interface Origin {
|
|
6
|
+
outpoint?: string;
|
|
7
|
+
nonce?: number;
|
|
8
|
+
insc?: Inscription;
|
|
9
|
+
map?: {
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
};
|
|
12
|
+
sigma?: Sigma[];
|
|
13
|
+
}
|
|
14
|
+
export declare class OriginIndexer extends Indexer {
|
|
15
|
+
owners: Set<string>;
|
|
16
|
+
network: 'mainnet' | 'testnet';
|
|
17
|
+
private services;
|
|
18
|
+
tag: string;
|
|
19
|
+
name: string;
|
|
20
|
+
constructor(owners: Set<string>, network: 'mainnet' | 'testnet', services: OneSatServices);
|
|
21
|
+
/**
|
|
22
|
+
* Parse identifies 1-sat ordinal outputs and extracts basic data.
|
|
23
|
+
* Origin tracking (determining if transfer vs new) is done in summarize()
|
|
24
|
+
* since it requires cross-output and cross-input context.
|
|
25
|
+
*/
|
|
26
|
+
parse(txo: Txo): Promise<ParseResult | undefined>;
|
|
27
|
+
/**
|
|
28
|
+
* Summarize determines origin tracking (transfer vs new origin) and
|
|
29
|
+
* fetches metadata from OrdFS for transfers.
|
|
30
|
+
*/
|
|
31
|
+
summarize(ctx: ParseContext): Promise<IndexSummary | undefined>;
|
|
32
|
+
/**
|
|
33
|
+
* Resolve origins for all 1-sat outputs in the transaction.
|
|
34
|
+
* This determines whether each is a new origin or a transfer.
|
|
35
|
+
*/
|
|
36
|
+
private resolveOrigins;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=OriginIndexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OriginIndexer.d.ts","sourceRoot":"","sources":["../../src/indexers/OriginIndexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EACN,KAAK,YAAY,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,GAAG,EACR,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAG3C,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,GAAG,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IAChC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAA;CACf;AAED,qBAAa,aAAc,SAAQ,OAAO;IAKjC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,GAAG,SAAS;IACrC,OAAO,CAAC,QAAQ;IANjB,GAAG,SAAW;IACd,IAAI,SAAY;gBAGR,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,EAC7B,QAAQ,EAAE,cAAc;IAKjC;;;;OAIG;IACG,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAwCvD;;;OAGG;IACG,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAqDrE;;;OAGG;YACW,cAAc;CAmJ5B"}
|