Local replica of Ledger canister throwing "insufficient funds" error even though the canister has funds

I have a similar issue where I’m getting an “Insufficient funds” error while I’m sure the account has funds.

In my case I’m using the icrc2_approve method, like so:

public shared ({ caller }) func approve(allowance : Nat) : async Result.Result<IcpLedger.BlockIndex, Text> {
    let approveArgs : IcpLedger.ApproveArgs = {
        spender = {
            owner = caller;
            subaccount = null;
        };
        from_subaccount = null;
        amount = 10000000000000;
        expected_allowance = ?allowance;
        expires_at = null;
        fee = ?10000;
        memo = null;
        created_at_time = null;
    };
    try {
        let approvalResult : IcpLedger.ApproveResult = await IcpLedger.icrc2_approve(approveArgs);
        // check if the approval was successfull
        switch (approvalResult) {
            case (#Err(error)) {
                return #err("Couldn't approve funds: " # debug_show (error));
            };
            case (#Ok(blockIndex)) { return #ok(Nat64.fromNat(blockIndex)) };
        };

    } catch (error) {
        return #err("Reject message: " # Error.message(error));
    }
};

I’m getting Couldn't approve funds: #InsufficientFunds({balance = 0}).

The method is called from the ICP ledger canister, but in the arguments, the spender is the caller which is supposed to be the user :thinking:

Has anybody run into this before ?

P.S: I’ve tried to trigger my approve method both from the frontend and from the CLI, with different accounts that all have some tokens (i.e account_balance returns a nat) and each time it’s giving me balance = 0.

P.P.S: is there a difference between ICP and LICP locally?