@drift-labs/sdk
Version:
SDK for Drift Protocol
629 lines (628 loc) • 19.7 kB
JSON
{
"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"
}
]
}