lib.rs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. // This file is autogenerated with https://github.com/acheroncrypto/native-to-anchor
  2. use anchor_lang::prelude::*;
  3. declare_id!("11111111111111111111111111111111");
  4. #[program]
  5. pub mod spl_binary_oracle_pair {
  6. use super::*;
  7. pub fn init_pool(
  8. ctx: Context<InitPool>,
  9. mint_end_slot: u64,
  10. decide_end_slot: u64,
  11. bump_seed: u8,
  12. ) -> Result<()> {
  13. Ok(())
  14. }
  15. pub fn deposit(ctx: Context<Deposit>, arg: u64) -> Result<()> {
  16. Ok(())
  17. }
  18. pub fn withdraw(ctx: Context<Withdraw>, arg: u64) -> Result<()> {
  19. Ok(())
  20. }
  21. pub fn decide(ctx: Context<Decide>, arg: bool) -> Result<()> {
  22. Ok(())
  23. }
  24. }
  25. #[derive(Accounts)]
  26. pub struct InitPool<'info> {
  27. #[account(mut)]
  28. pool: AccountInfo<'info>,
  29. authority: AccountInfo<'info>,
  30. decider: AccountInfo<'info>,
  31. deposit_token_mint: AccountInfo<'info>,
  32. #[account(mut)]
  33. deposit_account: AccountInfo<'info>,
  34. #[account(mut)]
  35. token_pass_mint: AccountInfo<'info>,
  36. #[account(mut)]
  37. token_fail_mint: AccountInfo<'info>,
  38. rent: Sysvar<'info, Rent>,
  39. token_program: Program<'info, Token>,
  40. }
  41. #[derive(Accounts)]
  42. pub struct Deposit<'info> {
  43. pool: AccountInfo<'info>,
  44. authority: AccountInfo<'info>,
  45. user_transfer_authority: Signer<'info>,
  46. #[account(mut)]
  47. user_token_account: AccountInfo<'info>,
  48. #[account(mut)]
  49. pool_deposit_token_account: AccountInfo<'info>,
  50. #[account(mut)]
  51. token_pass_mint: AccountInfo<'info>,
  52. #[account(mut)]
  53. token_fail_mint: AccountInfo<'info>,
  54. #[account(mut)]
  55. token_pass_destination_account: AccountInfo<'info>,
  56. #[account(mut)]
  57. token_fail_destination_account: AccountInfo<'info>,
  58. clock: Sysvar<'info, Clock>,
  59. token_program: Program<'info, Token>,
  60. }
  61. #[derive(Accounts)]
  62. pub struct Withdraw<'info> {
  63. pool: AccountInfo<'info>,
  64. authority: AccountInfo<'info>,
  65. user_transfer_authority: Signer<'info>,
  66. #[account(mut)]
  67. pool_deposit_token_account: AccountInfo<'info>,
  68. #[account(mut)]
  69. token_pass_user_account: AccountInfo<'info>,
  70. #[account(mut)]
  71. token_fail_user_account: AccountInfo<'info>,
  72. #[account(mut)]
  73. token_pass_mint: AccountInfo<'info>,
  74. #[account(mut)]
  75. token_fail_mint: AccountInfo<'info>,
  76. #[account(mut)]
  77. user_token_destination_account: AccountInfo<'info>,
  78. clock: Sysvar<'info, Clock>,
  79. token_program: Program<'info, Token>,
  80. }
  81. #[derive(Accounts)]
  82. pub struct Decide<'info> {
  83. #[account(mut)]
  84. pool: AccountInfo<'info>,
  85. decider: Signer<'info>,
  86. clock: Sysvar<'info, Clock>,
  87. }
  88. #[account]
  89. pub struct Pool {
  90. /// Initialized state.
  91. pub version: u8,
  92. /// Nonce used in program address.
  93. pub bump_seed: u8,
  94. /// Program ID of the tokens
  95. pub token_program_id: Pubkey,
  96. /// Account to deposit into
  97. pub deposit_account: Pubkey,
  98. /// Mint information for token Pass
  99. pub token_pass_mint: Pubkey,
  100. /// Mint information for token Fail
  101. pub token_fail_mint: Pubkey,
  102. /// decider key
  103. pub decider: Pubkey,
  104. /// mint end slot
  105. pub mint_end_slot: u64,
  106. /// decide end slot
  107. pub decide_end_slot: u64,
  108. /// decision status
  109. pub decision: Decision,
  110. }
  111. #[derive(AnchorSerialize, AnchorDeserialize)]
  112. pub enum Decision {
  113. /// Decision was not made
  114. Undecided,
  115. /// Decision set at Pass
  116. Pass,
  117. /// Decision set at Fail
  118. Fail,
  119. }
  120. #[error_code]
  121. pub enum PoolError {
  122. /// Pool account already in use
  123. #[msg("Pool account already in use")]
  124. AlreadyInUse,
  125. /// Deposit account already in use
  126. #[msg("Deposit account already in use")]
  127. DepositAccountInUse,
  128. /// Token mint account already in use
  129. #[msg("Token account already in use")]
  130. TokenMintInUse,
  131. /// Invalid seed or bump_seed was provided
  132. #[msg("Failed to generate program account because of invalid data")]
  133. InvalidAuthorityData,
  134. /// Invalid authority account provided
  135. #[msg("Invalid authority account provided")]
  136. InvalidAuthorityAccount,
  137. /// Lamport balance below rent-exempt threshold.
  138. #[msg("Lamport balance below rent-exempt threshold")]
  139. NotRentExempt,
  140. /// Expected an SPL Token mint
  141. #[msg("Input token mint account is not valid")]
  142. InvalidTokenMint,
  143. /// Amount should be more than zero
  144. #[msg("Amount should be more than zero")]
  145. InvalidAmount,
  146. /// Wrong decider account
  147. #[msg("Wrong decider account was sent")]
  148. WrongDeciderAccount,
  149. /// Signature missing in transaction
  150. #[msg("Signature missing in transaction")]
  151. SignatureMissing,
  152. /// Decision was already made for this pool
  153. #[msg("Decision was already made for this pool")]
  154. DecisionAlreadyMade,
  155. /// Decision can't be made in current slot
  156. #[msg("Decision can't be made in current slot")]
  157. InvalidSlotForDecision,
  158. /// Deposit can't be made in current slot
  159. #[msg("Deposit can't be made in current slot")]
  160. InvalidSlotForDeposit,
  161. /// No decision has been made yet
  162. #[msg("No decision has been made yet")]
  163. NoDecisionMadeYet,
  164. }