{
  "version": "0.1.0",
  "name": "invariant",
  "instructions": [
    {
      "name": "createState",
      "accounts": [
        {
          "name": "state",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "programAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "nonce",
          "type": "u8"
        }
      ]
    },
    {
      "name": "createFeeTier",
      "accounts": [
        {
          "name": "feeTier",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "fee",
          "type": "u128"
        },
        {
          "name": "tickSpacing",
          "type": "u16"
        }
      ]
    },
    {
      "name": "createPool",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "feeTier",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tickmap",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "initTick",
          "type": "i32"
        }
      ]
    },
    {
      "name": "createPoolWithSqrtPrice",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "feeTier",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tickmap",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "initPrice",
          "type": {
            "defined": "Price"
          }
        }
      ]
    },
    {
      "name": "initReserves",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenXReserve",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "tokenYReserve",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "swap",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tickmap",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "accountX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "accountY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "owner",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "programAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "xToY",
          "type": "bool"
        },
        {
          "name": "amount",
          "type": "u64"
        },
        {
          "name": "byAmountIn",
          "type": "bool"
        },
        {
          "name": "sqrtPriceLimit",
          "type": "u128"
        }
      ]
    },
    {
      "name": "twoHopSwap",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "owner",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "programAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "poolFirst",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tickmapFirst",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenXFirst",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYFirst",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "accountIn",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveXFirst",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveYFirst",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenXProgramFirst",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgramFirst",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "poolSecond",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tickmapSecond",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenXSecond",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYSecond",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "accountOut",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveXSecond",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveYSecond",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenXProgramSecond",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgramSecond",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "xToYFirst",
          "type": "bool"
        },
        {
          "name": "xToYSecond",
          "type": "bool"
        },
        {
          "name": "amountIn",
          "type": "u64"
        },
        {
          "name": "amountOut",
          "type": "u64"
        },
        {
          "name": "byAmountIn",
          "type": "bool"
        }
      ]
    },
    {
      "name": "initializeOracle",
      "accounts": [
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "oracle",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "createTick",
      "accounts": [
        {
          "name": "tick",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tickmap",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "index",
          "type": "i32"
        }
      ]
    },
    {
      "name": "createPositionList",
      "accounts": [
        {
          "name": "positionList",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "owner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "signer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "createPosition",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "position",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "positionList",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "owner",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "lowerTick",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "upperTick",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tickmap",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "accountX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "accountY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "programAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "eventOptAcc",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "lowerTickIndex",
          "type": "i32"
        },
        {
          "name": "upperTickIndex",
          "type": "i32"
        },
        {
          "name": "liquidityDelta",
          "type": {
            "defined": "Liquidity"
          }
        },
        {
          "name": "slippageLimitLower",
          "type": {
            "defined": "Price"
          }
        },
        {
          "name": "slippageLimitUpper",
          "type": {
            "defined": "Price"
          }
        }
      ]
    },
    {
      "name": "removePosition",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "removedPosition",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "positionList",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "lastPosition",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tickmap",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "lowerTick",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "upperTick",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "owner",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "accountX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "accountY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "programAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "eventOptAcc",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "index",
          "type": "u32"
        },
        {
          "name": "lowerTickIndex",
          "type": "i32"
        },
        {
          "name": "upperTickIndex",
          "type": "i32"
        }
      ]
    },
    {
      "name": "changeLiquidity",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "position",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "owner",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "lowerTick",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "upperTick",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "accountX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "accountY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "programAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "index",
          "type": "u32"
        },
        {
          "name": "liquidityDelta",
          "type": {
            "defined": "Liquidity"
          }
        },
        {
          "name": "addLiquidity",
          "type": "bool"
        },
        {
          "name": "slippageLimitLower",
          "type": {
            "defined": "Price"
          }
        },
        {
          "name": "slippageLimitUpper",
          "type": {
            "defined": "Price"
          }
        }
      ]
    },
    {
      "name": "transferPositionOwnership",
      "accounts": [
        {
          "name": "ownerList",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "recipientList",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "newPosition",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "removedPosition",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "lastPosition",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "payer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "owner",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "recipient",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "index",
          "type": "u32"
        }
      ]
    },
    {
      "name": "claimFee",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "position",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "lowerTick",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "upperTick",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "owner",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "accountX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "accountY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "programAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "index",
          "type": "u32"
        },
        {
          "name": "lowerTickIndex",
          "type": "i32"
        },
        {
          "name": "upperTickIndex",
          "type": "i32"
        }
      ]
    },
    {
      "name": "updateSecondsPerLiquidity",
      "accounts": [
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "lowerTick",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "upperTick",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "position",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "owner",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "signer",
          "isMut": true,
          "isSigner": true
        },
        {
          "name": "rent",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "systemProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "lowerTickIndex",
          "type": "i32"
        },
        {
          "name": "upperTickIndex",
          "type": "i32"
        },
        {
          "name": "index",
          "type": "i32"
        }
      ]
    },
    {
      "name": "withdrawProtocolFee",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "accountX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "accountY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveX",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "reserveY",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "authority",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "programAuthority",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenXProgram",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenYProgram",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    },
    {
      "name": "changeProtocolFee",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "programAuthority",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": [
        {
          "name": "protocolFee",
          "type": {
            "defined": "FixedPoint"
          }
        }
      ]
    },
    {
      "name": "changeFeeReceiver",
      "accounts": [
        {
          "name": "state",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "pool",
          "isMut": true,
          "isSigner": false
        },
        {
          "name": "tokenX",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "tokenY",
          "isMut": false,
          "isSigner": false
        },
        {
          "name": "admin",
          "isMut": false,
          "isSigner": true
        },
        {
          "name": "feeReceiver",
          "isMut": false,
          "isSigner": false
        }
      ],
      "args": []
    }
  ],
  "accounts": [
    {
      "name": "FeeTier",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "fee",
            "type": {
              "defined": "FixedPoint"
            }
          },
          {
            "name": "tickSpacing",
            "type": "u16"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "Oracle",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "data",
            "type": {
              "array": [
                {
                  "defined": "Record"
                },
                256
              ]
            }
          },
          {
            "name": "head",
            "type": "u16"
          },
          {
            "name": "amount",
            "type": "u16"
          },
          {
            "name": "size",
            "type": "u16"
          }
        ]
      }
    },
    {
      "name": "Pool",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "tokenX",
            "type": "publicKey"
          },
          {
            "name": "tokenY",
            "type": "publicKey"
          },
          {
            "name": "tokenXReserve",
            "type": "publicKey"
          },
          {
            "name": "tokenYReserve",
            "type": "publicKey"
          },
          {
            "name": "positionIterator",
            "type": "u128"
          },
          {
            "name": "tickSpacing",
            "type": "u16"
          },
          {
            "name": "fee",
            "type": {
              "defined": "FixedPoint"
            }
          },
          {
            "name": "protocolFee",
            "type": {
              "defined": "FixedPoint"
            }
          },
          {
            "name": "liquidity",
            "type": {
              "defined": "Liquidity"
            }
          },
          {
            "name": "sqrtPrice",
            "type": {
              "defined": "Price"
            }
          },
          {
            "name": "currentTickIndex",
            "type": "i32"
          },
          {
            "name": "tickmap",
            "type": "publicKey"
          },
          {
            "name": "feeGrowthGlobalX",
            "type": {
              "defined": "FeeGrowth"
            }
          },
          {
            "name": "feeGrowthGlobalY",
            "type": {
              "defined": "FeeGrowth"
            }
          },
          {
            "name": "feeProtocolTokenX",
            "type": "u64"
          },
          {
            "name": "feeProtocolTokenY",
            "type": "u64"
          },
          {
            "name": "secondsPerLiquidityGlobal",
            "type": {
              "defined": "SecondsPerLiquidity"
            }
          },
          {
            "name": "startTimestamp",
            "type": "u64"
          },
          {
            "name": "lastTimestamp",
            "type": "u64"
          },
          {
            "name": "feeReceiver",
            "type": "publicKey"
          },
          {
            "name": "oracleAddress",
            "type": "publicKey"
          },
          {
            "name": "oracleInitialized",
            "type": "bool"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "PositionList",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "head",
            "type": "u32"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "Position",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "owner",
            "type": "publicKey"
          },
          {
            "name": "pool",
            "type": "publicKey"
          },
          {
            "name": "id",
            "type": "u128"
          },
          {
            "name": "liquidity",
            "type": {
              "defined": "Liquidity"
            }
          },
          {
            "name": "lowerTickIndex",
            "type": "i32"
          },
          {
            "name": "upperTickIndex",
            "type": "i32"
          },
          {
            "name": "feeGrowthInsideX",
            "type": {
              "defined": "FeeGrowth"
            }
          },
          {
            "name": "feeGrowthInsideY",
            "type": {
              "defined": "FeeGrowth"
            }
          },
          {
            "name": "secondsPerLiquidityInside",
            "type": {
              "defined": "SecondsPerLiquidity"
            }
          },
          {
            "name": "lastSlot",
            "type": "u64"
          },
          {
            "name": "tokensOwedX",
            "type": {
              "defined": "FixedPoint"
            }
          },
          {
            "name": "tokensOwedY",
            "type": {
              "defined": "FixedPoint"
            }
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "State",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "admin",
            "type": "publicKey"
          },
          {
            "name": "nonce",
            "type": "u8"
          },
          {
            "name": "authority",
            "type": "publicKey"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    },
    {
      "name": "Tickmap",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "bitmap",
            "type": {
              "array": [
                "u8",
                11091
              ]
            }
          }
        ]
      }
    },
    {
      "name": "Tick",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "pool",
            "type": "publicKey"
          },
          {
            "name": "index",
            "type": "i32"
          },
          {
            "name": "sign",
            "type": "bool"
          },
          {
            "name": "liquidityChange",
            "type": {
              "defined": "Liquidity"
            }
          },
          {
            "name": "liquidityGross",
            "type": {
              "defined": "Liquidity"
            }
          },
          {
            "name": "sqrtPrice",
            "type": {
              "defined": "Price"
            }
          },
          {
            "name": "feeGrowthOutsideX",
            "type": {
              "defined": "FeeGrowth"
            }
          },
          {
            "name": "feeGrowthOutsideY",
            "type": {
              "defined": "FeeGrowth"
            }
          },
          {
            "name": "secondsPerLiquidityOutside",
            "type": {
              "defined": "SecondsPerLiquidity"
            }
          },
          {
            "name": "secondsOutside",
            "type": "u64"
          },
          {
            "name": "bump",
            "type": "u8"
          }
        ]
      }
    }
  ],
  "types": [
    {
      "name": "Price",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "v",
            "type": "u128"
          }
        ]
      }
    },
    {
      "name": "Liquidity",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "v",
            "type": "u128"
          }
        ]
      }
    },
    {
      "name": "FeeGrowth",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "v",
            "type": "u128"
          }
        ]
      }
    },
    {
      "name": "FixedPoint",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "v",
            "type": "u128"
          }
        ]
      }
    },
    {
      "name": "SecondsPerLiquidity",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "v",
            "type": "u128"
          }
        ]
      }
    },
    {
      "name": "Record",
      "type": {
        "kind": "struct",
        "fields": [
          {
            "name": "timestamp",
            "type": "u64"
          },
          {
            "name": "price",
            "type": {
              "defined": "Price"
            }
          }
        ]
      }
    }
  ],
  "events": [
    {
      "name": "CreatePositionEvent",
      "fields": [
        {
          "name": "owner",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "pool",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "id",
          "type": "u128",
          "index": false
        },
        {
          "name": "liquidity",
          "type": {
            "defined": "Liquidity"
          },
          "index": false
        },
        {
          "name": "lowerTick",
          "type": "i32",
          "index": false
        },
        {
          "name": "upperTick",
          "type": "i32",
          "index": false
        },
        {
          "name": "currentTimestamp",
          "type": "u64",
          "index": false
        },
        {
          "name": "secondsPerLiquidityInsideInitial",
          "type": {
            "defined": "SecondsPerLiquidity"
          },
          "index": false
        }
      ]
    },
    {
      "name": "RemovePositionEvent",
      "fields": [
        {
          "name": "owner",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "pool",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "id",
          "type": "u128",
          "index": false
        },
        {
          "name": "liquidity",
          "type": {
            "defined": "Liquidity"
          },
          "index": false
        },
        {
          "name": "upperTick",
          "type": "i32",
          "index": false
        },
        {
          "name": "currentTick",
          "type": "i32",
          "index": false
        },
        {
          "name": "lowerTick",
          "type": "i32",
          "index": false
        },
        {
          "name": "upperTickSecondsPerLiquidityOutside",
          "type": {
            "defined": "SecondsPerLiquidity"
          },
          "index": false
        },
        {
          "name": "lowerTickSecondsPerLiquidityOutside",
          "type": {
            "defined": "SecondsPerLiquidity"
          },
          "index": false
        },
        {
          "name": "poolSecondsPerLiquidityGlobal",
          "type": {
            "defined": "SecondsPerLiquidity"
          },
          "index": false
        },
        {
          "name": "currentTimestamp",
          "type": "u64",
          "index": false
        }
      ]
    },
    {
      "name": "SwapEvent",
      "fields": [
        {
          "name": "swapper",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "tokenX",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "tokenY",
          "type": "publicKey",
          "index": false
        },
        {
          "name": "xToY",
          "type": "bool",
          "index": false
        },
        {
          "name": "fee",
          "type": "u64",
          "index": false
        },
        {
          "name": "priceBeforeSwap",
          "type": {
            "defined": "Price"
          },
          "index": false
        },
        {
          "name": "priceAfterSwap",
          "type": {
            "defined": "Price"
          },
          "index": false
        }
      ]
    }
  ],
  "errors": [
    {
      "code": 6000,
      "name": "ZeroAmount",
      "msg": "Amount is zero"
    },
    {
      "code": 6001,
      "name": "ZeroOutput",
      "msg": "Output would be zero"
    },
    {
      "code": 6002,
      "name": "WrongTick",
      "msg": "Not the expected tick"
    },
    {
      "code": 6003,
      "name": "WrongLimit",
      "msg": "Price limit is on the wrong side of price"
    },
    {
      "code": 6004,
      "name": "InvalidTickIndex",
      "msg": "Tick index not divisible by spacing or over limit"
    },
    {
      "code": 6005,
      "name": "InvalidTickInterval",
      "msg": "Invalid tick_lower or tick_upper"
    },
    {
      "code": 6006,
      "name": "NoMoreTicks",
      "msg": "There is no more tick in that direction"
    },
    {
      "code": 6007,
      "name": "TickNotFound",
      "msg": "Correct tick not found in context"
    },
    {
      "code": 6008,
      "name": "PriceLimitReached",
      "msg": "Price would cross swap limit"
    },
    {
      "code": 6009,
      "name": "InvalidTickLiquidity",
      "msg": "Invalid tick liquidity"
    },
    {
      "code": 6010,
      "name": "EmptyPositionPokes",
      "msg": "Disable empty position pokes"
    },
    {
      "code": 6011,
      "name": "InvalidPositionLiquidity",
      "msg": "Invalid position liquidity"
    },
    {
      "code": 6012,
      "name": "InvalidPoolLiquidity",
      "msg": "Invalid pool liquidity"
    },
    {
      "code": 6013,
      "name": "InvalidPositionIndex",
      "msg": "Invalid position index"
    },
    {
      "code": 6014,
      "name": "PositionWithoutLiquidity",
      "msg": "Position liquidity would be zero"
    },
    {
      "code": 6015,
      "name": "Unauthorized",
      "msg": "You are not admin"
    },
    {
      "code": 6016,
      "name": "InvalidPoolTokenAddresses",
      "msg": "Invalid pool token addresses"
    },
    {
      "code": 6017,
      "name": "NegativeTime",
      "msg": "Time cannot be negative"
    },
    {
      "code": 6018,
      "name": "OracleAlreadyInitialized",
      "msg": "Oracle is already initialized"
    },
    {
      "code": 6019,
      "name": "LimitReached",
      "msg": "Absolute price limit was reached"
    },
    {
      "code": 6020,
      "name": "InvalidProtocolFee",
      "msg": "Invalid protocol fee"
    },
    {
      "code": 6021,
      "name": "NoGainSwap",
      "msg": "Swap amount out is 0"
    },
    {
      "code": 6022,
      "name": "InvalidTokenAccount",
      "msg": "Provided token account is different than expected"
    },
    {
      "code": 6023,
      "name": "InvalidAdmin",
      "msg": "Admin address is different than expected"
    },
    {
      "code": 6024,
      "name": "InvalidAuthority",
      "msg": "Provided authority is different than expected"
    },
    {
      "code": 6025,
      "name": "InvalidOwner",
      "msg": "Provided token owner is different than expected"
    },
    {
      "code": 6026,
      "name": "InvalidMint",
      "msg": "Provided token account mint is different than expected mint token"
    },
    {
      "code": 6027,
      "name": "InvalidTickmap",
      "msg": "Provided tickmap is different than expected"
    },
    {
      "code": 6028,
      "name": "InvalidTickmapOwner",
      "msg": "Provided tickmap owner is different than program ID"
    },
    {
      "code": 6029,
      "name": "InvalidListOwner",
      "msg": "Recipient list address and owner list address should be different"
    },
    {
      "code": 6030,
      "name": "InvalidTickSpacing",
      "msg": "Invalid tick spacing"
    },
    {
      "code": 6031,
      "name": "InvalidTokenProgram",
      "msg": "Invalid token program"
    },
    {
      "code": 6032,
      "name": "InvalidInitSqrtPrice",
      "msg": "Invalid init sqrt price"
    },
    {
      "code": 6033,
      "name": "DisabledPool",
      "msg": "Transfer position is disabled for this pool"
    },
    {
      "code": 6034,
      "name": "UnsupportedExtension",
      "msg": "Not supported Token2022 extension for mint account"
    },
    {
      "code": 6035,
      "name": "PoolLoopback",
      "msg": "Both hops are performed on the same pool"
    },
    {
      "code": 6036,
      "name": "InvalidTokenHop",
      "msg": "The output for the first hop is not the input for the second hop"
    },
    {
      "code": 6037,
      "name": "AmountUnderMinOut",
      "msg": "Swap amount is lower than minimum accepted out"
    },
    {
      "code": 6038,
      "name": "AmountOverMaxIn",
      "msg": "Swap amount is higher than maximum accepted in"
    },
    {
      "code": 6039,
      "name": "NativeBalanceTooLow",
      "msg": "Balance of a native ata is too low"
    },
    {
      "code": 6040,
      "name": "BalancePercentageOutOfRange",
      "msg": "Balance percentage is outside of allowed range"
    },
    {
      "code": 6041,
      "name": "BalancePercentageTooLow",
      "msg": "Balance percentage is too low"
    }
  ]
}