Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PriceUpdateV2 LEN #1871

Open
adrena-orex opened this issue Sep 4, 2024 · 4 comments
Open

PriceUpdateV2 LEN #1871

adrena-orex opened this issue Sep 4, 2024 · 4 comments

Comments

@adrena-orex
Copy link

Issue

Deserializing an PriceUpdateV2 account info using AnchorDeserialize::try_from_slice(data) fails.

Note: Using PriceUpdateV2::try_deserialize(&mut data) works.

Cause

The PriceUpdateV2 structure have a size of 136 bytes, while LEN is 134 and onchain accounts are 134 bytes.

Onchain Account Example

Screenshot 2024-09-04 at 17 05 43

https://explorer.solana.com/address/7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE?cluster=devnet

PriceUpdateV2 struct in the code

#[account]
#[derive(BorshSchema)]
pub struct PriceUpdateV2 {
    pub write_authority:    Pubkey,
    pub verification_level: VerificationLevel,
    pub price_message:      PriceFeedMessage,
    pub posted_slot:        u64,
}

impl PriceUpdateV2 {
    pub const LEN: usize = 8 + 32 + 2 + 32 + 8 + 8 + 4 + 8 + 8 + 8 + 8 + 8;
}
@JohnnnyWang
Copy link

Yes, same question, is it correct to launch on mainnet (or TestNet)?
In my local solana-test-validator, the size is also 136

@mariobern
Copy link

hey guys, thank you for the question

@aditya520 @guibescos could you take a look please?

@guibescos
Copy link
Contributor

I'm pretty confused about this. The size of the struct is 134, we even have a test to check this https://github.com/pyth-network/pyth-crosschain/blob/main/target_chains/solana/pyth_solana_receiver_sdk/src/price_update.rs#L238.

The reason why AnchorDeserialize::try_from_slice(data) fails is because it expects the PriceUpdateV2 to start at the beginning of the bytes but instead there's the Anchor 8 bytes discriminator.
PriceUpdateV2::try_deserialize handles the discriminator properly.

@J0HnNy-W
Copy link

Yes, this is really strange.

I checked the class in vscode and found that the size is 136.

image

At the same time, I wrote a mock pyth program and found that the solana log output of executing this method is also 136
image

size of price_update_v2: 136

Version:

pyth-solana-receiver-sdk ="0.3"

My Device:
I use a macbook pro M2 max, and develop with anchor 0.30.1, solana-cli 1.18.17 (src:b685182a; feat:4215500110, client:SolanaLabs)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants