{
  "version": "0.1.0",
  "name": "solana_meta_wallet",
  "instructions": [
    {
      "name": "initializeContractState",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "programAccount",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "programData",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "authority",
          "type": "publicKey"
        },
        {
          "name": "verifyingAddress",
          "type": {
            "array": ["u8", 64]
          }
        },
        {
          "name": "bump",
          "type": "u8"
        }
      ]
    },
    {
      "name": "setAuthority",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "authority",
          "type": "publicKey"
        }
      ]
    },
    {
      "name": "setVerifyingAddress",
      "accounts": [
        {
          "name": "authority",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "verifyingAddress",
          "type": {
            "array": ["u8", 64]
          }
        }
      ]
    },
    {
      "name": "generateDepositNonce",
      "accounts": [
        {
          "name": "sender",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "bump",
          "type": "u8"
        }
      ]
    },
    {
      "name": "tokenDeposit",
      "accounts": [
        {
          "name": "sender",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "deposit",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "senderTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "smcTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "receiver",
          "type": {
            "array": ["u8", 32]
          }
        },
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "bump",
          "type": "u8"
        }
      ]
    },
    {
      "name": "nativeDeposit",
      "accounts": [
        {
          "name": "sender",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "deposit",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "receiver",
          "type": {
            "array": ["u8", 32]
          }
        },
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "bump",
          "type": "u8"
        }
      ]
    },
    {
      "name": "clearDepositInfo",
      "accounts": [
        {
          "name": "sender",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "deposit",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "receiver",
          "type": {
            "array": ["u8", 32]
          }
        },
        {
          "name": "mint",
          "type": "publicKey"
        },
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "nonce",
          "type": "u128"
        }
      ]
    },
    {
      "name": "tokenWithdraw",
      "accounts": [
        {
          "name": "sender",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "receiverTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "smcTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "signature",
          "type": {
            "array": ["u8", 65]
          }
        },
        {
          "name": "nonce",
          "type": "u128"
        },
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "receiver",
          "type": "publicKey"
        },
        {
          "name": "bump",
          "type": "u8"
        }
      ]
    },
    {
      "name": "nativeWithdraw",
      "accounts": [
        {
          "name": "sender",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "receiver",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "signature",
          "type": {
            "array": ["u8", 65]
          }
        },
        {
          "name": "nonce",
          "type": "u128"
        },
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "bump",
          "type": "u8"
        }
      ]
    },
    {
      "name": "adminTokenWithdraw",
      "accounts": [
        {
          "name": "sender",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "receiverTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "smcTokenAccount",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "adminNativeWithdraw",
      "accounts": [
        {
          "name": "sender",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "amount",
          "type": "u64"
        }
      ]
    },
    {
      "name": "hotVerifyDeposit",
      "accounts": [
        {
          "name": "signer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "deposit",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "user",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "msgHash",
          "type": "bytes"
        },
        {
          "name": "sender",
          "type": "publicKey"
        },
        {
          "name": "receiver",
          "type": {
            "array": ["u8", 32]
          }
        },
        {
          "name": "mint",
          "type": "publicKey"
        },
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "nonce",
          "type": "u128"
        }
      ]
    }
  ],
  "accounts": [
    {
      "name": "State",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "version",
            "docs": ["Account version"],
            "type": "u8"
          },
          {
            "name": "bump",
            "docs": ["Seed bump for PDA"],
            "type": "u8"
          },
          {
            "name": "authority",
            "docs": ["Contract authority"],
            "type": "publicKey"
          },
          {
            "name": "verifyingAddress",
            "docs": ["Public key that will be used for verifying the signature"],
            "type": {
              "array": ["u8", 64]
            }
          },
          {
            "name": "chainId",
            "docs": ["Solana chain ID"],
            "type": "u16"
          },
          {
            "name": "nonceAdditive",
            "docs": ["Additive used for generating deposit nonce"],
            "type": "u32"
          }
        ]
      }
    },
    {
      "name": "Deposit",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "version",
            "docs": ["Account version"],
            "type": "u8"
          },
          {
            "name": "bump",
            "docs": ["Seed bump for PDA"],
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "User",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "version",
            "docs": ["Account version"],
            "type": "u8"
          },
          {
            "name": "bump",
            "docs": ["Seed bump for PDA"],
            "type": "u8"
          },
          {
            "name": "lastDepositNonce",
            "docs": ["Last generated deposit"],
            "type": "u128"
          },
          {
            "name": "lastWithdrawNonce",
            "docs": ["Last used nonce"],
            "type": "u128"
          }
        ]
      }
    }
  ],
  "errors": [
    {
      "code": 6000,
      "name": "AuthorityMismatch",
      "msg": "Authority mismatched"
    },
    {
      "code": 6001,
      "name": "IllegalOwner",
      "msg": "Account has illegal owner"
    },
    {
      "code": 6002,
      "name": "InvalidProgramData",
      "msg": "Invalid program data account"
    },
    {
      "code": 6003,
      "name": "InvalidProgramAccount",
      "msg": "Invalid program account"
    },
    {
      "code": 6004,
      "name": "InvalidToken",
      "msg": "Invalid token account"
    },
    {
      "code": 6005,
      "name": "InvalidSender",
      "msg": "Invalid deposit sender account"
    },
    {
      "code": 6006,
      "name": "InvalidAddressData",
      "msg": "Invalid address data"
    },
    {
      "code": 6007,
      "name": "VerificationFailed",
      "msg": "ECDSA verification failed"
    },
    {
      "code": 6008,
      "name": "InvalidVerificationType",
      "msg": "Invalid verification type"
    },
    {
      "code": 6009,
      "name": "InvalidMsg",
      "msg": "Provided message is invalid"
    },
    {
      "code": 6010,
      "name": "InvalidRecoveryId",
      "msg": "Provided recovery id is invalid"
    },
    {
      "code": 6011,
      "name": "InvalidSignature",
      "msg": "Provided signature is invalid"
    },
    {
      "code": 6012,
      "name": "EarlyClose",
      "msg": "Account can be closed only after close period"
    },
    {
      "code": 6013,
      "name": "EmptyPool",
      "msg": "Solana pool is empty"
    },
    {
      "code": 6014,
      "name": "InsufficientFunds",
      "msg": "Insufficient SOL balance"
    },
    {
      "code": 6015,
      "name": "InvalidNonce",
      "msg": "Provided nonce is invalid"
    },
    {
      "code": 6016,
      "name": "NonceAlreadyUsed",
      "msg": "Already used nonce"
    },
    {
      "code": 6017,
      "name": "ExpiredNonce",
      "msg": "Provided nonce is expired, you can make a refund"
    },
    {
      "code": 6018,
      "name": "NotExpiredNonce",
      "msg": "Nonce is not expired yet, you can't make a withdraw"
    },
    {
      "code": 6019,
      "name": "HotVerificationFailed",
      "msg": "Provided hash doesn't match"
    },
    {
      "code": 6020,
      "name": "ReceiverMismatch",
      "msg": "Provided receivers doesn't match"
    }
  ]
}
