diff --git a/account-decoder/src/lib.rs b/account-decoder/src/lib.rs index cfbd3fa145..8c1f11caf7 100644 --- a/account-decoder/src/lib.rs +++ b/account-decoder/src/lib.rs @@ -32,7 +32,7 @@ pub struct UiAccount { #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase", untagged)] pub enum UiAccountData { - LegacyBinary(String), // Old way of expressing base-58, retained for RPC backwards compatibility + LegacyBinary(String), // Legacy. Retained for RPC backwards compatibility Json(ParsedAccount), Binary(String, UiAccountEncoding), } @@ -40,9 +40,10 @@ pub enum UiAccountData { #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] #[serde(rename_all = "camelCase")] pub enum UiAccountEncoding { - Binary, // base-58 encoded string. SLOW! Avoid this encoding + Binary, // Legacy. Retained for RPC backwards compatibility + Base58, + Base64, JsonParsed, - Binary64, // base-64 encoded string. } impl UiAccount { @@ -57,7 +58,11 @@ impl UiAccount { UiAccountEncoding::Binary => UiAccountData::LegacyBinary( bs58::encode(slice_data(&account.data, data_slice_config)).into_string(), ), - UiAccountEncoding::Binary64 => UiAccountData::Binary( + UiAccountEncoding::Base58 => UiAccountData::Binary( + bs58::encode(slice_data(&account.data, data_slice_config)).into_string(), + encoding, + ), + UiAccountEncoding::Base64 => UiAccountData::Binary( base64::encode(slice_data(&account.data, data_slice_config)), encoding, ), @@ -67,10 +72,7 @@ impl UiAccount { { UiAccountData::Json(parsed_data) } else { - UiAccountData::Binary( - base64::encode(&account.data), - UiAccountEncoding::Binary64, - ) + UiAccountData::Binary(base64::encode(&account.data), UiAccountEncoding::Base64) } } }; @@ -88,9 +90,9 @@ impl UiAccount { UiAccountData::Json(_) => None, UiAccountData::LegacyBinary(blob) => bs58::decode(blob).into_vec().ok(), UiAccountData::Binary(blob, encoding) => match encoding { - UiAccountEncoding::Binary => bs58::decode(blob).into_vec().ok(), - UiAccountEncoding::Binary64 => base64::decode(blob).ok(), - UiAccountEncoding::JsonParsed => None, + UiAccountEncoding::Base58 => bs58::decode(blob).into_vec().ok(), + UiAccountEncoding::Base64 => base64::decode(blob).ok(), + UiAccountEncoding::Binary | UiAccountEncoding::JsonParsed => None, }, }?; Some(Account { diff --git a/cli/src/cli.rs b/cli/src/cli.rs index d26e216b0f..38608f626f 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -823,8 +823,8 @@ pub fn parse_command( ("decode-transaction", Some(matches)) => { let blob = value_t_or_exit!(matches, "transaction", String); let encoding = match matches.value_of("encoding").unwrap() { - "binary" => UiTransactionEncoding::Binary, - "binary64" => UiTransactionEncoding::Binary64, + "base58" => UiTransactionEncoding::Binary, + "base64" => UiTransactionEncoding::Base64, _ => unreachable!(), }; @@ -1073,7 +1073,7 @@ fn process_confirm( if let Some(transaction_status) = status { if config.verbose { match rpc_client - .get_confirmed_transaction(signature, UiTransactionEncoding::Binary64) + .get_confirmed_transaction(signature, UiTransactionEncoding::Base64) { Ok(confirmed_transaction) => { println!( @@ -1129,7 +1129,7 @@ fn process_show_account( account: UiAccount::encode( account_pubkey, account, - UiAccountEncoding::Binary64, + UiAccountEncoding::Base64, None, None, ), @@ -2171,8 +2171,8 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, ' Arg::with_name("encoding") .index(2) .value_name("ENCODING") - .possible_values(&["binary", "binary64"]) // Subset of `UiTransactionEncoding` enum - .default_value("binary") + .possible_values(&["base58", "base64"]) // Subset of `UiTransactionEncoding` enum + .default_value("base58") .takes_value(true) .required(true) .help("transaction encoding"), diff --git a/cli/src/offline/blockhash_query.rs b/cli/src/offline/blockhash_query.rs index 049c833e88..486a0817e5 100644 --- a/cli/src/offline/blockhash_query.rs +++ b/cli/src/offline/blockhash_query.rs @@ -353,7 +353,7 @@ mod tests { let rpc_nonce_account = UiAccount::encode( &nonce_pubkey, nonce_account, - UiAccountEncoding::Binary64, + UiAccountEncoding::Base64, None, None, ); diff --git a/client/src/rpc_client.rs b/client/src/rpc_client.rs index 59e8c64008..72757d12c7 100644 --- a/client/src/rpc_client.rs +++ b/client/src/rpc_client.rs @@ -464,7 +464,7 @@ impl RpcClient { commitment_config: CommitmentConfig, ) -> RpcResult> { let config = RpcAccountInfoConfig { - encoding: Some(UiAccountEncoding::Binary64), + encoding: Some(UiAccountEncoding::Base64), commitment: Some(commitment_config), data_slice: None, }; diff --git a/core/src/rpc.rs b/core/src/rpc.rs index af48e4b3d1..513de83414 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -244,8 +244,11 @@ impl JsonRpcRequestProcessor { if let Some(account) = bank.get_account(pubkey) { if account.owner == spl_token_id_v1_0() && encoding == UiAccountEncoding::JsonParsed { response = Some(get_parsed_token_account(bank.clone(), pubkey, account)); - } else if encoding == UiAccountEncoding::Binary && account.data.len() > 128 { - let message = "Encoded binary (base 58) data should be less than 128 bytes, please use Binary64 encoding.".to_string(); + } else if (encoding == UiAccountEncoding::Binary + || encoding == UiAccountEncoding::Base58) + && account.data.len() > 128 + { + let message = "Encoded binary (base 58) data should be less than 128 bytes, please use Base64 encoding.".to_string(); return Err(error::Error { code: error::ErrorCode::InvalidRequest, message, @@ -1266,7 +1269,7 @@ fn check_slice_and_encoding(encoding: &UiAccountEncoding, data_slice_is_some: bo UiAccountEncoding::JsonParsed => { if data_slice_is_some { let message = - "Sliced account data can only be encoded using binary (base 58) or binary64 encoding." + "Sliced account data can only be encoded using binary (base 58) or base64 encoding." .to_string(); Err(error::Error { code: error::ErrorCode::InvalidRequest, @@ -1277,7 +1280,7 @@ fn check_slice_and_encoding(encoding: &UiAccountEncoding, data_slice_is_some: bo Ok(()) } } - UiAccountEncoding::Binary | UiAccountEncoding::Binary64 => Ok(()), + UiAccountEncoding::Binary | UiAccountEncoding::Base58 | UiAccountEncoding::Base64 => Ok(()), } } @@ -3119,7 +3122,7 @@ pub mod tests { bank.store_account(&address, &account); let req = format!( - r#"{{"jsonrpc":"2.0","id":1,"method":"getAccountInfo","params":["{}", {{"encoding":"binary64"}}]}}"#, + r#"{{"jsonrpc":"2.0","id":1,"method":"getAccountInfo","params":["{}", {{"encoding":"base64"}}]}}"#, address ); let res = io.handle_request_sync(&req, meta.clone()); @@ -3127,11 +3130,11 @@ pub mod tests { .expect("actual response deserialization"); assert_eq!( result["result"]["value"]["data"], - json!([base64::encode(&data), "binary64"]), + json!([base64::encode(&data), "base64"]), ); let req = format!( - r#"{{"jsonrpc":"2.0","id":1,"method":"getAccountInfo","params":["{}", {{"encoding":"binary64", "dataSlice": {{"length": 2, "offset": 1}}}}]}}"#, + r#"{{"jsonrpc":"2.0","id":1,"method":"getAccountInfo","params":["{}", {{"encoding":"base64", "dataSlice": {{"length": 2, "offset": 1}}}}]}}"#, address ); let res = io.handle_request_sync(&req, meta.clone()); @@ -3139,7 +3142,7 @@ pub mod tests { .expect("actual response deserialization"); assert_eq!( result["result"]["value"]["data"], - json!([base64::encode(&data[1..3]), "binary64"]), + json!([base64::encode(&data[1..3]), "base64"]), ); let req = format!( diff --git a/core/tests/rpc.rs b/core/tests/rpc.rs index d60a7cad07..9bd5d44d21 100644 --- a/core/tests/rpc.rs +++ b/core/tests/rpc.rs @@ -103,7 +103,7 @@ fn test_rpc_send_tx() { use solana_account_decoder::UiAccountEncoding; use solana_client::rpc_config::RpcAccountInfoConfig; let config = RpcAccountInfoConfig { - encoding: Some(UiAccountEncoding::Binary64), + encoding: Some(UiAccountEncoding::Base64), commitment: None, data_slice: None, }; diff --git a/docs/src/apps/jsonrpc-api.md b/docs/src/apps/jsonrpc-api.md index 422cf006ef..db788e6064 100644 --- a/docs/src/apps/jsonrpc-api.md +++ b/docs/src/apps/jsonrpc-api.md @@ -157,9 +157,9 @@ Returns all information associated with the account of provided Pubkey - `` - Pubkey of account to query, as base-58 encoded string - `` - (optional) Configuration object containing the following optional fields: - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "binary64", or jsonParsed". If parameter not provided, the default encoding is "binary". "binary" is base-58 encoded and limited to Account data of less than 128 bytes. "binary64" will return base64 encoded data for Account data of any size. + - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "base64", or jsonParsed". If parameter not provided, the default encoding is "binary". "binary" is base-58 encoded and limited to Account data of less than 128 bytes. "base64" will return base64 encoded data for Account data of any size. Parsed-JSON encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If parsed-JSON is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. **jsonParsed encoding is UNSTABLE** - - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "binary" or "binary64" encoding. + - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "binary" or "base64" encoding. #### Results: @@ -307,7 +307,7 @@ Returns identity and transaction information about a confirmed block in the ledg #### Parameters: - `` - slot, as u64 integer -- `` - (optional) encoding for each returned Transaction, either "json", "jsonParsed", "binary" (*slow*), or "binary64". If parameter not provided, the default encoding is JSON. **jsonParsed encoding is UNSTABLE** +- `` - (optional) encoding for each returned Transaction, either "json", "jsonParsed", "binary" (*slow*), or "base64". If parameter not provided, the default encoding is JSON. **jsonParsed encoding is UNSTABLE** Parsed-JSON encoding attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If parsed-JSON is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). #### Results: @@ -344,10 +344,10 @@ curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"m {"jsonrpc":"2.0","result":{"blockTime":null,"blockhash":"3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA","parentSlot":429,"previousBlockhash":"mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B","rewards":[],"transactions":[{"meta":{"err":null,"fee":5000,"postBalances":[499998932500,26858640,1,1,1],"preBalances":[499998937500,26858640,1,1,1],"status":{"Ok":null}},"transaction":{"message":{"accountKeys":["3UVYmECPPMZSCqWKfENfuoTv51fTDTWicX9xmBD2euKe","AjozzgE83A3x1sHNUR64hfH7zaEBWeMaFuAN9kQgujrc","SysvarS1otHashes111111111111111111111111111","SysvarC1ock11111111111111111111111111111111","Vote111111111111111111111111111111111111111"],"header":{"numReadonlySignedAccounts":0,"numReadonlyUnsignedAccounts":3,"numRequiredSignatures":1},"instructions":[{"accounts":[1,2,3,0],"data":"37u9WtQpcm6ULa3WRQHmj49EPs4if7o9f1jSRVZpm2dvihR9C8jY4NqEwXUbLwx15HBSNcP1","programIdIndex":4}],"recentBlockhash":"mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B"},"signatures":["2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv"]}}]},"id":1} // Request -curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getConfirmedBlock","params":[430, "binary64"]}' localhost:8899 +curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getConfirmedBlock","params":[430, "base64"]}' localhost:8899 // Result -{"jsonrpc":"2.0","result":{"blockTime":null,"blockhash":"3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA","parentSlot":429,"previousBlockhash":"mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B","rewards":[],"transactions":[{"meta":{"err":null,"fee":5000,"postBalances":[499998932500,26858640,1,1,1],"preBalances":[499998937500,26858640,1,1,1],"status":{"Ok":null}},"transaction":["AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==","binary64"]}]},"id":1} +{"jsonrpc":"2.0","result":{"blockTime":null,"blockhash":"3Eq21vXNB5s86c62bVuUfTeaMif1N2kUqRPBmGRJhyTA","parentSlot":429,"previousBlockhash":"mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B","rewards":[],"transactions":[{"meta":{"err":null,"fee":5000,"postBalances":[499998932500,26858640,1,1,1],"preBalances":[499998937500,26858640,1,1,1],"status":{"Ok":null}},"transaction":["AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==","base64"]}]},"id":1} ``` #### Transaction Structure @@ -465,7 +465,7 @@ Returns transaction details for a confirmed transaction - `` - transaction signature as base-58 encoded string N encoding attempts to use program-specific instruction parsers to return more human-readable and explicit data in the `transaction.message.instructions` list. If parsed-JSON is requested but a parser cannot be found, the instruction falls back to regular JSON encoding (`accounts`, `data`, and `programIdIndex` fields). -- `` - (optional) encoding for the returned Transaction, either "json", "jsonParsed", "binary" (*slow*), or "binary64". If parameter not provided, the default encoding is JSON. **jsonParsed encoding is UNSTABLE** +- `` - (optional) encoding for the returned Transaction, either "json", "jsonParsed", "binary" (*slow*), or "base64". If parameter not provided, the default encoding is JSON. **jsonParsed encoding is UNSTABLE** #### Results: @@ -492,10 +492,10 @@ curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"m {"jsonrpc":"2.0","result":{"meta":{"err":null,"fee":5000,"postBalances":[499998932500,26858640,1,1,1],"preBalances":[499998937500,26858640,1,1,1],"status":{"Ok":null}},"slot":430,"transaction":{"message":{"accountKeys":["3UVYmECPPMZSCqWKfENfuoTv51fTDTWicX9xmBD2euKe","AjozzgE83A3x1sHNUR64hfH7zaEBWeMaFuAN9kQgujrc","SysvarS1otHashes111111111111111111111111111","SysvarC1ock11111111111111111111111111111111","Vote111111111111111111111111111111111111111"],"header":{"numReadonlySignedAccounts":0,"numReadonlyUnsignedAccounts":3,"numRequiredSignatures":1},"instructions":[{"accounts":[1,2,3,0],"data":"37u9WtQpcm6ULa3WRQHmj49EPs4if7o9f1jSRVZpm2dvihR9C8jY4NqEwXUbLwx15HBSNcP1","programIdIndex":4}],"recentBlockhash":"mfcyqEXB3DnHXki6KjjmZck6YjmZLvpAByy2fj4nh6B"},"signatures":["2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv"]}},"id":1} // Request -curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getConfirmedTransaction","params":["2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv", "binary64"]}' localhost:8899 +curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getConfirmedTransaction","params":["2nBhEBYYvfaAe16UMNqRHre4YNSskvuYgx3M6E4JP1oDYvZEJHvoPzyUidNgNX5r9sTyN1J9UxtbCXy2rqYcuyuv", "base64"]}' localhost:8899 // Result -{"jsonrpc":"2.0","result":{"meta":{"err":null,"fee":5000,"postBalances":[499998932500,26858640,1,1,1],"preBalances":[499998937500,26858640,1,1,1],"status":{"Ok":null}},"slot":430,"transaction":["AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==","binary64"]},"id":1} +{"jsonrpc":"2.0","result":{"meta":{"err":null,"fee":5000,"postBalances":[499998932500,26858640,1,1,1],"preBalances":[499998937500,26858640,1,1,1],"status":{"Ok":null}},"slot":430,"transaction":["AVj7dxHlQ9IrvdYVIjuiRFs1jLaDMHixgrv+qtHBwz51L4/ImLZhszwiyEJDIp7xeBSpm/TX5B7mYzxa+fPOMw0BAAMFJMJVqLw+hJYheizSoYlLm53KzgT82cDVmazarqQKG2GQsLgiqktA+a+FDR4/7xnDX7rsusMwryYVUdixfz1B1Qan1RcZLwqvxvJl4/t3zHragsUp0L47E24tAFUgAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAHYUgdNXR0u3xNdiTr072z2DVec9EQQ/wNo1OAAAAAAAtxOUhPBp2WSjUNJEgfvy70BbxI00fZyEPvFHNfxrtEAQQEAQIDADUCAAAAAQAAAAAAAACtAQAAAAAAAAdUE18R96XTJCe+YfRfUp6WP+YKCy/72ucOL8AoBFSpAA==","base64"]},"id":1} ``` ### getEpochInfo @@ -845,9 +845,9 @@ Returns all accounts owned by the provided program Pubkey - `` - Pubkey of program, as base-58 encoded string - `` - (optional) Configuration object containing the following optional fields: - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "binary64" or jsonParsed". If parameter not provided, the default encoding is binary. + - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "base64" or jsonParsed". If parameter not provided, the default encoding is binary. Parsed-JSON encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If parsed-JSON is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. **jsonParsed encoding is UNSTABLE** - - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "binary" or "binary64" encoding. + - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "binary" or "base64" encoding. - (optional) `filters: ` - filter results using various [filter objects](jsonrpc-api.md#filters); account must meet all filter criteria to be included in results ##### Filters: @@ -1100,9 +1100,9 @@ Returns all SPL Token accounts by approved Delegate. **UNSTABLE** * `programId: ` - Pubkey of the Token program ID that owns the accounts, as base-58 encoded string - `` - (optional) Configuration object containing the following optional fields: - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "binary64" or jsonParsed". If parameter not provided, the default encoding is binary. + - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "base64" or jsonParsed". If parameter not provided, the default encoding is binary. Parsed-JSON encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If parsed-JSON is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. **jsonParsed encoding is UNSTABLE** - - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "binary" or "binary64" encoding. + - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "binary" or "base64" encoding. #### Results: @@ -1137,9 +1137,9 @@ Returns all SPL Token accounts by token owner. **UNSTABLE** * `programId: ` - Pubkey of the Token program ID that owns the accounts, as base-58 encoded string - `` - (optional) Configuration object containing the following optional fields: - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "binary64" or jsonParsed". If parameter not provided, the default encoding is binary. + - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "base64" or jsonParsed". If parameter not provided, the default encoding is binary. Parsed-JSON encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If parsed-JSON is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. **jsonParsed encoding is UNSTABLE** - - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "binary" or "binary64" encoding. + - (optional) `dataSlice: ` - limit the returned account data using the provided `offset: ` and `length: ` fields; only available for "binary" or "base64" encoding. #### Results: @@ -1457,7 +1457,7 @@ Subscribe to an account to receive notifications when the lamports or data for a - `` - account Pubkey, as base-58 encoded string - `` - (optional) Configuration object containing the following optional fields: - `` - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "binary64" or jsonParsed". If parameter not provided, the default encoding is binary. + - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "base64" or jsonParsed". If parameter not provided, the default encoding is binary. Parsed-JSON encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If parsed-JSON is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. **jsonParsed encoding is UNSTABLE** #### Results: @@ -1567,7 +1567,7 @@ Subscribe to a program to receive notifications when the lamports or data for a - `` - program_id Pubkey, as base-58 encoded string - `` - (optional) Configuration object containing the following optional fields: - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "binary64" or jsonParsed". If parameter not provided, the default encoding is binary. + - (optional) `encoding: ` - encoding for Account data, either "binary" (*slow*), "base64" or jsonParsed". If parameter not provided, the default encoding is binary. Parsed-JSON encoding attempts to use program-specific state parsers to return more human-readable and explicit account state data. If parsed-JSON is requested but a parser cannot be found, the field falls back to binary encoding, detectable when the `data` field is type ``. **jsonParsed encoding is UNSTABLE** - (optional) `filters: ` - filter results using various [filter objects](jsonrpc-api.md#filters); account must meet all filter criteria to be included in results diff --git a/ledger-tool/src/bigtable.rs b/ledger-tool/src/bigtable.rs index 8a2b9d1dda..3f137f1d3e 100644 --- a/ledger-tool/src/bigtable.rs +++ b/ledger-tool/src/bigtable.rs @@ -134,7 +134,7 @@ async fn upload( for (i, slot) in blocks_to_upload.iter().enumerate() { let _ = match blockstore.get_confirmed_block( *slot, - Some(solana_transaction_status::UiTransactionEncoding::Binary64), + Some(solana_transaction_status::UiTransactionEncoding::Base64), ) { Ok(confirmed_block) => sender.send((*slot, Some(confirmed_block))), Err(err) => { @@ -231,7 +231,7 @@ async fn block(slot: Slot) -> Result<(), Box> { .map_err(|err| format!("Failed to connect to storage: {:?}", err))?; let block = bigtable - .get_confirmed_block(slot, UiTransactionEncoding::Binary64) + .get_confirmed_block(slot, UiTransactionEncoding::Base64) .await?; println!("Slot: {}", slot); @@ -276,7 +276,7 @@ async fn confirm(signature: &Signature, verbose: bool) -> Result<(), Box { diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index 1e9b2ff984..abfab778cb 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -1959,7 +1959,7 @@ impl Blockstore { None => return Ok(vec![]), Some((slot, _)) => { let confirmed_block = self - .get_confirmed_block(slot, Some(UiTransactionEncoding::Binary64)) + .get_confirmed_block(slot, Some(UiTransactionEncoding::Base64)) .map_err(|err| { BlockstoreError::IO(IOError::new( ErrorKind::Other, @@ -2013,7 +2013,7 @@ impl Blockstore { None => (0, HashSet::new()), Some((slot, _)) => { let confirmed_block = self - .get_confirmed_block(slot, Some(UiTransactionEncoding::Binary64)) + .get_confirmed_block(slot, Some(UiTransactionEncoding::Base64)) .map_err(|err| { BlockstoreError::IO(IOError::new( ErrorKind::Other, diff --git a/stake-monitor/src/lib.rs b/stake-monitor/src/lib.rs index e8876a364b..d4ee6a6fb2 100644 --- a/stake-monitor/src/lib.rs +++ b/stake-monitor/src/lib.rs @@ -291,7 +291,7 @@ fn load_blocks( let mut blocks = vec![]; for slot in slots.into_iter() { let block = - rpc_client.get_confirmed_block_with_encoding(slot, UiTransactionEncoding::Binary64)?; + rpc_client.get_confirmed_block_with_encoding(slot, UiTransactionEncoding::Base64)?; blocks.push((slot, block)); } Ok(blocks) diff --git a/transaction-status/src/lib.rs b/transaction-status/src/lib.rs index 78b2322a8e..063ef61203 100644 --- a/transaction-status/src/lib.rs +++ b/transaction-status/src/lib.rs @@ -217,8 +217,9 @@ pub struct TransactionWithStatusMeta { #[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq)] #[serde(rename_all = "camelCase")] pub enum UiTransactionEncoding { - Binary, // base-58 encoded string. SLOW! Avoid this encoding - Binary64, // base-64 encoded string + Binary, // Legacy. Retained for RPC backwards compatibility + Base64, + Base58, Json, JsonParsed, } @@ -237,7 +238,11 @@ impl EncodedTransaction { UiTransactionEncoding::Binary => EncodedTransaction::LegacyBinary( bs58::encode(bincode::serialize(&transaction).unwrap()).into_string(), ), - UiTransactionEncoding::Binary64 => EncodedTransaction::Binary( + UiTransactionEncoding::Base58 => EncodedTransaction::Binary( + bs58::encode(bincode::serialize(&transaction).unwrap()).into_string(), + encoding, + ), + UiTransactionEncoding::Base64 => EncodedTransaction::Binary( base64::encode(bincode::serialize(&transaction).unwrap()), encoding, ), @@ -309,14 +314,16 @@ impl EncodedTransaction { .ok() .and_then(|bytes| bincode::deserialize(&bytes).ok()), EncodedTransaction::Binary(blob, encoding) => match *encoding { - UiTransactionEncoding::Binary64 => base64::decode(blob) - .ok() - .and_then(|bytes| bincode::deserialize(&bytes).ok()), - UiTransactionEncoding::Binary => bs58::decode(blob) + UiTransactionEncoding::Base58 => bs58::decode(blob) .into_vec() .ok() .and_then(|bytes| bincode::deserialize(&bytes).ok()), - UiTransactionEncoding::Json | UiTransactionEncoding::JsonParsed => None, + UiTransactionEncoding::Base64 => base64::decode(blob) + .ok() + .and_then(|bytes| bincode::deserialize(&bytes).ok()), + UiTransactionEncoding::Binary + | UiTransactionEncoding::Json + | UiTransactionEncoding::JsonParsed => None, }, } } diff --git a/watchtower/src/main.rs b/watchtower/src/main.rs index b8abed2aab..67e22b00c5 100644 --- a/watchtower/src/main.rs +++ b/watchtower/src/main.rs @@ -226,7 +226,7 @@ fn load_blocks( let mut blocks = vec![]; for slot in slots.into_iter() { let block = - rpc_client.get_confirmed_block_with_encoding(slot, UiTransactionEncoding::Binary64)?; + rpc_client.get_confirmed_block_with_encoding(slot, UiTransactionEncoding::Base64)?; blocks.push((slot, block)); } Ok(blocks)