@bsv/templates 1.6.1 → 1.7.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/cjs/mod.js +2 -1
- package/dist/cjs/mod.js.map +1 -1
- package/dist/cjs/package.json +2 -2
- package/dist/cjs/src/MandalaAdmin.js +69 -37
- package/dist/cjs/src/MandalaAdmin.js.map +1 -1
- package/dist/cjs/src/MandalaToken.js +8 -12
- package/dist/cjs/src/MandalaToken.js.map +1 -1
- package/dist/cjs/src/mandala-encoding.js +1 -2
- package/dist/cjs/src/mandala-encoding.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +1 -1
- package/dist/esm/mod.js.map +1 -1
- package/dist/esm/src/MandalaAdmin.js +68 -37
- package/dist/esm/src/MandalaAdmin.js.map +1 -1
- package/dist/esm/src/MandalaToken.js +9 -12
- package/dist/esm/src/MandalaToken.js.map +1 -1
- package/dist/esm/src/mandala-encoding.js +0 -1
- package/dist/esm/src/mandala-encoding.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +2 -2
- package/dist/types/mod.d.ts.map +1 -1
- package/dist/types/src/MandalaAdmin.d.ts +22 -10
- package/dist/types/src/MandalaAdmin.d.ts.map +1 -1
- package/dist/types/src/MandalaToken.d.ts.map +1 -1
- package/dist/types/src/mandala-encoding.d.ts +0 -1
- package/dist/types/src/mandala-encoding.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/mod.ts +5 -2
- package/package.json +2 -2
- package/src/MandalaAdmin.ts +84 -46
- package/src/MandalaToken.ts +9 -11
- package/src/__tests/MandalaAdmin.derive.test.ts +7 -9
- package/src/__tests/MandalaAdmin.script.test.ts +44 -13
- package/src/__tests/MandalaAdmin.spend.test.ts +80 -0
- package/src/__tests/MandalaToken.test.ts +6 -9
- package/src/__tests/mandala-encoding.test.ts +1 -5
- package/src/mandala-encoding.ts +0 -2
package/dist/cjs/mod.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MandalaAdmin = exports.MandalaToken = exports.P2MSKH = exports.MultiPushDrop = exports.OpReturn = void 0;
|
|
3
|
+
exports.ADMIN_PROTOCOL = exports.MandalaAdmin = exports.MandalaToken = exports.P2MSKH = exports.MultiPushDrop = exports.OpReturn = void 0;
|
|
4
4
|
// Script Templates
|
|
5
5
|
var OpReturn_js_1 = require("./src/OpReturn.js");
|
|
6
6
|
Object.defineProperty(exports, "OpReturn", { enumerable: true, get: function () { return OpReturn_js_1.OpReturn; } });
|
|
@@ -12,4 +12,5 @@ var MandalaToken_js_1 = require("./src/MandalaToken.js");
|
|
|
12
12
|
Object.defineProperty(exports, "MandalaToken", { enumerable: true, get: function () { return MandalaToken_js_1.MandalaToken; } });
|
|
13
13
|
var MandalaAdmin_js_1 = require("./src/MandalaAdmin.js");
|
|
14
14
|
Object.defineProperty(exports, "MandalaAdmin", { enumerable: true, get: function () { return MandalaAdmin_js_1.MandalaAdmin; } });
|
|
15
|
+
Object.defineProperty(exports, "ADMIN_PROTOCOL", { enumerable: true, get: function () { return MandalaAdmin_js_1.ADMIN_PROTOCOL; } });
|
|
15
16
|
//# sourceMappingURL=mod.js.map
|
package/dist/cjs/mod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../mod.ts"],"names":[],"mappings":";;;AAAA,mBAAmB;AACnB,iDAA4C;AAAnC,uGAAA,QAAQ,OAAA;AACjB,2DAAsD;AAA7C,iHAAA,aAAa,OAAA;AACtB,6CAAwC;AAA/B,mGAAA,MAAM,OAAA;AACf,yDAAoD;AAA3C,+GAAA,YAAY,OAAA;AAErB,
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../mod.ts"],"names":[],"mappings":";;;AAAA,mBAAmB;AACnB,iDAA4C;AAAnC,uGAAA,QAAQ,OAAA;AACjB,2DAAsD;AAA7C,iHAAA,aAAa,OAAA;AACtB,6CAAwC;AAA/B,mGAAA,MAAM,OAAA;AACf,yDAAoD;AAA3C,+GAAA,YAAY,OAAA;AAErB,yDAAoE;AAA3D,+GAAA,YAAY,OAAA;AAAE,iHAAA,cAAc,OAAA"}
|
package/dist/cjs/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bsv/templates",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"description": "BSV Blockchain Script Templates",
|
|
6
6
|
"files": [
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"homepage": "https://github.com/bsv-blockchain/ts-stack/tree/main/packages/helpers/ts-templates#readme",
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@bsv/wallet-toolbox": "^2.
|
|
41
|
+
"@bsv/wallet-toolbox": "^2.3.3",
|
|
42
42
|
"@types/jest": "^30.0.0",
|
|
43
43
|
"jest": "^30.4.2",
|
|
44
44
|
"ts-jest": "^29.4.11",
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MandalaAdmin = void 0;
|
|
3
|
+
exports.MandalaAdmin = exports.ADMIN_PROTOCOL = void 0;
|
|
4
4
|
const sdk_1 = require("@bsv/sdk");
|
|
5
|
-
const mandala_encoding_js_1 = require("./mandala-encoding.js");
|
|
6
5
|
const mandala_signing_js_1 = require("./mandala-signing.js");
|
|
6
|
+
const mandala_encoding_js_1 = require("./mandala-encoding.js");
|
|
7
|
+
// The admin-auth output is a standard P2PKH. There is no on-chain identifier;
|
|
8
|
+
// admin outputs are classified by the off-chain action payload. The locking key
|
|
9
|
+
// is wallet-derived: keyID = commitment(data), so the output is bound to a
|
|
10
|
+
// specific action. counterparty defaults to 'self' (self-locked, self-spent);
|
|
11
|
+
// passing another party's identity key transfers admin rights to them.
|
|
12
|
+
exports.ADMIN_PROTOCOL = [2, 'mandala admin'];
|
|
7
13
|
const canon = (value) => {
|
|
8
14
|
if (value === null || typeof value !== 'object')
|
|
9
15
|
return JSON.stringify(value);
|
|
@@ -19,64 +25,90 @@ const canon = (value) => {
|
|
|
19
25
|
return '{' + keys.map(k => JSON.stringify(k) + ':' + canon(value[k])).join(',') + '}';
|
|
20
26
|
};
|
|
21
27
|
class MandalaAdmin {
|
|
22
|
-
constructor(wallet, originator) {
|
|
23
|
-
this.wallet = wallet;
|
|
24
|
-
this.originator = originator;
|
|
25
|
-
}
|
|
26
28
|
static canonicalize(actionDetails) {
|
|
27
29
|
return canon(actionDetails);
|
|
28
30
|
}
|
|
29
31
|
static commitment(actionDetails) {
|
|
30
32
|
return sdk_1.Utils.toHex(sdk_1.Hash.sha256(sdk_1.Utils.toArray(MandalaAdmin.canonicalize(actionDetails), 'utf8')));
|
|
31
33
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
lock(
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
// Build a P2PKH locking script bound to the action `data`. The locking key is
|
|
35
|
+
// getPublicKey({ counterparty }) with the default forSelf:false (the standard
|
|
36
|
+
// BRC-29 counterparty-child derivation). For counterparty:'self' the derivation
|
|
37
|
+
// is symmetric; for a transfer it is the new admin's child key. The matching
|
|
38
|
+
// private key is recovered by unlock() via createSignature({ counterparty }).
|
|
39
|
+
static async lock(params) {
|
|
40
|
+
const { wallet, data, counterparty = 'self', originator, publicData } = params;
|
|
41
|
+
const keyID = MandalaAdmin.commitment(data);
|
|
42
|
+
const { publicKey } = await wallet.getPublicKey({ protocolID: exports.ADMIN_PROTOCOL, keyID, counterparty }, originator);
|
|
43
|
+
const pubKeyHash = sdk_1.Hash.hash160(sdk_1.Utils.toArray(publicKey, 'hex'));
|
|
44
|
+
const p2pkh = [
|
|
45
|
+
{ op: sdk_1.OP.OP_DUP },
|
|
46
|
+
{ op: sdk_1.OP.OP_HASH160 },
|
|
47
|
+
{ op: pubKeyHash.length, data: pubKeyHash },
|
|
48
|
+
{ op: sdk_1.OP.OP_EQUALVERIFY },
|
|
49
|
+
{ op: sdk_1.OP.OP_CHECKSIG }
|
|
50
|
+
];
|
|
51
|
+
if (publicData == null)
|
|
52
|
+
return new sdk_1.LockingScript(p2pkh);
|
|
53
|
+
// Public metadata: pushed then dropped — purely informational, no spend effect.
|
|
54
|
+
const blob = sdk_1.Utils.toArray(JSON.stringify(publicData), 'utf8');
|
|
41
55
|
return new sdk_1.LockingScript([
|
|
42
|
-
(0, mandala_encoding_js_1.createMinimallyEncodedScriptChunk)(
|
|
56
|
+
(0, mandala_encoding_js_1.createMinimallyEncodedScriptChunk)(blob),
|
|
43
57
|
{ op: sdk_1.OP.OP_DROP },
|
|
44
|
-
|
|
45
|
-
{ op: sdk_1.OP.OP_CHECKSIG }
|
|
58
|
+
...p2pkh
|
|
46
59
|
]);
|
|
47
60
|
}
|
|
48
61
|
static decode(script) {
|
|
49
|
-
var _a;
|
|
50
62
|
const c = script.chunks;
|
|
51
|
-
|
|
63
|
+
// Optional <push JSON> OP_DROP metadata prefix (7 chunks) vs plain P2PKH (5).
|
|
64
|
+
let publicData;
|
|
65
|
+
let p2pkh = c;
|
|
66
|
+
if (c.length === 7) {
|
|
67
|
+
if (c[1].op !== sdk_1.OP.OP_DROP)
|
|
68
|
+
throw new Error('not a MandalaAdmin script: bad publicData prefix');
|
|
69
|
+
const data = c[0].data;
|
|
70
|
+
if (data == null)
|
|
71
|
+
throw new Error('not a MandalaAdmin script: empty publicData push');
|
|
72
|
+
publicData = JSON.parse(sdk_1.Utils.toUTF8(data));
|
|
73
|
+
p2pkh = c.slice(2);
|
|
74
|
+
}
|
|
75
|
+
else if (c.length !== 5) {
|
|
52
76
|
throw new Error('not a MandalaAdmin script: wrong chunk count');
|
|
53
|
-
|
|
54
|
-
if (
|
|
55
|
-
throw new Error('not a MandalaAdmin script:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return { boundKey: sdk_1.Utils.toHex(keyData) };
|
|
77
|
+
}
|
|
78
|
+
if (p2pkh[0].op !== sdk_1.OP.OP_DUP || p2pkh[1].op !== sdk_1.OP.OP_HASH160 || p2pkh[3].op !== sdk_1.OP.OP_EQUALVERIFY || p2pkh[4].op !== sdk_1.OP.OP_CHECKSIG) {
|
|
79
|
+
throw new Error('not a MandalaAdmin script: bad P2PKH shape');
|
|
80
|
+
}
|
|
81
|
+
const pubKeyHash = p2pkh[2].data;
|
|
82
|
+
if ((pubKeyHash === null || pubKeyHash === void 0 ? void 0 : pubKeyHash.length) !== 20)
|
|
83
|
+
throw new Error('not a MandalaAdmin script: bad pubKeyHash');
|
|
84
|
+
return { pubKeyHash, publicData };
|
|
62
85
|
}
|
|
63
|
-
unlock(
|
|
86
|
+
static unlock(params) {
|
|
87
|
+
const { wallet, data, counterparty = 'self', originator, signOutputs = 'all', anyoneCanPay = false } = params;
|
|
64
88
|
return {
|
|
65
89
|
sign: async (tx, inputIndex) => {
|
|
66
90
|
const { preimage, scope } = (0, mandala_signing_js_1.buildSighashPreimage)(tx, inputIndex, signOutputs, anyoneCanPay);
|
|
67
|
-
const keyID = MandalaAdmin.commitment(
|
|
68
|
-
const { signature: bareSignature } = await
|
|
91
|
+
const keyID = MandalaAdmin.commitment(data);
|
|
92
|
+
const { signature: bareSignature } = await wallet.createSignature({
|
|
69
93
|
hashToDirectlySign: sdk_1.Hash.hash256(preimage),
|
|
70
|
-
protocolID,
|
|
94
|
+
protocolID: exports.ADMIN_PROTOCOL,
|
|
71
95
|
keyID,
|
|
72
|
-
counterparty
|
|
73
|
-
},
|
|
96
|
+
counterparty
|
|
97
|
+
}, originator);
|
|
74
98
|
const signature = sdk_1.Signature.fromDER([...bareSignature]);
|
|
75
99
|
const txSignature = new sdk_1.TransactionSignature(signature.r, signature.s, scope);
|
|
76
100
|
const sigForScript = txSignature.toChecksigFormat();
|
|
77
|
-
|
|
101
|
+
// The signature was made with derivePrivateKey(counterparty); its matching
|
|
102
|
+
// public key is the forSelf:true derivation, which equals the key the lock
|
|
103
|
+
// hashed (BRC-42 symmetry). Push it so OP_HASH160 / OP_CHECKSIG pass.
|
|
104
|
+
const { publicKey } = await wallet.getPublicKey({ protocolID: exports.ADMIN_PROTOCOL, keyID, counterparty, forSelf: true }, originator);
|
|
105
|
+
const pubkey = sdk_1.Utils.toArray(publicKey, 'hex');
|
|
106
|
+
return new sdk_1.UnlockingScript([
|
|
107
|
+
{ op: sigForScript.length, data: sigForScript },
|
|
108
|
+
{ op: pubkey.length, data: pubkey }
|
|
109
|
+
]);
|
|
78
110
|
},
|
|
79
|
-
estimateLength: async (_tx, _inputIndex) =>
|
|
111
|
+
estimateLength: async (_tx, _inputIndex) => 108
|
|
80
112
|
};
|
|
81
113
|
}
|
|
82
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MandalaAdmin.js","sourceRoot":"","sources":["../../../src/MandalaAdmin.ts"],"names":[],"mappings":";;;AAAA,kCAIiB;AACjB,+
|
|
1
|
+
{"version":3,"file":"MandalaAdmin.js","sourceRoot":"","sources":["../../../src/MandalaAdmin.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,12 +28,12 @@ class MandalaToken {
|
|
|
28
28
|
if (!Number.isInteger(amount) || amount < 1)
|
|
29
29
|
throw new Error('amount must be a positive integer');
|
|
30
30
|
const assetIdBytes = (0, mandala_encoding_js_1.encodeAssetId)(assetId);
|
|
31
|
+
// assetId + amount are pushed then dropped by a single OP_2DROP; the tail is
|
|
32
|
+
// a standard P2PKH. No identifier prefix — outputs are classified off-chain.
|
|
31
33
|
return new sdk_1.LockingScript([
|
|
32
|
-
(0, mandala_encoding_js_1.createMinimallyEncodedScriptChunk)([mandala_encoding_js_1.MARKER]),
|
|
33
34
|
(0, mandala_encoding_js_1.createMinimallyEncodedScriptChunk)(assetIdBytes),
|
|
34
35
|
(0, mandala_encoding_js_1.createMinimallyEncodedScriptChunk)((0, mandala_encoding_js_1.encodeScriptNum)(amount)),
|
|
35
36
|
{ op: sdk_1.OP.OP_2DROP },
|
|
36
|
-
{ op: sdk_1.OP.OP_DROP },
|
|
37
37
|
{ op: sdk_1.OP.OP_DUP },
|
|
38
38
|
{ op: sdk_1.OP.OP_HASH160 },
|
|
39
39
|
{ op: pubKeyHash.length, data: pubKeyHash },
|
|
@@ -58,23 +58,19 @@ class MandalaToken {
|
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
static decode(script) {
|
|
61
|
-
var _a;
|
|
62
61
|
const c = script.chunks;
|
|
63
|
-
if (c.length !==
|
|
62
|
+
if (c.length !== 8)
|
|
64
63
|
throw new Error('not a MandalaToken script: wrong chunk count');
|
|
65
|
-
|
|
66
|
-
if (c[0].op !== 1 || marker.length !== 1 || marker[0] !== mandala_encoding_js_1.MARKER)
|
|
67
|
-
throw new Error('not a MandalaToken script: missing marker');
|
|
68
|
-
if (c[3].op !== sdk_1.OP.OP_2DROP || c[4].op !== sdk_1.OP.OP_DROP)
|
|
64
|
+
if (c[2].op !== sdk_1.OP.OP_2DROP)
|
|
69
65
|
throw new Error('not a MandalaToken script: bad drops');
|
|
70
|
-
if (c[
|
|
66
|
+
if (c[3].op !== sdk_1.OP.OP_DUP || c[4].op !== sdk_1.OP.OP_HASH160 || c[6].op !== sdk_1.OP.OP_EQUALVERIFY || c[7].op !== sdk_1.OP.OP_CHECKSIG) {
|
|
71
67
|
throw new Error('not a MandalaToken script: bad P2PKH tail');
|
|
72
68
|
}
|
|
73
|
-
const assetId = (0, mandala_encoding_js_1.decodeAssetId)(vt(c[
|
|
74
|
-
const amount = (0, mandala_encoding_js_1.decodeScriptNumChunk)(c[
|
|
69
|
+
const assetId = (0, mandala_encoding_js_1.decodeAssetId)(vt(c[0].data));
|
|
70
|
+
const amount = (0, mandala_encoding_js_1.decodeScriptNumChunk)(c[1]);
|
|
75
71
|
if (!Number.isInteger(amount) || amount < 1)
|
|
76
72
|
throw new Error('not a MandalaToken script: bad amount');
|
|
77
|
-
const pubKeyHash = vt(c[
|
|
73
|
+
const pubKeyHash = vt(c[5].data);
|
|
78
74
|
if (pubKeyHash.length !== 20)
|
|
79
75
|
throw new Error('not a MandalaToken script: bad pubKeyHash');
|
|
80
76
|
return { assetId, amount, pubKeyHash };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MandalaToken.js","sourceRoot":"","sources":["../../../src/MandalaToken.ts"],"names":[],"mappings":";;;AAAA,kCAIiB;AACjB,+DAG8B;AAC9B,6DAA2D;AAE3D,qEAAqE;AACrE,MAAM,EAAE,GAAG,CAAI,CAAuB,EAAK,EAAE;IAC3C,IAAI,CAAC,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACpD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAQD,MAAa,YAAY;IAIvB,YAAa,MAAwB,EAAE,UAAmB;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAe,EACf,MAAc,EACd,UAA0B,EAC1B,KAAa,EACb,YAAgC;QAEhC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QACvE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAC1G,MAAM,UAAU,GAAG,UAAI,CAAC,OAAO,CAAC,WAAK,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAA;QAChE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IAC/C,CAAC;IAED,IAAI,CAAE,OAAe,EAAE,MAAc,EAAE,UAAoB;QACzD,IAAI,UAAU,CAAC,MAAM,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC5E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACjG,MAAM,YAAY,GAAG,IAAA,mCAAa,EAAC,OAAO,CAAC,CAAA;QAC3C,OAAO,IAAI,mBAAa,CAAC;YACvB,IAAA,uDAAiC,EAAC,
|
|
1
|
+
{"version":3,"file":"MandalaToken.js","sourceRoot":"","sources":["../../../src/MandalaToken.ts"],"names":[],"mappings":";;;AAAA,kCAIiB;AACjB,+DAG8B;AAC9B,6DAA2D;AAE3D,qEAAqE;AACrE,MAAM,EAAE,GAAG,CAAI,CAAuB,EAAK,EAAE;IAC3C,IAAI,CAAC,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACpD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAQD,MAAa,YAAY;IAIvB,YAAa,MAAwB,EAAE,UAAmB;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAe,EACf,MAAc,EACd,UAA0B,EAC1B,KAAa,EACb,YAAgC;QAEhC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QACvE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAC1G,MAAM,UAAU,GAAG,UAAI,CAAC,OAAO,CAAC,WAAK,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAA;QAChE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IAC/C,CAAC;IAED,IAAI,CAAE,OAAe,EAAE,MAAc,EAAE,UAAoB;QACzD,IAAI,UAAU,CAAC,MAAM,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;QAC5E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACjG,MAAM,YAAY,GAAG,IAAA,mCAAa,EAAC,OAAO,CAAC,CAAA;QAC3C,6EAA6E;QAC7E,6EAA6E;QAC7E,OAAO,IAAI,mBAAa,CAAC;YACvB,IAAA,uDAAiC,EAAC,YAAY,CAAC;YAC/C,IAAA,uDAAiC,EAAC,IAAA,qCAAe,EAAC,MAAM,CAAC,CAAC;YAC1D,EAAE,EAAE,EAAE,QAAE,CAAC,QAAQ,EAAE;YACnB,EAAE,EAAE,EAAE,QAAE,CAAC,MAAM,EAAE;YACjB,EAAE,EAAE,EAAE,QAAE,CAAC,UAAU,EAAE;YACrB,EAAE,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;YAC3C,EAAE,EAAE,EAAE,QAAE,CAAC,cAAc,EAAE;YACzB,EAAE,EAAE,EAAE,QAAE,CAAC,WAAW,EAAE;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CACJ,UAAsB,EACtB,cAAyC,KAAK,EAC9C,YAAY,GAAG,KAAK;QAEpB,OAAO;YACL,IAAI,EAAE,KAAK,EAAE,EAAe,EAAE,UAAkB,EAA4B,EAAE;gBAC5E,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAA,yCAAoB,EAAC,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;gBAE3F,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,UAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAC3D,MAAM,GAAG,GAAG,IAAI,0BAAoB,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBAC3E,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAA;gBAC3C,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAa,CAAA;gBACzE,OAAO,IAAI,qBAAe,CAAC;oBACzB,EAAE,EAAE,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;oBAC/C,EAAE,EAAE,EAAE,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE;iBACtD,CAAC,CAAA;YACJ,CAAC;YACD,cAAc,EAAE,KAAK,EAAE,EAAgB,EAAE,UAAmB,EAAE,EAAE,CAAC,GAAG;SACrE,CAAA;IACH,CAAC;IAED,MAAM,CAAC,MAAM,CAAE,MAAqB;QAClC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;QACvB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACnF,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,QAAE,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACpF,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,QAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,QAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,QAAE,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,QAAE,CAAC,WAAW,EAAE,CAAC;YACtH,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC9D,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,mCAAa,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,IAAA,0CAAoB,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QACrG,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,UAAU,CAAC,MAAM,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;IACxC,CAAC;CACF;AA5ED,oCA4EC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decodeAssetId = exports.encodeAssetId = exports.decodeScriptNumChunk = exports.decodeScriptNum = exports.encodeScriptNum = exports.createMinimallyEncodedScriptChunk =
|
|
3
|
+
exports.decodeAssetId = exports.encodeAssetId = exports.decodeScriptNumChunk = exports.decodeScriptNum = exports.encodeScriptNum = exports.createMinimallyEncodedScriptChunk = void 0;
|
|
4
4
|
const sdk_1 = require("@bsv/sdk");
|
|
5
|
-
exports.MARKER = 0x21;
|
|
6
5
|
const createMinimallyEncodedScriptChunk = (data) => {
|
|
7
6
|
if (data.length === 0)
|
|
8
7
|
return { op: 0 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mandala-encoding.js","sourceRoot":"","sources":["../../../src/mandala-encoding.ts"],"names":[],"mappings":";;;AAAA,kCAAgC;
|
|
1
|
+
{"version":3,"file":"mandala-encoding.js","sourceRoot":"","sources":["../../../src/mandala-encoding.ts"],"names":[],"mappings":"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"}
|