@magicblock-labs/ephemeral-rollups-sdk 0.3.4 → 0.3.7

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/README.md CHANGED
@@ -1,14 +1,16 @@
1
1
  # @magicblock-labs/ephemeral-rollups-sdk
2
2
 
3
- TypeScript helpers for preparing and routing transactions to Ephemeral Rollups on Solana.
3
+ TypeScript helpers for preparing and routing transactions to Ephemeral Rollups on Solana with @solana/web3.js.
4
4
 
5
5
  Quickstart and integration guide:
6
- https://docs.magicblock.gg/pages/get-started/how-integrate-your-program/quickstart
6
+ https://docs.magicblock.gg
7
7
 
8
8
  ## Install
9
9
 
10
10
  npm install @magicblock-labs/ephemeral-rollups-sdk
11
+
11
12
  # or
13
+
12
14
  yarn add @magicblock-labs/ephemeral-rollups-sdk
13
15
 
14
16
  ## Usage (basic)
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magic-router.test.d.ts","sourceRoot":"","sources":["../../src/__test__/magic-router.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const magic_router_js_1 = require("../magic-router.js");
5
+ const web3_js_1 = require("@solana/web3.js");
6
+ global.fetch = vitest_1.vi.fn();
7
+ (0, vitest_1.describe)("getWritableAccounts", () => {
8
+ const mockPublicKey = (address) => ({
9
+ toBase58: () => address,
10
+ toString: () => address,
11
+ });
12
+ (0, vitest_1.it)("deduplicates writable accounts", () => {
13
+ const tx = {
14
+ feePayer: mockPublicKey("fee-payer"),
15
+ instructions: [
16
+ {
17
+ keys: [
18
+ { pubkey: mockPublicKey("k1"), isWritable: true },
19
+ { pubkey: mockPublicKey("k1"), isWritable: true },
20
+ ],
21
+ },
22
+ ],
23
+ };
24
+ const result = (0, magic_router_js_1.getWritableAccounts)(tx);
25
+ (0, vitest_1.expect)(result).toEqual(["fee-payer", "k1"]);
26
+ });
27
+ });
28
+ (0, vitest_1.describe)("Connection prototype methods", () => {
29
+ let connection;
30
+ let tx;
31
+ (0, vitest_1.beforeEach)(() => {
32
+ connection = new magic_router_js_1.ConnectionMagicRouter("http://localhost");
33
+ tx = new web3_js_1.Transaction();
34
+ tx.serialize = vitest_1.vi.fn(() => Buffer.from("mock"));
35
+ tx.sign = vitest_1.vi.fn();
36
+ global.fetch.mockReset();
37
+ });
38
+ (0, vitest_1.it)("getClosestValidator returns identity", async () => {
39
+ global.fetch.mockResolvedValueOnce({
40
+ json: async () => ({ result: { identity: "validator-1" } }),
41
+ });
42
+ const result = await connection.getClosestValidator();
43
+ (0, vitest_1.expect)(result).toEqual({ identity: "validator-1" });
44
+ });
45
+ (0, vitest_1.it)("getDelegationStatus works with string account", async () => {
46
+ global.fetch.mockResolvedValueOnce({
47
+ json: async () => ({ result: { isDelegated: true } }),
48
+ });
49
+ const result = await connection.getDelegationStatus("account1");
50
+ (0, vitest_1.expect)(result).toEqual({ isDelegated: true });
51
+ });
52
+ (0, vitest_1.it)("getDelegationStatus works with PublicKey account", async () => {
53
+ global.fetch.mockResolvedValueOnce({
54
+ json: async () => ({ result: { isDelegated: false } }),
55
+ });
56
+ const pk = new web3_js_1.PublicKey("11111111111111111111111111111111");
57
+ const result = await connection.getDelegationStatus(pk);
58
+ (0, vitest_1.expect)(result).toEqual({ isDelegated: false });
59
+ });
60
+ (0, vitest_1.it)("getLatestBlockhashForTransaction returns blockhash", async () => {
61
+ global.fetch.mockResolvedValueOnce({
62
+ json: async () => ({
63
+ result: { blockhash: "mock-blockhash", lastValidBlockHeight: 100 },
64
+ }),
65
+ });
66
+ const result = await connection.getLatestBlockhashForTransaction(tx);
67
+ (0, vitest_1.expect)(result).toEqual({
68
+ blockhash: "mock-blockhash",
69
+ lastValidBlockHeight: 100,
70
+ });
71
+ });
72
+ (0, vitest_1.it)("prepareTransaction sets recentBlockhash", async () => {
73
+ vitest_1.vi.spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "getLatestBlockhashForTransaction").mockResolvedValue({
74
+ blockhash: "hb",
75
+ lastValidBlockHeight: 100,
76
+ });
77
+ const result = await connection.prepareTransaction(tx);
78
+ (0, vitest_1.expect)(result.recentBlockhash).toBe("hb");
79
+ });
80
+ (0, vitest_1.it)("sendTransaction signs and sends transaction", async () => {
81
+ vitest_1.vi.spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "getLatestBlockhashForTransaction").mockResolvedValue({
82
+ blockhash: "hb",
83
+ lastValidBlockHeight: 100,
84
+ });
85
+ vitest_1.vi.spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "sendRawTransaction").mockResolvedValue("sig123");
86
+ const signers = [new web3_js_1.Keypair()];
87
+ const sendTx = connection.sendTransaction.bind(connection);
88
+ const signature = await sendTx(tx, signers);
89
+ const signFn = tx.sign.bind(tx);
90
+ const serializeFn = tx.serialize.bind(tx);
91
+ (0, vitest_1.expect)(signFn(...signers)).toBeUndefined();
92
+ (0, vitest_1.expect)(serializeFn()).toBeInstanceOf(Buffer);
93
+ (0, vitest_1.expect)(signature).toBe("sig123");
94
+ });
95
+ (0, vitest_1.it)("sendAndConfirmTransaction calls sendTransaction and returns signature", async () => {
96
+ vitest_1.vi.spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "sendTransaction").mockResolvedValue("sig123");
97
+ vitest_1.vi.spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "confirmTransaction").mockResolvedValue({ value: { err: null } });
98
+ const signature = await (0, web3_js_1.sendAndConfirmTransaction)(connection, tx, [
99
+ new web3_js_1.Keypair(),
100
+ ]);
101
+ (0, vitest_1.expect)(signature).toBe("sig123");
102
+ });
103
+ (0, vitest_1.it)("sendAndConfirmTransaction throws SendTransactionError if status has err", async () => {
104
+ vitest_1.vi.spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "sendTransaction").mockResolvedValue("sig123");
105
+ vitest_1.vi.spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "confirmTransaction").mockResolvedValue({ value: { err: { some: "error" } } });
106
+ await (0, vitest_1.expect)((0, web3_js_1.sendAndConfirmTransaction)(connection, tx, [new web3_js_1.Keypair()])).rejects.toThrow(web3_js_1.SendTransactionError);
107
+ });
108
+ });
109
+ //# sourceMappingURL=magic-router.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magic-router.test.js","sourceRoot":"","sources":["../../src/__test__/magic-router.test.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,6 @@ export declare const delegateInstructionDiscriminator: number[];
10
10
  interface DelegateAccountArgs {
11
11
  commit_frequency_ms: number;
12
12
  seeds: Uint8Array[][];
13
- validator?: web3.PublicKey;
14
13
  }
15
14
  export declare function createDelegateInstruction(accounts: {
16
15
  payer: web3.PublicKey;
@@ -19,6 +18,7 @@ export declare function createDelegateInstruction(accounts: {
19
18
  delegationRecord?: web3.PublicKey;
20
19
  delegationMetadata?: web3.PublicKey;
21
20
  systemProgram?: web3.PublicKey;
21
+ validator?: web3.PublicKey;
22
22
  }, args?: DelegateAccountArgs, programId?: web3.PublicKey): web3.TransactionInstruction;
23
23
  export {};
24
24
  //# sourceMappingURL=delegate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../src/instructions/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,2BAA2B,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AAQxC,eAAO,MAAM,cAAc;8BACC,MAAM,EAAE;yBACb,IAAI,CAAC,MAAM;WACzB,MAAM,EAAE,EAAE;gBACL,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;EASrC,CAAC;AACF,eAAO,MAAM,gCAAgC,UAA2B,CAAC;AAGzE,UAAU,mBAAmB;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;CAC5B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE;IACR,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;IACtB,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC;IACjC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;IAC7B,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;IAClC,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;CAChC,EACD,IAAI,CAAC,EAAE,mBAAmB,EAC1B,SAAS,iBAAwB,+BA2DlC"}
1
+ {"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../src/instructions/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,2BAA2B,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AAQxC,eAAO,MAAM,cAAc;8BACC,MAAM,EAAE;yBACb,IAAI,CAAC,MAAM;WACzB,MAAM,EAAE,EAAE;gBACL,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;EASrC,CAAC;AACF,eAAO,MAAM,gCAAgC,UAA2B,CAAC;AAGzE,UAAU,mBAAmB;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;CACvB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE;IACR,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;IACtB,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC;IACjC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;IAC7B,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;IAClC,kBAAkB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;IACpC,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;CAC5B,EACD,IAAI,CAAC,EAAE,mBAAmB,EAC1B,SAAS,iBAAwB,+BAmElC"}
@@ -53,7 +53,6 @@ function createDelegateInstruction(accounts, args, programId = constants_1.DELEG
53
53
  args = args ?? {
54
54
  commit_frequency_ms: 4294967295,
55
55
  seeds: [],
56
- validator: undefined,
57
56
  };
58
57
  const keys = [
59
58
  { pubkey: accounts.payer, isWritable: false, isSigner: true },
@@ -79,12 +78,20 @@ function createDelegateInstruction(accounts, args, programId = constants_1.DELEG
79
78
  isWritable: false,
80
79
  isSigner: false,
81
80
  },
81
+ ...(accounts.validator
82
+ ? [
83
+ {
84
+ pubkey: accounts.validator,
85
+ isWritable: false,
86
+ isSigner: false,
87
+ },
88
+ ]
89
+ : []),
82
90
  ];
83
91
  const [data] = exports.delegateStruct.serialize({
84
92
  instructionDiscriminator: exports.delegateInstructionDiscriminator,
85
93
  commit_frequency_ms: args.commit_frequency_ms,
86
94
  seeds: args.seeds.map((seed) => seed.map(Number)),
87
- validator: args.validator ? args.validator.toBytes() : undefined,
88
95
  });
89
96
  return new web3.TransactionInstruction({
90
97
  programId,
@@ -1 +1 @@
1
- {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../src/instructions/delegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../src/instructions/delegate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magicblock-labs/ephemeral-rollups-sdk",
3
- "version": "0.3.4",
3
+ "version": "0.3.7",
4
4
  "author": "MagicBlock Labs",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -20,14 +20,13 @@
20
20
  "lint": "eslint -c .eslintrc.yml --ext .ts,.tsx src",
21
21
  "lint:fix": "eslint -c .eslintrc.yml --ext .ts,.tsx src --fix",
22
22
  "pretest": "tsc",
23
- "test": "jest --config ./jest.lib.config.cjs",
23
+ "test": "vitest run --reporter verbose",
24
24
  "prepare": "npm run build"
25
25
  },
26
26
  "files": [
27
27
  "lib"
28
28
  ],
29
29
  "devDependencies": {
30
- "@types/jest": "^29.5.12",
31
30
  "@typescript-eslint/eslint-plugin": "^6.21.0",
32
31
  "@typescript-eslint/parser": "^6.21.0",
33
32
  "eslint": "^8.55.0",
@@ -37,10 +36,9 @@
37
36
  "eslint-plugin-n": "^16.6.2",
38
37
  "eslint-plugin-prettier": "^5.2.1",
39
38
  "eslint-plugin-promise": "^6.2.0",
40
- "jest": "^29.7.0",
41
39
  "prettier": "^3.3.2",
42
40
  "rimraf": "^3.0.2",
43
- "ts-jest": "^29.1.1"
41
+ "vitest": "^3.2.4"
44
42
  },
45
43
  "dependencies": {
46
44
  "@metaplex-foundation/beet": "^0.7.2",
@@ -50,5 +48,6 @@
50
48
  "rpc-websockets": "^9.0.4",
51
49
  "typescript": "^5.3.0"
52
50
  },
51
+ "optionalDependencies": {},
53
52
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
54
53
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"magic-router.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/magic-router.test.ts"],"names":[],"mappings":""}
@@ -1,116 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const magic_router_js_1 = require("../magic-router.js");
4
- const web3_js_1 = require("@solana/web3.js");
5
- global.fetch = jest.fn();
6
- describe("getWritableAccounts", () => {
7
- const mockPublicKey = (address) => ({
8
- toBase58: () => address,
9
- toString: () => address,
10
- });
11
- it("deduplicates writable accounts", () => {
12
- const tx = {
13
- feePayer: mockPublicKey("fee-payer"),
14
- instructions: [
15
- {
16
- keys: [
17
- { pubkey: mockPublicKey("k1"), isWritable: true },
18
- { pubkey: mockPublicKey("k1"), isWritable: true },
19
- ],
20
- },
21
- ],
22
- };
23
- const result = (0, magic_router_js_1.getWritableAccounts)(tx);
24
- expect(result).toEqual(["fee-payer", "k1"]);
25
- });
26
- });
27
- describe("Connection prototype methods", () => {
28
- let connection;
29
- let tx;
30
- beforeEach(() => {
31
- connection = new magic_router_js_1.ConnectionMagicRouter("http://localhost");
32
- tx = new web3_js_1.Transaction();
33
- tx.serialize = jest.fn(() => Buffer.from("mock"));
34
- tx.sign = jest.fn();
35
- global.fetch.mockReset();
36
- });
37
- it("getClosestValidator returns identity", async () => {
38
- global.fetch.mockResolvedValueOnce({
39
- json: async () => ({ result: { identity: "validator-1" } }),
40
- });
41
- const result = await connection.getClosestValidator();
42
- expect(result).toEqual({ identity: "validator-1" });
43
- });
44
- it("getDelegationStatus works with string account", async () => {
45
- global.fetch.mockResolvedValueOnce({
46
- json: async () => ({ result: { isDelegated: true } }),
47
- });
48
- const result = await connection.getDelegationStatus("account1");
49
- expect(result).toEqual({ isDelegated: true });
50
- });
51
- it("getDelegationStatus works with PublicKey account", async () => {
52
- global.fetch.mockResolvedValueOnce({
53
- json: async () => ({ result: { isDelegated: false } }),
54
- });
55
- const pk = new web3_js_1.PublicKey("11111111111111111111111111111111");
56
- const result = await connection.getDelegationStatus(pk);
57
- expect(result).toEqual({ isDelegated: false });
58
- });
59
- it("getLatestBlockhashForTransaction returns blockhash", async () => {
60
- global.fetch.mockResolvedValueOnce({
61
- json: async () => ({
62
- result: { blockhash: "mock-blockhash", lastValidBlockHeight: 100 },
63
- }),
64
- });
65
- const result = await connection.getLatestBlockhashForTransaction(tx);
66
- expect(result).toEqual({
67
- blockhash: "mock-blockhash",
68
- lastValidBlockHeight: 100,
69
- });
70
- });
71
- it("prepareTransaction sets recentBlockhash", async () => {
72
- jest
73
- .spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "getLatestBlockhashForTransaction")
74
- .mockResolvedValue({ blockhash: "hb", lastValidBlockHeight: 100 });
75
- const result = await connection.prepareTransaction(tx);
76
- expect(result.recentBlockhash).toBe("hb");
77
- });
78
- it("sendTransaction signs and sends transaction", async () => {
79
- jest
80
- .spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "getLatestBlockhashForTransaction")
81
- .mockResolvedValue({ blockhash: "hb", lastValidBlockHeight: 100 });
82
- jest
83
- .spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "sendRawTransaction")
84
- .mockResolvedValue("sig123");
85
- const signers = [new web3_js_1.Keypair()];
86
- const sendTx = connection.sendTransaction.bind(connection);
87
- const signature = await sendTx(tx, signers);
88
- const signFn = tx.sign.bind(tx);
89
- const serializeFn = tx.serialize.bind(tx);
90
- expect(signFn(...signers)).toBeUndefined();
91
- expect(serializeFn()).toBeInstanceOf(Buffer);
92
- expect(signature).toBe("sig123");
93
- });
94
- it("sendAndConfirmTransaction calls sendTransaction and returns signature", async () => {
95
- jest
96
- .spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "sendTransaction")
97
- .mockResolvedValue("sig123");
98
- jest
99
- .spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "confirmTransaction")
100
- .mockResolvedValue({ value: { err: null } });
101
- const signature = await connection.sendAndConfirmTransaction(tx, [
102
- new web3_js_1.Keypair(),
103
- ]);
104
- expect(signature).toBe("sig123");
105
- });
106
- it("sendAndConfirmTransaction throws SendTransactionError if status has err", async () => {
107
- jest
108
- .spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "sendTransaction")
109
- .mockResolvedValue("sig123");
110
- jest
111
- .spyOn(magic_router_js_1.ConnectionMagicRouter.prototype, "confirmTransaction")
112
- .mockResolvedValue({ value: { err: { some: "error" } } });
113
- await expect(connection.sendAndConfirmTransaction(tx, [new web3_js_1.Keypair()])).rejects.toThrow(web3_js_1.SendTransactionError);
114
- });
115
- });
116
- //# sourceMappingURL=magic-router.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"magic-router.test.js","sourceRoot":"","sources":["../../src/__tests__/magic-router.test.ts"],"names":[],"mappings":"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"}