@1sat/actions 0.0.213 → 0.0.215
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/apply/stampScriptTags.js +2 -2
- package/dist/apply/stampScriptTags.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/listings/cancelOwnedListings.d.ts.map +1 -1
- package/dist/listings/cancelOwnedListings.js +15 -3
- package/dist/listings/cancelOwnedListings.js.map +1 -1
- package/dist/listings/cancelOwnedListings.test.js +32 -0
- package/dist/listings/cancelOwnedListings.test.js.map +1 -1
- package/dist/opns/index.d.ts.map +1 -1
- package/dist/opns/index.js +80 -9
- package/dist/opns/index.js.map +1 -1
- package/dist/ordinals/index.d.ts +2 -2
- package/dist/ordinals/index.d.ts.map +1 -1
- package/dist/ordinals/index.js +179 -64
- package/dist/ordinals/index.js.map +1 -1
- package/dist/pipeline/unlockInput.d.ts +2 -1
- package/dist/pipeline/unlockInput.d.ts.map +1 -1
- package/dist/pipeline/unlockInput.js +17 -2
- package/dist/pipeline/unlockInput.js.map +1 -1
- package/dist/pipeline/unlockInput.test.d.ts +2 -0
- package/dist/pipeline/unlockInput.test.d.ts.map +1 -0
- package/dist/pipeline/unlockInput.test.js +68 -0
- package/dist/pipeline/unlockInput.test.js.map +1 -0
- package/dist/sweep/scan.d.ts.map +1 -1
- package/dist/sweep/scan.js +9 -1
- package/dist/sweep/scan.js.map +1 -1
- package/dist/sweep/scan.test.js +82 -1
- package/dist/sweep/scan.test.js.map +1 -1
- package/dist/tokens/index.d.ts +17 -1
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +105 -1
- package/dist/tokens/index.js.map +1 -1
- package/dist/utils/listingToken.d.ts +22 -0
- package/dist/utils/listingToken.d.ts.map +1 -0
- package/dist/utils/listingToken.js +84 -0
- package/dist/utils/listingToken.js.map +1 -0
- package/dist/utils/listingToken.test.d.ts +2 -0
- package/dist/utils/listingToken.test.d.ts.map +1 -0
- package/dist/utils/listingToken.test.js +36 -0
- package/dist/utils/listingToken.test.js.map +1 -0
- package/dist/utils/ordlockCancelLength.d.ts +10 -0
- package/dist/utils/ordlockCancelLength.d.ts.map +1 -0
- package/dist/utils/ordlockCancelLength.js +23 -0
- package/dist/utils/ordlockCancelLength.js.map +1 -0
- package/dist/utils/ordlockCancelLength.test.d.ts +2 -0
- package/dist/utils/ordlockCancelLength.test.d.ts.map +1 -0
- package/dist/utils/ordlockCancelLength.test.js +33 -0
- package/dist/utils/ordlockCancelLength.test.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { describe, expect, it } from 'bun:test';
|
|
2
|
+
import { OrdLockV2 } from '@1sat/templates';
|
|
3
|
+
import { P1SAT_PROTOCOL } from '@1sat/types';
|
|
4
|
+
import { P2PKH, PrivateKey, ProtoWallet, PublicKey, Script, Transaction, } from '@bsv/sdk';
|
|
5
|
+
import { unlockByScript } from './unlockInput.js';
|
|
6
|
+
const buyerKey = new PrivateKey(7001);
|
|
7
|
+
const buyerAddr = buyerKey.toAddress();
|
|
8
|
+
const payAddr = new PrivateKey(7002).toAddress();
|
|
9
|
+
// ProtoWallet implements only the key/signature half of WalletInterface,
|
|
10
|
+
// which is all unlockByScript touches.
|
|
11
|
+
function asWallet(w) {
|
|
12
|
+
return w;
|
|
13
|
+
}
|
|
14
|
+
async function v2Listing(wallet, keyID) {
|
|
15
|
+
const { publicKey } = await wallet.getPublicKey({
|
|
16
|
+
protocolID: P1SAT_PROTOCOL,
|
|
17
|
+
keyID,
|
|
18
|
+
counterparty: 'self',
|
|
19
|
+
forSelf: true,
|
|
20
|
+
});
|
|
21
|
+
const lock = OrdLockV2.lock(PublicKey.fromString(publicKey).toAddress(), payAddr, 5000);
|
|
22
|
+
const listing = new Transaction();
|
|
23
|
+
listing.addOutput({ satoshis: 1, lockingScript: lock });
|
|
24
|
+
return { listing, lock };
|
|
25
|
+
}
|
|
26
|
+
describe('unlockByScript: OrdLock v2', () => {
|
|
27
|
+
it('cancels when key CI is present', async () => {
|
|
28
|
+
const wallet = new ProtoWallet(new PrivateKey(7003));
|
|
29
|
+
const keyID = 'abc_1';
|
|
30
|
+
const { listing, lock } = await v2Listing(wallet, keyID);
|
|
31
|
+
const tx = new Transaction();
|
|
32
|
+
tx.addInput({ sourceTransaction: listing, sourceOutputIndex: 0 });
|
|
33
|
+
tx.addOutput({ satoshis: 1, lockingScript: new P2PKH().lock(buyerAddr) });
|
|
34
|
+
const res = await unlockByScript(asWallet(wallet), tx, 0, lock, 1, {
|
|
35
|
+
protocolID: P1SAT_PROTOCOL,
|
|
36
|
+
keyID,
|
|
37
|
+
});
|
|
38
|
+
expect('unlockingScript' in res).toBe(true);
|
|
39
|
+
if (!('unlockingScript' in res))
|
|
40
|
+
throw new Error(res.error);
|
|
41
|
+
expect(OrdLockV2.isCancel(Script.fromHex(res.unlockingScript))).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it('purchases when no key CI and the payout+tag pair is present', async () => {
|
|
44
|
+
const wallet = new ProtoWallet(new PrivateKey(7004));
|
|
45
|
+
const { listing, lock } = await v2Listing(wallet, 'abc_2');
|
|
46
|
+
const tx = new Transaction();
|
|
47
|
+
tx.addInput({ sourceTransaction: listing, sourceOutputIndex: 0 });
|
|
48
|
+
tx.addOutput({ satoshis: 1, lockingScript: new P2PKH().lock(buyerAddr) });
|
|
49
|
+
tx.addOutput(OrdLockV2.payoutOutput(lock));
|
|
50
|
+
tx.addOutput(OrdLockV2.tagOutput(listing.id('hex'), 0));
|
|
51
|
+
tx.addOutput({ satoshis: 900, lockingScript: new P2PKH().lock(buyerAddr) });
|
|
52
|
+
const res = await unlockByScript(asWallet(wallet), tx, 0, lock, 1);
|
|
53
|
+
if (!('unlockingScript' in res))
|
|
54
|
+
throw new Error(res.error);
|
|
55
|
+
expect(OrdLockV2.isPurchase(Script.fromHex(res.unlockingScript))).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
it('returns an error, not a v1 attempt, when the tag output is missing', async () => {
|
|
58
|
+
const wallet = new ProtoWallet(new PrivateKey(7005));
|
|
59
|
+
const { listing, lock } = await v2Listing(wallet, 'abc_3');
|
|
60
|
+
const tx = new Transaction();
|
|
61
|
+
tx.addInput({ sourceTransaction: listing, sourceOutputIndex: 0 });
|
|
62
|
+
tx.addOutput({ satoshis: 1, lockingScript: new P2PKH().lock(buyerAddr) });
|
|
63
|
+
tx.addOutput(OrdLockV2.payoutOutput(lock));
|
|
64
|
+
const res = await unlockByScript(asWallet(wallet), tx, 0, lock, 1);
|
|
65
|
+
expect('error' in res && /payout immediately followed/.test(res.error)).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=unlockInput.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlockInput.test.js","sourceRoot":"","sources":["../../src/pipeline/unlockInput.test.ts"],"names":[],"mappings":"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"}
|
package/dist/sweep/scan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/sweep/scan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAA;AAUxE,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAO1D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAChC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GACpC,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/sweep/scan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAA;AAUxE,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAO1D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAChC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GACpC,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GACpC,OAAO,CAAC,UAAU,CAAC,CA0BrB"}
|
package/dist/sweep/scan.js
CHANGED
|
@@ -26,6 +26,7 @@ export function isListedOutput(out) {
|
|
|
26
26
|
export async function scanAddress(services, address, onProgress) {
|
|
27
27
|
// Phase 1: Sync the address
|
|
28
28
|
onProgress?.({ phase: 'sync', detail: 'Syncing address...' });
|
|
29
|
+
let synced = false;
|
|
29
30
|
for await (const event of services.owner.getTxos(address, {
|
|
30
31
|
refresh: true,
|
|
31
32
|
limit: 1,
|
|
@@ -37,15 +38,22 @@ export async function scanAddress(services, address, onProgress) {
|
|
|
37
38
|
detail: `${p.phase}: ${p.processed ?? 0}/${p.total ?? '?'}`,
|
|
38
39
|
});
|
|
39
40
|
}
|
|
40
|
-
else if (event.type === '
|
|
41
|
+
else if (event.type === 'error') {
|
|
42
|
+
throw event.error;
|
|
43
|
+
}
|
|
44
|
+
else if (event.type === 'done') {
|
|
45
|
+
synced = true;
|
|
41
46
|
break;
|
|
42
47
|
}
|
|
43
48
|
}
|
|
49
|
+
if (!synced)
|
|
50
|
+
throw new Error('Address sync ended before completion. Retry scanning.');
|
|
44
51
|
// Phase 2: Search for all unspent outputs
|
|
45
52
|
onProgress?.({ phase: 'search', detail: 'Searching for assets...' });
|
|
46
53
|
const allOutputs = (await services.txo.search(`own:${address}`, {
|
|
47
54
|
unspent: true,
|
|
48
55
|
events: true,
|
|
56
|
+
tags: ['ordlock'],
|
|
49
57
|
sats: true,
|
|
50
58
|
limit: 0,
|
|
51
59
|
})) ?? [];
|
package/dist/sweep/scan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/sweep/scan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG3C,uEAAuE;AACvE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAExE,SAAS,QAAQ,CAAC,MAAgB,EAAE,MAAc;IACjD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IACpD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9C,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,GAAkB;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAA;IAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;IACrB,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAA;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,QAAwB,EACxB,OAAe,EACf,UAAsC;IAEtC,4BAA4B;IAC5B,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC7D,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;QACzD,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,CAAC;KACR,CAAC,EAAE,CAAC;QACJ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAA;YACpB,UAAU,EAAE,CAAC;gBACZ,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE;aAC3D,CAAC,CAAA;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/sweep/scan.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG3C,uEAAuE;AACvE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAExE,SAAS,QAAQ,CAAC,MAAgB,EAAE,MAAc;IACjD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IACpD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9C,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,GAAkB;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAA;IAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,IAAI,CAAA;IACZ,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;IACrB,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAA;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,QAAwB,EACxB,OAAe,EACf,UAAsC;IAEtC,4BAA4B;IAC5B,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAC7D,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;QACzD,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,CAAC;KACR,CAAC,EAAE,CAAC;QACJ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAA;YACpB,UAAU,EAAE,CAAC;gBACZ,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE;aAC3D,CAAC,CAAA;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACnC,MAAM,KAAK,CAAC,KAAK,CAAA;QAClB,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAClC,MAAM,GAAG,IAAI,CAAA;YACb,MAAK;QACN,CAAC;IACF,CAAC;IACD,IAAI,CAAC,MAAM;QACV,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAEzE,0CAA0C;IAC1C,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAA;IACpE,MAAM,UAAU,GACf,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,EAAE;QAC5C,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,CAAC,SAAS,CAAC;QACjB,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,CAAC;KACR,CAAC,CAAC,IAAI,EAAE,CAAA;IAEV,iCAAiC;IACjC,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAA;IACzE,OAAO,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,QAAwB,EACxB,SAAmB,EACnB,UAAsC;IAEtC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IACtC,MAAM,UAAU,GAAiB,EAAE,CAAA;IAEnC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC3B,UAAU,EAAE,CAAC;YACZ,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,YAAY,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK;SACzC,CAAC,CAAA;QACF,UAAU,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;IAC/D,CAAC;IAED,OAAO;QACN,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7C,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/C,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACjD,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QACrD,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QACrD,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3C,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACrC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/C,gBAAgB,EAAE,UAAU,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,gBAAgB,EACpC,CAAC,CACD;KACD,CAAA;AACF,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC/B,QAAwB,EACxB,OAAwB;IAExB,MAAM,OAAO,GAAoB,EAAE,CAAA;IACnC,MAAM,QAAQ,GAAoB,EAAE,CAAA;IACpC,MAAM,SAAS,GAAoB,EAAE,CAAA;IACrC,MAAM,QAAQ,GAAoB,EAAE,CAAA;IACpC,MAAM,WAAW,GAAoB,EAAE,CAAA;IACvC,MAAM,MAAM,GAAoB,EAAE,CAAA;IAClC,MAAM,QAAQ,GAAoB,EAAE,CAAA;IAEpC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAA;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAA;QAE9B,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAClB,SAAQ;QACT,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAClB,SAAQ;QACT,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAChB,SAAQ;QACT,CAAC;QAED,IACC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,yBAAyB,IAAI,CAAC,KAAK,YAAY,CAAC,EACxE,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACrB,SAAQ;QACT,CAAC;QAED,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YAChB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,wBAAwB,CAAC,EAAE,CAAC;gBACxD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACpB,CAAC;iBAAM,CAAC;gBACP,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACnB,CAAC;YACD,SAAQ;QACT,CAAC;QAED,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACF,CAAC;IAED,8CAA8C;IAC9C,MAAM,GAAG,GAAoB,EAAE,CAAA;IAC/B,MAAM,YAAY,GAAoB,EAAE,CAAA;IAExC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC/D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YAC1C,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACZ,CAAC;iBAAM,CAAC;gBACP,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACrB,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO;QACN,OAAO,EAAE,YAAY;QACrB,QAAQ;QACR,SAAS;QACT,WAAW,EAAE,MAAM,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACvD,WAAW;QACX,MAAM;QACN,GAAG;QACH,QAAQ;QACR,gBAAgB,EAAE,YAAY,CAAC,MAAM,CACpC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EACnC,CAAC,CACD;KACD,CAAA;AACF,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAC9B,QAAwB,EACxB,OAAwB;IAExB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAA;IAEjD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAA;QAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC1C,IAAI,CAAC,OAAO;YAAE,SAAQ;QAEtB,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,EAAE,CAAA;YACV,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC3B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEhC,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAEnC,sDAAsD;IACtD,IAAI,OAAO,GAIN,EAAE,CAAA;IACP,IAAI,CAAC;QACJ,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IACtD,CAAC;IAAC,MAAM,CAAC;QACR,qCAAqC;IACtC,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7D,MAAM,QAAQ,GAAmB,EAAE,CAAA;IACnC,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,SAAS,IAAI,KAAK,CAAA;QAEnD,IAAI,WAAW,GAAG,EAAE,CAAA;QACpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;QACzC,IAAI,gBAAgB,GAAG,IAAI,CAAA;QAE3B,mEAAmE;QACnE,IAAI,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC;gBACJ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;gBAC7C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,eAAe,CACrD,OAAO,EACP,SAAS,EACT,EAAE,OAAO,EAAE,IAAI,EAAE,CACjB,CAAA;gBACD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAEhE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,KAAqC,CAAA;oBAC3D,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,GAAG,CAAA;oBAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;oBAC5B,WAAW,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC3B,CAAC;gBAED,wDAAwD;gBACxD,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;YACtE,CAAC;YAAC,MAAM,CAAC;gBACR,mDAAmD;YACpD,CAAC;QACF,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACb,OAAO;YACP,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;YAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;YACzC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;YACzB,WAAW;YACX,OAAO,EAAE,gBAAgB;YACzB,OAAO;YACP,QAAQ;SACR,CAAC,CAAA;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CACnC,QAAwB,EACxB,OAAwB;IAExB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YAClC,IAAI,CAAC,MAAM,EAAE,EAAE;gBAAE,SAAQ;YAEzB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAA;gBAC/C,IAAI,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAClB,MAAK;gBACN,CAAC;YACF,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,wDAAwD;QACzD,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAAgB;IACrC,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IAC9C,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC"}
|
package/dist/sweep/scan.test.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from 'bun:test';
|
|
2
|
-
import {
|
|
2
|
+
import { OneSatServices } from '@1sat/client';
|
|
3
|
+
import { isListedOutput, scanAddress } from './scan.js';
|
|
3
4
|
function out(partial) {
|
|
4
5
|
return { score: 0, ...partial };
|
|
5
6
|
}
|
|
@@ -13,9 +14,89 @@ describe('isListedOutput (OPL-4696)', () => {
|
|
|
13
14
|
it('detects data.ordlock', () => {
|
|
14
15
|
expect(isListedOutput(out({ outpoint: 'a.0', data: { ordlock: { price: 1000 } } }))).toBe(true);
|
|
15
16
|
});
|
|
17
|
+
it('ignores OrdLock v2 listings (ordlock2) and price tags', () => {
|
|
18
|
+
expect(isListedOutput(out({
|
|
19
|
+
outpoint: 'a.0',
|
|
20
|
+
events: ['ordlock2', 'own:1x', 'price:1000'],
|
|
21
|
+
data: { ordlock2: { price: 1000 } },
|
|
22
|
+
}))).toBe(false);
|
|
23
|
+
expect(isListedOutput(out({ outpoint: 'a.0', events: ['price:1000'] }))).toBe(false);
|
|
24
|
+
});
|
|
16
25
|
it('ignores plain ordinals and time-locks', () => {
|
|
17
26
|
expect(isListedOutput(out({ outpoint: 'a.0', events: ['type:image/png'] }))).toBe(false);
|
|
18
27
|
expect(isListedOutput(out({ outpoint: 'a.0', events: ['lock:800000'] }))).toBe(false);
|
|
19
28
|
});
|
|
20
29
|
});
|
|
30
|
+
describe('legacy owner scan', () => {
|
|
31
|
+
it('requests listing data when the owner response has no public listing event', async () => {
|
|
32
|
+
const paths = [];
|
|
33
|
+
const listing = out({
|
|
34
|
+
outpoint: 'a.0',
|
|
35
|
+
satoshis: 1,
|
|
36
|
+
events: ['own:owner', 'type:application/op-ns'],
|
|
37
|
+
data: { ordlock: { price: 1000 } },
|
|
38
|
+
});
|
|
39
|
+
const server = Bun.serve({
|
|
40
|
+
port: 0,
|
|
41
|
+
fetch(request) {
|
|
42
|
+
const url = new URL(request.url);
|
|
43
|
+
paths.push(url);
|
|
44
|
+
if (url.pathname.endsWith('/txos')) {
|
|
45
|
+
return new Response('event: done\ndata: {}\n\n');
|
|
46
|
+
}
|
|
47
|
+
return Response.json([
|
|
48
|
+
url.searchParams.get('tags') === 'ordlock'
|
|
49
|
+
? listing
|
|
50
|
+
: { ...listing, data: undefined },
|
|
51
|
+
]);
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
const services = new OneSatServices('main', server.url.origin);
|
|
55
|
+
try {
|
|
56
|
+
const result = await scanAddress(services, 'owner');
|
|
57
|
+
expect(result.listings).toEqual([listing]);
|
|
58
|
+
expect(result.opnsNames).toEqual([]);
|
|
59
|
+
expect(result.ordinals).toEqual([]);
|
|
60
|
+
expect(paths).toHaveLength(2);
|
|
61
|
+
expect(paths[1]?.searchParams.get('key')).toBe('own:owner');
|
|
62
|
+
expect(paths[1]?.searchParams.get('limit')).toBe('0');
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
services.close();
|
|
66
|
+
server.stop(true);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
for (const [name, stream, message] of [
|
|
70
|
+
[
|
|
71
|
+
'early EOF',
|
|
72
|
+
'event: sync\ndata: {"phase":"refresh"}\n\n',
|
|
73
|
+
'Address sync ended before completion',
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
'server error',
|
|
77
|
+
'event: error\ndata: refresh failed\n\n',
|
|
78
|
+
'refresh failed',
|
|
79
|
+
],
|
|
80
|
+
]) {
|
|
81
|
+
it(`stops before searching stale inventory after ${name}`, async () => {
|
|
82
|
+
let requests = 0;
|
|
83
|
+
const server = Bun.serve({
|
|
84
|
+
port: 0,
|
|
85
|
+
fetch() {
|
|
86
|
+
requests++;
|
|
87
|
+
return new Response(stream);
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
const services = new OneSatServices('main', server.url.origin);
|
|
91
|
+
try {
|
|
92
|
+
await expect(scanAddress(services, 'owner')).rejects.toThrow(message);
|
|
93
|
+
expect(requests).toBe(1);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
services.close();
|
|
97
|
+
server.stop(true);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
21
102
|
//# sourceMappingURL=scan.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.test.js","sourceRoot":"","sources":["../../src/sweep/scan.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"scan.test.js","sourceRoot":"","sources":["../../src/sweep/scan.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tokens/index.d.ts
CHANGED
|
@@ -171,6 +171,22 @@ export declare const deployBsv21Auth: Action<DeployBsv21AuthInput, DeployBsv21Au
|
|
|
171
171
|
* Pass `endMinting: true` to permanently end minting (no auth output emitted).
|
|
172
172
|
*/
|
|
173
173
|
export declare const mintBsv21: Action<MintBsv21Input, MintBsv21Response>;
|
|
174
|
+
export interface CancelTokenListingInput extends ActionOptions {
|
|
175
|
+
/** Tracking id of the listing in the ordinals basket */
|
|
176
|
+
id: string;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Cancel a listed BSV-20/BSV-21 token. Returns a transfer inscription, never a bare P2PKH.
|
|
180
|
+
*/
|
|
181
|
+
export declare const cancelTokenListing: Action<CancelTokenListingInput, {
|
|
182
|
+
txid?: string;
|
|
183
|
+
tx?: number[];
|
|
184
|
+
error?: string;
|
|
185
|
+
}>;
|
|
174
186
|
/** All token actions for registry */
|
|
175
|
-
export declare const tokensActions: (Action<ListTokensInput, WalletOutput[]> | Action<GetBsv21BalancesInput, Bsv21Balance[]> | Action<SendBsv21Input, TokenOperationResponse> | Action<PurchaseBsv21Request, TokenOperationResponse> | Action<DeployBsv21MintInput, DeployBsv21Response> | Action<MintBsv21Input, MintBsv21Response>
|
|
187
|
+
export declare const tokensActions: (Action<ListTokensInput, WalletOutput[]> | Action<GetBsv21BalancesInput, Bsv21Balance[]> | Action<SendBsv21Input, TokenOperationResponse> | Action<PurchaseBsv21Request, TokenOperationResponse> | Action<DeployBsv21MintInput, DeployBsv21Response> | Action<MintBsv21Input, MintBsv21Response> | Action<CancelTokenListingInput, {
|
|
188
|
+
txid?: string;
|
|
189
|
+
tx?: number[];
|
|
190
|
+
error?: string;
|
|
191
|
+
}>)[];
|
|
176
192
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAEN,KAAK,WAAW,EAIhB,MAAM,aAAa,CAAA;AAEpB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tokens/index.js
CHANGED
|
@@ -8,10 +8,14 @@ import { BSV21_DEPLOY_TAG, buildInputAssetLabel, buildTokenLabel, readAssetIdTag
|
|
|
8
8
|
import { parseOutpoint } from '@1sat/utils';
|
|
9
9
|
import { BigNumber, LockingScript, OP, P2PKH, PublicKey, TransactionSignature, UnlockingScript, Utils, } from '@bsv/sdk';
|
|
10
10
|
import { prepareP1SatArgs } from '../apply/index.js';
|
|
11
|
-
import { BSV21_AUTH_TAG, BSV21_BASKET, P1SAT_PROTOCOL } from '../constants.js';
|
|
11
|
+
import { BSV21_AUTH_TAG, BSV21_BASKET, ORDINALS_BASKET, P1SAT_PROTOCOL, } from '../constants.js';
|
|
12
|
+
import { deriveCancelAddressInternal } from '../ordinals/index.js';
|
|
12
13
|
import { bsv21FieldsFromOutput, bsv21FilterTags, buildBsv21CustomInstructions, normalizeBsv21TokenId, } from '../utils/bsv21Remittance.js';
|
|
13
14
|
import { executeTrackedAction } from '../utils/createTrackedAction.js';
|
|
14
15
|
import { getDisplayValue } from '../utils/displayValue.js';
|
|
16
|
+
import { loadBasketOutputBeef } from '../utils/loadBasketOutput.js';
|
|
17
|
+
import { isBsv21Transfer, listedTransfer, tokenReturnOutput, } from '../utils/listingToken.js';
|
|
18
|
+
import { ordLockCancelUnlockLength } from '../utils/ordlockCancelLength.js';
|
|
15
19
|
import { resolveDestination } from '../utils/resolveDestination.js';
|
|
16
20
|
import { signP2PKHInput } from '../utils/signP2PKH.js';
|
|
17
21
|
/** tokenId: CI `id` → tag `bsv21:<id>` → deploy outpoint. */
|
|
@@ -1254,6 +1258,105 @@ export const mintBsv21 = {
|
|
|
1254
1258
|
}
|
|
1255
1259
|
},
|
|
1256
1260
|
};
|
|
1261
|
+
/**
|
|
1262
|
+
* Cancel a listed BSV-20/BSV-21 token. Returns a transfer inscription, never a bare P2PKH.
|
|
1263
|
+
*/
|
|
1264
|
+
export const cancelTokenListing = {
|
|
1265
|
+
meta: {
|
|
1266
|
+
name: 'cancelTokenListing',
|
|
1267
|
+
description: 'Cancel a token listing and return a transfer inscription to the wallet',
|
|
1268
|
+
category: 'tokens',
|
|
1269
|
+
inputSchema: {
|
|
1270
|
+
type: 'object',
|
|
1271
|
+
properties: {
|
|
1272
|
+
id: {
|
|
1273
|
+
type: 'string',
|
|
1274
|
+
description: 'Tracking id of the listing in the ordinals basket',
|
|
1275
|
+
},
|
|
1276
|
+
},
|
|
1277
|
+
required: ['id'],
|
|
1278
|
+
},
|
|
1279
|
+
},
|
|
1280
|
+
async execute(ctx, input) {
|
|
1281
|
+
try {
|
|
1282
|
+
if (!input.id)
|
|
1283
|
+
return { error: 'missing-id' };
|
|
1284
|
+
const loaded = await loadBasketOutputBeef(ctx.wallet, ORDINALS_BASKET, input.id);
|
|
1285
|
+
if ('error' in loaded)
|
|
1286
|
+
return loaded;
|
|
1287
|
+
const { output: listing, beef: inputBEEF } = loaded;
|
|
1288
|
+
const token = listedTransfer(listing);
|
|
1289
|
+
if (!token)
|
|
1290
|
+
return { error: 'not-a-token-listing' };
|
|
1291
|
+
if (!listing.customInstructions) {
|
|
1292
|
+
return { error: 'missing-custom-instructions' };
|
|
1293
|
+
}
|
|
1294
|
+
const outpoint = listing.outpoint;
|
|
1295
|
+
const newKeyID = outpoint;
|
|
1296
|
+
const cancelAddress = await deriveCancelAddressInternal(ctx, newKeyID);
|
|
1297
|
+
const outputs = [
|
|
1298
|
+
tokenReturnOutput({
|
|
1299
|
+
address: cancelAddress,
|
|
1300
|
+
token,
|
|
1301
|
+
keyID: newKeyID,
|
|
1302
|
+
protocolID: P1SAT_PROTOCOL,
|
|
1303
|
+
description: 'Cancelled token listing',
|
|
1304
|
+
}),
|
|
1305
|
+
];
|
|
1306
|
+
if (isBsv21Transfer(token)) {
|
|
1307
|
+
if (!ctx.services?.bsv21)
|
|
1308
|
+
return { error: 'services-required' };
|
|
1309
|
+
const details = await ctx.services.bsv21.getTokenDetails(token.id);
|
|
1310
|
+
if (!details.status.is_active)
|
|
1311
|
+
return { error: 'token-not-active' };
|
|
1312
|
+
const feePerOutput = details.status.fee_per_output;
|
|
1313
|
+
const feeAddress = details.status.fee_address;
|
|
1314
|
+
if (typeof feePerOutput === 'number' &&
|
|
1315
|
+
feePerOutput > 0 &&
|
|
1316
|
+
feeAddress) {
|
|
1317
|
+
outputs.push({
|
|
1318
|
+
lockingScript: new P2PKH().lock(feeAddress).toHex(),
|
|
1319
|
+
satoshis: feePerOutput,
|
|
1320
|
+
outputDescription: 'Overlay processing fee',
|
|
1321
|
+
tags: ['fee:overlay'],
|
|
1322
|
+
});
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
const inputId = readAssetIdTag(listing.tags);
|
|
1326
|
+
const args = await prepareP1SatArgs(ctx, {
|
|
1327
|
+
description: 'Cancel token listing',
|
|
1328
|
+
inputBEEF,
|
|
1329
|
+
...(inputId && {
|
|
1330
|
+
labels: [buildInputAssetLabel(ORDINALS_BASKET, inputId)],
|
|
1331
|
+
}),
|
|
1332
|
+
inputs: [
|
|
1333
|
+
{
|
|
1334
|
+
outpoint,
|
|
1335
|
+
inputDescription: 'Listed token',
|
|
1336
|
+
unlockingScriptLength: ordLockCancelUnlockLength(inputBEEF, outpoint),
|
|
1337
|
+
},
|
|
1338
|
+
],
|
|
1339
|
+
outputs,
|
|
1340
|
+
options: { randomizeOutputs: false },
|
|
1341
|
+
});
|
|
1342
|
+
return await executeTrackedAction(ctx.wallet, args, input.fundingProvider, inputBEEF, undefined, {
|
|
1343
|
+
spends: inputId
|
|
1344
|
+
? [{ basket: ORDINALS_BASKET, id: inputId }]
|
|
1345
|
+
: [],
|
|
1346
|
+
usePermissionModule: input.usePermissionModule ??
|
|
1347
|
+
input.useOneSatModule ??
|
|
1348
|
+
input.useModule,
|
|
1349
|
+
permissionScheme: '1sat',
|
|
1350
|
+
});
|
|
1351
|
+
}
|
|
1352
|
+
catch (error) {
|
|
1353
|
+
console.error('[cancelTokenListing]', error);
|
|
1354
|
+
return {
|
|
1355
|
+
error: error instanceof Error ? error.message : 'unknown-error',
|
|
1356
|
+
};
|
|
1357
|
+
}
|
|
1358
|
+
},
|
|
1359
|
+
};
|
|
1257
1360
|
// ============================================================================
|
|
1258
1361
|
// Module exports
|
|
1259
1362
|
// ============================================================================
|
|
@@ -1263,6 +1366,7 @@ export const tokensActions = [
|
|
|
1263
1366
|
getBsv21Balances,
|
|
1264
1367
|
sendBsv21,
|
|
1265
1368
|
buyBsv21,
|
|
1369
|
+
cancelTokenListing,
|
|
1266
1370
|
deployBsv21Mint,
|
|
1267
1371
|
deployBsv21Auth,
|
|
1268
1372
|
mintBsv21,
|