{
    "version": "0.1.0",
    "name": "hadeswap",
    "instructions": [
        {
            "name": "initializePair",
            "accounts": [
                {
                    "name": "pair",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "user",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "validationAdapterProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "pairAuthorityAdapterProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "partialAdapterProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "partialAssetReceiver",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "pairTokenMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "feeSolVault",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "feeTokenAccount",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "assetReceiver",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "fundsSolVault",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "fundsTokenAccount",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "assetReceiverTokenAccount",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "nftsOwner",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "bumps",
                    "type": {
                        "defined": "PairBumps"
                    }
                },
                {
                    "name": "params",
                    "type": {
                        "defined": "PairParams"
                    }
                }
            ],
            "returns": null
        }
    ],
    "accounts": [
        {
            "name": "AdapterWhitelist",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "whitelistedAdapterProgram",
                        "type": "publicKey"
                    },
                    {
                        "name": "adapterType",
                        "type": {
                            "defined": "AdapterType"
                        }
                    }
                ]
            }
        },
        {
            "name": "AuthorityAdapter",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "pair",
                        "type": "publicKey"
                    },
                    {
                        "name": "authorityAdapterProgram",
                        "type": "publicKey"
                    },
                    {
                        "name": "authorityOwner",
                        "type": "publicKey"
                    },
                    {
                        "name": "authorityType",
                        "type": {
                            "defined": "AuthorityType"
                        }
                    },
                    {
                        "name": "expiringAt",
                        "type": "u64"
                    },
                    {
                        "name": "authorityState",
                        "type": {
                            "defined": "AuthorityState"
                        }
                    }
                ]
            }
        },
        {
            "name": "ClassicValidationWhitelist",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "pair",
                        "type": "publicKey"
                    },
                    {
                        "name": "whitelistType",
                        "type": {
                            "defined": "WhitelistType"
                        }
                    },
                    {
                        "name": "whitelistedAddress",
                        "type": "publicKey"
                    }
                ]
            }
        },
        {
            "name": "NftPairBox",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "pair",
                        "type": "publicKey"
                    },
                    {
                        "name": "nftMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "nftMetadata",
                        "type": "publicKey"
                    },
                    {
                        "name": "nftBoxType",
                        "type": {
                            "defined": "NftBoxType"
                        }
                    },
                    {
                        "name": "tokenAccount",
                        "type": "publicKey"
                    },
                    {
                        "name": "status",
                        "type": {
                            "defined": "NftBoxState"
                        }
                    }
                ]
            }
        },
        {
            "name": "NftSwapPair",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "pairType",
                        "type": {
                            "defined": "PairType"
                        }
                    },
                    {
                        "name": "pairState",
                        "type": {
                            "defined": "PairState"
                        }
                    },
                    {
                        "name": "pairValidationType",
                        "type": {
                            "defined": "PairValidationType"
                        }
                    },
                    {
                        "name": "validationAdapterProgram",
                        "type": "publicKey"
                    },
                    {
                        "name": "pairAuthorityType",
                        "type": {
                            "defined": "PairAuthorityType"
                        }
                    },
                    {
                        "name": "pairAuthorityAdapterProgram",
                        "type": "publicKey"
                    },
                    {
                        "name": "partialSettings",
                        "type": {
                            "defined": "PartialSettings"
                        }
                    },
                    {
                        "name": "partialAdapterProgram",
                        "type": "publicKey"
                    },
                    {
                        "name": "partialAssetReceiver",
                        "type": "publicKey"
                    },
                    {
                        "name": "bondingCurve",
                        "type": {
                            "defined": "BondingCurve"
                        }
                    },
                    {
                        "name": "spotPrice",
                        "type": "u64"
                    },
                    {
                        "name": "fee",
                        "type": "u64"
                    },
                    {
                        "name": "pairTokenType",
                        "type": {
                            "defined": "PairTokenType"
                        }
                    },
                    {
                        "name": "pairTokenMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "feeTokenAccount",
                        "type": "publicKey"
                    },
                    {
                        "name": "feeSolVault",
                        "type": "publicKey"
                    },
                    {
                        "name": "feeVaultSeed",
                        "type": "u8"
                    },
                    {
                        "name": "solOrTokenFeeAmount",
                        "type": "u64"
                    },
                    {
                        "name": "fundsTokenAccount",
                        "type": "publicKey"
                    },
                    {
                        "name": "fundsSolVault",
                        "type": "publicKey"
                    },
                    {
                        "name": "fundsSolVaultSeed",
                        "type": "u8"
                    },
                    {
                        "name": "fundsSolOrTokenAmount",
                        "type": "u64"
                    },
                    {
                        "name": "nftsOwner",
                        "type": "publicKey"
                    },
                    {
                        "name": "nftSeed",
                        "type": "u8"
                    },
                    {
                        "name": "nftsCount",
                        "type": "u64"
                    },
                    {
                        "name": "assetReceiver",
                        "type": "publicKey"
                    }
                ]
            }
        },
        {
            "name": "NftValidationAdapter",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "pair",
                        "type": "publicKey"
                    },
                    {
                        "name": "nftValidationProgram",
                        "type": "publicKey"
                    },
                    {
                        "name": "nftMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "nftValidationType",
                        "type": {
                            "defined": "NftValidationType"
                        }
                    },
                    {
                        "name": "validUntil",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "ProtocolAdminMultisig",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "protocolSettings",
                        "type": "publicKey"
                    },
                    {
                        "name": "admin",
                        "type": "publicKey"
                    },
                    {
                        "name": "weight",
                        "type": "u64"
                    }
                ]
            }
        },
        {
            "name": "ProtocolSettingsV1",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "protocolFee",
                        "type": "u64"
                    },
                    {
                        "name": "protocolFeeMultiplier",
                        "type": "u64"
                    },
                    {
                        "name": "maxFee",
                        "type": "u64"
                    },
                    {
                        "name": "protocolFeeReceiver",
                        "type": "publicKey"
                    },
                    {
                        "name": "adminThresholdAmountMultisig",
                        "type": "u64"
                    }
                ]
            }
        }
    ],
    "types": [
        {
            "name": "PairParams",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "delta",
                        "type": "u64"
                    },
                    {
                        "name": "spotPrice",
                        "type": "u64"
                    },
                    {
                        "name": "fee",
                        "type": "u64"
                    },
                    {
                        "name": "bondingType",
                        "type": {
                            "defined": "BondingCurveType"
                        }
                    },
                    {
                        "name": "pairType",
                        "type": {
                            "defined": "PairType"
                        }
                    }
                ]
            }
        },
        {
            "name": "PairBumps",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "solVaultSeed",
                        "type": "u8"
                    },
                    {
                        "name": "feeVaultSeed",
                        "type": "u8"
                    },
                    {
                        "name": "nftsSeed",
                        "type": "u8"
                    }
                ]
            }
        },
        {
            "name": "BondingCurve",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "delta",
                        "type": "u64"
                    },
                    {
                        "name": "bondingType",
                        "type": {
                            "defined": "BondingCurveType"
                        }
                    }
                ]
            }
        },
        {
            "name": "AdapterType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Validation"
                    },
                    {
                        "name": "Authority"
                    },
                    {
                        "name": "Partial"
                    }
                ]
            }
        },
        {
            "name": "AuthorityType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "OneTime"
                    },
                    {
                        "name": "Persistent"
                    }
                ]
            }
        },
        {
            "name": "AuthorityState",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Active"
                    },
                    {
                        "name": "Used"
                    },
                    {
                        "name": "Expired"
                    },
                    {
                        "name": "Revoked"
                    }
                ]
            }
        },
        {
            "name": "WhitelistType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Creator"
                    },
                    {
                        "name": "Nft"
                    }
                ]
            }
        },
        {
            "name": "NftBoxState",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Closed"
                    },
                    {
                        "name": "Active"
                    }
                ]
            }
        },
        {
            "name": "NftBoxType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Escrow"
                    },
                    {
                        "name": "Escrowless"
                    }
                ]
            }
        },
        {
            "name": "PairType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "TokenForNFT"
                    },
                    {
                        "name": "NFTForToken"
                    },
                    {
                        "name": "LiquidityProvision"
                    }
                ]
            }
        },
        {
            "name": "PairState",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Initializing"
                    },
                    {
                        "name": "OnMarket"
                    },
                    {
                        "name": "Frozen"
                    }
                ]
            }
        },
        {
            "name": "PairValidationType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "ClassicValidation"
                    },
                    {
                        "name": "CustomValidation"
                    }
                ]
            }
        },
        {
            "name": "PairAuthorityType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "ClassicAuthority"
                    },
                    {
                        "name": "CustomAuthority"
                    }
                ]
            }
        },
        {
            "name": "PartialSettings",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "None"
                    },
                    {
                        "name": "CustomPartial"
                    }
                ]
            }
        },
        {
            "name": "PairTokenType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "NativeSol"
                    },
                    {
                        "name": "Spl"
                    }
                ]
            }
        },
        {
            "name": "BondingCurveType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Linear"
                    },
                    {
                        "name": "Exponential"
                    }
                ]
            }
        },
        {
            "name": "NftValidationType",
            "type": {
                "kind": "enum",
                "variants": [
                    {
                        "name": "Finite"
                    },
                    {
                        "name": "Infinite"
                    }
                ]
            }
        }
    ],
    "errors": [
        {
            "code": 6000,
            "name": "MetadataDoesntExist",
            "msg": "MetadataDoesntExist"
        },
        {
            "code": 6001,
            "name": "DerivedKeyInvalid",
            "msg": "DerivedKeyInvalid"
        },
        {
            "code": 6002,
            "name": "InvalidCollectionDetails",
            "msg": "InvalidCollectionDetails"
        },
        {
            "code": 6003,
            "name": "InvalidCollection",
            "msg": "InvalidCollection"
        },
        {
            "code": 6004,
            "name": "InvalidCollectionMint",
            "msg": "InvalidCollectionMint"
        },
        {
            "code": 6005,
            "name": "NftNotVerified",
            "msg": "NftNotVerified"
        },
        {
            "code": 6006,
            "name": "InvalidOwner",
            "msg": "InvalidOwner"
        },
        {
            "code": 6007,
            "name": "InvalidDelta",
            "msg": "InvalidDelta"
        },
        {
            "code": 6008,
            "name": "InvalidFee",
            "msg": "InvalidFee"
        },
        {
            "code": 6009,
            "name": "InvalidPairType",
            "msg": "InvalidPairType"
        },
        {
            "code": 6010,
            "name": "NotEnoughInTokenAccount",
            "msg": "NotEnoughInTokenAccount"
        },
        {
            "code": 6011,
            "name": "InvalidMint",
            "msg": "InvalidMint"
        },
        {
            "code": 6012,
            "name": "InvalidSolVault",
            "msg": "InvalidSolVault"
        },
        {
            "code": 6013,
            "name": "InvalidFundingAmount",
            "msg": "InvalidFundingAmount"
        },
        {
            "code": 6014,
            "name": "NotEnoughLamports",
            "msg": "NotEnoughLamports"
        },
        {
            "code": 6015,
            "name": "InvalidJpegOwner",
            "msg": "InvalidJpegOwner"
        },
        {
            "code": 6016,
            "name": "InvalidTokenAccount",
            "msg": "InvalidTokenAccount"
        },
        {
            "code": 6017,
            "name": "InvalidPayer",
            "msg": "InvalidPayer"
        },
        {
            "code": 6018,
            "name": "ShouldBeActive",
            "msg": "ShouldBeActive"
        }
    ]
}
