@arkade-os/sdk 0.4.0-next.1 → 0.4.0-next.3
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/{asset → extension/asset}/index.js +1 -2
- package/dist/cjs/extension/asset/packet.js +111 -0
- package/dist/cjs/{asset → extension/asset}/types.js +1 -4
- package/dist/cjs/extension/index.js +254 -0
- package/dist/cjs/extension/packet.js +20 -0
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/providers/ark.js +52 -37
- package/dist/cjs/providers/indexer.js +1 -1
- package/dist/cjs/providers/utils.js +39 -29
- package/dist/cjs/wallet/asset-manager.js +9 -17
- package/dist/cjs/wallet/asset.js +1 -1
- package/dist/cjs/wallet/serviceWorker/wallet.js +9 -1
- package/dist/cjs/wallet/validation.js +6 -2
- package/dist/cjs/wallet/wallet.js +5 -4
- package/dist/cjs/worker/messageBus.js +22 -2
- package/dist/esm/{asset → extension/asset}/index.js +1 -1
- package/dist/esm/extension/asset/packet.js +107 -0
- package/dist/esm/{asset → extension/asset}/types.js +0 -3
- package/dist/esm/extension/index.js +248 -0
- package/dist/esm/extension/packet.js +16 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/providers/ark.js +52 -37
- package/dist/esm/providers/indexer.js +1 -1
- package/dist/esm/providers/utils.js +39 -29
- package/dist/esm/wallet/asset-manager.js +9 -17
- package/dist/esm/wallet/asset.js +1 -1
- package/dist/esm/wallet/serviceWorker/wallet.js +9 -1
- package/dist/esm/wallet/validation.js +6 -2
- package/dist/esm/wallet/wallet.js +5 -4
- package/dist/esm/worker/messageBus.js +22 -2
- package/dist/types/{asset → extension/asset}/index.d.ts +1 -1
- package/dist/types/extension/asset/packet.d.ts +38 -0
- package/dist/types/{asset → extension/asset}/types.d.ts +0 -2
- package/dist/types/extension/index.d.ts +56 -0
- package/dist/types/extension/packet.d.ts +21 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/providers/utils.d.ts +6 -0
- package/dist/types/wallet/asset-manager.d.ts +4 -13
- package/dist/types/wallet/asset.d.ts +1 -1
- package/package.json +1 -1
- package/dist/cjs/asset/packet.js +0 -164
- package/dist/esm/asset/packet.js +0 -159
- package/dist/types/asset/packet.d.ts +0 -27
- /package/dist/cjs/{asset → extension/asset}/assetGroup.js +0 -0
- /package/dist/cjs/{asset → extension/asset}/assetId.js +0 -0
- /package/dist/cjs/{asset → extension/asset}/assetInput.js +0 -0
- /package/dist/cjs/{asset → extension/asset}/assetOutput.js +0 -0
- /package/dist/cjs/{asset → extension/asset}/assetRef.js +0 -0
- /package/dist/cjs/{asset → extension/asset}/metadata.js +0 -0
- /package/dist/cjs/{asset → extension/asset}/utils.js +0 -0
- /package/dist/esm/{asset → extension/asset}/assetGroup.js +0 -0
- /package/dist/esm/{asset → extension/asset}/assetId.js +0 -0
- /package/dist/esm/{asset → extension/asset}/assetInput.js +0 -0
- /package/dist/esm/{asset → extension/asset}/assetOutput.js +0 -0
- /package/dist/esm/{asset → extension/asset}/assetRef.js +0 -0
- /package/dist/esm/{asset → extension/asset}/metadata.js +0 -0
- /package/dist/esm/{asset → extension/asset}/utils.js +0 -0
- /package/dist/types/{asset → extension/asset}/assetGroup.d.ts +0 -0
- /package/dist/types/{asset → extension/asset}/assetId.d.ts +0 -0
- /package/dist/types/{asset → extension/asset}/assetInput.d.ts +0 -0
- /package/dist/types/{asset → extension/asset}/assetOutput.d.ts +0 -0
- /package/dist/types/{asset → extension/asset}/assetRef.d.ts +0 -0
- /package/dist/types/{asset → extension/asset}/metadata.d.ts +0 -0
- /package/dist/types/{asset → extension/asset}/utils.d.ts +0 -0
package/dist/cjs/asset/packet.js
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Packet = exports.AssetPacketNotFoundError = void 0;
|
|
4
|
-
const base_1 = require("@scure/base");
|
|
5
|
-
const btc_signer_1 = require("@scure/btc-signer");
|
|
6
|
-
const utils_js_1 = require("@scure/btc-signer/utils.js");
|
|
7
|
-
const types_1 = require("./types");
|
|
8
|
-
const assetGroup_1 = require("./assetGroup");
|
|
9
|
-
const utils_1 = require("./utils");
|
|
10
|
-
class AssetPacketNotFoundError extends Error {
|
|
11
|
-
constructor(txid) {
|
|
12
|
-
super(`asset packet not found in tx ${txid}`);
|
|
13
|
-
this.name = "AssetPacketNotFoundError";
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
exports.AssetPacketNotFoundError = AssetPacketNotFoundError;
|
|
17
|
-
/**
|
|
18
|
-
* Packet represents a collection of asset groups.
|
|
19
|
-
* A packet is encoded in OP_RETURN output of an asset transaction.
|
|
20
|
-
* @param groups - the asset groups in the packet
|
|
21
|
-
*/
|
|
22
|
-
class Packet {
|
|
23
|
-
constructor(groups) {
|
|
24
|
-
this.groups = groups;
|
|
25
|
-
}
|
|
26
|
-
static create(groups) {
|
|
27
|
-
const p = new Packet(groups);
|
|
28
|
-
p.validate();
|
|
29
|
-
return p;
|
|
30
|
-
}
|
|
31
|
-
static fromString(s) {
|
|
32
|
-
let buf;
|
|
33
|
-
try {
|
|
34
|
-
buf = base_1.hex.decode(s);
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
throw new Error("invalid output script format, must be hex");
|
|
38
|
-
}
|
|
39
|
-
return Packet.fromScript(buf);
|
|
40
|
-
}
|
|
41
|
-
static fromScript(script) {
|
|
42
|
-
const rawPacket = extractRawPacketFromScript(script);
|
|
43
|
-
const reader = new utils_1.BufferReader(rawPacket);
|
|
44
|
-
return Packet.fromReader(reader);
|
|
45
|
-
}
|
|
46
|
-
static fromTxOut(pkScript) {
|
|
47
|
-
return Packet.fromScript(pkScript);
|
|
48
|
-
}
|
|
49
|
-
static fromTx(tx) {
|
|
50
|
-
for (let i = 0; i < tx.outputsLength; i++) {
|
|
51
|
-
try {
|
|
52
|
-
const output = tx.getOutput(i);
|
|
53
|
-
if (!output?.script) {
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
return Packet.fromScript(output.script);
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
throw new AssetPacketNotFoundError(tx.id);
|
|
63
|
-
}
|
|
64
|
-
static isAssetPacket(script) {
|
|
65
|
-
try {
|
|
66
|
-
extractRawPacketFromScript(script);
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
leafTxPacket(intentTxid) {
|
|
74
|
-
const leafGroups = this.groups.map((group) => group.toBatchLeafAssetGroup(intentTxid));
|
|
75
|
-
return new Packet(leafGroups);
|
|
76
|
-
}
|
|
77
|
-
txOut() {
|
|
78
|
-
return {
|
|
79
|
-
script: this.serialize(),
|
|
80
|
-
amount: 0n,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
serialize() {
|
|
84
|
-
const writer = new utils_1.BufferWriter();
|
|
85
|
-
writer.writeVarUint(this.groups.length);
|
|
86
|
-
for (const group of this.groups) {
|
|
87
|
-
group.serializeTo(writer);
|
|
88
|
-
}
|
|
89
|
-
const packetData = writer.toBytes();
|
|
90
|
-
const data = (0, utils_js_1.concatBytes)(types_1.ARKADE_MAGIC, new Uint8Array([types_1.MARKER_ASSET_PAYLOAD]), packetData);
|
|
91
|
-
return buildOpReturnScript(data);
|
|
92
|
-
}
|
|
93
|
-
toString() {
|
|
94
|
-
return base_1.hex.encode(this.serialize());
|
|
95
|
-
}
|
|
96
|
-
validate() {
|
|
97
|
-
if (this.groups.length === 0) {
|
|
98
|
-
throw new Error("missing assets");
|
|
99
|
-
}
|
|
100
|
-
for (const group of this.groups) {
|
|
101
|
-
if (group.controlAsset !== null &&
|
|
102
|
-
group.controlAsset.ref.type === types_1.AssetRefType.ByGroup &&
|
|
103
|
-
group.controlAsset.ref.groupIndex >= this.groups.length) {
|
|
104
|
-
throw new Error(`invalid control asset group index, ${group.controlAsset.ref.groupIndex} out of range [0, ${this.groups.length - 1}]`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
static fromReader(reader) {
|
|
109
|
-
const count = Number(reader.readVarUint());
|
|
110
|
-
const groups = [];
|
|
111
|
-
for (let i = 0; i < count; i++) {
|
|
112
|
-
groups.push(assetGroup_1.AssetGroup.fromReader(reader));
|
|
113
|
-
}
|
|
114
|
-
if (reader.remaining() > 0) {
|
|
115
|
-
throw new Error(`invalid packet length, left ${reader.remaining()} unknown bytes to read`);
|
|
116
|
-
}
|
|
117
|
-
const packet = new Packet(groups);
|
|
118
|
-
packet.validate();
|
|
119
|
-
return packet;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
exports.Packet = Packet;
|
|
123
|
-
function extractRawPacketFromScript(script) {
|
|
124
|
-
if (!script || script.length === 0) {
|
|
125
|
-
throw new Error("missing output script");
|
|
126
|
-
}
|
|
127
|
-
let decoded;
|
|
128
|
-
try {
|
|
129
|
-
decoded = btc_signer_1.Script.decode(script);
|
|
130
|
-
}
|
|
131
|
-
catch {
|
|
132
|
-
throw new Error("invalid OP_RETURN output script");
|
|
133
|
-
}
|
|
134
|
-
if (decoded.length === 0 || decoded[0] !== "RETURN") {
|
|
135
|
-
throw new Error("OP_RETURN not found in output script");
|
|
136
|
-
}
|
|
137
|
-
// concat all data pushes after RETURN
|
|
138
|
-
const dataPushes = decoded
|
|
139
|
-
.slice(1)
|
|
140
|
-
.filter((item) => item instanceof Uint8Array);
|
|
141
|
-
if (dataPushes.length === 0) {
|
|
142
|
-
throw new Error("missing OP_RETURN data");
|
|
143
|
-
}
|
|
144
|
-
const payload = (0, utils_js_1.concatBytes)(...dataPushes);
|
|
145
|
-
if (payload.length < types_1.ARKADE_MAGIC.length + 1) {
|
|
146
|
-
throw new Error("invalid script length");
|
|
147
|
-
}
|
|
148
|
-
const magicSlice = new Uint8Array(payload.slice(0, types_1.ARKADE_MAGIC.length));
|
|
149
|
-
if (!(0, utils_js_1.equalBytes)(magicSlice, types_1.ARKADE_MAGIC)) {
|
|
150
|
-
throw new Error(`invalid magic prefix, got ${base_1.hex.encode(magicSlice)} want ${base_1.hex.encode(types_1.ARKADE_MAGIC)}`);
|
|
151
|
-
}
|
|
152
|
-
const marker = payload[types_1.ARKADE_MAGIC.length];
|
|
153
|
-
if (marker !== types_1.MARKER_ASSET_PAYLOAD) {
|
|
154
|
-
throw new Error(`invalid asset marker, got ${marker} want ${types_1.MARKER_ASSET_PAYLOAD}`);
|
|
155
|
-
}
|
|
156
|
-
const packetData = new Uint8Array(payload.slice(types_1.ARKADE_MAGIC.length + 1));
|
|
157
|
-
if (packetData.length === 0) {
|
|
158
|
-
throw new Error("missing packet data");
|
|
159
|
-
}
|
|
160
|
-
return packetData;
|
|
161
|
-
}
|
|
162
|
-
function buildOpReturnScript(data) {
|
|
163
|
-
return btc_signer_1.Script.encode(["RETURN", data]);
|
|
164
|
-
}
|
package/dist/esm/asset/packet.js
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { hex } from "@scure/base";
|
|
2
|
-
import { Script } from "@scure/btc-signer";
|
|
3
|
-
import { concatBytes, equalBytes } from "@scure/btc-signer/utils.js";
|
|
4
|
-
import { ARKADE_MAGIC, MARKER_ASSET_PAYLOAD, AssetRefType } from './types.js';
|
|
5
|
-
import { AssetGroup } from './assetGroup.js';
|
|
6
|
-
import { BufferReader, BufferWriter } from './utils.js';
|
|
7
|
-
export class AssetPacketNotFoundError extends Error {
|
|
8
|
-
constructor(txid) {
|
|
9
|
-
super(`asset packet not found in tx ${txid}`);
|
|
10
|
-
this.name = "AssetPacketNotFoundError";
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Packet represents a collection of asset groups.
|
|
15
|
-
* A packet is encoded in OP_RETURN output of an asset transaction.
|
|
16
|
-
* @param groups - the asset groups in the packet
|
|
17
|
-
*/
|
|
18
|
-
export class Packet {
|
|
19
|
-
constructor(groups) {
|
|
20
|
-
this.groups = groups;
|
|
21
|
-
}
|
|
22
|
-
static create(groups) {
|
|
23
|
-
const p = new Packet(groups);
|
|
24
|
-
p.validate();
|
|
25
|
-
return p;
|
|
26
|
-
}
|
|
27
|
-
static fromString(s) {
|
|
28
|
-
let buf;
|
|
29
|
-
try {
|
|
30
|
-
buf = hex.decode(s);
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
throw new Error("invalid output script format, must be hex");
|
|
34
|
-
}
|
|
35
|
-
return Packet.fromScript(buf);
|
|
36
|
-
}
|
|
37
|
-
static fromScript(script) {
|
|
38
|
-
const rawPacket = extractRawPacketFromScript(script);
|
|
39
|
-
const reader = new BufferReader(rawPacket);
|
|
40
|
-
return Packet.fromReader(reader);
|
|
41
|
-
}
|
|
42
|
-
static fromTxOut(pkScript) {
|
|
43
|
-
return Packet.fromScript(pkScript);
|
|
44
|
-
}
|
|
45
|
-
static fromTx(tx) {
|
|
46
|
-
for (let i = 0; i < tx.outputsLength; i++) {
|
|
47
|
-
try {
|
|
48
|
-
const output = tx.getOutput(i);
|
|
49
|
-
if (!output?.script) {
|
|
50
|
-
continue;
|
|
51
|
-
}
|
|
52
|
-
return Packet.fromScript(output.script);
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
throw new AssetPacketNotFoundError(tx.id);
|
|
59
|
-
}
|
|
60
|
-
static isAssetPacket(script) {
|
|
61
|
-
try {
|
|
62
|
-
extractRawPacketFromScript(script);
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
leafTxPacket(intentTxid) {
|
|
70
|
-
const leafGroups = this.groups.map((group) => group.toBatchLeafAssetGroup(intentTxid));
|
|
71
|
-
return new Packet(leafGroups);
|
|
72
|
-
}
|
|
73
|
-
txOut() {
|
|
74
|
-
return {
|
|
75
|
-
script: this.serialize(),
|
|
76
|
-
amount: 0n,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
serialize() {
|
|
80
|
-
const writer = new BufferWriter();
|
|
81
|
-
writer.writeVarUint(this.groups.length);
|
|
82
|
-
for (const group of this.groups) {
|
|
83
|
-
group.serializeTo(writer);
|
|
84
|
-
}
|
|
85
|
-
const packetData = writer.toBytes();
|
|
86
|
-
const data = concatBytes(ARKADE_MAGIC, new Uint8Array([MARKER_ASSET_PAYLOAD]), packetData);
|
|
87
|
-
return buildOpReturnScript(data);
|
|
88
|
-
}
|
|
89
|
-
toString() {
|
|
90
|
-
return hex.encode(this.serialize());
|
|
91
|
-
}
|
|
92
|
-
validate() {
|
|
93
|
-
if (this.groups.length === 0) {
|
|
94
|
-
throw new Error("missing assets");
|
|
95
|
-
}
|
|
96
|
-
for (const group of this.groups) {
|
|
97
|
-
if (group.controlAsset !== null &&
|
|
98
|
-
group.controlAsset.ref.type === AssetRefType.ByGroup &&
|
|
99
|
-
group.controlAsset.ref.groupIndex >= this.groups.length) {
|
|
100
|
-
throw new Error(`invalid control asset group index, ${group.controlAsset.ref.groupIndex} out of range [0, ${this.groups.length - 1}]`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
static fromReader(reader) {
|
|
105
|
-
const count = Number(reader.readVarUint());
|
|
106
|
-
const groups = [];
|
|
107
|
-
for (let i = 0; i < count; i++) {
|
|
108
|
-
groups.push(AssetGroup.fromReader(reader));
|
|
109
|
-
}
|
|
110
|
-
if (reader.remaining() > 0) {
|
|
111
|
-
throw new Error(`invalid packet length, left ${reader.remaining()} unknown bytes to read`);
|
|
112
|
-
}
|
|
113
|
-
const packet = new Packet(groups);
|
|
114
|
-
packet.validate();
|
|
115
|
-
return packet;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
function extractRawPacketFromScript(script) {
|
|
119
|
-
if (!script || script.length === 0) {
|
|
120
|
-
throw new Error("missing output script");
|
|
121
|
-
}
|
|
122
|
-
let decoded;
|
|
123
|
-
try {
|
|
124
|
-
decoded = Script.decode(script);
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
throw new Error("invalid OP_RETURN output script");
|
|
128
|
-
}
|
|
129
|
-
if (decoded.length === 0 || decoded[0] !== "RETURN") {
|
|
130
|
-
throw new Error("OP_RETURN not found in output script");
|
|
131
|
-
}
|
|
132
|
-
// concat all data pushes after RETURN
|
|
133
|
-
const dataPushes = decoded
|
|
134
|
-
.slice(1)
|
|
135
|
-
.filter((item) => item instanceof Uint8Array);
|
|
136
|
-
if (dataPushes.length === 0) {
|
|
137
|
-
throw new Error("missing OP_RETURN data");
|
|
138
|
-
}
|
|
139
|
-
const payload = concatBytes(...dataPushes);
|
|
140
|
-
if (payload.length < ARKADE_MAGIC.length + 1) {
|
|
141
|
-
throw new Error("invalid script length");
|
|
142
|
-
}
|
|
143
|
-
const magicSlice = new Uint8Array(payload.slice(0, ARKADE_MAGIC.length));
|
|
144
|
-
if (!equalBytes(magicSlice, ARKADE_MAGIC)) {
|
|
145
|
-
throw new Error(`invalid magic prefix, got ${hex.encode(magicSlice)} want ${hex.encode(ARKADE_MAGIC)}`);
|
|
146
|
-
}
|
|
147
|
-
const marker = payload[ARKADE_MAGIC.length];
|
|
148
|
-
if (marker !== MARKER_ASSET_PAYLOAD) {
|
|
149
|
-
throw new Error(`invalid asset marker, got ${marker} want ${MARKER_ASSET_PAYLOAD}`);
|
|
150
|
-
}
|
|
151
|
-
const packetData = new Uint8Array(payload.slice(ARKADE_MAGIC.length + 1));
|
|
152
|
-
if (packetData.length === 0) {
|
|
153
|
-
throw new Error("missing packet data");
|
|
154
|
-
}
|
|
155
|
-
return packetData;
|
|
156
|
-
}
|
|
157
|
-
function buildOpReturnScript(data) {
|
|
158
|
-
return Script.encode(["RETURN", data]);
|
|
159
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { AssetGroup } from "./assetGroup";
|
|
2
|
-
import { TransactionOutput } from "@scure/btc-signer/psbt";
|
|
3
|
-
import { Transaction } from "../utils/transaction";
|
|
4
|
-
export declare class AssetPacketNotFoundError extends Error {
|
|
5
|
-
constructor(txid: string);
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Packet represents a collection of asset groups.
|
|
9
|
-
* A packet is encoded in OP_RETURN output of an asset transaction.
|
|
10
|
-
* @param groups - the asset groups in the packet
|
|
11
|
-
*/
|
|
12
|
-
export declare class Packet {
|
|
13
|
-
readonly groups: AssetGroup[];
|
|
14
|
-
private constructor();
|
|
15
|
-
static create(groups: AssetGroup[]): Packet;
|
|
16
|
-
static fromString(s: string): Packet;
|
|
17
|
-
static fromScript(script: Uint8Array): Packet;
|
|
18
|
-
static fromTxOut(pkScript: Uint8Array): Packet;
|
|
19
|
-
static fromTx(tx: Transaction): Packet;
|
|
20
|
-
static isAssetPacket(script: Uint8Array): boolean;
|
|
21
|
-
leafTxPacket(intentTxid: Uint8Array): Packet;
|
|
22
|
-
txOut(): Required<Pick<TransactionOutput, "script" | "amount">>;
|
|
23
|
-
serialize(): Uint8Array;
|
|
24
|
-
toString(): string;
|
|
25
|
-
validate(): void;
|
|
26
|
-
private static fromReader;
|
|
27
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|