diff --git a/Cargo.lock b/Cargo.lock index f7f2c075e..6619c5156 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -727,6 +727,11 @@ dependencies = [ "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "hex" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "hex-literal" version = "0.1.2" @@ -2254,6 +2259,7 @@ dependencies = [ "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "generic-array 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.88 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2938,6 +2944,7 @@ dependencies = [ "checksum globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4743617a7464bbda3c8aec8558ff2f9429047e025771037df561d383337ff865" "checksum h2 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "30e0b8e55b4d7ffedade2b9605851f8e85f5010663e7ad170ef3c0f0681bc43f" "checksum hashbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da" +"checksum hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" "checksum hex-literal 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae0e5c30fb65e661a0e39860e37100dfbe4d39aff865e9357a6a4ed0b5bbf303" "checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" "checksum http 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "1a10e5b573b9a0146545010f50772b9e8b1dd0a256564cc4307694c68832a2f5" diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index daf7ede1d..8ca7e18b8 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -11,6 +11,7 @@ edition = "2018" [dependencies] bincode = "1.1.2" bs58 = "0.2.0" +hex = "0.3.2" byteorder = "1.2.1" chrono = { version = "0.4.0", features = ["serde"] } generic-array = { version = "0.12.0", default-features = false, features = ["serde"] } diff --git a/sdk/src/account.rs b/sdk/src/account.rs index b72161363..26d4b3db5 100644 --- a/sdk/src/account.rs +++ b/sdk/src/account.rs @@ -1,8 +1,9 @@ use crate::pubkey::Pubkey; +use std::{cmp, fmt}; /// An Account with userdata that is stored on chain #[repr(C)] -#[derive(Serialize, Deserialize, Debug, Clone, Default, Eq, PartialEq)] +#[derive(Serialize, Deserialize, Clone, Default, Eq, PartialEq)] pub struct Account { /// tokens in the account pub tokens: u64, @@ -14,6 +15,29 @@ pub struct Account { pub executable: bool, } +impl fmt::Debug for Account { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let userdata_len = cmp::min(64, self.userdata.len()); + let userdata_str = if userdata_len > 0 { + format!( + " userdata: {}", + hex::encode(self.userdata[..userdata_len].to_vec()) + ) + } else { + "".to_string() + }; + write!( + f, + "Account {{ tokens: {} userdata.len: {} owner: {} executable: {}{} }}", + self.tokens, + self.userdata.len(), + self.owner, + self.executable, + userdata_str, + ) + } +} + impl Account { // TODO do we want to add executable and leader_owner even though they should always be false/default? pub fn new(tokens: u64, space: usize, owner: Pubkey) -> Account {