@acala-network/chopsticks-core 0.15.0 → 0.16.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.
@@ -80,7 +80,7 @@ class SetValidationData {
80
80
  return [];
81
81
  }
82
82
  const extrinsic = await getValidationData(parent);
83
- const newEntries = [];
83
+ let newEntries = [];
84
84
  const downwardMessages = [];
85
85
  const horizontalMessages = {};
86
86
  const paraId = await (0, _index.getParaId)(parent.chain);
@@ -229,6 +229,18 @@ class SetValidationData {
229
229
  null
230
230
  ]);
231
231
  }
232
+ // Apply relay chain state overrides
233
+ if (params.relayChainStateOverrides) {
234
+ for (const [key, value] of params.relayChainStateOverrides){
235
+ // Remove any entry that matches the key being overridden
236
+ newEntries = newEntries.filter(([k, _])=>k != key);
237
+ // Push override
238
+ newEntries.push([
239
+ key,
240
+ value
241
+ ]);
242
+ }
243
+ }
232
244
  const { trieRootHash, nodes } = await (0, _index1.createProof)(extrinsic.relayChainState.trieNodes, newEntries);
233
245
  const newData = {
234
246
  ...extrinsic,
@@ -25,6 +25,7 @@ export interface BuildBlockParams {
25
25
  horizontalMessages: Record<number, HorizontalMessage[]>;
26
26
  transactions: HexString[];
27
27
  unsafeBlockHeight?: number;
28
+ relayChainStateOverrides?: [HexString, HexString | null][];
28
29
  }
29
30
  export declare class TxPool {
30
31
  #private;
@@ -193,6 +193,7 @@ class TxPool {
193
193
  ..._class_private_field_get(this, _hrmp)
194
194
  };
195
195
  const unsafeBlockHeight = params?.unsafeBlockHeight;
196
+ const relayChainStateOverrides = params?.relayChainStateOverrides;
196
197
  if (!params?.upwardMessages) {
197
198
  for (const id of Object.keys(_class_private_field_get(this, _ump))){
198
199
  delete _class_private_field_get(this, _ump)[id];
@@ -209,7 +210,8 @@ class TxPool {
209
210
  upwardMessages,
210
211
  downwardMessages,
211
212
  horizontalMessages,
212
- unsafeBlockHeight
213
+ unsafeBlockHeight,
214
+ relayChainStateOverrides
213
215
  });
214
216
  // with the latest message queue, messages could be processed in the upcoming block
215
217
  if (!_class_private_field_get(this, _chain).processQueuedMessages) return;
@@ -26,6 +26,7 @@ declare const schema: z.ZodObject<{
26
26
  }>, "many">>>;
27
27
  transactions: z.ZodOptional<z.ZodArray<z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>, "many">>;
28
28
  unsafeBlockHeight: z.ZodOptional<z.ZodNumber>;
29
+ relayChainStateOverrides: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>, z.ZodUnion<[z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>, z.ZodNull]>], null>, "many">>;
29
30
  }, "strip", z.ZodTypeAny, {
30
31
  transactions?: `0x${string}`[] | undefined;
31
32
  unsafeBlockHeight?: number | undefined;
@@ -38,6 +39,7 @@ declare const schema: z.ZodObject<{
38
39
  data: `0x${string}`;
39
40
  sentAt: number;
40
41
  }[]> | undefined;
42
+ relayChainStateOverrides?: [`0x${string}`, `0x${string}` | null][] | undefined;
41
43
  count?: number | undefined;
42
44
  to?: number | undefined;
43
45
  }, {
@@ -52,6 +54,7 @@ declare const schema: z.ZodObject<{
52
54
  data: `0x${string}`;
53
55
  sentAt: number;
54
56
  }[]> | undefined;
57
+ relayChainStateOverrides?: [`0x${string}`, `0x${string}` | null][] | undefined;
55
58
  count?: number | undefined;
56
59
  to?: number | undefined;
57
60
  }>;
@@ -85,6 +88,10 @@ export interface NewBlockParams {
85
88
  * Build block using a specific block height (unsafe)
86
89
  */
87
90
  unsafeBlockHeight: Params['unsafeBlockHeight'];
91
+ /**
92
+ * Build block using a custom relay chain state
93
+ */
94
+ relayChainStateOverrides: Params['relayChainStateOverrides'];
88
95
  }
89
96
  /**
90
97
  * Build new blocks.
@@ -27,10 +27,17 @@ const schema = _zod.z.object({
27
27
  data: _shared.zHex
28
28
  })).min(1)).optional(),
29
29
  transactions: _zod.z.array(_shared.zHex).min(1).optional(),
30
- unsafeBlockHeight: _zod.z.number().optional()
30
+ unsafeBlockHeight: _zod.z.number().optional(),
31
+ relayChainStateOverrides: _zod.z.array(_zod.z.tuple([
32
+ _shared.zHex,
33
+ _zod.z.union([
34
+ _shared.zHex,
35
+ _zod.z.null()
36
+ ])
37
+ ])).optional()
31
38
  });
32
39
  const dev_newBlock = async (context, [params])=>{
33
- const { count, to, hrmp, ump, dmp, transactions, unsafeBlockHeight } = schema.parse(params || {});
40
+ const { count, to, hrmp, ump, dmp, transactions, unsafeBlockHeight, relayChainStateOverrides } = schema.parse(params || {});
34
41
  const now = context.chain.head.number;
35
42
  const diff = to ? to - now : count;
36
43
  const finalCount = diff !== undefined ? Math.max(diff, 1) : 1;
@@ -44,7 +51,8 @@ const dev_newBlock = async (context, [params])=>{
44
51
  horizontalMessages: hrmp,
45
52
  upwardMessages: ump,
46
53
  downwardMessages: dmp,
47
- unsafeBlockHeight: i === 0 ? unsafeBlockHeight : undefined
54
+ unsafeBlockHeight: i === 0 ? unsafeBlockHeight : undefined,
55
+ relayChainStateOverrides: relayChainStateOverrides
48
56
  }).catch((error)=>{
49
57
  throw new _shared.ResponseError(1, error.toString());
50
58
  });
@@ -11,6 +11,7 @@ export declare const WELL_KNOWN_KEYS: {
11
11
  };
12
12
  export declare const dmqMqcHead: (paraId: u32) => `0x${string}`;
13
13
  export declare const upgradeGoAheadSignal: (paraId: u32) => `0x${string}`;
14
+ export declare const upgradeRestrictionSignal: (paraId: u32) => `0x${string}`;
14
15
  export declare const hrmpIngressChannelIndex: (paraId: u32) => `0x${string}`;
15
16
  export declare const hrmpEgressChannelIndex: (paraId: u32) => `0x${string}`;
16
17
  export declare const hrmpChannels: (channelId: HrmpChannelId) => `0x${string}`;
@@ -29,6 +29,9 @@ _export(exports, {
29
29
  },
30
30
  upgradeGoAheadSignal: function() {
31
31
  return upgradeGoAheadSignal;
32
+ },
33
+ upgradeRestrictionSignal: function() {
34
+ return upgradeRestrictionSignal;
32
35
  }
33
36
  });
34
37
  const _util = require("@polkadot/util");
@@ -52,6 +55,10 @@ const upgradeGoAheadSignal = (paraId)=>{
52
55
  const prefix = '0xcd710b30bd2eab0352ddcc26417aa1949e94c040f5e73d9b7addd6cb603d15d3';
53
56
  return hash(prefix, paraId.toU8a());
54
57
  };
58
+ const upgradeRestrictionSignal = (paraId)=>{
59
+ const prefix = '0xcd710b30bd2eab0352ddcc26417aa194f27bbb460270642b5bcaf032ea04d56a';
60
+ return hash(prefix, paraId.toU8a());
61
+ };
55
62
  const hrmpIngressChannelIndex = (paraId)=>{
56
63
  const prefix = '0x6a0da05ca59913bc38a8630590f2627c1d3719f5b0b12c7105c073c507445948';
57
64
  return hash(prefix, paraId.toU8a());
@@ -65,7 +65,7 @@ export class SetValidationData {
65
65
  return [];
66
66
  }
67
67
  const extrinsic = await getValidationData(parent);
68
- const newEntries = [];
68
+ let newEntries = [];
69
69
  const downwardMessages = [];
70
70
  const horizontalMessages = {};
71
71
  const paraId = await getParaId(parent.chain);
@@ -214,6 +214,18 @@ export class SetValidationData {
214
214
  null
215
215
  ]);
216
216
  }
217
+ // Apply relay chain state overrides
218
+ if (params.relayChainStateOverrides) {
219
+ for (const [key, value] of params.relayChainStateOverrides){
220
+ // Remove any entry that matches the key being overridden
221
+ newEntries = newEntries.filter(([k, _])=>k != key);
222
+ // Push override
223
+ newEntries.push([
224
+ key,
225
+ value
226
+ ]);
227
+ }
228
+ }
217
229
  const { trieRootHash, nodes } = await createProof(extrinsic.relayChainState.trieNodes, newEntries);
218
230
  const newData = {
219
231
  ...extrinsic,
@@ -25,6 +25,7 @@ export interface BuildBlockParams {
25
25
  horizontalMessages: Record<number, HorizontalMessage[]>;
26
26
  transactions: HexString[];
27
27
  unsafeBlockHeight?: number;
28
+ relayChainStateOverrides?: [HexString, HexString | null][];
28
29
  }
29
30
  export declare class TxPool {
30
31
  #private;
@@ -138,6 +138,7 @@ export class TxPool {
138
138
  ...this.#hrmp
139
139
  };
140
140
  const unsafeBlockHeight = params?.unsafeBlockHeight;
141
+ const relayChainStateOverrides = params?.relayChainStateOverrides;
141
142
  if (!params?.upwardMessages) {
142
143
  for (const id of Object.keys(this.#ump)){
143
144
  delete this.#ump[id];
@@ -154,7 +155,8 @@ export class TxPool {
154
155
  upwardMessages,
155
156
  downwardMessages,
156
157
  horizontalMessages,
157
- unsafeBlockHeight
158
+ unsafeBlockHeight,
159
+ relayChainStateOverrides
158
160
  });
159
161
  // with the latest message queue, messages could be processed in the upcoming block
160
162
  if (!this.#chain.processQueuedMessages) return;
@@ -26,6 +26,7 @@ declare const schema: z.ZodObject<{
26
26
  }>, "many">>>;
27
27
  transactions: z.ZodOptional<z.ZodArray<z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>, "many">>;
28
28
  unsafeBlockHeight: z.ZodOptional<z.ZodNumber>;
29
+ relayChainStateOverrides: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>, z.ZodUnion<[z.ZodType<`0x${string}`, z.ZodTypeDef, `0x${string}`>, z.ZodNull]>], null>, "many">>;
29
30
  }, "strip", z.ZodTypeAny, {
30
31
  transactions?: `0x${string}`[] | undefined;
31
32
  unsafeBlockHeight?: number | undefined;
@@ -38,6 +39,7 @@ declare const schema: z.ZodObject<{
38
39
  data: `0x${string}`;
39
40
  sentAt: number;
40
41
  }[]> | undefined;
42
+ relayChainStateOverrides?: [`0x${string}`, `0x${string}` | null][] | undefined;
41
43
  count?: number | undefined;
42
44
  to?: number | undefined;
43
45
  }, {
@@ -52,6 +54,7 @@ declare const schema: z.ZodObject<{
52
54
  data: `0x${string}`;
53
55
  sentAt: number;
54
56
  }[]> | undefined;
57
+ relayChainStateOverrides?: [`0x${string}`, `0x${string}` | null][] | undefined;
55
58
  count?: number | undefined;
56
59
  to?: number | undefined;
57
60
  }>;
@@ -85,6 +88,10 @@ export interface NewBlockParams {
85
88
  * Build block using a specific block height (unsafe)
86
89
  */
87
90
  unsafeBlockHeight: Params['unsafeBlockHeight'];
91
+ /**
92
+ * Build block using a custom relay chain state
93
+ */
94
+ relayChainStateOverrides: Params['relayChainStateOverrides'];
88
95
  }
89
96
  /**
90
97
  * Build new blocks.
@@ -17,7 +17,14 @@ const schema = z.object({
17
17
  data: zHex
18
18
  })).min(1)).optional(),
19
19
  transactions: z.array(zHex).min(1).optional(),
20
- unsafeBlockHeight: z.number().optional()
20
+ unsafeBlockHeight: z.number().optional(),
21
+ relayChainStateOverrides: z.array(z.tuple([
22
+ zHex,
23
+ z.union([
24
+ zHex,
25
+ z.null()
26
+ ])
27
+ ])).optional()
21
28
  });
22
29
  /**
23
30
  * Build new blocks.
@@ -57,7 +64,7 @@ const schema = z.object({
57
64
  * await ws.send('dev_newBlock', [{ count: 2, unsafeBlockHeight: 100000001 }])
58
65
  * ```
59
66
  */ export const dev_newBlock = async (context, [params])=>{
60
- const { count, to, hrmp, ump, dmp, transactions, unsafeBlockHeight } = schema.parse(params || {});
67
+ const { count, to, hrmp, ump, dmp, transactions, unsafeBlockHeight, relayChainStateOverrides } = schema.parse(params || {});
61
68
  const now = context.chain.head.number;
62
69
  const diff = to ? to - now : count;
63
70
  const finalCount = diff !== undefined ? Math.max(diff, 1) : 1;
@@ -71,7 +78,8 @@ const schema = z.object({
71
78
  horizontalMessages: hrmp,
72
79
  upwardMessages: ump,
73
80
  downwardMessages: dmp,
74
- unsafeBlockHeight: i === 0 ? unsafeBlockHeight : undefined
81
+ unsafeBlockHeight: i === 0 ? unsafeBlockHeight : undefined,
82
+ relayChainStateOverrides: relayChainStateOverrides
75
83
  }).catch((error)=>{
76
84
  throw new ResponseError(1, error.toString());
77
85
  });
@@ -11,6 +11,7 @@ export declare const WELL_KNOWN_KEYS: {
11
11
  };
12
12
  export declare const dmqMqcHead: (paraId: u32) => `0x${string}`;
13
13
  export declare const upgradeGoAheadSignal: (paraId: u32) => `0x${string}`;
14
+ export declare const upgradeRestrictionSignal: (paraId: u32) => `0x${string}`;
14
15
  export declare const hrmpIngressChannelIndex: (paraId: u32) => `0x${string}`;
15
16
  export declare const hrmpEgressChannelIndex: (paraId: u32) => `0x${string}`;
16
17
  export declare const hrmpChannels: (channelId: HrmpChannelId) => `0x${string}`;
@@ -19,6 +19,10 @@ export const upgradeGoAheadSignal = (paraId)=>{
19
19
  const prefix = '0xcd710b30bd2eab0352ddcc26417aa1949e94c040f5e73d9b7addd6cb603d15d3';
20
20
  return hash(prefix, paraId.toU8a());
21
21
  };
22
+ export const upgradeRestrictionSignal = (paraId)=>{
23
+ const prefix = '0xcd710b30bd2eab0352ddcc26417aa194f27bbb460270642b5bcaf032ea04d56a';
24
+ return hash(prefix, paraId.toU8a());
25
+ };
22
26
  export const hrmpIngressChannelIndex = (paraId)=>{
23
27
  const prefix = '0x6a0da05ca59913bc38a8630590f2627c1d3719f5b0b12c7105c073c507445948';
24
28
  return hash(prefix, paraId.toU8a());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acala-network/chopsticks-core",
3
- "version": "0.15.0",
3
+ "version": "0.16.1",
4
4
  "author": "Acala Developers <hello@acala.network>",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -11,7 +11,7 @@
11
11
  "depcheck": "npx depcheck"
12
12
  },
13
13
  "dependencies": {
14
- "@acala-network/chopsticks-executor": "0.15.0",
14
+ "@acala-network/chopsticks-executor": "0.16.1",
15
15
  "@polkadot/rpc-provider": "^12.3.1",
16
16
  "@polkadot/types": "^12.3.1",
17
17
  "@polkadot/types-codec": "^12.3.1",