{
    "version": "0.1.0",
    "name": "ddca",
    "instructions": [
        {
            "name": "create",
            "accounts": [
                {
                    "name": "ownerAccount",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "ownerFromTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ddcaAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "fromMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "fromTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "toMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "toTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "wakeAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "clock",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "associatedTokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "blockHeight",
                    "type": "u64"
                },
                {
                    "name": "pdaBump",
                    "type": "u8"
                },
                {
                    "name": "depositAmount",
                    "type": "u64"
                },
                {
                    "name": "amountPerSwap",
                    "type": "u64"
                },
                {
                    "name": "intervalInSeconds",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "wakeAndSwap",
            "accounts": [
                {
                    "name": "wakeAccount",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "ddcaAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "fromMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "fromTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "toMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "toTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "hlaProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "hlaOperatingAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "hlaOperatingFromTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "clock",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "associatedTokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "swapMinOutAmount",
                    "type": "u64"
                },
                {
                    "name": "swapSlippage",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "addFunds",
            "accounts": [
                {
                    "name": "ownerAccount",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "ownerFromTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ddcaAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "fromTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "wakeAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "clock",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "associatedTokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "depositAmount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "withdraw",
            "accounts": [
                {
                    "name": "ownerAccount",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "ownerToTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ddcaAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ddcaToTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "operatingAccount",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "operatingToTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "toMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "associatedTokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": [
                {
                    "name": "withdrawAmount",
                    "type": "u64"
                }
            ]
        },
        {
            "name": "close",
            "accounts": [
                {
                    "name": "ownerAccount",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "wakeAccount",
                    "isMut": true,
                    "isSigner": true
                },
                {
                    "name": "ownerFromTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ownerToTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "fromMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "toMint",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "ddcaAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ddcaFromTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "ddcaToTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "operatingAccount",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "operatingFromTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "operatingToTokenAccount",
                    "isMut": true,
                    "isSigner": false
                },
                {
                    "name": "rent",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "tokenProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "systemProgram",
                    "isMut": false,
                    "isSigner": false
                },
                {
                    "name": "associatedTokenProgram",
                    "isMut": false,
                    "isSigner": false
                }
            ],
            "args": []
        }
    ],
    "accounts": [
        {
            "name": "DdcaAccount",
            "type": {
                "kind": "struct",
                "fields": [
                    {
                        "name": "ownerAccAddr",
                        "type": "publicKey"
                    },
                    {
                        "name": "fromMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "fromMintDecimals",
                        "type": "u8"
                    },
                    {
                        "name": "fromTaccAddr",
                        "type": "publicKey"
                    },
                    {
                        "name": "toMint",
                        "type": "publicKey"
                    },
                    {
                        "name": "toMintDecimals",
                        "type": "u8"
                    },
                    {
                        "name": "toTaccAddr",
                        "type": "publicKey"
                    },
                    {
                        "name": "blockHeight",
                        "type": "u64"
                    },
                    {
                        "name": "pdaBump",
                        "type": "u8"
                    },
                    {
                        "name": "totalDepositsAmount",
                        "type": "u64"
                    },
                    {
                        "name": "amountPerSwap",
                        "type": "u64"
                    },
                    {
                        "name": "startTs",
                        "type": "u64"
                    },
                    {
                        "name": "intervalInSeconds",
                        "type": "u64"
                    },
                    {
                        "name": "lastCompletedSwapTs",
                        "type": "u64"
                    },
                    {
                        "name": "isPaused",
                        "type": "bool"
                    },
                    {
                        "name": "swapCount",
                        "type": "u64"
                    },
                    {
                        "name": "swapAvgRate",
                        "type": "u64"
                    },
                    {
                        "name": "lastDepositTs",
                        "type": "u64"
                    },
                    {
                        "name": "wakeAccAddr",
                        "type": "publicKey"
                    },
                    {
                        "name": "createdSlot",
                        "type": "u64"
                    },
                    {
                        "name": "lastDepositSlot",
                        "type": "u64"
                    }
                ]
            }
        }
    ],
    "errors": [
        {
            "code": 6000,
            "name": "InvalidAmounts",
            "msg": "Deposit amount must be a multiple of the amount per swap"
        },
        {
            "code": 6001,
            "name": "InvalidSwapsCount",
            "msg": "The number of recurring swaps must be greater than 1"
        },
        {
            "code": 6002,
            "name": "DdcaIsPaused",
            "msg": "This DDCA is paused"
        },
        {
            "code": 6003,
            "name": "InsufficientBalanceForSwap",
            "msg": "Insufficient balance for swap"
        },
        {
            "code": 6004,
            "name": "InvalidSwapSchedule",
            "msg": "This DDCA is not schedule for the provided time"
        },
        {
            "code": 6005,
            "name": "InvalidSwapSlippage",
            "msg": "Invalid swap slippage"
        },
        {
            "code": 6006,
            "name": "InvalidInterval",
            "msg": "Invalid interval"
        },
        {
            "code": 6007,
            "name": "SwapAlreadyCompleted",
            "msg": "A swap for this time window was already completed"
        },
        {
            "code": 6008,
            "name": "InsufficientDepositAmount",
            "msg": "Insufficient deposit amount"
        },
        {
            "code": 6009,
            "name": "InvalidSwapAmount",
            "msg": "Amount per swap must be positive"
        }
    ],
    "metadata": {
        "address": "3nmm1awnyhABJdoA25MYVksxz1xnpUFeepJJyRTZfsyD"
    }
}
