[
    {
        "type": "function",
        "name": "ICS20_VERSION",
        "inputs": [],
        "outputs": [
            {
                "name": "",
                "type": "string",
                "internalType": "string"
            }
        ],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "balanceOf",
        "inputs": [
            {
                "name": "account",
                "type": "address",
                "internalType": "address"
            },
            {
                "name": "id",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [
            {
                "name": "",
                "type": "uint256",
                "internalType": "uint256"
            }
        ],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "getMinTokenSendAmount",
        "inputs": [
            {
                "name": "denom",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [
            {
                "name": "",
                "type": "uint256",
                "internalType": "uint256"
            }
        ],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "ibcAddress",
        "inputs": [],
        "outputs": [
            {
                "name": "",
                "type": "address",
                "internalType": "address"
            }
        ],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "init",
        "inputs": [
            {
                "name": "ibcHandler_",
                "type": "address",
                "internalType": "contract IDiamond"
            },
            {
                "name": "bank_",
                "type": "address",
                "internalType": "contract IICS20Bank"
            },
            {
                "name": "minTimeoutTimestamp_",
                "type": "uint64",
                "internalType": "uint64"
            },
            {
                "name": "feePercentage_",
                "type": "uint32",
                "internalType": "uint32"
            },
            {
                "name": "feeConnector_",
                "type": "address",
                "internalType": "address"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "onAcknowledgementPacket",
        "inputs": [
            {
                "name": "packet",
                "type": "tuple",
                "internalType": "struct PacketData",
                "components": [
                    {
                        "name": "sequence",
                        "type": "uint64",
                        "internalType": "uint64"
                    },
                    {
                        "name": "source_port",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "source_channel",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "destination_port",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "destination_channel",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "data",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    {
                        "name": "timeout_height",
                        "type": "tuple",
                        "internalType": "struct HeightData",
                        "components": [
                            {
                                "name": "revision_number",
                                "type": "uint64",
                                "internalType": "uint64"
                            },
                            {
                                "name": "revision_height",
                                "type": "uint64",
                                "internalType": "uint64"
                            }
                        ]
                    },
                    {
                        "name": "timeout_timestamp",
                        "type": "uint64",
                        "internalType": "uint64"
                    }
                ]
            },
            {
                "name": "acknowledgement",
                "type": "bytes",
                "internalType": "bytes"
            },
            {
                "name": "",
                "type": "address",
                "internalType": "address"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "onChanCloseConfirm",
        "inputs": [
            {
                "name": "portId",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "channelId",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "onChanCloseInit",
        "inputs": [
            {
                "name": "portId",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "channelId",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "onChanOpenAck",
        "inputs": [
            {
                "name": "portId",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "channelId",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "counterpartyVersion",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "onChanOpenConfirm",
        "inputs": [
            {
                "name": "portId",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "channelId",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "onChanOpenInit",
        "inputs": [
            {
                "name": "order",
                "type": "uint8",
                "internalType": "enum ChannelOrder"
            },
            {
                "name": "connectionHops",
                "type": "string[]",
                "internalType": "string[]"
            },
            {
                "name": "portId",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "channelId",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "counterparty",
                "type": "tuple",
                "internalType": "struct ChannelCounterpartyData",
                "components": [
                    {
                        "name": "port_id",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "channel_id",
                        "type": "string",
                        "internalType": "string"
                    }
                ]
            },
            {
                "name": "version",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [
            {
                "name": "",
                "type": "string",
                "internalType": "string"
            }
        ],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "onChanOpenTry",
        "inputs": [
            {
                "name": "order",
                "type": "uint8",
                "internalType": "enum ChannelOrder"
            },
            {
                "name": "connectionHops",
                "type": "string[]",
                "internalType": "string[]"
            },
            {
                "name": "portId",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "channelId",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "counterparty",
                "type": "tuple",
                "internalType": "struct ChannelCounterpartyData",
                "components": [
                    {
                        "name": "port_id",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "channel_id",
                        "type": "string",
                        "internalType": "string"
                    }
                ]
            },
            {
                "name": "version",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "counterpartyVersion",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [
            {
                "name": "",
                "type": "string",
                "internalType": "string"
            }
        ],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "onRecvPacket",
        "inputs": [
            {
                "name": "packet",
                "type": "tuple",
                "internalType": "struct PacketData",
                "components": [
                    {
                        "name": "sequence",
                        "type": "uint64",
                        "internalType": "uint64"
                    },
                    {
                        "name": "source_port",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "source_channel",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "destination_port",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "destination_channel",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "data",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    {
                        "name": "timeout_height",
                        "type": "tuple",
                        "internalType": "struct HeightData",
                        "components": [
                            {
                                "name": "revision_number",
                                "type": "uint64",
                                "internalType": "uint64"
                            },
                            {
                                "name": "revision_height",
                                "type": "uint64",
                                "internalType": "uint64"
                            }
                        ]
                    },
                    {
                        "name": "timeout_timestamp",
                        "type": "uint64",
                        "internalType": "uint64"
                    }
                ]
            },
            {
                "name": "",
                "type": "address",
                "internalType": "address"
            }
        ],
        "outputs": [
            {
                "name": "acknowledgement",
                "type": "bytes",
                "internalType": "bytes"
            }
        ],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "onTimeoutPacket",
        "inputs": [
            {
                "name": "packet",
                "type": "tuple",
                "internalType": "struct PacketData",
                "components": [
                    {
                        "name": "sequence",
                        "type": "uint64",
                        "internalType": "uint64"
                    },
                    {
                        "name": "source_port",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "source_channel",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "destination_port",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "destination_channel",
                        "type": "string",
                        "internalType": "string"
                    },
                    {
                        "name": "data",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    {
                        "name": "timeout_height",
                        "type": "tuple",
                        "internalType": "struct HeightData",
                        "components": [
                            {
                                "name": "revision_number",
                                "type": "uint64",
                                "internalType": "uint64"
                            },
                            {
                                "name": "revision_height",
                                "type": "uint64",
                                "internalType": "uint64"
                            }
                        ]
                    },
                    {
                        "name": "timeout_timestamp",
                        "type": "uint64",
                        "internalType": "uint64"
                    }
                ]
            },
            {
                "name": "",
                "type": "address",
                "internalType": "address"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "sendTransfer",
        "inputs": [
            {
                "name": "denom",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
            },
            {
                "name": "receiver",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "sourcePort",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "sourceChannel",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "timeoutHeight",
                "type": "uint64",
                "internalType": "uint64"
            },
            {
                "name": "timeoutTimestamp",
                "type": "uint64",
                "internalType": "uint64"
            },
            {
                "name": "memo",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "sendTransferNativeToken",
        "inputs": [
            {
                "name": "receiver",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "sourcePort",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "sourceChannel",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "timeoutHeight",
                "type": "uint64",
                "internalType": "uint64"
            },
            {
                "name": "timeoutTimestamp",
                "type": "uint64",
                "internalType": "uint64"
            },
            {
                "name": "memo",
                "type": "string",
                "internalType": "string"
            }
        ],
        "outputs": [],
        "stateMutability": "payable"
    },
    {
        "type": "function",
        "name": "setFeeCollector",
        "inputs": [
            {
                "name": "feeCollector",
                "type": "address",
                "internalType": "address"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "setFeePercentage",
        "inputs": [
            {
                "name": "percentage",
                "type": "uint32",
                "internalType": "uint32"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "setMinTimeoutTimestamp",
        "inputs": [
            {
                "name": "minTimeoutTimestamp",
                "type": "uint64",
                "internalType": "uint64"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "setMinTokenSendAmount",
        "inputs": [
            {
                "name": "denom",
                "type": "string",
                "internalType": "string"
            },
            {
                "name": "minTokenAmount",
                "type": "uint256",
                "internalType": "uint256"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "error",
        "name": "NotContractOwner",
        "inputs": [
            {
                "name": "_user",
                "type": "address",
                "internalType": "address"
            },
            {
                "name": "_contractOwner",
                "type": "address",
                "internalType": "address"
            }
        ]
    }
]
