-
Notifications
You must be signed in to change notification settings - Fork 4.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for returnData in simulate transaction #26499
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @joncinque It's worth noting that this will only work with a funded feePayer, which makes simulation somewhat problematic for second-order return-data apis. That doesn't need to hold up anything here, but just something to think about for usage and documentation purposes. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah true, I was thinking we could at least support it in its current state and improve on it later. Just to be totally clear, when you say "that doesn't need to hold up anything here", do you mean that you're ok with the approach? Also, did we ever come up with a model for simulating transactions without a funded fee payer? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yep, I’m fine with this approach. |
||
|
||
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'; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
need to hard code
base64
here sinceTransactionReturnDataEncoding
is a type and was giving error, don't know if there is any way to avoid this.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can eventually use some other type, but no problem with doing that here