interface ReserveDepositorV1Interface {
    // events
    event AddedAccount(address account);
    event RemovedAccount(address account);
    event CallTradeReserve(bytes data, bytes returnData);
    event Call(address target, uint256 amount, bytes data, bool ok, bytes returnData);

    
    // callable by accounts
    function callTradeReserve(
        bytes calldata data
    ) external returns (bool ok, bytes memory returnData);

    // only callable by owner
    function addAccount(address account) external;
    function removeAccount(address account) external;
    function callAny(
        address payable target, uint256 amount, bytes calldata data
    ) external returns (bool ok, bytes memory returnData);

    // view functions
    function getAccounts() external view returns (address[] memory);
    function getTradeReserve() external view returns (address tradeReserve);
}
function callTradeReserve(
    bytes calldata data
) external returns (bool ok, bytes memory returnData);

// callable by accounts