Bumping client to solana 3.0 - #178
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Summary by CodeRabbit
WalkthroughThis pull request updates the project to support Solana SDK 3.0+ versions by upgrading core dependencies (borsh, solana-program, SPL Token 2022), migrating to interface crate variants, standardizing error types in trait implementations, and updating build infrastructure and package managers accordingly. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: ASSERTIVE Plan: Pro ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
🔇 Additional comments (3)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
clients/rust/tests/setup/digital_asset.rs (1)
189-239: Consider parameterizing the token program ID.Line 228 hard-codes
spl_token_2022_interface::ID, but other methods in this file (e.g.,create,create_default) acceptspl_token_programas a parameter. Consider accepting the token program as a parameter for consistency, or document why this method specifically requires Token-2022.Apply this diff to parameterize the token program:
pub async fn create_default_with_mint_extensions( &mut self, context: &mut ProgramTestContext, token_standard: TokenStandard, extensions: &[ExtensionType], + spl_token_program: Pubkey, ) -> Result<(), BanksClientError> { // ... existing code ... - .spl_token_program(Some(spl_token_2022_interface::ID)) + .spl_token_program(Some(spl_token_program)) .instruction();clients/rust/src/traits.rs (1)
164-204: Ensure consistent error type across safe_deserialize implementations (line 164).TokenRecord::safe_deserialize returns
Result<TokenRecord, Error>(std::io::Error) while Metadata and other implementations useborsh::io::Error. For consistency, update line 164 to useborsh::io::Error:pub fn safe_deserialize(data: &[u8]) -> Result<TokenRecord, borsh::io::Error> {
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (160)
clients/js/src/generated/types/collectionDetailsToggle.tsis excluded by!**/generated/**clients/rust/Cargo.lockis excluded by!**/*.lockclients/rust/src/generated/accounts/collection_authority_record.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/deprecated_master_edition_v1.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/edition.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/edition_marker.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/edition_marker_v2.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/holder_delegate_record.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/master_edition.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/metadata.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/metadata_delegate_record.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/token_owned_escrow.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/token_record.rsis excluded by!**/generated/**clients/rust/src/generated/accounts/use_authority_record.rsis excluded by!**/generated/**clients/rust/src/generated/errors/mpl_token_metadata.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/approve_collection_authority.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/approve_use_authority.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/bubblegum_set_collection_size.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/burn.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/burn_edition_nft.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/burn_nft.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/burn_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/close_accounts.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/close_escrow_account.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/collect.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/convert_master_edition_v1_to_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/create.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/create_escrow_account.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/create_master_edition_v3.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/create_metadata_account_v3.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/create_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_authority_item_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_collection_item_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_collection_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_data_item_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_data_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_locked_transfer_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_print_delegate_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_programmable_config_item_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_programmable_config_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_sale_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_staking_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_standard_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_transfer_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/delegate_utility_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/deprecated_mint_new_edition_from_master_edition_via_printing_token.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/freeze_delegated_account.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/lock.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/lock_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/migrate.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/mint.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/mint_new_edition_from_master_edition_via_token.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/mint_new_edition_from_master_edition_via_vault_proxy.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/mint_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/print.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/print_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/print_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/puff_metadata.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/remove_creator_verification.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/resize.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_authority_item_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_collection_authority.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_collection_item_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_collection_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_data_item_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_data_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_locked_transfer_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_migration_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_print_delegate_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_programmable_config_item_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_programmable_config_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_sale_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_staking_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_standard_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_transfer_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_use_authority.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/revoke_utility_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/set_and_verify_collection.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/set_and_verify_sized_collection_item.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/set_collection_size.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/set_token_standard.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/sign_metadata.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/thaw_delegated_account.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/transfer.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/transfer_out_of_escrow.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/transfer_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/unlock.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/unlock_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/unverify.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/unverify_collection.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/unverify_collection_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/unverify_creator_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/unverify_sized_collection_item.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_as_authority_item_delegate_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_as_collection_delegate_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_as_collection_item_delegate_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_as_data_delegate_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_as_data_item_delegate_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_as_programmable_config_delegate_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_as_programmable_config_item_delegate_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_as_update_authority_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_metadata_account_v2.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_primary_sale_happened_via_token.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/update_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/use.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/use_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/utilize.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/verify.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/verify_collection.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/verify_collection_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/verify_creator_v1.rsis excluded by!**/generated/**clients/rust/src/generated/instructions/verify_sized_collection_item.rsis excluded by!**/generated/**clients/rust/src/generated/types/authority_type.rsis excluded by!**/generated/**clients/rust/src/generated/types/authorization_data.rsis excluded by!**/generated/**clients/rust/src/generated/types/burn_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/collection.rsis excluded by!**/generated/**clients/rust/src/generated/types/collection_details.rsis excluded by!**/generated/**clients/rust/src/generated/types/collection_details_toggle.rsis excluded by!**/generated/**clients/rust/src/generated/types/collection_toggle.rsis excluded by!**/generated/**clients/rust/src/generated/types/create_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/creator.rsis excluded by!**/generated/**clients/rust/src/generated/types/data.rsis excluded by!**/generated/**clients/rust/src/generated/types/data_v2.rsis excluded by!**/generated/**clients/rust/src/generated/types/delegate_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/escrow_authority.rsis excluded by!**/generated/**clients/rust/src/generated/types/holder_delegate_role.rsis excluded by!**/generated/**clients/rust/src/generated/types/key.rsis excluded by!**/generated/**clients/rust/src/generated/types/lock_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/metadata_delegate_role.rsis excluded by!**/generated/**clients/rust/src/generated/types/migration_type.rsis excluded by!**/generated/**clients/rust/src/generated/types/mint_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/mint_new_edition_from_master_edition_via_token_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/payload.rsis excluded by!**/generated/**clients/rust/src/generated/types/payload_key.rsis excluded by!**/generated/**clients/rust/src/generated/types/payload_type.rsis excluded by!**/generated/**clients/rust/src/generated/types/print_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/print_supply.rsis excluded by!**/generated/**clients/rust/src/generated/types/programmable_config.rsis excluded by!**/generated/**clients/rust/src/generated/types/proof_info.rsis excluded by!**/generated/**clients/rust/src/generated/types/reservation.rsis excluded by!**/generated/**clients/rust/src/generated/types/reservation_v1.rsis excluded by!**/generated/**clients/rust/src/generated/types/revoke_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/rule_set_toggle.rsis excluded by!**/generated/**clients/rust/src/generated/types/seeds_vec.rsis excluded by!**/generated/**clients/rust/src/generated/types/set_collection_size_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/token_delegate_role.rsis excluded by!**/generated/**clients/rust/src/generated/types/token_standard.rsis excluded by!**/generated/**clients/rust/src/generated/types/token_state.rsis excluded by!**/generated/**clients/rust/src/generated/types/transfer_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/unlock_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/update_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/use_args.rsis excluded by!**/generated/**clients/rust/src/generated/types/use_method.rsis excluded by!**/generated/**clients/rust/src/generated/types/uses.rsis excluded by!**/generated/**clients/rust/src/generated/types/uses_toggle.rsis excluded by!**/generated/**clients/rust/src/generated/types/verification_args.rsis excluded by!**/generated/**pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (10)
clients/rust/Cargo.toml(1 hunks)clients/rust/src/traits.rs(4 hunks)clients/rust/tests/create.rs(11 hunks)clients/rust/tests/lock.rs(1 hunks)clients/rust/tests/mint.rs(6 hunks)clients/rust/tests/setup/digital_asset.rs(2 hunks)clients/rust/tests/setup/dirty_clone.rs(1 hunks)clients/rust/tests/setup/mod.rs(2 hunks)clients/rust/tests/setup/token_manager.rs(11 hunks)package.json(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-08T13:31:39.530Z
Learnt from: mcintyre94
Repo: metaplex-foundation/mpl-token-metadata PR: 175
File: configs/codama.cjs:218-221
Timestamp: 2025-08-08T13:31:39.530Z
Learning: In mpl-token-metadata configs (configs/codama.cjs and configs/kinobi.cjs), when selecting instruction accounts for defaults, use the grouped, fully anchored regex /^(edition|masterEdition)$/ to match only the exact account names and avoid accidental matches like editionMarker.
Applied to files:
clients/rust/tests/setup/token_manager.rs
🧬 Code graph analysis (5)
clients/rust/tests/setup/digital_asset.rs (1)
clients/rust/tests/setup/token_manager.rs (3)
ExtensionType(62-62)ExtensionType(205-205)ExtensionType(260-260)
clients/rust/tests/mint.rs (3)
clients/rust/tests/setup/token_manager.rs (3)
ExtensionType(62-62)ExtensionType(205-205)ExtensionType(260-260)clients/rust/tests/setup/digital_asset.rs (1)
mint(75-113)clients/rust/tests/setup/mod.rs (1)
get_account(24-31)
clients/rust/tests/create.rs (1)
clients/rust/tests/setup/token_manager.rs (3)
ExtensionType(62-62)ExtensionType(205-205)ExtensionType(260-260)
clients/rust/tests/setup/token_manager.rs (2)
clients/rust/src/generated/instructions/create.rs (4)
instruction(37-42)instruction(259-280)spl_token_program(228-234)spl_token_program(588-594)clients/rust/src/generated/instructions/create_v1.rs (4)
instruction(43-48)instruction(371-411)spl_token_program(264-270)spl_token_program(732-738)
clients/rust/src/traits.rs (1)
programs/token-metadata/program/src/state/metadata.rs (1)
deserialize(354-357)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Programs / Build
🔇 Additional comments (23)
package.json (2)
25-25: pnpm version bump is safe and appropriate.The patch-level upgrade from 8.2.0 to 8.9.0 is a safe update within the stable pnpm 8.x line. This aligns with the broader tooling refresh for the Solana 3.0 migration.
21-21: The version@metaplex-foundation/kinobi@1.0.0-alpha.0does exist in the npm registry and was published yesterday. It includes proper dependencies for Solana SDK 3.0 support (notably@solana/codecs-strings: 2.0.0-preview.1). The original review comment's concern about version non-existence is unfounded, and this update is a valid part of the Solana 3.0 migration.Likely an incorrect or invalid review comment.
clients/rust/src/traits.rs (3)
32-46: LGTM! Error type standardization aligns with Borsh 1.0.The macro correctly updates the return type to
borsh::io::Error, which is the standard error type in Borsh 1.0 (previouslyborsh::maybestd::io::Errorin earlier versions). This change applies consistently to all macro-generated implementations.
80-89: LGTM! Metadata deserialization updated consistently.The
safe_deserializemethod correctly updates error types toborsh::io::Errorand maintains the existing validation logic (key matching, data emptiness checks).
91-156: LGTM! Deserialization error handling preserved.The
deserialize_uncheckedmethod consistently updates all error types toborsh::io::Errorwhile preserving the existing fallback behavior for handling corrupted metadata fields (V1.2 and V1.3 extensions).clients/rust/tests/setup/digital_asset.rs (1)
12-12: LGTM! Import updated to interface crate.The import path correctly updates from
spl_token_2022::extension::ExtensionTypetospl_token_2022_interface::extension::ExtensionType, aligning with the Solana 3.0 migration.clients/rust/tests/lock.rs (1)
16-21: LGTM! Test updated to use interface crate.The import and test parameterization correctly migrate to
spl_token_2022_interface, maintaining test coverage for both token programs.clients/rust/tests/setup/mod.rs (1)
7-17: LGTM! Test infrastructure updated to interface crate.The imports and program registration correctly migrate to
spl_token_2022_interface, ensuring the test environment uses the updated dependencies.clients/rust/tests/setup/token_manager.rs (6)
2-19: LGTM! Imports migrated to interface crates.All token-related imports correctly updated from
spl_token_2022tospl_token_2022_interface, including extension types, instructions, and state types. This aligns with the Solana 3.0 migration strategy.
68-74: LGTM! Account creation migrated to system interface.The
create_accountinstruction correctly usessolana_system_interface::instruction::create_account, aligning with the interface-based architecture in Solana 3.0.
174-182: LGTM! Mint initialization uses interface crate.The
initialize_mint2instruction correctly migrated tospl_token_2022_interface::instruction, maintaining consistency with the broader migration.
194-250: LGTM! Token account creation migrated consistently.Lines 202, 224, 233 correctly use
spl_token_2022_interfacefor program ID checks and instruction calls (initialize_immutable_owner,initialize_account3), ensuring consistent interface usage.
252-303: LGTM! Extension-based token account creation updated.Lines 265, 275, 284 consistently use the interface crate for account creation and initialization instructions, properly handling token accounts with extensions.
25-31: No breaking changes detected—the default is appropriate for extension operations.The verification shows that both
TokenManager::default()usages (mint.rs:297 and digital_asset.rs:198) are in extension-specific methods that require Token-2022 functionality. Tests requiringspl_token::IDexplicitly constructTokenManager { spl_token_program }(as seen in mint.rs:90), so they are not affected by this default change. The TokenManager logic already handles both token programs conditionally.clients/rust/tests/setup/dirty_clone.rs (1)
8-10: LGTM! Improved keypair cloning implementation.The change from
from_bytes(&self.to_bytes()).unwrap()tonew_from_array(*self.secret_bytes())is more direct, efficient, and removes a potential panic point. This aligns with solana-sdk 3.0's API improvements.clients/rust/tests/mint.rs (4)
7-10: LGTM! Imports updated for Solana 3.0 modularization.The imports correctly migrate to the new crate structure:
Pubkeynow comes from the dedicatedsolana_pubkeycrate- Token types use
spl_token_2022_interfaceThis aligns with Solana 3.0's modular architecture.
16-60: LGTM! Test cases updated consistently.Lines 17, 19, 21, 23 correctly update test parameterization to use
spl_token_2022_interface::ID, maintaining coverage for both token programs across all token standards.
62-127: LGTM! Test coverage maintained for both token programs.Lines 63, 65, 67, 69 consistently update test cases to use
spl_token_2022_interface::ID, ensuring bothspl_token::IDandspl_token_2022_interface::IDare tested across all scenarios.
130-336: LGTM! Token-2022 specific tests updated correctly.Lines 166, 174, 212, 220, 258, 266, 318-325, 332 correctly use
spl_token_2022_interface::IDin Token-2022-specific test scenarios (mint_token2022 module), maintaining appropriate test isolation and coverage.clients/rust/tests/create.rs (4)
228-228: Systematic and complete migration of Token-2022 ownership assertions.All eight account owner assertions in the
create_token2022module have been consistently updated to usespl_token_2022_interface::ID. This ensures proper validation of Token-2022 mint extensions under the Solana 3.0 interface pattern.Also applies to: 260-260, 315-315, 372-372, 404-404, 459-459, 514-514, 571-571
164-165: No issues found. Code is correct and consistent.The use of
solana_program::sysvar::instructions::IDat line 165 is correct and consistent with the codebase. Unlikesystem_programwhich has asolana_system_interfaceequivalent, there is no parallel interface crate for sysvar instructions. The established pattern throughout the codebase usessolana_program::sysvar::instructions::ID, and line 165 follows this correctly.
29-36: No issues found - test coverage changes are correct.The test cases properly reference
spl_token_2022_interface::ID, which is the correct way to obtain the Token-2022 program ID from the interface crate used in this test suite. All usages are consistent across test registration, assertions, and test parameters.
11-11: ExtensionType API compatibility verified—no issues found.The migration to
spl_token_2022_interfaceis correct and complete:
spl-token-2022-interfacev2.0.0 is properly declared in[dev-dependencies]ofclients/rust/Cargo.toml- Import at line 11 is correct and active
ExtensionType::try_calculate_account_lenmethod is fully functional with bothMintandAccounttypes- All extension variants are accessible throughout the test suite
- No conflicting imports remain in the file
The code changes are verified as correct.
There was a problem hiding this comment.
Actionable comments posted: 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (4)
.github/.env(1 hunks).github/workflows/build-rust-client.yml(1 hunks).github/workflows/test-rust-client.yml(1 hunks)CLAUDE.md(1 hunks)
🧰 Additional context used
🪛 dotenv-linter (4.0.0)
.github/.env
[warning] 7-7: [UnorderedKey] The RUST_CLIENT_VERSION key should go before the RUST_VERSION key
(UnorderedKey)
[warning] 8-8: [UnorderedKey] The SOLANA_CLIENT_VERSION key should go before the SOLANA_CLI_VERSION key
(UnorderedKey)
🪛 markdownlint-cli2 (0.18.1)
CLAUDE.md
13-13: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
14-14: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
21-21: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
23-23: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
27-27: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
32-32: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
39-39: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
41-41: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
45-45: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
50-50: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
56-56: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
58-58: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
63-63: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
65-65: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
67-67: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
72-72: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
79-79: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
81-81: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
85-85: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
87-87: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
91-91: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
98-98: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
100-100: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
104-104: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
109-109: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
114-114: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
122-122: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
- GitHub Check: JS Client / Test (18.x)
- GitHub Check: Rust Client / Build
- GitHub Check: Rust Client / Test
- GitHub Check: JS Client / Test (16.x)
- GitHub Check: Programs / Test (token-metadata)
🔇 Additional comments (2)
.github/workflows/build-rust-client.yml (1)
43-48: Variable references correctly updated to new client versions.The workflow now properly references the new RUST_CLIENT_VERSION and SOLANA_CLIENT_VERSION environment variables, which enables version management from the centralized .env file while maintaining manual override capability via inputs.
Note that the workflow_dispatch default inputs (lines 14, 19) specify older versions (1.68.0, 1.16.8) than the env vars (1.79.0, 3.0.0). Please confirm this is intentional—allowing manual testing against older toolchains—or if the defaults should be updated to match the env var versions for consistency.
.github/workflows/test-rust-client.yml (1)
29-34: Client-specific version variables properly updated.The test workflow correctly references the new RUST_CLIENT_VERSION and SOLANA_CLIENT_VERSION environment variables, aligning it with the build workflow and ensuring consistent toolchain/SDK versions across the CI pipeline.
danenbm
left a comment
There was a problem hiding this comment.
Looked at every file LGTM!!!! thank you for doing this
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (2)
clients/js/pnpm-lock.yamlis excluded by!**/pnpm-lock.yamlclients/js/src/generated/types/collectionDetailsToggle.tsis excluded by!**/generated/**
📒 Files selected for processing (2)
clients/js/package.json(2 hunks)package.json(1 hunks)
🔇 Additional comments (3)
clients/js/package.json (2)
63-63: Verify pnpm@8.9.0 availability and compatibility.The packageManager was bumped from
pnpm@8.2.0topnpm@8.9.0. Ensure this version exists and is compatible with your build and CI/CD infrastructure.
46-46: No issues found with prettier exact version pinning.Version 2.5.1 is available on npm, so the exact version constraint is valid. The tighter pinning to
"2.5.1"improves reproducibility without risk of unavailability.package.json (1)
25-25: pnpm version bump is consistent with clients/js/package.json.The packageManager was updated from
pnpm@8.2.0topnpm@8.9.0, mirroring the change inclients/js/package.json. This is standard maintenance and ensures consistent tooling across the monorepo.
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
.github/workflows/main.yml(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Generate clients
- GitHub Check: Programs / Test (token-metadata)
298c6fc to
7ccd4a2
Compare
Fixes #177