interface IBalanceSheetContract {

    function setPeerzTokenSupply(uint256 przTotalSupply) external returns (bool);

    // NOTE the returned arrays need to have exactly the same length
    function popMintingInformation(uint256 bmeMintBatchSize) external returns (address[] memory, uint256[] memory);

    // NOTE the returned array needs to have exactly the same length as the claimers array
    function popClaimingInformation(address[] calldata claimers) external returns (uint256[] memory);
}
// NOTE the following interface imposes the minimum technically feasible
// NOTE constraints on information that is to be exchanged between the
// NOTE Peerz token contract and the balance sheet contract
// NOTE in other words, in our opinion this interface is the one with the
// NOTE highest probability of allowing for an implementation of the required
// NOTE functionality in the balance sheet contract
// NOTE an alternative approach to having popMintingInformation return two
// NOTE arrays would be to have it return a single array that contains only
// NOTE the receiving addresses for minting and using popClaimingInformation
// NOTE to actually mint the tokens; this approach requires bmeMint to make
// NOTE two external calls instead of a single one; and it imposes more
// NOTE structure on the future implementation of the balance sheet contract
// NOTE since its side of the BME mint functionality would have to be
// NOTE implemented using two separate functions whereas it might also on its
// NOTE side be more efficient to use a single function
function popClaimingInformation(address[] calldata claimers) external returns (uint256[] memory);
// NOTE the returned array needs to have exactly the same length as the claimers array