export const TWOWAY_TOKEN_BRIDGE_L1_ABI = [
  {
    inputs: [
      { name: '_router', internalType: 'address', type: 'address' },
      { name: '_token', internalType: 'address', type: 'address' },
      { name: '_feeToken', internalType: 'address', type: 'address' },
    ],
    stateMutability: 'nonpayable',
    type: 'constructor',
  },
  {
    inputs: [],
    name: 'ccipRouter',
    outputs: [{ name: '', internalType: 'contract IRouterClient', type: 'address' }],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [],
    name: 'canonicalToken',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [],
    name: 'feeToken',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [],
    name: 'admin',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],
    name: 'destinations',
    outputs: [
      { name: 'chainSelector', internalType: 'uint64', type: 'uint64' },
      { name: 'l2Bridge', internalType: 'address', type: 'address' },
      { name: 'enabled', internalType: 'bool', type: 'bool' },
    ],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    name: 'destinationChains',
    outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
    name: 'processed',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [
      { name: 'chainSelector', internalType: 'uint64', type: 'uint64' },
      { name: 'l2Bridge', internalType: 'address', type: 'address' },
    ],
    name: 'addDestination',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [
      { name: 'chainSelector', internalType: 'uint64', type: 'uint64' },
      { name: 'l2Bridge', internalType: 'address', type: 'address' },
    ],
    name: 'updateDestination',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [{ name: 'chainSelector', internalType: 'uint64', type: 'uint64' }],
    name: 'removeDestination',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [{ name: 'newFee', internalType: 'address', type: 'address' }],
    name: 'updateFeeToken',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [{ name: 'newAdmin', internalType: 'address', type: 'address' }],
    name: 'changeAdmin',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [],
    name: 'getDestinationChains',
    outputs: [{ name: '', internalType: 'uint64[]', type: 'uint64[]' }],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [
      { name: 'destSelector', internalType: 'uint64', type: 'uint64' },
      { name: 'recipient', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'lockAndSend',
    outputs: [{ name: 'messageId', internalType: 'bytes32', type: 'bytes32' }],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [
      {
        components: [
          { name: 'messageId', internalType: 'bytes32', type: 'bytes32' },
          { name: 'sourceChainSelector', internalType: 'uint64', type: 'uint64' },
          { name: 'sender', internalType: 'bytes', type: 'bytes' },
          { name: 'data', internalType: 'bytes', type: 'bytes' },
          {
            components: [
              { name: 'token', internalType: 'address', type: 'address' },
              { name: 'amount', internalType: 'uint256', type: 'uint256' },
            ],
            name: 'destTokenAmounts',
            internalType: 'struct Client.Any2EVMMessageTokenAmount[]',
            type: 'tuple[]',
          },
        ],
        internalType: 'struct Client.Any2EVMMessage',
        name: 'message',
        type: 'tuple',
      },
    ],
    name: 'ccipReceive',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    anonymous: false,
    inputs: [
      { indexed: true, name: 'user', internalType: 'address', type: 'address' },
      { indexed: false, name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'Locked',
    type: 'event',
  },
  {
    anonymous: false,
    inputs: [
      { indexed: true, name: 'recipient', internalType: 'address', type: 'address' },
      { indexed: false, name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'Released',
    type: 'event',
  },
  {
    anonymous: false,
    inputs: [
      { indexed: true, name: 'messageId', internalType: 'bytes32', type: 'bytes32' },
      { indexed: false, name: 'destChain', internalType: 'uint64', type: 'uint64' },
      { indexed: false, name: 'recipient', internalType: 'address', type: 'address' },
      { indexed: false, name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'CcipSend',
    type: 'event',
  },
  {
    anonymous: false,
    inputs: [
      { indexed: false, name: 'chainSelector', internalType: 'uint64', type: 'uint64' },
      { indexed: false, name: 'l2Bridge', internalType: 'address', type: 'address' },
    ],
    name: 'DestinationAdded',
    type: 'event',
  },
  {
    anonymous: false,
    inputs: [
      { indexed: false, name: 'chainSelector', internalType: 'uint64', type: 'uint64' },
      { indexed: false, name: 'l2Bridge', internalType: 'address', type: 'address' },
    ],
    name: 'DestinationUpdated',
    type: 'event',
  },
  {
    anonymous: false,
    inputs: [{ indexed: false, name: 'chainSelector', internalType: 'uint64', type: 'uint64' }],
    name: 'DestinationRemoved',
    type: 'event',
  },
] as const
