{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IVault",
          "name": "vault",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "distributor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "distributionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "merkleRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DistributionAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "distributor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "distributionId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "claimer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DistributionClaimed",
      "type": "event"
    },
    {
      "inputs": [
        { "internalType": "address", "name": "claimer", "type": "address" },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "distributionId",
              "type": "uint256"
            },
            { "internalType": "uint256", "name": "balance", "type": "uint256" },
            {
              "internalType": "address",
              "name": "distributor",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32[]",
              "name": "merkleProof",
              "type": "bytes32[]"
            }
          ],
          "internalType": "struct MerkleOrchard.Claim[]",
          "name": "claims",
          "type": "tuple[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        }
      ],
      "name": "claimDistributions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        { "internalType": "address", "name": "claimer", "type": "address" },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "distributionId",
              "type": "uint256"
            },
            { "internalType": "uint256", "name": "balance", "type": "uint256" },
            {
              "internalType": "address",
              "name": "distributor",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32[]",
              "name": "merkleProof",
              "type": "bytes32[]"
            }
          ],
          "internalType": "struct MerkleOrchard.Claim[]",
          "name": "claims",
          "type": "tuple[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        }
      ],
      "name": "claimDistributionsToInternalBalance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        { "internalType": "address", "name": "claimer", "type": "address" },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "distributionId",
              "type": "uint256"
            },
            { "internalType": "uint256", "name": "balance", "type": "uint256" },
            {
              "internalType": "address",
              "name": "distributor",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32[]",
              "name": "merkleProof",
              "type": "bytes32[]"
            }
          ],
          "internalType": "struct MerkleOrchard.Claim[]",
          "name": "claims",
          "type": "tuple[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "contract IDistributorCallback",
          "name": "callbackContract",
          "type": "address"
        },
        { "internalType": "bytes", "name": "callbackData", "type": "bytes" }
      ],
      "name": "claimDistributionsWithCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" },
        { "internalType": "uint256", "name": "amount", "type": "uint256" },
        {
          "internalType": "uint256",
          "name": "distributionId",
          "type": "uint256"
        }
      ],
      "name": "createDistribution",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        { "internalType": "address", "name": "distributor", "type": "address" },
        {
          "internalType": "uint256",
          "name": "distributionId",
          "type": "uint256"
        }
      ],
      "name": "getDistributionRoot",
      "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        { "internalType": "address", "name": "distributor", "type": "address" }
      ],
      "name": "getNextDistributionId",
      "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        { "internalType": "address", "name": "distributor", "type": "address" }
      ],
      "name": "getRemainingBalance",
      "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVault",
      "outputs": [
        { "internalType": "contract IVault", "name": "", "type": "address" }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        { "internalType": "address", "name": "distributor", "type": "address" },
        {
          "internalType": "uint256",
          "name": "distributionId",
          "type": "uint256"
        },
        { "internalType": "address", "name": "claimer", "type": "address" }
      ],
      "name": "isClaimed",
      "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        { "internalType": "address", "name": "distributor", "type": "address" },
        {
          "internalType": "uint256",
          "name": "distributionId",
          "type": "uint256"
        },
        { "internalType": "address", "name": "claimer", "type": "address" },
        {
          "internalType": "uint256",
          "name": "claimedBalance",
          "type": "uint256"
        },
        {
          "internalType": "bytes32[]",
          "name": "merkleProof",
          "type": "bytes32[]"
        }
      ],
      "name": "verifyClaim",
      "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
      "stateMutability": "view",
      "type": "function"
    }
  ]
}
