{
    "version": "0.1.0",
    "name": "pyth_solana_receiver",
    "instructions": [
        {
            "name": "initialize",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "config",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "initialConfig",
                    "type": {
                        "defined": "Config"
                    }
                }
            ]
        },
        {
            "name": "requestGovernanceAuthorityTransfer",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "config",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "targetGovernanceAuthority",
                    "type": "publicKey"
                }
            ]
        },
        {
            "name": "acceptGovernanceAuthorityTransfer",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "config",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": []
        },
        {
            "name": "setDataSources",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "config",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "validDataSources",
                    "type": {
                        "vec": {
                            "defined": "DataSource"
                        }
                    }
                }
            ]
        },
        {
            "name": "setFee",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "config",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "singleUpdateFeeInLamports",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "setWormholeAddress",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "config",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "wormhole",
                    "type": "publicKey"
                }
            ]
        },
        {
            "name": "setMinimumSignatures",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": false,
                    "isSigner": true
                },
                {
                    "name": "config",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "minimumSignatures",
                    "type": "u8"
                }
            ]
        },
        {
            "name": "postUpdateAtomic",
            "docs": [
                "Post a price update using a VAA and a MerklePriceUpdate.",
                "This function allows you to post a price update in a single transaction.",
                "Compared to post_update, it is less secure since you won't be able to verify all guardian signatures if you use this function because of transaction size limitations.",
                "Typically, you can fit 5 guardian signatures in a transaction that uses this."
            ],
            "accounts": [
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "guardianSet",
                    "isMut": false,
                    "isSigner": false,
                    "docs": [
                        "Instead we do the same steps in deserialize_guardian_set_checked."
                    ]
                },
                {
                    "name": "config",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "treasury",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "priceUpdateAccount",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The contraint is such that either the price_update_account is uninitialized or the payer is the write_authority.",
                        "Pubkey::default() is the SystemProgram on Solana and it can't sign so it's impossible that price_update_account.write_authority == Pubkey::default() once the account is initialized"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "writeAuthority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "params",
                    "type": {
                        "defined": "PostUpdateAtomicParams"
                    }
                }
            ]
        },
        {
            "name": "postUpdate",
            "docs": [
                "Post a price update using an encoded_vaa account and a MerklePriceUpdate calldata.",
                "This should be called after the client has already verified the Vaa via the Wormhole contract.",
                "Check out target_chains/solana/cli/src/main.rs for an example of how to do this."
            ],
            "accounts": [
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "encodedVaa",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "config",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "treasury",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "priceUpdateAccount",
                    "isMut": true,
                    "isSigner": true,
                    "docs": [
                        "The contraint is such that either the price_update_account is uninitialized or the payer is the write_authority.",
                        "Pubkey::default() is the SystemProgram on Solana and it can't sign so it's impossible that price_update_account.write_authority == Pubkey::default() once the account is initialized"
                    ]
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "writeAuthority",
                    "isMut": false,
                    "isSigner": true
                }
            ],
            "args": [
                {
                    "name": "params",
                    "type": {
                        "defined": "PostUpdateParams"
                    }
                }
            ]
        },
        {
            "name": "reclaimRent",
            "accounts": [
                {
                    "name": "payer",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "priceUpdateAccount",
                    "isMut": true,
                    "isSigner": false
                }
            ],
            "args": []
        }
    ],
    "accounts": [
        {
            "name": "Config",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "governanceAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "targetGovernanceAuthority",
                        "type": {
                            "option": "publicKey"
                        }
                    },
                    {
                        "name": "wormhole",
                        "type": "publicKey"
                    },
                    {
                        "name": "validDataSources",
                        "type": {
                            "vec": {
                                "defined": "DataSource"
                            }
                        }
                    },
                    {
                        "name": "singleUpdateFeeInLamports",
                        "type": "u64"
                    },
                    {
                        "name": "minimumSignatures",
                        "type": "u8"
                    }
                ]
            }
        },
        {
            "name": "priceUpdateV2",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "writeAuthority",
                        "type": "publicKey"
                    },
                    {
                        "name": "verificationLevel",
                        "type": {
                            "defined": "VerificationLevel"
                        }
                    },
                    {
                        "name": "priceMessage",
                        "type": {
                            "defined": "PriceFeedMessage"
                        }
                    },
                    {
                        "name": "postedSlot",
                        "type": "u64"
                    }
                ]
            }
        }
    ],
    "types": [
        {
            "name": "PriceFeedMessage",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "feedId",
                        "type": {
                            "array": ["u8", 32]
                        }
                    },
                    {
                        "name": "price",
                        "type": "i64"
                    },
                    {
                        "name": "conf",
                        "type": "u64"
                    },
                    {
                        "name": "exponent",
                        "type": "i32"
                    },
                    {
                        "name": "publishTime",
                        "type": "i64"
                    },
                    {
                        "name": "prevPublishTime",
                        "type": "i64"
                    },
                    {
                        "name": "emaPrice",
                        "type": "i64"
                    },
                    {
                        "name": "emaConf",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "MerklePriceUpdate",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "message",
                        "type": "bytes"
                    },
                    {
                        "name": "proof",
                        "type": {
                            "vec": {
                                "array": ["u8", 20]
                            }
                        }
                    }
                ]
            }
        },
        {
            "name": "DataSource",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "chain",
                        "type": "u16"
                    },
                    {
                        "name": "emitter",
                        "type": "publicKey"
                    }
                ]
            }
        },
        {
            "name": "PostMultiUpdatesAtomicParams",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "vaa",
                        "type": "bytes"
                    },
                    {
                        "name": "merklePriceUpdates",
                        "type": {
                            "vec": {
                                "defined": "MerklePriceUpdate"
                            }
                        }
                    }
                ]
            }
        },
        {
            "name": "PostUpdateAtomicParams",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "vaa",
                        "type": "bytes"
                    },
                    {
                        "name": "merklePriceUpdate",
                        "type": {
                            "defined": "MerklePriceUpdate"
                        }
                    }
                ]
            }
        },
        {
            "name": "PostUpdateParams",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "merklePriceUpdate",
                        "type": {
                            "defined": "MerklePriceUpdate"
                        }
                    }
                ]
            }
        },
        {
            "name": "VerificationLevel",
            "docs": [
                "* This enum represents how many guardian signatures were checked for a Pythnet price update\n * If full, guardian quorum has been attained\n * If partial, at least config.minimum signatures have been verified, but in the case config.minimum_signatures changes in the future we also include the number of signatures that were checked"
            ],
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Partial",
                        "fields": [
                            {
                                "name": "numSignatures",
                                "type": "u8"
                            }
                        ]
                    },
                    {
                        "name": "Full"
                    }
                ]
            }
        }
    ],
    "errors": [
        {
            "code": 6000,
            "name": "InvalidWormholeMessage",
            "msg": "Received an invalid wormhole message"
        },
        {
            "code": 6001,
            "name": "DeserializeMessageFailed",
            "msg": "An error occurred when deserializing the message"
        },
        {
            "code": 6002,
            "name": "InvalidPriceUpdate",
            "msg": "Received an invalid price update"
        },
        {
            "code": 6003,
            "name": "UnsupportedMessageType",
            "msg": "This type of message is not supported currently"
        },
        {
            "code": 6004,
            "name": "InvalidDataSource",
            "msg": "The tuple emitter chain, emitter doesn't match one of the valid data sources."
        },
        {
            "code": 6005,
            "name": "InsufficientFunds",
            "msg": "Funds are insufficient to pay the receiving fee"
        },
        {
            "code": 6006,
            "name": "WrongWriteAuthority",
            "msg": "This signer can't write to price update account"
        },
        {
            "code": 6007,
            "name": "WrongVaaOwner",
            "msg": "The posted VAA account has the wrong owner."
        },
        {
            "code": 6008,
            "name": "DeserializeVaaFailed",
            "msg": "An error occurred when deserializing the VAA."
        },
        {
            "code": 6009,
            "name": "InsufficientGuardianSignatures",
            "msg": "The number of guardian signatures is below the minimum"
        },
        {
            "code": 6010,
            "name": "InvalidVaaVersion",
            "msg": "Invalid VAA version"
        },
        {
            "code": 6011,
            "name": "GuardianSetMismatch",
            "msg": "Guardian set version in the VAA doesn't match the guardian set passed"
        },
        {
            "code": 6012,
            "name": "InvalidGuardianOrder",
            "msg": "Guardian signature indices must be increasing"
        },
        {
            "code": 6013,
            "name": "InvalidGuardianIndex",
            "msg": "Guardian index exceeds the number of guardians in the set"
        },
        {
            "code": 6014,
            "name": "InvalidSignature",
            "msg": "A VAA signature is invalid"
        },
        {
            "code": 6015,
            "name": "InvalidGuardianKeyRecovery",
            "msg": "The recovered guardian public key doesn't match the guardian set"
        },
        {
            "code": 6016,
            "name": "WrongGuardianSetOwner",
            "msg": "The guardian set account is owned by the wrong program"
        },
        {
            "code": 6017,
            "name": "InvalidGuardianSetPda",
            "msg": "The Guardian Set account doesn't match the PDA derivation"
        },
        {
            "code": 6018,
            "name": "GuardianSetExpired",
            "msg": "The Guardian Set is expired"
        },
        {
            "code": 6019,
            "name": "GovernanceAuthorityMismatch",
            "msg": "The signer is not authorized to perform this governance action"
        },
        {
            "code": 6020,
            "name": "TargetGovernanceAuthorityMismatch",
            "msg": "The signer is not authorized to accept the governance authority"
        },
        {
            "code": 6021,
            "name": "NonexistentGovernanceAuthorityTransferRequest",
            "msg": "The governance authority needs to request a transfer first"
        }
    ]
}
