@magicblock-labs/ephemeral-rollups-sdk 0.14.2 → 0.14.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/lib/__test__/resolver.test.d.ts +2 -0
- package/lib/__test__/resolver.test.d.ts.map +1 -0
- package/lib/__test__/resolver.test.js +68 -0
- package/lib/__test__/resolver.test.js.map +1 -0
- package/lib/resolver.d.ts +5 -4
- package/lib/resolver.d.ts.map +1 -1
- package/lib/resolver.js +21 -11
- package/lib/resolver.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.test.d.ts","sourceRoot":"","sources":["../../src/__test__/resolver.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
const constants_js_1 = require("../constants.js");
|
|
6
|
+
const pda_js_1 = require("../pda.js");
|
|
7
|
+
const resolver_js_1 = require("../resolver.js");
|
|
8
|
+
function createDelegationAccountInfo(validator, overrides = {}) {
|
|
9
|
+
const data = Buffer.alloc(40);
|
|
10
|
+
validator.toBuffer().copy(data, 8);
|
|
11
|
+
return {
|
|
12
|
+
data,
|
|
13
|
+
executable: false,
|
|
14
|
+
lamports: 1,
|
|
15
|
+
owner: constants_js_1.DELEGATION_PROGRAM_ID,
|
|
16
|
+
rentEpoch: 0,
|
|
17
|
+
...overrides,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
(0, vitest_1.describe)("parseDelegationRecordAccount", () => {
|
|
21
|
+
(0, vitest_1.it)("returns undelegated when the delegation record is missing", () => {
|
|
22
|
+
(0, vitest_1.expect)((0, resolver_js_1.parseDelegationRecordAccount)(null)).toEqual({
|
|
23
|
+
status: resolver_js_1.DelegationStatus.Undelegated,
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.it)("returns undelegated when the account has the wrong owner", () => {
|
|
27
|
+
const validator = web3_js_1.Keypair.generate().publicKey;
|
|
28
|
+
(0, vitest_1.expect)((0, resolver_js_1.parseDelegationRecordAccount)(createDelegationAccountInfo(validator, {
|
|
29
|
+
owner: web3_js_1.SystemProgram.programId,
|
|
30
|
+
}))).toEqual({
|
|
31
|
+
status: resolver_js_1.DelegationStatus.Undelegated,
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
(0, vitest_1.it)("returns undelegated when the delegation record has zero lamports", () => {
|
|
35
|
+
const validator = web3_js_1.Keypair.generate().publicKey;
|
|
36
|
+
(0, vitest_1.expect)((0, resolver_js_1.parseDelegationRecordAccount)(createDelegationAccountInfo(validator, {
|
|
37
|
+
lamports: 0,
|
|
38
|
+
}))).toEqual({
|
|
39
|
+
status: resolver_js_1.DelegationStatus.Undelegated,
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)("returns the delegated validator from the delegation record", () => {
|
|
43
|
+
const validator = web3_js_1.Keypair.generate().publicKey;
|
|
44
|
+
const record = (0, resolver_js_1.parseDelegationRecordAccount)(createDelegationAccountInfo(validator));
|
|
45
|
+
(0, vitest_1.expect)(record.status).toBe(resolver_js_1.DelegationStatus.Delegated);
|
|
46
|
+
if (record.status === resolver_js_1.DelegationStatus.Delegated) {
|
|
47
|
+
(0, vitest_1.expect)(record.validator.toBase58()).toBe(validator.toBase58());
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
(0, vitest_1.describe)("getDelegationRecord", () => {
|
|
52
|
+
(0, vitest_1.it)("fetches and parses the derived delegation record", async () => {
|
|
53
|
+
const delegatedAccount = web3_js_1.Keypair.generate().publicKey;
|
|
54
|
+
const validator = web3_js_1.Keypair.generate().publicKey;
|
|
55
|
+
const delegationRecord = (0, pda_js_1.delegationRecordPdaFromDelegatedAccount)(delegatedAccount);
|
|
56
|
+
const getAccountInfo = vitest_1.vi.fn(async (address, commitment) => {
|
|
57
|
+
(0, vitest_1.expect)(address.toBase58()).toBe(delegationRecord.toBase58());
|
|
58
|
+
(0, vitest_1.expect)(commitment).toBe("processed");
|
|
59
|
+
return createDelegationAccountInfo(validator);
|
|
60
|
+
});
|
|
61
|
+
const record = await (0, resolver_js_1.getDelegationRecord)({ getAccountInfo }, delegatedAccount, "processed");
|
|
62
|
+
(0, vitest_1.expect)(record.status).toBe(resolver_js_1.DelegationStatus.Delegated);
|
|
63
|
+
if (record.status === resolver_js_1.DelegationStatus.Delegated) {
|
|
64
|
+
(0, vitest_1.expect)(record.validator.toBase58()).toBe(validator.toBase58());
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.test.js","sourceRoot":"","sources":["../../src/__test__/resolver.test.ts"],"names":[],"mappings":"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"}
|
package/lib/resolver.d.ts
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { PublicKey, Connection, Transaction } from "@solana/web3.js";
|
|
1
|
+
import { PublicKey, Connection, AccountInfo, Transaction, Commitment } from "@solana/web3.js";
|
|
2
2
|
export interface Configuration {
|
|
3
3
|
chain: string;
|
|
4
4
|
websocket: string;
|
|
5
5
|
}
|
|
6
|
-
declare enum DelegationStatus {
|
|
6
|
+
export declare enum DelegationStatus {
|
|
7
7
|
Delegated = 0,
|
|
8
8
|
Undelegated = 1
|
|
9
9
|
}
|
|
10
|
-
type DelegationRecord = {
|
|
10
|
+
export type DelegationRecord = {
|
|
11
11
|
status: DelegationStatus.Delegated;
|
|
12
12
|
validator: PublicKey;
|
|
13
13
|
} | {
|
|
14
14
|
status: DelegationStatus.Undelegated;
|
|
15
15
|
};
|
|
16
|
+
export declare function parseDelegationRecordAccount(account: AccountInfo<Buffer> | null): DelegationRecord;
|
|
17
|
+
export declare function getDelegationRecord(connection: Connection, delegatedAccount: PublicKey, commitment?: Commitment): Promise<DelegationRecord>;
|
|
16
18
|
export declare class Resolver {
|
|
17
19
|
private readonly routes;
|
|
18
20
|
private readonly delegations;
|
|
@@ -26,5 +28,4 @@ export declare class Resolver {
|
|
|
26
28
|
terminate(): Promise<void>;
|
|
27
29
|
private updateStatus;
|
|
28
30
|
}
|
|
29
|
-
export {};
|
|
30
31
|
//# sourceMappingURL=resolver.d.ts.map
|
package/lib/resolver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACX,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,aAAa;IAE5B,KAAK,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,oBAAY,gBAAgB;IAC1B,SAAS,IAAA;IACT,WAAW,IAAA;CACZ;AAGD,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,GAC5D;IAAE,MAAM,EAAE,gBAAgB,CAAC,WAAW,CAAA;CAAE,CAAC;AAE7C,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,GAClC,gBAAgB,CAWlB;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,SAAS,EAC3B,UAAU,GAAE,UAAwB,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAM3B;AAGD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;gBAE9B,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAajD,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsC1D,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAe3D,qBAAqB,CAChC,EAAE,EAAE,WAAW,GACd,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAuBrB,SAAS;IAQtB,OAAO,CAAC,YAAY;CAQrB"}
|
package/lib/resolver.js
CHANGED
|
@@ -1,13 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Resolver = void 0;
|
|
3
|
+
exports.Resolver = exports.DelegationStatus = void 0;
|
|
4
|
+
exports.parseDelegationRecordAccount = parseDelegationRecordAccount;
|
|
5
|
+
exports.getDelegationRecord = getDelegationRecord;
|
|
4
6
|
const web3_js_1 = require("@solana/web3.js");
|
|
5
7
|
const constants_js_1 = require("./constants.js");
|
|
8
|
+
const pda_js_1 = require("./pda.js");
|
|
6
9
|
var DelegationStatus;
|
|
7
10
|
(function (DelegationStatus) {
|
|
8
11
|
DelegationStatus[DelegationStatus["Delegated"] = 0] = "Delegated";
|
|
9
12
|
DelegationStatus[DelegationStatus["Undelegated"] = 1] = "Undelegated";
|
|
10
|
-
})(DelegationStatus || (DelegationStatus = {}));
|
|
13
|
+
})(DelegationStatus || (exports.DelegationStatus = DelegationStatus = {}));
|
|
14
|
+
function parseDelegationRecordAccount(account) {
|
|
15
|
+
const isDelegated = account !== null &&
|
|
16
|
+
account.owner.equals(constants_js_1.DELEGATION_PROGRAM_ID) &&
|
|
17
|
+
account.lamports !== 0;
|
|
18
|
+
return isDelegated
|
|
19
|
+
? {
|
|
20
|
+
status: DelegationStatus.Delegated,
|
|
21
|
+
validator: new web3_js_1.PublicKey(account.data.subarray(8, 40)),
|
|
22
|
+
}
|
|
23
|
+
: { status: DelegationStatus.Undelegated };
|
|
24
|
+
}
|
|
25
|
+
async function getDelegationRecord(connection, delegatedAccount, commitment = "confirmed") {
|
|
26
|
+
const accountInfo = await connection.getAccountInfo((0, pda_js_1.delegationRecordPdaFromDelegatedAccount)(delegatedAccount), commitment);
|
|
27
|
+
return parseDelegationRecordAccount(accountInfo);
|
|
28
|
+
}
|
|
11
29
|
class Resolver {
|
|
12
30
|
constructor(config, routes) {
|
|
13
31
|
this.routes = new Map();
|
|
@@ -64,15 +82,7 @@ class Resolver {
|
|
|
64
82
|
await Promise.all([...this.subs].map(async (sub) => this.ws.removeAccountChangeListener(sub)));
|
|
65
83
|
}
|
|
66
84
|
updateStatus(account, pubkey) {
|
|
67
|
-
const
|
|
68
|
-
account.owner.equals(constants_js_1.DELEGATION_PROGRAM_ID) &&
|
|
69
|
-
account.lamports !== 0;
|
|
70
|
-
const record = isDelegated
|
|
71
|
-
? {
|
|
72
|
-
status: DelegationStatus.Delegated,
|
|
73
|
-
validator: new web3_js_1.PublicKey(account.data.subarray(8, 40)),
|
|
74
|
-
}
|
|
75
|
-
: { status: DelegationStatus.Undelegated };
|
|
85
|
+
const record = parseDelegationRecordAccount(account);
|
|
76
86
|
this.delegations.set(pubkey.toString(), record);
|
|
77
87
|
return record;
|
|
78
88
|
}
|
package/lib/resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
|