mpl-token-metadata icon indicating copy to clipboard operation
mpl-token-metadata copied to clipboard

mpl_token_metadata::accounts::Metadata::from_bytes() fails

Open julianbraha opened this issue 1 year ago • 6 comments

I'm trying to decode some token metadata, and mpl_token_metadata::accounts::Metadata::from_bytes() works for most tokens, but it's failing for 2 that I've found.

The raw data is encoded in base64, so I've written a function like this:

// decode the base64 string, then decode those bytes to metadata
fn decode_base64_to_metadata(data: String) -> Metadata {
    let decoded_base64: Vec<u8> =
        base64::Engine::decode(&base64::engine::general_purpose::STANDARD, data).unwrap();

    Metadata::from_bytes(&decoded_base64).unwrap()
}

But the last line Metadata::from_bytes(&decoded_base64).unwrap() is panicking when I call the function with these two strings:

  1. BIujMfe1f4+f62sriKcmF5frjExh19LNVTFjEoOTb4ZALGkR7Ylov5UYZr/5UvSvSNprO4d+aL0S4JjpVvWiOb4VAAAATG9sbGFwYWxvb3phIDIwMTggQXJ0BgAAADExNDgzMxAAAABsb2xsYXBhbG9vemFhcnQzAAABAQAAAIujMfe1f4+f62sriKcmF5frjExh19LNVTFjEoOTb4ZAAWQAASAgICAgAAABAQAAAIujMfe1f4+f62sriKcmF5frjExh19LNVTFjEoOTb4ZAAWQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

and:

  1. BNUAmMn7BYQUxe8+WzdLfzW1gKg4MPTOih9dR4ffxbCuffD7fiz0KEiFGG+ecMNdO7HiYZdCLK3sFCG+HSXWHN8gAAAARmx1bmsgRG9ua2V5ICM1Mjg0AAAAAAAAAAAAAAAAAAAKAAAARkxVTksAAAAAAMgAAABodHRwczovL2Fyd2VhdmUubmV0L1N2TC1Mc2NCZ3I1LW9jTEJWeXJSdEdfcDNHNDZPNTJJcE1KaXRoWE5xQzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQBAQIAAADVAJjJ+wWEFMXvPls3S381tYCoODD0zoofXUeH38WwrgEAvkiveUxiDgbILHv60zihQvroPzQHmLg7cfM4sKkmrtsAZAEBAf0AAQFbL7vcSRP9/ZYiXPFua2KDNbcdW/gYhL9tUUZW1HrZwgAza8zyJZA4AfNZvjo5NXQ0ZE34CUGp3EjvNwAZ1QCYyfsFhBTF7z5bN0t/NbWAqDgw9M6KH11Hh9/FsK4AGQEBAf0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

The panics I get are:

`Err` value: Custom { kind: InvalidInput, error: "Invalid Option representation: 32. The first byte must be 0 or 1" }

and

`Err` value: Custom { kind: InvalidInput, error: "Invalid Option representation: 51. The first byte must be 0 or 1" }

However, it works just fine for many others, for example:

  • BAJ1ZqOecDcJSJlLWEeVJqYqAzJvsU73TL2Jgt2pFgWBLlGyyN/11z+5nu30lmHn6VqbuESYLKZ6rpEo09v71vEgAAAAQk9CIElTIFRIRSBUSUNLRVIAAAAAAAAAAAAAAAAAAAAKAAAAJEJPQgAAAAAAAMgAAABodHRwczovL2JhZmtyZWlib3pvdmtxeHRybm56aXV3aDR4dm1qMzVkeTZ4azJjYmp2M3dna3U2dW5pcWViZDdjdjd5LmlwZnMubmZ0c3RvcmFnZS5saW5rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf8BAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

If you attempt to decode these using https://www.base64decode.org/, then you'll see in the text that they correspond to Flunk Donkey #5284, BOB IS THE TICKER, and Lollapalooza 2018 Art

I'm using the latest version of the mpl-token-metadata crate (3.2.3) and the latest version of the base64 crate (0.21.5).

julianbraha avatar Nov 28 '23 20:11 julianbraha