From 156affc1ee5231477a75b2b256269601c7ec1c82 Mon Sep 17 00:00:00 2001 From: Athar Date: Fri, 8 Jul 2022 16:36:55 +0530 Subject: [PATCH] feat(web3.js): add Support for returnData in simulate transaction --- web3.js/src/connection.ts | 17 ++++++- web3.js/test/bpf-loader.test.ts | 19 +++++++ web3.js/test/connection.test.ts | 47 ++++++++++++++++++ .../noop-program/solana_bpf_rust_noop.so | Bin 68600 -> 52328 bytes web3.js/test/fixtures/noop-program/src/lib.rs | 9 +++- 5 files changed, 90 insertions(+), 2 deletions(-) diff --git a/web3.js/src/connection.ts b/web3.js/src/connection.ts index 39fa03801d7347..71163d0a065977 100644 --- a/web3.js/src/connection.ts +++ b/web3.js/src/connection.ts @@ -711,13 +711,20 @@ export type SimulatedTransactionAccountInfo = { rentEpoch?: number; }; +export type TransactionReturnDataEncoding = 'base64'; + +export type TransactionReturnData = { + programId: string; + data: [string, TransactionReturnDataEncoding]; +}; + export type SimulatedTransactionResponse = { err: TransactionError | string | null; logs: Array | null; accounts?: (SimulatedTransactionAccountInfo | null)[] | null; unitsConsumed?: number; + returnData?: TransactionReturnData | null; }; - const SimulatedTransactionResponseStruct = jsonRpcResultAndContext( pick({ err: nullable(union([pick({}), string()])), @@ -738,6 +745,14 @@ const SimulatedTransactionResponseStruct = jsonRpcResultAndContext( ), ), unitsConsumed: optional(number()), + returnData: optional( + nullable( + pick({ + programId: string(), + data: tuple([string(), literal('base64')]), + }), + ), + ), }), ); diff --git a/web3.js/test/bpf-loader.test.ts b/web3.js/test/bpf-loader.test.ts index 4d4d5e820f58c3..47c0a9a96bde5e 100644 --- a/web3.js/test/bpf-loader.test.ts +++ b/web3.js/test/bpf-loader.test.ts @@ -147,6 +147,25 @@ if (process.env.TEST_LIVE) { ); }); + it('simulate transaction with returnData', async () => { + const simulatedTransaction = new Transaction().add({ + keys: [ + {pubkey: payerAccount.publicKey, isSigner: true, isWritable: true}, + ], + programId: program.publicKey, + }); + const {err, returnData} = ( + await connection.simulateTransaction(simulatedTransaction, [ + payerAccount, + ]) + ).value; + const expectedReturnData = new Uint8Array([1, 2, 3]); + var decodedData = Buffer.from(returnData.data[0], returnData.data[1]); + expect(err).to.be.null; + expect(returnData.programId).to.eql(program.publicKey.toString()); + expect(decodedData).to.eql(expectedReturnData); + }); + it('deprecated - simulate transaction without signature verification', async () => { const simulatedTransaction = new Transaction().add({ keys: [ diff --git a/web3.js/test/connection.test.ts b/web3.js/test/connection.test.ts index c7520aa9ac1b2f..c6e85a557e443f 100644 --- a/web3.js/test/connection.test.ts +++ b/web3.js/test/connection.test.ts @@ -3756,6 +3756,53 @@ describe('Connection', function () { verifySignatureStatus(response, expectedErr); }); + if (mockServer) { + it('returnData on simulateTransaction', async () => { + const tx = new Transaction(); + tx.feePayer = Keypair.generate().publicKey; + + const getLatestBlockhashResponse = { + method: 'getLatestBlockhash', + params: [], + value: { + blockhash: 'CSymwgTNX1j3E4qhKfJAUE41nBWEwXufoYryPbkde5RR', + feeCalculator: { + lamportsPerSignature: 5000, + }, + lastValidBlockHeight: 51, + }, + withContext: true, + }; + const simulateTransactionResponse = { + method: 'simulateTransaction', + params: [], + value: { + err: null, + accounts: null, + logs: [ + 'Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri invoke [1]', + 'Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri consumed 2366 of 1400000 compute units', + 'Program return: 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri KgAAAAAAAAA=', + 'Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri success', + ], + returnData: { + data: ['KgAAAAAAAAA==', 'base64'], + programId: '83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri', + }, + unitsConsumed: 2366, + }, + withContext: true, + }; + await mockRpcResponse(getLatestBlockhashResponse); + await mockRpcResponse(simulateTransactionResponse); + const response = (await connection.simulateTransaction(tx)).value; + expect(response.returnData).to.eql({ + data: ['KgAAAAAAAAA==', 'base64'], + programId: '83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri', + }); + }); + } + if (process.env.TEST_LIVE) { it('simulate transaction with message', async () => { connection._commitment = 'confirmed'; diff --git a/web3.js/test/fixtures/noop-program/solana_bpf_rust_noop.so b/web3.js/test/fixtures/noop-program/solana_bpf_rust_noop.so index c9ccefa7a313b3371dc7341d05f457224185f07d..cde65c43a7f2033a2557dd3012ab2c7fdb323149 100755 GIT binary patch literal 52328 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 diff --git a/web3.js/test/fixtures/noop-program/src/lib.rs b/web3.js/test/fixtures/noop-program/src/lib.rs index 5caf947917ed9f..038aeacac62a1a 100644 --- a/web3.js/test/fixtures/noop-program/src/lib.rs +++ b/web3.js/test/fixtures/noop-program/src/lib.rs @@ -1,7 +1,8 @@ //! Example Rust-based BPF program that prints out the parameters passed to it use solana_program::{ - account_info::AccountInfo, entrypoint::ProgramResult, log::*, msg, pubkey::Pubkey, + account_info::AccountInfo, entrypoint::ProgramResult, log::*, msg, program::set_return_data, + pubkey::Pubkey, }; #[derive(Debug, PartialEq)] @@ -55,6 +56,12 @@ fn process_instruction( panic!(); } + { + // return data in simulate transaction + let return_data: &[u8] = &[1, 2, 3]; + set_return_data(return_data); + } + Ok(()) }