-
Notifications
You must be signed in to change notification settings - Fork 301
Return parsed token accounts in simulateBundle #600
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
Open
mcintyre94
wants to merge
120
commits into
jito-foundation:master
Choose a base branch
from
mcintyre94:cm-bundle-jsonparsed-tokens-2
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Return parsed token accounts in simulateBundle #600
mcintyre94
wants to merge
120
commits into
jito-foundation:master
from
mcintyre94:cm-bundle-jsonparsed-tokens-2
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* Add GHA to close new issues with a comment * Remove trailing whitespace
Add github action to close new pull requests with a comment directing them to agave
* ci: add upload-gcs-artifact * ci: publish release binaries to GCS * ci: redirect github repo to anza-xyz * ci: publish windows binaries to GCS * replace release.solana.com with release.anza.xyz * use a explicit name for credential
* Update README.md * ci: update CodeCov report link * ci: update github pr link * ci: rename secondary pipeline * replace org name in .mergify * update channel info link * update dependabot pr link * use anza docker image * delete travis --------- Co-authored-by: Will Hickey <[email protected]>
* ci: fix windows build * ci: publish sdk docker image with the new name * update automerge status
…foundation#9) ci: removed unused s3 upload in Windows build
* rename geyser-plugin-interface * rename cargo registry * rename watchtower * rename ledger tool * rename validator * rename install * rename geyser plugin interface when patch
jito-foundation#69) * Make inactive_stake consistent * Add rpc_deprecated_v1_18 module * Move get_stake_activation to deprecated list * Fix typo
This reverts commit 3f9a7a5.
jito-foundation#9)" This reverts commit 91e3dd2.
This reverts commit 58e9a19.
This reverts commit b0022d7.
This reverts commit 9355518.
Signed-off-by: gcmutator <[email protected]>
This reverts commit 556a749.
When viewing in various tools such as gdb and perf, it is not easy to distinguish which threads are serving which function (TPU or TPU FWD)
- solTvuFetchPmod ==> solTvuPktMod + solTvuRepPktMod - solSigVerifier ==> solSigVerTpu + solSigVerTpuVot
* Simplify vote-authority display * Add handling for new vote authority * Add proper None handling, because unit test (shouldn't happen IRL, though) * Unwrap->expect
* assert simple vote tx const cost
buffalu
pushed a commit
that referenced
this pull request
Jul 18, 2024
* Show staked vs nonstaked packets sent down * add metrics on throttled staked vs non-staked
7bc716a to
b8605f2
Compare
6a0aa5b to
8d53d7b
Compare
75c3a1c to
d7f139c
Compare
56e55ae to
0b061cc
Compare
d7af5ef to
fadc825
Compare
96e2c08 to
042f9c1
Compare
02db91d to
1d4355b
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Rewrite of #592 on latest master
Problem
If you call
simulateBundleand pass a token account inpre/postExecutionAccountsConfigs, then the token accounts are never returned in JSON. You will always get the base64 encoded data.This is caused by attempting to encode the data without fetching the number of decimals for the mint, which causes a fallback to base64 data.
This was fixed for
simulateTransactionupstream, butsimulateBundlehas the same issue.Upstream issue (with more details of the code path causing this): solana-labs/solana#34693
Upstream fix to
simulateTransaction: solana-labs/solana#34619Summary of Changes
The changes are based on the upstream changes in
simulateTransaction.Instead of directly encoding the post-account data, we call
get_encoded_account(added in the upstream PR), which will correctly parse a token account. As this function was written for transaction post-accounts it also takesoverwrite_accounts: Option<&HashMap<Pubkey, AccountSharedData>>, so that account state can be overridden if a transaction has changed it.In order to provide this, we now maintain a
AccountOverridesobject inrpc_bundle_result_from_bank_result. This is the same data structure, but has some useful helper functions and I think makes sense to use here. After each transaction, this is updated (usingupsert_account_overrides) with thepost_accountsfrom the transaction. This is then passed when we encode the post-accounts for that transaction.The result is that
rpc_bundle_result_from_bank_result(and thesimulateBundleRPC call) now correctly JSON encodes token accounts, using data from the transactions, or the bank if required.End-to-end test on localhost
Build this branch:
cargo buildCreate a directory
/Users/username/scratch/solana-validator-tokenswith the following files:wallet.json
{ "pubkey": "2hSzAdfBYSx3q9duv2VwxVoapcbHy14qaTfkPmHn4gbY", "account": { "data": [ "", "base64" ], "executable": false, "lamports": 100000000, "owner": "11111111111111111111111111111111", "rentEpoch": 0 } }token-mint.json
{ "pubkey": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr", "account": { "data": [ "AQAAAOkoOVUJZf/U1krKr0bUXfcxjltPV8kMSH1gYl2Cm4N7iOvPHkm44BgGAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", "base64" ], "executable": false, "lamports": 58203456600, "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "rentEpoch": 18446744073709551615, "space": 82 } }receive-token.json
{ "pubkey": "D9EYGf9etBGpPLHwiKMpxzn8gcHZapP6uvakAiCkdapK", "account": { "data": [ "6Sg5VQll/9TWSsqvRtRd9zGOW09XyQxIfWBiXYKbg3vbLzrNfN5YZjAai4m3oURtvycuDlQ8wTPq3YIlZUPQ9KiqxS0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "base64" ], "executable": false, "lamports": 2039280, "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "rentEpoch": 18446744073709551615, "space": 165 } }send-token.json
{ "pubkey": "Dg5iatJR92aPAZ6E9kBCrdb2DDeaPoQdexjC48MrvNGf", "account": { "data": [ "6Sg5VQll/9TWSsqvRtRd9zGOW09XyQxIfWBiXYKbg3sZOE0jrk6GS84ZX4OU7iFB1zRTqOg8ThrPzCdGFT/NlwDh9QUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "base64" ], "executable": false, "lamports": 2039280, "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "rentEpoch": 18446744073709551615, "space": 165 } }Run the local validator:
./target/debug/solana-test-validator --account-dir /Users/username/scratch/solana-validator-tokensRun the following
curlcommand:curl command
Or, just the JSON RPC body
{ "id": 1, "jsonrpc": "2.0", "method": "simulateBundle", "params": [ { "encodedTransactions": [ "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQHGThNI65OhkvOGV+DlO4hQdc0U6joPE4az8wnRhU/zZe0aDLGa0cy16lBWIf9ij+BU6eobQjtSBAP3ZRNOzSRTLxPOmj5LXZb8EVEBvpSsLG9P9kYCYqlowhFVOefwFCYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpKDlVCWX/1NZKyq9G1F33MY5bT1fJDEh9YGJdgpuDewVKU1qZKSEGTSTocWDaOHx8NbXdvJK7geQfqEBBBUSNBt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKmOYFcfFz0Vu4XMA4jr8WltA1R3YRYSEipAl9FD4qy+FgMFAAY0RkhkVEwDAgAADAIAAAAAAAAAAAAAAAYEAgQBAAoMoIYBAAAAAAAG" ] }, { "commitment": "confirmed", "encoding": "jsonParsed", "skipSigVerify": true, "replaceRecentBlockhash": true, "preExecutionAccountsConfigs": [{ "addresses": [ "D9EYGf9etBGpPLHwiKMpxzn8gcHZapP6uvakAiCkdapK", "Dg5iatJR92aPAZ6E9kBCrdb2DDeaPoQdexjC48MrvNGf" ], "encoding": "jsonParsed" }], "postExecutionAccountsConfigs": [{ "addresses": [ "D9EYGf9etBGpPLHwiKMpxzn8gcHZapP6uvakAiCkdapK", "Dg5iatJR92aPAZ6E9kBCrdb2DDeaPoQdexjC48MrvNGf" ], "encoding": "jsonParsed" }] } ] }You'll get back JSON parsed details for the token accounts, before and after.
If you do the same on the current
masterbranch then you'll get base64 encoded token accounts.Note that
simulateTransactionworks correctly because my equivalent upstream fix is already merged into Jito.