export const PAYMENT_CHANNEL_MANAGER_ABI = [
  {
    inputs: [
      { name: '_admin', internalType: 'address', type: 'address' },
      { name: '_challengeWindowSeconds', internalType: 'uint256', type: 'uint256' },
    ],
    stateMutability: 'nonpayable',
    type: 'constructor',
  },
  { inputs: [], name: 'admin', outputs: [{ name: '', internalType: 'address', type: 'address' }], stateMutability: 'view', type: 'function' },
  { inputs: [], name: 'paused', outputs: [{ name: '', internalType: 'bool', type: 'bool' }], stateMutability: 'view', type: 'function' },
  { inputs: [], name: 'challengeWindowSeconds', outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], stateMutability: 'view', type: 'function' },
  {
    inputs: [{ name: 'participantB', internalType: 'address', type: 'address' }],
    name: 'openChannel',
    outputs: [{ name: 'channelId', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'payable',
    type: 'function',
  },
  {
    inputs: [{ name: 'channelId', internalType: 'uint256', type: 'uint256' }],
    name: 'fundChannel',
    outputs: [],
    stateMutability: 'payable',
    type: 'function',
  },
  {
    inputs: [
      { name: 'channelId', internalType: 'uint256', type: 'uint256' },
      { name: 'nonce', internalType: 'uint256', type: 'uint256' },
      { name: 'balanceA', internalType: 'uint256', type: 'uint256' },
      { name: 'balanceB', internalType: 'uint256', type: 'uint256' },
      { name: 'vA', internalType: 'uint8', type: 'uint8' },
      { name: 'rA', internalType: 'bytes32', type: 'bytes32' },
      { name: 'sA', internalType: 'bytes32', type: 'bytes32' },
      { name: 'vB', internalType: 'uint8', type: 'uint8' },
      { name: 'rB', internalType: 'bytes32', type: 'bytes32' },
      { name: 'sB', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'closeChannelCooperative',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [
      { name: 'channelId', internalType: 'uint256', type: 'uint256' },
      { name: 'nonce', internalType: 'uint256', type: 'uint256' },
      { name: 'balanceA', internalType: 'uint256', type: 'uint256' },
      { name: 'balanceB', internalType: 'uint256', type: 'uint256' },
      { name: 'vA', internalType: 'uint8', type: 'uint8' },
      { name: 'rA', internalType: 'bytes32', type: 'bytes32' },
      { name: 'sA', internalType: 'bytes32', type: 'bytes32' },
      { name: 'vB', internalType: 'uint8', type: 'uint8' },
      { name: 'rB', internalType: 'bytes32', type: 'bytes32' },
      { name: 'sB', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'submitClose',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [
      { name: 'channelId', internalType: 'uint256', type: 'uint256' },
      { name: 'nonce', internalType: 'uint256', type: 'uint256' },
      { name: 'balanceA', internalType: 'uint256', type: 'uint256' },
      { name: 'balanceB', internalType: 'uint256', type: 'uint256' },
      { name: 'vA', internalType: 'uint8', type: 'uint8' },
      { name: 'rA', internalType: 'bytes32', type: 'bytes32' },
      { name: 'sA', internalType: 'bytes32', type: 'bytes32' },
      { name: 'vB', internalType: 'uint8', type: 'uint8' },
      { name: 'rB', internalType: 'bytes32', type: 'bytes32' },
      { name: 'sB', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'challengeClose',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [{ name: 'channelId', internalType: 'uint256', type: 'uint256' }],
    name: 'finalizeClose',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [{ name: 'channelId', internalType: 'uint256', type: 'uint256' }],
    name: 'getChannel',
    outputs: [
      {
        components: [
          { name: 'participantA', internalType: 'address', type: 'address' },
          { name: 'participantB', internalType: 'address', type: 'address' },
          { name: 'depositA', internalType: 'uint256', type: 'uint256' },
          { name: 'depositB', internalType: 'uint256', type: 'uint256' },
          { name: 'status', internalType: 'uint8', type: 'uint8' },
          { name: 'disputeNonce', internalType: 'uint256', type: 'uint256' },
          { name: 'disputeBalanceA', internalType: 'uint256', type: 'uint256' },
          { name: 'disputeBalanceB', internalType: 'uint256', type: 'uint256' },
          { name: 'disputeDeadline', internalType: 'uint256', type: 'uint256' },
        ],
        internalType: 'struct IPaymentChannelManager.Channel',
        name: '',
        type: 'tuple',
      },
    ],
    stateMutability: 'view',
    type: 'function',
  },
  { inputs: [], name: 'getChannelCount', outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], stateMutability: 'view', type: 'function' },
  {
    inputs: [
      { name: 'participantA', internalType: 'address', type: 'address' },
      { name: 'participantB', internalType: 'address', type: 'address' },
    ],
    name: 'getChannelId',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [{ name: 'index', internalType: 'uint256', type: 'uint256' }],
    name: 'getChannelIdByIndex',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
    type: 'function',
  },
  { inputs: [{ name: 'newAdmin', internalType: 'address', type: 'address' }], name: 'setAdmin', outputs: [], stateMutability: 'nonpayable', type: 'function' },
  { inputs: [{ name: 'newWindow', internalType: 'uint256', type: 'uint256' }], name: 'setChallengeWindow', outputs: [], stateMutability: 'nonpayable', type: 'function' },
  { inputs: [], name: 'pause', outputs: [], stateMutability: 'nonpayable', type: 'function' },
  { inputs: [], name: 'unpause', outputs: [], stateMutability: 'nonpayable', type: 'function' },
  {
    anonymous: false,
    inputs: [
      { indexed: true, name: 'channelId', internalType: 'uint256', type: 'uint256' },
      { indexed: true, name: 'participantA', internalType: 'address', type: 'address' },
      { indexed: true, name: 'participantB', internalType: 'address', type: 'address' },
      { indexed: false, name: 'depositA', internalType: 'uint256', type: 'uint256' },
      { indexed: false, name: 'depositB', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'ChannelOpened',
    type: 'event',
  },
  {
    anonymous: false,
    inputs: [
      { indexed: true, name: 'channelId', internalType: 'uint256', type: 'uint256' },
      { indexed: false, name: 'balanceA', internalType: 'uint256', type: 'uint256' },
      { indexed: false, name: 'balanceB', internalType: 'uint256', type: 'uint256' },
      { indexed: false, name: 'cooperative', internalType: 'bool', type: 'bool' },
    ],
    name: 'ChannelClosed',
    type: 'event',
  },
  {
    anonymous: false,
    inputs: [
      { indexed: true, name: 'channelId', internalType: 'uint256', type: 'uint256' },
      { indexed: false, name: 'nonce', internalType: 'uint256', type: 'uint256' },
      { indexed: false, name: 'balanceA', internalType: 'uint256', type: 'uint256' },
      { indexed: false, name: 'balanceB', internalType: 'uint256', type: 'uint256' },
      { indexed: false, name: 'newDeadline', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'ChallengeSubmitted',
    type: 'event',
  },
] as const
