refactor: use SOL RPC canister in basic_solana example#69
Conversation
gregorydemay
left a comment
There was a problem hiding this comment.
Thanks @lpahlavi for the PR! Did you already try out this new version of the examples?
| .data; | ||
|
|
||
| // Extract the nonce from the account data | ||
| let account_data = if let UiAccountData::Binary(blob, UiAccountEncoding::Base64) = account_data |
There was a problem hiding this comment.
I looked into it, but the problem is that the methods there use the solana_account::Account type, whereas we return a solana_account_decoder_client_types::UiAccount type. The problem is that solana_account::Account is incomplete, which is why we instead return a solana_account_decoder_client_types::UiAccount. The methods you linked unfortunately require the input to implement the ReadableAccount trait which, for some obscure reason, the solana_account_decoder_client_types::UiAccount type does not...
lpahlavi
left a comment
There was a problem hiding this comment.
Thanks for the feedback @gregorydemay! I haven't tested the new canister yet, but I will do that this afternoon to make sure everything works as expected.
## 🤖 New release * `sol_rpc_types`: 0.1.0 * `sol_rpc_canister`: 0.1.0 * `sol_rpc_client`: 0.1.0 <details><summary><i><b>Changelog</b></i></summary><p> ## `sol_rpc_types` <blockquote> ## [0.1.0] - 2025-04-29 ### Added - Add Rustdoc for types related to `getTransaction` ([#71](#71)) - Add support for `getTransaction` RPC method ([#68](#68)) - Add `getBlock` RPC method ([#53](#53)) - Add `sendTransaction` RPC method ([#59](#59)) - Add NOTICE to Apache license ([#60](#60)) - Add `getAccountInfo` RPC method ([#49](#49)) - Add metrics ([#41](#41)) - Add logging crate ([#13](#13)) - Add doc build stage to CI ([#19](#19)) - Add support for override providers ([#12](#12)) ### Changed - Use `canlog_derive` and `canlog` from crates.io ([#84](#84)) - Release pipeline ([#4](#4)) - Default commitment level for `SolRpcClient` ([#77](#77)) - Support method `getBalance` ([#74](#74)) - Rename some enum variants to camel case when serializing ([#72](#72)) - Use SOL RPC canister in `basic_solana` example ([#69](#69)) - Add basic README instructions ([#63](#63)) - Cycles cost ([#52](#52)) - Client builder ([#54](#54)) - Round result from `getSlot` RPC method ([#48](#48)) - Use `canhttp` `multi` feature ([#46](#46)) - Implement getSlot RPC method ([#33](#33)) - Add some tested RPC providers for Solana Mainnet and Devnet ([#15](#15)) - Streamline providers ([#32](#32)) - Add support for API keys ([#10](#10)) - Hard-code SOL RPC providers ([#9](#9)) - Basic Solana wallet example ([#1](#1)) - Initial cargo workspace and build pipeline ([#2](#2)) ### Fixed - Correct Solana cluster for dRPC and Helius providers ([#47](#47)) <!-- generated by git-cliff --> Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). </blockquote> ## `sol_rpc_canister` <blockquote> ## [0.1.0] - 2025-04-29 ### Added - Add support for `getTransaction` RPC method ([#68](#68)) - Add `getBlock` RPC method ([#53](#53)) - Add `sendTransaction` RPC method ([#59](#59)) - Add NOTICE to Apache license ([#60](#60)) - Add `getAccountInfo` RPC method ([#49](#49)) - Add metrics ([#41](#41)) - Add logging crate ([#13](#13)) - Add support for override providers ([#12](#12)) ### Changed - Use `canlog_derive` and `canlog` from crates.io ([#84](#84)) - Release pipeline ([#4](#4)) - Clean-up TODOs ([#81](#81)) - Support method `getBalance` ([#74](#74)) - Remove http_types module and use external ic-http-types crate ([#73](#73)) - Rename some enum variants to camel case when serializing ([#72](#72)) - Use constant size JSON-RPC request ID ([#62](#62)) - Use method from JSON-RPC request for metric ([#61](#61)) - Cycles cost ([#52](#52)) - Client builder ([#54](#54)) - Round result from `getSlot` RPC method ([#48](#48)) - Use `canhttp` `multi` feature ([#46](#46)) - Implement a method for making generic RPC request ([#39](#39)) - Implement getSlot RPC method ([#33](#33)) - Add some tested RPC providers for Solana Mainnet and Devnet ([#15](#15)) - Streamline providers ([#32](#32)) - Update rust toolchain to 1.85 ([#21](#21)) - Remove unnecessary Storable implementations ([#14](#14)) - Add support for API keys ([#10](#10)) - Hard-code SOL RPC providers ([#9](#9)) - Reproducible build ([#3](#3)) - Initial cargo workspace and build pipeline ([#2](#2)) ### Fixed - Set `maxSupportedTransactionVersion` to zero for end-to-end tests ([#85](#85)) - API keys ([#58](#58)) - End-to-end tests ([#45](#45)) - Correct Solana cluster for dRPC and Helius providers ([#47](#47)) - E2e test with Solana test validator ([#20](#20)) - Create test canister on ICP mainnet ([#8](#8)) <!-- generated by git-cliff --> Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). </blockquote> ## `sol_rpc_client` <blockquote> ## [0.1.0] - 2025-04-29 ### Added - Add support for `getTransaction` RPC method ([#68](#68)) - Add `getBlock` RPC method ([#53](#53)) - Add `sendTransaction` RPC method ([#59](#59)) - Add NOTICE to Apache license ([#60](#60)) - Add `getAccountInfo` RPC method ([#49](#49)) ### Changed - Release pipeline ([#4](#4)) - Default commitment level for `SolRpcClient` ([#77](#77)) - Support method `getBalance` ([#74](#74)) - Use SOL RPC canister in `basic_solana` example ([#69](#69)) - Rust documentation tests for the `SolRpcClient` ([#65](#65)) - Add basic README instructions ([#63](#63)) - Cycles cost ([#52](#52)) - Client builder ([#54](#54)) - Round result from `getSlot` RPC method ([#48](#48)) - Use `canhttp` `multi` feature ([#46](#46)) - Implement a method for making generic RPC request ([#39](#39)) - Implement getSlot RPC method ([#33](#33)) - Streamline providers ([#32](#32)) - Add support for API keys ([#10](#10)) - Hard-code SOL RPC providers ([#9](#9)) - Initial cargo workspace and build pipeline ([#2](#2)) ### Fixed - Forward calls through wallet canister ([#40](#40)) - E2e test with Solana test validator ([#20](#20)) <!-- generated by git-cliff --> Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). --------- Co-authored-by: gregorydemay <gregory.demay@dfinity.org> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
(XC-345) Until now, the
basic_solanaexamples were making RPC requests using manually built HTTP outcalls directly toapi.devnet.solana.com. This PR refactors the examples to instead call the SOL RPC canister via thesol_rpc_client.