Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
d1bbb25
Add beforeEach to DescribeNode
rockbmb May 6, 2026
aeadc9f
Snapshot restore truncates storage layers
rockbmb May 6, 2026
61aca85
Fix network teardown
rockbmb May 6, 2026
4e44f5c
Share network across accounts suite
rockbmb May 6, 2026
65fa743
Share network across scheduler suite
rockbmb May 6, 2026
f025ef1
Share network across bounties suite
rockbmb May 6, 2026
fd20336
Share network across childBounties suite
rockbmb May 6, 2026
df8d211
Share network across vesting suite
rockbmb May 6, 2026
2781628
Share network across governance suite
rockbmb May 6, 2026
71c5001
Share network across multisig suite
rockbmb May 6, 2026
b8c3836
Share network across multisig.proxy suite
rockbmb May 6, 2026
6d0ce6f
Share network across nomination-pools suite
rockbmb May 6, 2026
8b4ec8f
Share network across staking suite
rockbmb May 6, 2026
06fb01e
Share network across proxy suite
rockbmb May 6, 2026
32ef84b
Share network across remoteProxy suite
rockbmb May 6, 2026
7f2ae4e
Share network across bounties suite
rockbmb May 7, 2026
393c804
Share network across childBounties suite
rockbmb May 7, 2026
2a167e6
Share network across governance suite
rockbmb May 7, 2026
5087c50
Share network across multisig suite
rockbmb May 7, 2026
8255615
Share network across multisig.proxy suite
rockbmb May 7, 2026
8f05aa6
Share network across preimage suite
rockbmb May 7, 2026
8f6b1af
Share network across proxy suite
rockbmb May 7, 2026
573b43b
Share network across remoteProxy suite
rockbmb May 7, 2026
66843e5
Share network across staking suite
rockbmb May 7, 2026
a38d134
Patch chopsticks-core to expose resetStorageLayers on Block
rockbmb May 7, 2026
c327727
Update yarn.lock for chopsticks-core patch
rockbmb May 7, 2026
685e2b6
Switch CI to forks pool with 5 workers
rockbmb May 7, 2026
5cfe4c7
Fix accounts suite teardown and await dev.setHead
rockbmb May 7, 2026
3638a95
Await setupBalances calls in preimage tests
rockbmb May 7, 2026
a0a2bd0
Bump block numbers
rockbmb May 7, 2026
4b0de52
Merge branch 'master' into improve-test-perf
rockbmb May 7, 2026
527f0fb
Fix lint errors after shared-client refactor
rockbmb May 7, 2026
2c3d370
Share network across people suite
rockbmb May 7, 2026
7492265
Share networks across treasury suite
rockbmb May 7, 2026
a733084
Share networks across collectives suite
rockbmb May 7, 2026
05b4770
Share network across configuration suite
rockbmb May 7, 2026
b592dd3
Use createNetworks with explicit teardown in upgrade suite
rockbmb May 7, 2026
2385a37
Share networks across system suite
rockbmb May 7, 2026
7954d33
Share network across recovery suite
rockbmb May 7, 2026
55ea4ff
Patch chopsticks-utils.sendTransaction to unsubscribe and swallow lat…
rockbmb May 7, 2026
3b0354f
Update Bifrost Kusama <-> KAH XCM snap
rockbmb May 8, 2026
6650355
Skip failing CoretimeK <-> KAH XCM test
rockbmb May 8, 2026
84cf890
Bump block numbers
rockbmb May 8, 2026
a6a9c6f
Skip failing KAH <-> PeopleKusama XCM tests
rockbmb May 8, 2026
4d8f8f3
Regenerate chopsticks patches from pet-perf-stack branch tip
rockbmb May 8, 2026
715447e
Use dryRunExtrinsicsAmortized for proxy call-filtering loop
rockbmb May 8, 2026
17377f8
Hoist accounts relay client to suite scope
rockbmb May 8, 2026
568d525
Hoist people relay client to suite scope
rockbmb May 8, 2026
5e760c1
Use more vitest forks in CI workflow
rockbmb May 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ jobs:
done

- name: Run ${{ matrix.network.name }} tests
run: yarn test:${{ matrix.network.name }} --pool=threads --maxWorkers=3 --retry=3
run: yarn test:${{ matrix.network.name }} --pool=forks --maxWorkers=8 --retry=3

- name: Cleanup Subway instances
if: always()
Expand Down

Large diffs are not rendered by default.

301 changes: 301 additions & 0 deletions .yarn/patches/@acala-network-chopsticks-db-npm-1.3.1-3e5ee4ba00.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,301 @@
diff --git a/dist/cjs/base-sql.d.ts b/dist/cjs/base-sql.d.ts
index 04c6083e33ca834e3e46599cc1b9f02ec6d2e08a..697b5010b7d311b89bfd87c2b732ca3bae16a095 100644
--- a/dist/cjs/base-sql.d.ts
+++ b/dist/cjs/base-sql.d.ts
@@ -13,4 +13,8 @@ export declare abstract class BaseSqlDatabase implements Database {
saveStorage(blockHash: HexString, key: HexString, value: HexString | null): Promise<void>;
saveStorageBatch(entries: KeyValueEntry[]): Promise<void>;
queryStorage(blockHash: HexString, key: HexString): Promise<KeyValueEntry | null>;
+ queryPagedKeys(blockHash: HexString, prefix: HexString): Promise<HexString[] | null>;
+ savePagedKeys(blockHash: HexString, prefix: HexString, keys: HexString[]): Promise<void>;
+ queryRpcCall(scope: string, method: string, params: string): Promise<string | null>;
+ saveRpcCall(scope: string, method: string, params: string, result: string): Promise<void>;
}
diff --git a/dist/cjs/base-sql.js b/dist/cjs/base-sql.js
index 5734ae19b072c0a878ae8aca70e1c7392075c579..f10d667006466c265564def304271733d0de6d3f 100644
--- a/dist/cjs/base-sql.js
+++ b/dist/cjs/base-sql.js
@@ -107,6 +107,51 @@ class BaseSqlDatabase {
}
});
}
+ async queryPagedKeys(blockHash, prefix) {
+ const db = await this.datasource;
+ const row = await db.getRepository(_entities.PagedKeys).findOne({
+ where: {
+ blockHash,
+ prefix
+ }
+ });
+ return row ? JSON.parse(row.keys) : null;
+ }
+ async savePagedKeys(blockHash, prefix, keys) {
+ const db = await this.datasource;
+ await db.getRepository(_entities.PagedKeys).upsert({
+ blockHash,
+ prefix,
+ keys: JSON.stringify(keys)
+ }, [
+ 'blockHash',
+ 'prefix'
+ ]);
+ }
+ async queryRpcCall(scope, method, params) {
+ const db = await this.datasource;
+ const row = await db.getRepository(_entities.RpcCall).findOne({
+ where: {
+ scope,
+ method,
+ params
+ }
+ });
+ return row?.result ?? null;
+ }
+ async saveRpcCall(scope, method, params, result) {
+ const db = await this.datasource;
+ await db.getRepository(_entities.RpcCall).upsert({
+ scope,
+ method,
+ params,
+ result
+ }, [
+ 'scope',
+ 'method',
+ 'params'
+ ]);
+ }
constructor(){
_define_property(this, "close", async ()=>{
const db = await this.datasource;
diff --git a/dist/cjs/db/entities.d.ts b/dist/cjs/db/entities.d.ts
index 879c444011b699b4a7bf4068c8874c2895209405..24cb0016d0535caf10a644591f6b3becd989dfdb 100644
--- a/dist/cjs/db/entities.d.ts
+++ b/dist/cjs/db/entities.d.ts
@@ -1,4 +1,17 @@
import type { BlockEntry, KeyValueEntry } from '@acala-network/chopsticks-core';
import { EntitySchema } from 'typeorm';
+export type PagedKeysEntry = {
+ blockHash: string;
+ prefix: string;
+ keys: string;
+};
+export type RpcCallEntry = {
+ scope: string;
+ method: string;
+ params: string;
+ result: string;
+};
export declare const KeyValuePair: EntitySchema<KeyValueEntry>;
export declare const BlockEntity: EntitySchema<BlockEntry>;
+export declare const PagedKeys: EntitySchema<PagedKeysEntry>;
+export declare const RpcCall: EntitySchema<RpcCallEntry>;
diff --git a/dist/cjs/db/entities.js b/dist/cjs/db/entities.js
index 5e19c84a85685cc01772a85c104d642ed50e4f8a..e03ba46a3abdb0e4b23196604537d0aebed5669a 100644
--- a/dist/cjs/db/entities.js
+++ b/dist/cjs/db/entities.js
@@ -14,6 +14,12 @@ _export(exports, {
},
get KeyValuePair () {
return KeyValuePair;
+ },
+ get PagedKeys () {
+ return PagedKeys;
+ },
+ get RpcCall () {
+ return RpcCall;
}
});
const _typeorm = require("typeorm");
@@ -66,3 +72,46 @@ const BlockEntity = new _typeorm.EntitySchema({
}
}
});
+const PagedKeys = new _typeorm.EntitySchema({
+ name: 'PagedKeys',
+ columns: {
+ blockHash: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ prefix: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ keys: {
+ type: 'text',
+ nullable: false
+ }
+ }
+});
+const RpcCall = new _typeorm.EntitySchema({
+ name: 'RpcCall',
+ columns: {
+ scope: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ method: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ params: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ result: {
+ type: 'text',
+ nullable: false
+ }
+ }
+});
diff --git a/dist/esm/base-sql.d.ts b/dist/esm/base-sql.d.ts
index 04c6083e33ca834e3e46599cc1b9f02ec6d2e08a..697b5010b7d311b89bfd87c2b732ca3bae16a095 100644
--- a/dist/esm/base-sql.d.ts
+++ b/dist/esm/base-sql.d.ts
@@ -13,4 +13,8 @@ export declare abstract class BaseSqlDatabase implements Database {
saveStorage(blockHash: HexString, key: HexString, value: HexString | null): Promise<void>;
saveStorageBatch(entries: KeyValueEntry[]): Promise<void>;
queryStorage(blockHash: HexString, key: HexString): Promise<KeyValueEntry | null>;
+ queryPagedKeys(blockHash: HexString, prefix: HexString): Promise<HexString[] | null>;
+ savePagedKeys(blockHash: HexString, prefix: HexString, keys: HexString[]): Promise<void>;
+ queryRpcCall(scope: string, method: string, params: string): Promise<string | null>;
+ saveRpcCall(scope: string, method: string, params: string, result: string): Promise<void>;
}
diff --git a/dist/esm/base-sql.js b/dist/esm/base-sql.js
index 539cb415345dc9ac4eb0d32eb9e4bbda6e54df75..08739df5d4f3676e0c4d99c3e5ddd415caee854a 100644
--- a/dist/esm/base-sql.js
+++ b/dist/esm/base-sql.js
@@ -1,4 +1,4 @@
-import { BlockEntity, KeyValuePair } from './db/entities.js';
+import { BlockEntity, KeyValuePair, PagedKeys, RpcCall } from './db/entities.js';
export class BaseSqlDatabase {
close = async ()=>{
const db = await this.datasource;
@@ -88,4 +88,49 @@ export class BaseSqlDatabase {
}
});
}
+ async queryPagedKeys(blockHash, prefix) {
+ const db = await this.datasource;
+ const row = await db.getRepository(PagedKeys).findOne({
+ where: {
+ blockHash,
+ prefix
+ }
+ });
+ return row ? JSON.parse(row.keys) : null;
+ }
+ async savePagedKeys(blockHash, prefix, keys) {
+ const db = await this.datasource;
+ await db.getRepository(PagedKeys).upsert({
+ blockHash,
+ prefix,
+ keys: JSON.stringify(keys)
+ }, [
+ 'blockHash',
+ 'prefix'
+ ]);
+ }
+ async queryRpcCall(scope, method, params) {
+ const db = await this.datasource;
+ const row = await db.getRepository(RpcCall).findOne({
+ where: {
+ scope,
+ method,
+ params
+ }
+ });
+ return row?.result ?? null;
+ }
+ async saveRpcCall(scope, method, params, result) {
+ const db = await this.datasource;
+ await db.getRepository(RpcCall).upsert({
+ scope,
+ method,
+ params,
+ result
+ }, [
+ 'scope',
+ 'method',
+ 'params'
+ ]);
+ }
}
diff --git a/dist/esm/db/entities.d.ts b/dist/esm/db/entities.d.ts
index 879c444011b699b4a7bf4068c8874c2895209405..24cb0016d0535caf10a644591f6b3becd989dfdb 100644
--- a/dist/esm/db/entities.d.ts
+++ b/dist/esm/db/entities.d.ts
@@ -1,4 +1,17 @@
import type { BlockEntry, KeyValueEntry } from '@acala-network/chopsticks-core';
import { EntitySchema } from 'typeorm';
+export type PagedKeysEntry = {
+ blockHash: string;
+ prefix: string;
+ keys: string;
+};
+export type RpcCallEntry = {
+ scope: string;
+ method: string;
+ params: string;
+ result: string;
+};
export declare const KeyValuePair: EntitySchema<KeyValueEntry>;
export declare const BlockEntity: EntitySchema<BlockEntry>;
+export declare const PagedKeys: EntitySchema<PagedKeysEntry>;
+export declare const RpcCall: EntitySchema<RpcCallEntry>;
diff --git a/dist/esm/db/entities.js b/dist/esm/db/entities.js
index b9acbe3aba398e7ddd034efeca4e1a081b478a83..bc92dd457944aed10638dd3d66faa9cb8bd4b031 100644
--- a/dist/esm/db/entities.js
+++ b/dist/esm/db/entities.js
@@ -48,3 +48,46 @@ export const BlockEntity = new EntitySchema({
}
}
});
+export const PagedKeys = new EntitySchema({
+ name: 'PagedKeys',
+ columns: {
+ blockHash: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ prefix: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ keys: {
+ type: 'text',
+ nullable: false
+ }
+ }
+});
+export const RpcCall = new EntitySchema({
+ name: 'RpcCall',
+ columns: {
+ scope: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ method: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ params: {
+ primary: true,
+ type: 'varchar',
+ nullable: false
+ },
+ result: {
+ type: 'text',
+ nullable: false
+ }
+ }
+});
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
diff --git a/dist/cjs/index.js b/dist/cjs/index.js
index 9cf516b64e3c90359229c86745cc27cfc823756f..68a4dfb2ef3443eaf662482bd64d66fbf0f904c2 100644
--- a/dist/cjs/index.js
+++ b/dist/cjs/index.js
@@ -178,15 +178,21 @@ function defer() {
const sendTransaction = async (tx)=>{
const signed = await tx;
const deferred = defer();
- await signed.send((status)=>{
+ // Swallow rejections that arrive after the deferred has already settled (the
+ // subscription continues to fire callbacks after isInBlock/isFinalized).
+ deferred.promise.catch(()=>{});
+ let unsub;
+ unsub = await signed.send((status)=>{
logger.debug({
status: status.status.toHuman()
}, 'Transaction status');
if (status.isInBlock || status.isFinalized) {
deferred.resolve(status.events);
+ if (unsub) unsub();
}
if (status.isError) {
deferred.reject(status.status);
+ if (unsub) unsub();
}
});
return {
diff --git a/dist/esm/index.js b/dist/esm/index.js
index 041cd24640792496bcc04c876d4471589e5b91c5..6509ac6f609c0abcef9996b563181930ae933413 100644
--- a/dist/esm/index.js
+++ b/dist/esm/index.js
@@ -152,15 +152,21 @@ export * from './signFake.js';
*/ export const sendTransaction = async (tx)=>{
const signed = await tx;
const deferred = defer();
- await signed.send((status)=>{
+ // Swallow rejections that arrive after the deferred has already settled (the
+ // subscription continues to fire callbacks after isInBlock/isFinalized).
+ deferred.promise.catch(()=>{});
+ let unsub;
+ unsub = await signed.send((status)=>{
logger.debug({
status: status.status.toHuman()
}, 'Transaction status');
if (status.isInBlock || status.isFinalized) {
deferred.resolve(status.events);
+ if (unsub) unsub();
}
if (status.isError) {
deferred.reject(status.status);
+ if (unsub) unsub();
}
});
return {
26 changes: 26 additions & 0 deletions .yarn/patches/@polkadot-types-npm-16.5.6-6fe2703ed8.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
diff --git a/cjs/interfaces/xcm/definitions.js b/cjs/interfaces/xcm/definitions.js
index b3b00ebb14cc89292378f1bb2ec329bf14cb90bf..b43d3e0e2a72a5bae4db35be517466de92f81e02 100644
--- a/cjs/interfaces/xcm/definitions.js
+++ b/cjs/interfaces/xcm/definitions.js
@@ -15,7 +15,7 @@ const xcm = {
}
},
XcmpMessageFormat: {
- _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals']
+ _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals', 'ConcatenatedOpaqueVersionedXcm']
},
XcmAssetId: {
_enum: {
diff --git a/interfaces/xcm/definitions.js b/interfaces/xcm/definitions.js
index 2753b56a2b27577b63cca658d37fd6b4d1482f53..32a481113255036019b41f2f76445155eb9970bd 100644
--- a/interfaces/xcm/definitions.js
+++ b/interfaces/xcm/definitions.js
@@ -13,7 +13,7 @@ const xcm = {
}
},
XcmpMessageFormat: {
- _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals']
+ _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals', 'ConcatenatedOpaqueVersionedXcm']
},
XcmAssetId: {
_enum: {
Loading