diff --git a/.changeset/tidy-baths-rule.md b/.changeset/tidy-baths-rule.md new file mode 100644 index 000000000..a9a28b7b8 --- /dev/null +++ b/.changeset/tidy-baths-rule.md @@ -0,0 +1,5 @@ +--- +'@solana/kit': patch +--- + +Add loadedAccountsDataSize to simulateTransaction response diff --git a/packages/errors/src/json-rpc-error.ts b/packages/errors/src/json-rpc-error.ts index 0025049a8..17c9a9156 100644 --- a/packages/errors/src/json-rpc-error.ts +++ b/packages/errors/src/json-rpc-error.ts @@ -84,6 +84,7 @@ export interface RpcSimulateTransactionResult { )[]; }[] | null; + loadedAccountsDataSize: number | null; logs: string[] | null; returnData: { data: [string, 'base64']; diff --git a/packages/rpc-api/src/__tests__/send-transaction-test.ts b/packages/rpc-api/src/__tests__/send-transaction-test.ts index 9c45a94cd..f8cbf25d8 100644 --- a/packages/rpc-api/src/__tests__/send-transaction-test.ts +++ b/packages/rpc-api/src/__tests__/send-transaction-test.ts @@ -248,6 +248,7 @@ describe('sendTransaction', () => { accounts: null, cause: new SolanaError(SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_NOT_FOUND), innerInstructions: null, + loadedAccountsDataSize: 0, logs: [], returnData: null, unitsConsumed: 0, @@ -283,6 +284,7 @@ describe('sendTransaction', () => { accounts: null, cause: new SolanaError(SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_FEE), innerInstructions: null, + loadedAccountsDataSize: 0, logs: [], returnData: null, unitsConsumed: 0, @@ -315,6 +317,7 @@ describe('sendTransaction', () => { accounts: null, cause: new SolanaError(SOLANA_ERROR__TRANSACTION_ERROR__BLOCKHASH_NOT_FOUND), innerInstructions: null, + loadedAccountsDataSize: 0, logs: [], returnData: null, unitsConsumed: 0, diff --git a/packages/rpc-api/src/__tests__/simulate-transaction-test.ts b/packages/rpc-api/src/__tests__/simulate-transaction-test.ts index 33646da55..272ce80f0 100644 --- a/packages/rpc-api/src/__tests__/simulate-transaction-test.ts +++ b/packages/rpc-api/src/__tests__/simulate-transaction-test.ts @@ -173,6 +173,7 @@ describe('simulateTransaction', () => { accounts: null, err: null, innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -284,6 +285,7 @@ describe('simulateTransaction', () => { accounts: null, err: null, innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -324,6 +326,7 @@ describe('simulateTransaction', () => { accounts: null, err: 'BlockhashNotFound', innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -364,6 +367,7 @@ describe('simulateTransaction', () => { accounts: null, err: null, innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: { blockhash: expect.any(String), @@ -470,6 +474,7 @@ describe('simulateTransaction', () => { accounts: null, err: 'AccountNotFound', innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -520,6 +525,7 @@ describe('simulateTransaction', () => { ], err: null, innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -570,6 +576,7 @@ describe('simulateTransaction', () => { ], err: null, innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -637,6 +644,7 @@ describe('simulateTransaction', () => { ], err: null, innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -688,6 +696,7 @@ describe('simulateTransaction', () => { ], err: null, innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -737,7 +746,7 @@ describe('simulateTransaction', () => { ], err: null, innerInstructions: null, - + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -793,6 +802,7 @@ describe('simulateTransaction', () => { ], err: null, innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, @@ -834,6 +844,7 @@ describe('simulateTransaction', () => { accounts: null, err: null, innerInstructions: null, + loadedAccountsDataSize: expect.any(Number), logs: expect.any(Array), replacementBlockhash: null, returnData: null, diff --git a/packages/rpc-api/src/index.ts b/packages/rpc-api/src/index.ts index 815e3bf47..03690674f 100644 --- a/packages/rpc-api/src/index.ts +++ b/packages/rpc-api/src/index.ts @@ -343,6 +343,7 @@ function getAllowedNumericKeypaths(): AllowedNumericKeypaths ['value', 'accounts', KEYPATH_WILDCARD, ...c]), ...innerInstructionsConfigs.map(c => ['value', 'innerInstructions', KEYPATH_WILDCARD, ...c]), ], diff --git a/packages/rpc-api/src/simulateTransaction.ts b/packages/rpc-api/src/simulateTransaction.ts index 0d88f2fd8..f3aec66aa 100644 --- a/packages/rpc-api/src/simulateTransaction.ts +++ b/packages/rpc-api/src/simulateTransaction.ts @@ -94,6 +94,8 @@ type WithInnerInstructionsConfig = Readonly<{ type SimulateTransactionApiResponseBase = Readonly<{ /** If the transaction failed, this property will contain the error */ err: TransactionError | null; + /** The number of bytes of all accounts loaded by this transaction */ + loadedAccountsDataSize?: number; /** * Array of log messages the transaction instructions output during execution, `null` if * simulation failed before the transaction was able to execute (for example due to an invalid