|
| 1 | +const sol = @import("solana-program-sdk"); |
| 2 | + |
| 3 | +pub const TokenError = error{ |
| 4 | + NotRentExempt, |
| 5 | + InsufficientFunds, |
| 6 | + InvalidMint, |
| 7 | + MintMismatch, |
| 8 | + OwnerMismatch, |
| 9 | + FixedSupply, |
| 10 | + AlreadyInUse, |
| 11 | + InvalidNumberOfProvidedSigners, |
| 12 | + InvalidNumberOfRequiredSigners, |
| 13 | + UninitializedState, |
| 14 | + NativeNotSupported, |
| 15 | + NonNativeHasBalance, |
| 16 | + InvalidInstruction, |
| 17 | + InvalidState, |
| 18 | + Overflow, |
| 19 | + AuthorityTypeNotSupported, |
| 20 | + MintCannotFreeze, |
| 21 | + AccountFrozen, |
| 22 | + MintDecimalsMismatch, |
| 23 | + NonNativeNotSupported, |
| 24 | + // generic program errors |
| 25 | + InvalidArgument, |
| 26 | + InvalidInstructionData, |
| 27 | + InvalidAccountData, |
| 28 | + AccountDataTooSmall, |
| 29 | + //InsufficientFunds, |
| 30 | + IncorrectProgramId, |
| 31 | + MissingRequiredSignature, |
| 32 | + AccountAlreadyInitialized, |
| 33 | + UninitializedAccount, |
| 34 | + NotEnoughAccountKeys, |
| 35 | + AccountBorrowFailed, |
| 36 | + MaxSeedLengthExceeded, |
| 37 | + InvalidSeeds, |
| 38 | + BorshIoError, |
| 39 | + AccountNotRentExempt, |
| 40 | + UnsupportedSysvar, |
| 41 | + IllegalOwner, |
| 42 | + MaxAccountsDataAllocationsExceeded, |
| 43 | + InvalidRealloc, |
| 44 | + MaxInstructionTraceLengthExceeded, |
| 45 | + BuiltinProgramsMustConsumeComputeUnits, |
| 46 | + InvalidAccountOwner, |
| 47 | + ArithmeticOverflow, |
| 48 | + Immutable, |
| 49 | + IncorrectAuthority, |
| 50 | +}; |
| 51 | + |
| 52 | +pub fn logError(e: TokenError) void { |
| 53 | + switch (e) { |
| 54 | + TokenError.NotRentExempt => { |
| 55 | + sol.log("Error: Lamport balance below rent-exempt threshold"); |
| 56 | + }, |
| 57 | + TokenError.InsufficientFunds => { |
| 58 | + sol.log("Error: insufficient funds"); |
| 59 | + }, |
| 60 | + TokenError.InvalidMint => { |
| 61 | + sol.log("Error: Invalid Mint"); |
| 62 | + }, |
| 63 | + TokenError.MintMismatch => { |
| 64 | + sol.log("Error: Account not associated with this Mint"); |
| 65 | + }, |
| 66 | + TokenError.OwnerMismatch => { |
| 67 | + sol.log("Error: owner does not match"); |
| 68 | + }, |
| 69 | + TokenError.FixedSupply => { |
| 70 | + sol.log("Error: the total supply of this token is fixed"); |
| 71 | + }, |
| 72 | + TokenError.AlreadyInUse => { |
| 73 | + sol.log("Error: account or token already in use"); |
| 74 | + }, |
| 75 | + TokenError.InvalidNumberOfProvidedSigners => { |
| 76 | + sol.log("Error: Invalid number of provided signers"); |
| 77 | + }, |
| 78 | + TokenError.InvalidNumberOfRequiredSigners => { |
| 79 | + sol.log("Error: Invalid number of required signers"); |
| 80 | + }, |
| 81 | + TokenError.UninitializedState => { |
| 82 | + sol.log("Error: State is uninitialized"); |
| 83 | + }, |
| 84 | + TokenError.NativeNotSupported => { |
| 85 | + sol.log("Error: Instruction does not support native tokens"); |
| 86 | + }, |
| 87 | + TokenError.NonNativeHasBalance => { |
| 88 | + sol.log("Error: Non-native account can only be closed if its balance is zero"); |
| 89 | + }, |
| 90 | + TokenError.InvalidInstruction => { |
| 91 | + sol.log("Error: Invalid instruction"); |
| 92 | + }, |
| 93 | + TokenError.InvalidState => { |
| 94 | + sol.log("Error: Invalid account state for operation"); |
| 95 | + }, |
| 96 | + TokenError.Overflow => { |
| 97 | + sol.log("Error: Operation overflowed"); |
| 98 | + }, |
| 99 | + TokenError.AuthorityTypeNotSupported => { |
| 100 | + sol.log("Error: Account does not support specified authority type"); |
| 101 | + }, |
| 102 | + TokenError.MintCannotFreeze => { |
| 103 | + sol.log("Error: This token mint cannot freeze accounts"); |
| 104 | + }, |
| 105 | + TokenError.AccountFrozen => { |
| 106 | + sol.log("Error: Account is frozen"); |
| 107 | + }, |
| 108 | + TokenError.MintDecimalsMismatch => { |
| 109 | + sol.log("Error: decimals different from the Mint decimals"); |
| 110 | + }, |
| 111 | + TokenError.NonNativeNotSupported => { |
| 112 | + sol.log("Error: Instruction does not support non-native tokens"); |
| 113 | + }, |
| 114 | + TokenError.InvalidArgument => {}, |
| 115 | + TokenError.InvalidInstructionData => {}, |
| 116 | + TokenError.InvalidAccountData => {}, |
| 117 | + TokenError.AccountDataTooSmall => {}, |
| 118 | + TokenError.InsufficientFunds => {}, |
| 119 | + TokenError.IncorrectProgramId => {}, |
| 120 | + TokenError.MissingRequiredSignature => {}, |
| 121 | + TokenError.AccountAlreadyInitialized => {}, |
| 122 | + TokenError.UninitializedAccount => {}, |
| 123 | + TokenError.NotEnoughAccountKeys => {}, |
| 124 | + TokenError.AccountBorrowFailed => {}, |
| 125 | + TokenError.MaxSeedLengthExceeded => {}, |
| 126 | + TokenError.InvalidSeeds => {}, |
| 127 | + TokenError.BorshIoError => {}, |
| 128 | + TokenError.AccountNotRentExempt => {}, |
| 129 | + TokenError.UnsupportedSysvar => {}, |
| 130 | + TokenError.IllegalOwner => {}, |
| 131 | + TokenError.MaxAccountsDataAllocationsExceeded => {}, |
| 132 | + TokenError.InvalidRealloc => {}, |
| 133 | + TokenError.MaxInstructionTraceLengthExceeded => {}, |
| 134 | + TokenError.BuiltinProgramsMustConsumeComputeUnits => {}, |
| 135 | + TokenError.InvalidAccountOwner => {}, |
| 136 | + TokenError.ArithmeticOverflow => {}, |
| 137 | + TokenError.Immutable => {}, |
| 138 | + TokenError.IncorrectAuthority => {}, |
| 139 | + } |
| 140 | +} |
0 commit comments