Repository: solana-labs/solana-program-library
Pull request #6613 (2024-04-22 15:33:28)

Account Compression SDK: Add back linting
#### Problem
The SPL Account Compression SDK has long been unchecked by `prettier` or
`eslint` rules. This means changes to the SDK are never checked by CI for
formatting or linting violations.

Additionally, as we migrate the workspace to use ESLint 9.0, it makes things 
difficult to test.

#### Summary of Changes
Lint `--fix` everything in the Account Compression SDK, and enable linting in 
CI!


Patch:
diff --git a/account-compression/sdk/src/constants/index.ts b/account-compression/sdk/src/constants/index.ts
index d7e7875e8..c5f70de21 100644
--- a/account-compression/sdk/src/constants/index.ts
+++ b/account-compression/sdk/src/constants/index.ts
@@ -9,8 +9,8 @@ export const SPL_NOOP_PROGRAM_ID = new PublicKey(SPL_NOOP_ADDRESS);
  * creating a new {@link ConcurrentMerkleTreeAccount}.
  */
 export type DepthSizePair = {
-    maxDepth: number;
     maxBufferSize: number;
+    maxDepth: number;
 };
 
 const allPairs: number[][] = [
@@ -61,37 +61,37 @@ export const ALL_DEPTH_SIZE_PAIRS: ValidDepthSizePair[] = allPairs.map(pair => {
 });
 
 export type ValidDepthSizePair =
-    | { maxDepth: 3; maxBufferSize: 8 }
-    | { maxDepth: 5; maxBufferSize: 8 }
-    | { maxDepth: 6; maxBufferSize: 16 }
-    | { maxDepth: 7; maxBufferSize: 16 }
-    | { maxDepth: 8; maxBufferSize: 16 }
-    | { maxDepth: 9; maxBufferSize: 16 }
-    | { maxDepth: 10; maxBufferSize: 32 }
-    | { maxDepth: 11; maxBufferSize: 32 }
-    | { maxDepth: 12; maxBufferSize: 32 }
-    | { maxDepth: 13; maxBufferSize: 32 }
-    | { maxDepth: 14; maxBufferSize: 64 }
-    | { maxDepth: 14; maxBufferSize: 256 }
-    | { maxDepth: 14; maxBufferSize: 1024 }
-    | { maxDepth: 14; maxBufferSize: 2048 }
-    | { maxDepth: 15; maxBufferSize: 64 }
-    | { maxDepth: 16; maxBufferSize: 64 }
-    | { maxDepth: 17; maxBufferSize: 64 }
-    | { maxDepth: 18; maxBufferSize: 64 }
-    | { maxDepth: 19; maxBufferSize: 64 }
-    | { maxDepth: 20; maxBufferSize: 64 }
-    | { maxDepth: 20; maxBufferSize: 256 }
-    | { maxDepth: 20; maxBufferSize: 1024 }
-    | { maxDepth: 20; maxBufferSize: 2048 }
-    | { maxDepth: 24; maxBufferSize: 64 }
-    | { maxDepth: 24; maxBufferSize: 256 }
-    | { maxDepth: 24; maxBufferSize: 512 }
-    | { maxDepth: 24; maxBufferSize: 1024 }
-    | { maxDepth: 24; maxBufferSize: 2048 }
-    | { maxDepth: 26; maxBufferSize: 512 }
-    | { maxDepth: 26; maxBufferSize: 1024 }
-    | { maxDepth: 26; maxBufferSize: 2048 }
-    | { maxDepth: 30; maxBufferSize: 512 }
-    | { maxDepth: 30; maxBufferSize: 1024 }
-    | { maxDepth: 30; maxBufferSize: 2048 };
+    | { maxBufferSize: 8; maxDepth: 3 }
+    | { maxBufferSize: 8; maxDepth: 5 }
+    | { maxBufferSize: 16; maxDepth: 6 }
+    | { maxBufferSize: 16; maxDepth: 7 }
+    | { maxBufferSize: 16; maxDepth: 8 }
+    | { maxBufferSize: 16; maxDepth: 9 }
+    | { maxBufferSize: 32; maxDepth: 10 }
+    | { maxBufferSize: 32; maxDepth: 11 }
+    | { maxBufferSize: 32; maxDepth: 12 }
+    | { maxBufferSize: 32; maxDepth: 13 }
+    | { maxBufferSize: 64; maxDepth: 14 }
+    | { maxBufferSize: 64; maxDepth: 15 }
+    | { maxBufferSize: 64; maxDepth: 16 }
+    | { maxBufferSize: 64; maxDepth: 17 }
+    | { maxBufferSize: 64; maxDepth: 18 }
+    | { maxBufferSize: 64; maxDepth: 19 }
+    | { maxBufferSize: 64; maxDepth: 20 }
+    | { maxBufferSize: 64; maxDepth: 24 }
+    | { maxBufferSize: 256; maxDepth: 14 }
+    | { maxBufferSize: 256; maxDepth: 20 }
+    | { maxBufferSize: 256; maxDepth: 24 }
+    | { maxBufferSize: 512; maxDepth: 24 }
+    | { maxBufferSize: 512; maxDepth: 26 }
+    | { maxBufferSize: 512; maxDepth: 30 }
+    | { maxBufferSize: 1024; maxDepth: 14 }
+    | { maxBufferSize: 1024; maxDepth: 20 }
+    | { maxBufferSize: 1024; maxDepth: 24 }
+    | { maxBufferSize: 1024; maxDepth: 26 }
+    | { maxBufferSize: 1024; maxDepth: 30 }
+    | { maxBufferSize: 2048; maxDepth: 14 }
+    | { maxBufferSize: 2048; maxDepth: 20 }
+    | { maxBufferSize: 2048; maxDepth: 24 }
+    | { maxBufferSize: 2048; maxDepth: 26 }
+    | { maxBufferSize: 2048; maxDepth: 30 };
diff --git a/account-compression/sdk/src/generated/instructions/append.ts b/account-compression/sdk/src/generated/instructions/append.ts
index 902dbe58a..ed98ac950 100644
--- a/account-compression/sdk/src/generated/instructions/append.ts
+++ b/account-compression/sdk/src/generated/instructions/append.ts
@@ -43,10 +43,10 @@ export const appendStruct = new beet.BeetArgsStruct<
  * @category generated
  */
 export type AppendInstructionAccounts = {
-    merkleTree: web3.PublicKey;
+    anchorRemainingAccounts?: web3.AccountMeta[];
     authority: web3.PublicKey;
+    merkleTree: web3.PublicKey;
     noop: web3.PublicKey;
-    anchorRemainingAccounts?: web3.AccountMeta[];
 };
 
 export const appendInstructionDiscriminator = [149, 120, 18, 222, 236, 225, 88, 203];
diff --git a/account-compression/sdk/src/generated/instructions/closeEmptyTree.ts b/account-compression/sdk/src/generated/instructions/closeEmptyTree.ts
index f2e446f34..9de760f51 100644
--- a/account-compression/sdk/src/generated/instructions/closeEmptyTree.ts
+++ b/account-compression/sdk/src/generated/instructions/closeEmptyTree.ts
@@ -27,10 +27,10 @@ export const closeEmptyTreeStruct = new beet.BeetArgsStruct<{
  * @category generated
  */
 export type CloseEmptyTreeInstructionAccounts = {
-    merkleTree: web3.PublicKey;
+    anchorRemainingAccounts?: web3.AccountMeta[];
     authority: web3.PublicKey;
+    merkleTree: web3.PublicKey;
     recipient: web3.PublicKey;
-    anchorRemainingAccounts?: web3.AccountMeta[];
 };
 
 export const closeEmptyTreeInstructionDiscriminator = [50, 14, 219, 107, 78, 103, 16, 103];
diff --git a/account-compression/sdk/src/generated/instructions/initEmptyMerkleTree.ts b/account-compression/sdk/src/generated/instructions/initEmptyMerkleTree.ts
index c8119f169..8d745acf7 100644
--- a/account-compression/sdk/src/generated/instructions/initEmptyMerkleTree.ts
+++ b/account-compression/sdk/src/generated/instructions/initEmptyMerkleTree.ts
@@ -14,8 +14,8 @@ import * as web3 from '@solana/web3.js';
  * @category generated
  */
 export type InitEmptyMerkleTreeInstructionArgs = {
-    maxDepth: number;
     maxBufferSize: number;
+    maxDepth: number;
 };
 /**
  * @category Instructions
@@ -45,10 +45,10 @@ export const initEmptyMerkleTreeStruct = new beet.BeetArgsStruct<
  * @category generated
  */
 export type InitEmptyMerkleTreeInstructionAccounts = {
-    merkleTree: web3.PublicKey;
+    anchorRemainingAccounts?: web3.AccountMeta[];
     authority: web3.PublicKey;
+    merkleTree: web3.PublicKey;
     noop: web3.PublicKey;
-    anchorRemainingAccounts?: web3.AccountMeta[];
 };
 
 export const initEmptyMerkleTreeInstructionDiscriminator = [191, 11, 119, 7, 180, 107, 220, 110];
diff --git a/account-compression/sdk/src/generated/instructions/insertOrAppend.ts b/account-compression/sdk/src/generated/instructions/insertOrAppend.ts
index dcbf7825b..ae00b3285 100644
--- a/account-compression/sdk/src/generated/instructions/insertOrAppend.ts
+++ b/account-compression/sdk/src/generated/instructions/insertOrAppend.ts
@@ -14,9 +14,9 @@ import * as web3 from '@solana/web3.js';
  * @category generated
  */
 export type InsertOrAppendInstructionArgs = {
-    root: number[] /* size: 32 */;
-    leaf: number[] /* size: 32 */;
     index: number;
+    leaf: number[] /* size: 32 */;
+    root: number[] /* size: 32 */;
 };
 /**
  * @category Instructions
@@ -47,10 +47,10 @@ export const insertOrAppendStruct = new beet.BeetArgsStruct<
  * @category generated
  */
 export type InsertOrAppendInstructionAccounts = {
-    merkleTree: web3.PublicKey;
+    anchorRemainingAccounts?: web3.AccountMeta[];
     authority: web3.PublicKey;
+    merkleTree: web3.PublicKey;
     noop: web3.PublicKey;
-    anchorRemainingAccounts?: web3.AccountMeta[];
 };
 
 export const insertOrAppendInstructionDiscriminator = [6, 42, 50, 190, 51, 109, 178, 168];
diff --git a/account-compression/sdk/src/generated/instructions/replaceLeaf.ts b/account-compression/sdk/src/generated/instructions/replaceLeaf.ts
index 3652f9b52..57d7ebad1 100644
--- a/account-compression/sdk/src/generated/instructions/replaceLeaf.ts
+++ b/account-compression/sdk/src/generated/instructions/replaceLeaf.ts
@@ -14,10 +14,10 @@ import * as web3 from '@solana/web3.js';
  * @category generated
  */
 export type ReplaceLeafInstructionArgs = {
-    root: number[] /* size: 32 */;
-    previousLeaf: number[] /* size: 32 */;
-    newLeaf: number[] /* size: 32 */;
     index: number;
+    newLeaf: number[] /* size: 32 */;
+    previousLeaf: number[] /* size: 32 */;
+    root: number[] /* size: 32 */;
 };
 /**
  * @category Instructions
@@ -49,10 +49,10 @@ export const replaceLeafStruct = new beet.BeetArgsStruct<
  * @category generated
  */
 export type ReplaceLeafInstructionAccounts = {
-    merkleTree: web3.PublicKey;
+    anchorRemainingAccounts?: web3.AccountMeta[];
     authority: web3.PublicKey;
+    merkleTree: web3.PublicKey;
     noop: web3.PublicKey;
-    anchorRemainingAccounts?: web3.AccountMeta[];
 };
 
 export const replaceLeafInstructionDiscriminator = [204, 165, 76, 100, 73, 147, 0, 128];
diff --git a/account-compression/sdk/src/generated/instructions/transferAuthority.ts b/account-compression/sdk/src/generated/instructions/transferAuthority.ts
index be9d16164..d531b12ab 100644
--- a/account-compression/sdk/src/generated/instructions/transferAuthority.ts
+++ b/account-compression/sdk/src/generated/instructions/transferAuthority.ts
@@ -43,9 +43,9 @@ export const transferAuthorityStruct = new beet.BeetArgsStruct<
  * @category generated
  */
 export type TransferAuthorityInstructionAccounts = {
-    merkleTree: web3.PublicKey;
-    authority: web3.PublicKey;
     anchorRemainingAccounts?: web3.AccountMeta[];
+    authority: web3.PublicKey;
+    merkleTree: web3.PublicKey;
 };
 
 export const transferAuthorityInstructionDiscriminator = [48, 169, 76, 72, 229, 180, 55, 161];
diff --git a/account-compression/sdk/src/generated/instructions/verifyLeaf.ts b/account-compression/sdk/src/generated/instructions/verifyLeaf.ts
index 030ce5d3b..988b7e887 100644
--- a/account-compression/sdk/src/generated/instructions/verifyLeaf.ts
+++ b/account-compression/sdk/src/generated/instructions/verifyLeaf.ts
@@ -14,9 +14,9 @@ import * as web3 from '@solana/web3.js';
  * @category generated
  */
 export type VerifyLeafInstructionArgs = {
-    root: number[] /* size: 32 */;
-    leaf: number[] /* size: 32 */;
     index: number;
+    leaf: number[] /* size: 32 */;
+    root: number[] /* size: 32 */;
 };
 /**
  * @category Instructions
@@ -45,8 +45,8 @@ export const verifyLeafStruct = new beet.BeetArgsStruct<
  * @category generated
  */
 export type VerifyLeafInstructionAccounts = {
-    merkleTree: web3.PublicKey;
     anchorRemainingAccounts?: web3.AccountMeta[];
+    merkleTree: web3.PublicKey;
 };
 
 export const verifyLeafInstructionDiscriminator = [124, 220, 22, 223, 104, 10, 250, 224];
diff --git a/account-compression/sdk/src/generated/types/AccountCompressionEvent.ts b/account-compression/sdk/src/generated/types/AccountCompressionEvent.ts
index 00d2504a5..4bce65606 100644
--- a/account-compression/sdk/src/generated/types/AccountCompressionEvent.ts
+++ b/account-compression/sdk/src/generated/types/AccountCompressionEvent.ts
@@ -19,8 +19,8 @@ import { ChangeLogEvent, changeLogEventBeet } from './ChangeLogEvent';
  * @private
  */
 export type AccountCompressionEventRecord = {
-    ChangeLog: { fields: [ChangeLogEvent] };
     ApplicationData: { fields: [ApplicationDataEvent] };
+    ChangeLog: { fields: [ChangeLogEvent] };
 };
 
 /**
diff --git a/account-compression/sdk/src/generated/types/ChangeLogEventV1.ts b/account-compression/sdk/src/generated/types/ChangeLogEventV1.ts
index 797e60b7e..df16281b8 100644
--- a/account-compression/sdk/src/generated/types/ChangeLogEventV1.ts
+++ b/account-compression/sdk/src/generated/types/ChangeLogEventV1.ts
@@ -12,9 +12,9 @@ import * as web3 from '@solana/web3.js';
 import { PathNode, pathNodeBeet } from './PathNode';
 export type ChangeLogEventV1 = {
     id: web3.PublicKey;
+    index: number;
     path: PathNode[];
     seq: beet.bignum;
-    index: number;
 };
 
 /**
diff --git a/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderDataV1.ts b/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderDataV1.ts
index 4ad4b8fd5..19a48b0d3 100644
--- a/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderDataV1.ts
+++ b/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderDataV1.ts
@@ -9,10 +9,10 @@ import * as beet from '@metaplex-foundation/beet';
 import * as beetSolana from '@metaplex-foundation/beet-solana';
 import * as web3 from '@solana/web3.js';
 export type ConcurrentMerkleTreeHeaderDataV1 = {
-    maxBufferSize: number;
-    maxDepth: number;
     authority: web3.PublicKey;
     creationSlot: beet.bignum;
+    maxBufferSize: number;
+    maxDepth: number;
     padding: number[] /* size: 6 */;
 };
 
diff --git a/account-compression/sdk/src/generated/types/PathNode.ts b/account-compression/sdk/src/generated/types/PathNode.ts
index cd3fab4c6..8d2600feb 100644
--- a/account-compression/sdk/src/generated/types/PathNode.ts
+++ b/account-compression/sdk/src/generated/types/PathNode.ts
@@ -7,8 +7,8 @@
 
 import * as beet from '@metaplex-foundation/beet';
 export type PathNode = {
-    node: number[] /* size: 32 */;
     index: number;
+    node: number[] /* size: 32 */;
 };
 
 /**
diff --git a/account-compression/sdk/src/instructions/index.ts b/account-compression/sdk/src/instructions/index.ts
index 6e16e1ccc..150acfea3 100644
--- a/account-compression/sdk/src/instructions/index.ts
+++ b/account-compression/sdk/src/instructions/index.ts
@@ -95,7 +95,7 @@ export function createReplaceIx(
 export function createAppendIx(
     merkleTree: PublicKey,
     authority: PublicKey,
-    newLeaf: Buffer | ArrayLike<number>,
+    newLeaf: ArrayLike<number> | Buffer,
 ): TransactionInstruction {
     return createAppendInstruction(
         {
diff --git a/account-compression/sdk/src/merkle-tree/index.ts b/account-compression/sdk/src/merkle-tree/index.ts
index 87f5237d0..1b640ff39 100644
--- a/account-compression/sdk/src/merkle-tree/index.ts
+++ b/account-compression/sdk/src/merkle-tree/index.ts
@@ -7,8 +7,8 @@ const CACHE_EMPTY_NODE = new Map<number, Buffer>();
 export const LEAF_BUFFER_LENGTH = 32;
 
 export type MerkleTreeProof = {
-    leafIndex: number;
     leaf: Buffer;
+    leafIndex: number;
     proof: Buffer[];
     root: Buffer;
 };
@@ -185,12 +185,12 @@ export class MerkleTree {
 }
 
 export type TreeNode = {
-    node: Buffer;
+    id: number;
     left: TreeNode | undefined;
-    right: TreeNode | undefined;
-    parent: TreeNode | undefined;
     level: number;
-    id: number;
+    node: Buffer;
+    parent: TreeNode | undefined;
+    right: TreeNode | undefined;
 };
 
 /**
diff --git a/account-compression/sdk/src/types/ConcurrentMerkleTree.ts b/account-compression/sdk/src/types/ConcurrentMerkleTree.ts
index ac621b448..523373bda 100644
--- a/account-compression/sdk/src/types/ConcurrentMerkleTree.ts
+++ b/account-compression/sdk/src/types/ConcurrentMerkleTree.ts
@@ -9,10 +9,11 @@ import { Path, pathBeetFactory } from './Path';
  * @private
  */
 export type ChangeLogInternal = {
-    root: PublicKey;
+    // u32
+    _padding: number;
+    index: number;
     pathNodes: PublicKey[];
-    index: number; // u32
-    _padding: number; // u32
+    root: PublicKey; // u32
 };
 
 const changeLogBeetFactory = (maxDepth: number) => {
@@ -31,11 +32,14 @@ const changeLogBeetFactory = (maxDepth: number) => {
  * ConcurrentMerkleTree fields necessary for deserializing an on-chain ConcurrentMerkleTree
  */
 export type ConcurrentMerkleTree = {
-    sequenceNumber: beet.bignum; // u64
-    activeIndex: beet.bignum; // u64
-    bufferSize: beet.bignum; // u64
+    // u64
+    activeIndex: beet.bignum;
+    // u64
+    bufferSize: beet.bignum;
+    // u64
     changeLogs: ChangeLogInternal[];
     rightMostPath: Path;
+    sequenceNumber: beet.bignum;
 };
 
 /**
diff --git a/account-compression/sdk/src/types/Path.ts b/account-compression/sdk/src/types/Path.ts
index eaf198c5f..d87b6b09b 100644
--- a/account-compression/sdk/src/types/Path.ts
+++ b/account-compression/sdk/src/types/Path.ts
@@ -7,10 +7,11 @@ import { PublicKey } from '@solana/web3.js';
  * used in an {@link ConcurrentMerkleTree}
  */
 export type Path = {
-    proof: PublicKey[];
+    // u32
+    _padding: number;
+    index: number;
     leaf: PublicKey;
-    index: number; // u32
-    _padding: number; // u32
+    proof: PublicKey[]; // u32
 };
 
 /**
diff --git a/account-compression/sdk/src/types/index.ts b/account-compression/sdk/src/types/index.ts
index 2f03308c5..620d16698 100644
--- a/account-compression/sdk/src/types/index.ts
+++ b/account-compression/sdk/src/types/index.ts
@@ -7,8 +7,8 @@ export * from './Canopy';
 export * from './ConcurrentMerkleTree';
 
 export type ChangeLogEventV1 = {
-    treeId: PublicKey;
+    index: number;
     path: PathNode[];
     seq: BN;
-    index: number;
+    treeId: PublicKey;
 };
diff --git a/account-compression/sdk/tsconfig.json b/account-compression/sdk/tsconfig.json
index 986f3ac40..e175d1bfd 100644
--- a/account-compression/sdk/tsconfig.json
+++ b/account-compression/sdk/tsconfig.json
@@ -1,6 +1,6 @@
 {
   "extends": "./tsconfig.base.json",
-  "include": ["src"],
+  "include": ["src", "tests"],
   "compilerOptions": {
     "outDir": "dist/cjs/",
     "declarationDir": "dist/types",
diff --git a/name-service/js/.eslintignore b/name-service/js/.eslintignore
new file mode 100644
index 000000000..6da325eff
--- /dev/null
+++ b/name-service/js/.eslintignore
@@ -0,0 +1,5 @@
+docs
+lib
+test-ledger
+
+package-lock.json
diff --git a/name-service/js/.prettierignore b/name-service/js/.prettierignore
new file mode 100644
index 000000000..6da325eff
--- /dev/null
+++ b/name-service/js/.prettierignore
@@ -0,0 +1,5 @@
+docs
+lib
+test-ledger
+
+package-lock.json
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 32f4bd3a9..b2c612d06 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -355,8 +355,8 @@ importers:
         specifier: ^5.1.3
         version: 5.1.3(@types/eslint@8.56.7)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5)
       solana-bankrun:
-        specifier: ^0.2.0
-        version: 0.2.0
+        specifier: ^0.3.0
+        version: 0.3.0
       tsx:
         specifier: ^4.7.2
         version: 4.7.2
@@ -7486,8 +7486,8 @@ packages:
       tslib: 2.6.2
     dev: true
 
-  /solana-bankrun-darwin-arm64@0.2.0:
-    resolution: {integrity: sha512-ENQ5Z/CYeY8ZVWIc2VutY/gMlBaHi93/kDw9w0iVwewoV+/YpQmP2irwrshIKu6ggRPTF3Ehlh2V6fGVIYWcXw==}
+  /solana-bankrun-darwin-arm64@0.3.0:
+    resolution: {integrity: sha512-+NbDncf0U6l3knuacRBiqpjZ2DSp+5lZaAU518gH7/x6qubbui/d000STaIBK+uNTPBS/AL/bCN+7PkXqmA3lA==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [darwin]
@@ -7495,16 +7495,16 @@ packages:
     dev: true
     optional: true
 
-  /solana-bankrun-darwin-universal@0.2.0:
-    resolution: {integrity: sha512-HE45TvZXzBipm1fMn87+fkHeIuQ/KFAi5G/S29y/TLuBYt4RDI935RkWiT0rEQ7KwnwO6Y1aTsOaQXldY5R7uQ==}
+  /solana-bankrun-darwin-universal@0.3.0:
+    resolution: {integrity: sha512-1/F0xdMa4qvc5o6z16FCCbZ5jbdvKvxpx5kyPcMWRiRPwyvi+zltMxciPAYMlg3wslQqGz88uFhrBEzq2eTumQ==}
     engines: {node: '>= 10'}
     os: [darwin]
     requiresBuild: true
     dev: true
     optional: true
 
-  /solana-bankrun-darwin-x64@0.2.0:
-    resolution: {integrity: sha512-42UsVrnac2Oo4UaIDo60zfI3Xn1i8W6fmcc9ixJQZNTtdO8o2/sY4mFxcJx9lhLMhda5FPHrQbGYgYdIs0kK0g==}
+  /solana-bankrun-darwin-x64@0.3.0:
+    resolution: {integrity: sha512-U6CANjkmMl+lgNA7UH0GKs5V7LtVIUDzJBZefGGqLfqUNv3EjA/PrrToM0hAOWJgkxSwdz6zW+p5sw5FmnbXtg==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [darwin]
@@ -7512,8 +7512,8 @@ packages:
     dev: true
     optional: true
 
-  /solana-bankrun-linux-x64-gnu@0.2.0:
-    resolution: {integrity: sha512-WnqQjfBBdcI0ZLysjvRStI8gX7vm1c3CI6CC03lgkUztH+Chcq9C4LI9m2M8mXza8Xkn9ryeKAmX36Bx/yoVzg==}
+  /solana-bankrun-linux-x64-gnu@0.3.0:
+    resolution: {integrity: sha512-qJSkCFs0k2n4XtTnyxGMiZsuqO2TiqTYgWjQ+3mZhGNUAMys/Vq8bd7/SyBm6RR7EfVuRXRxZvh+F8oKZ77V4w==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
@@ -7521,8 +7521,8 @@ packages:
     dev: true
     optional: true
 
-  /solana-bankrun-linux-x64-musl@0.2.0:
-    resolution: {integrity: sha512-8mtf14ZBoah30+MIJBUwb5BlGLRZyK5cZhCkYnC/ROqaIDN8RxMM44NL63gTUIaNHsFwWGA9xR0KSeljeh3PKQ==}
+  /solana-bankrun-linux-x64-musl@0.3.0:
+    resolution: {integrity: sha512-xsS2CS2xb1Sw4ivNXM0gPz/qpW9BX0neSvt/pnok5L330Nu9xlTnKAY8FhzzqOP9P9sJlGRM787Y6d0yYwt6xQ==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
@@ -7530,18 +7530,18 @@ packages:
     dev: true
     optional: true
 
-  /solana-bankrun@0.2.0:
-    resolution: {integrity: sha512-TS6vYoO/9YJZng7oiLOVyuz8V7yLow5Hp4SLYWW71XM3702v+z9f1fvUBKudRfa4dfpta4tRNufApSiBIALxJQ==}
+  /solana-bankrun@0.3.0:
+    resolution: {integrity: sha512-YkH7sa8TB/AoRPzG17CXJtYsRIQHEkEqGLz1Vwc13taXhDBkjO7z6NI5JYw7n0ybRymDHwMYTc7sd+5J40TyVQ==}
     engines: {node: '>= 10'}
     dependencies:
       '@solana/web3.js': 1.91.7
       bs58: 4.0.1
     optionalDependencies:
-      solana-bankrun-darwin-arm64: 0.2.0
-      solana-bankrun-darwin-universal: 0.2.0
-      solana-bankrun-darwin-x64: 0.2.0
-      solana-bankrun-linux-x64-gnu: 0.2.0
-      solana-bankrun-linux-x64-musl: 0.2.0
+      solana-bankrun-darwin-arm64: 0.3.0
+      solana-bankrun-darwin-universal: 0.3.0
+      solana-bankrun-darwin-x64: 0.3.0
+      solana-bankrun-linux-x64-gnu: 0.3.0
+      solana-bankrun-linux-x64-musl: 0.3.0
     transitivePeerDependencies:
       - bufferutil
       - encoding
diff --git a/single-pool/js/packages/classic/package.json b/single-pool/js/packages/classic/package.json
index 8e8990e51..3a0c707be 100644
--- a/single-pool/js/packages/classic/package.json
+++ b/single-pool/js/packages/classic/package.json
@@ -25,7 +25,7 @@
     "eslint": "^8.57.0",
     "eslint-config-prettier": "^9.1.0",
     "eslint-plugin-prettier": "^5.1.3",
-    "solana-bankrun": "^0.2.0",
+    "solana-bankrun": "^0.3.0",
     "tsx": "^4.7.2",
     "typescript": "^5.4.5"
   },


Test patch:
diff --git a/account-compression/sdk/tests/accounts/concurrentMerkleTreeAccount.test.ts b/account-compression/sdk/tests/accounts/concurrentMerkleTreeAccount.test.ts
index b3d794ad7..4c1658df2 100644
--- a/account-compression/sdk/tests/accounts/concurrentMerkleTreeAccount.test.ts
+++ b/account-compression/sdk/tests/accounts/concurrentMerkleTreeAccount.test.ts
@@ -8,7 +8,7 @@ import { ALL_DEPTH_SIZE_PAIRS, ConcurrentMerkleTreeAccount, getConcurrentMerkleT
 import { emptyNode, MerkleTree } from '../../src/merkle-tree';
 import { createEmptyTreeOnChain, createTreeOnChain } from '../utils';
 
-async function assertCMTProperties(
+function assertCMTProperties(
     onChainCMT: ConcurrentMerkleTreeAccount,
     expectedMaxDepth: number,
     expectedMaxBufferSize: number,
diff --git a/account-compression/sdk/tests/events/applicationData.test.ts b/account-compression/sdk/tests/events/applicationData.test.ts
index 04542921f..14a1f5a60 100644
--- a/account-compression/sdk/tests/events/applicationData.test.ts
+++ b/account-compression/sdk/tests/events/applicationData.test.ts
@@ -6,7 +6,7 @@ import { deserializeApplicationDataEvent } from "../../src";
 
 describe("Serde tests", () => {
   describe("ApplicationDataEvent tests", () => {
-    it("Can serialize and deserialize ApplicationDataEvent", async () => {
+    it("Can serialize and deserialize ApplicationDataEvent", () => {
       const data = Buffer.from("Hello world");
       const applicationDataEvent = Buffer.concat([
         Buffer.from([0x1]), // ApplicationData Event tag
diff --git a/ci/js-test-account-compression.sh b/ci/js-test-account-compression.sh
index 74c586758..38b6314ec 100755
--- a/ci/js-test-account-compression.sh
+++ b/ci/js-test-account-compression.sh
@@ -9,5 +9,5 @@ cd account-compression/sdk
 pnpm install
 pnpm build
 pnpm build:program
-# pnpm lint # re-enable when lints are fixed
+pnpm lint
 pnpm test