Motoko Principal.toLedgerAccount is documented but does not exist

Principal.toLedgerAccount is described here and is implemented here.

However, in my environment, dfx deploy … throws

type error [M0072], field toLedgerAccount does not exist in type
  module {
    type Principal = Principal__1;
    compare : (Principal__2, Principal__2) -> {#equal; #greater; #less};
    equal : (Principal__2, Principal__2) -> Bool;
    fromActor : (actor {}) -> Principal__2;
    fromBlob : Blob -> Principal__2;
    fromText : Text -> Principal__2;
    greater : (Principal__2, Principal__2) -> Bool;
    greaterOrEqual : (Principal__2, Principal__2) -> Bool;
    hash : Principal__2 -> Hash;
    isAnonymous : Principal__2 -> Bool;
    less : (Principal__2, Principal__2) -> Bool;
    lessOrEqual : (Principal__2, Principal__2) -> Bool;
    notEqual : (Principal__2, Principal__2) -> Bool;
    toBlob : Principal__2 -> Blob;
    toText : Principal__2 -> Text
  }

I have dfx 0.15.1 installed. Can’t use vessel because it depends on openssl.1.1 and I have openssl.3 installed. Am I using old / outdated mo:base modules? How to update?

I would install and use mops:

npm i -g ic-mops
mops add base

This should install the latest version of base.
Then have this in your dfx.json:

{
 ...
  "defaults": {
    "build": {
      "packtool": "mops sources"
    }
  }
}
1 Like

Thanks, Timo.

mops update brought toLedgerAccount to the Principal and this lil cutie to me:

Stderr:
.mops/base@0.10.2/src/Text.mo:817.43-817.47: type error [M0072], field textLowercase does not exist in type
  module {
    type ErrorCode =
      {
        #call_error : {err_code : Nat32};
        #canister_error;
        #canister_reject;
        #destination_invalid;
        #future : Nat32;
        #system_fatal;
        #system_transient
      };
    Array_init : <T>(Nat, T) -> [var T];
    Array_tabulate : <T>(Nat, Nat -> T) -> [T];
    Types :
      module {
        type Any = Any;
        type Blob = Blob;
        type Bool = Bool;
        type Char = Char;
        type Error = Error;
        type Float = Float;
        type Int = Int;
        type Int16 = Int16;
        type Int32 = Int32;
        type Int64 = Int64;
        type Int8 = Int8;
        type Nat = Nat;
        type Nat16 = Nat16;
        type Nat32 = Nat32;
        type Nat64 = Nat64;
        type Nat8 = Nat8;
        type None = None;
        type Null = Null;
        type Principal = Principal;
        type Text = Text
      };
    abs : Int -> Nat;
    arccos : Float -> Float;
    arcsin : Float -> Float;
    arctan : Float -> Float;
    arctan2 : (Float, Float) -> Float;
    arrayMutToBlob : [var Nat8] -> Blob;
    arrayToBlob : [Nat8] -> Blob;
    blobCompare : (Blob, Blob) -> Int8;
    blobOfPrincipal : Principal -> Blob;
    blobToArray : Blob -> [Nat8];
    blobToArrayMut : Blob -> [var Nat8];
    btstInt16 : (Int16, Int16) -> Bool;
    btstInt32 : (Int32, Int32) -> Bool;
    btstInt64 : (Int64, Int64) -> Bool;
    btstInt8 : (Int8, Int8) -> Bool;
    btstNat16 : (Nat16, Nat16) -> Bool;
    btstNat32 : (Nat32, Nat32) -> Bool;
    btstNat64 : (Nat64, Nat64) -> Bool;
    btstNat8 : (Nat8, Nat8) -> Bool;
    call_raw : (Principal, Text, Blob) -> async Blob;
    cancelTimer : Nat -> ();
    canisterVersion : () -> Nat64;
    charIsAlphabetic : Char -> Bool;
    charIsLowercase : Char -> Bool;
    charIsUppercase : Char -> Bool;
    charIsWhitespace : Char -> Bool;
    charToLower : Char -> Char;
    charToNat32 : Char -> Nat32;
    charToText : Char -> Text;
    charToUpper : Char -> Char;
    clzInt16 : Int16 -> Int16;
    clzInt32 : Int32 -> Int32;
    clzInt64 : Int64 -> Int64;
    clzInt8 : Int8 -> Int8;
    clzNat16 : Nat16 -> Nat16;
    clzNat32 : Nat32 -> Nat32;
    clzNat64 : Nat64 -> Nat64;
    clzNat8 : Nat8 -> Nat8;
    cos : Float -> Float;
    createActor : (Blob, Blob) -> async Principal;
    ctzInt16 : Int16 -> Int16;
    ctzInt32 : Int32 -> Int32;
    ctzInt64 : Int64 -> Int64;
    ctzInt8 : Int8 -> Int8;
    ctzNat16 : Nat16 -> Nat16;
    ctzNat32 : Nat32 -> Nat32;
    ctzNat64 : Nat64 -> Nat64;
    ctzNat8 : Nat8 -> Nat8;
    cyclesAccept : Nat -> Nat;
    cyclesAdd : Nat -> ();
    cyclesAvailable : () -> Nat;
    cyclesBalance : () -> Nat;
    cyclesRefunded : () -> Nat;
    debugPrint : Text -> ();
    debugPrintChar : Char -> ();
    debugPrintInt : Int -> ();
    debugPrintNat : Nat -> ();
    decodeUtf8 : Blob -> ?Text;
    encodeUtf8 : Text -> Blob;
    error : Text -> Error;
    errorCode : Error -> ErrorCode;
    errorMessage : Error -> Text;
    exp : Float -> Float;
    floatAbs : Float -> Float;
    floatCeil : Float -> Float;
    floatCopySign : (Float, Float) -> Float;
    floatFloor : Float -> Float;
    floatMax : (Float, Float) -> Float;
    floatMin : (Float, Float) -> Float;
    floatNearest : Float -> Float;
    floatSqrt : Float -> Float;
    floatToFormattedText : (Float, Nat8, Nat8) -> Text;
    floatToInt : Float -> Int;
    floatToInt64 : Float -> Int64;
    floatToText : Float -> Text;
    floatTrunc : Float -> Float;
    getCertificate : () -> ?Blob;
    hashBlob : Blob -> Nat32;
    idlHash : Text -> Nat32;
    int16ToInt : Int16 -> Int;
    int16ToInt32 : Int16 -> Int32;
    int16ToInt8 : Int16 -> Int8;
    int16ToNat16 : Int16 -> Nat16;
    int32ToInt : Int32 -> Int;
    int32ToInt16 : Int32 -> Int16;
    int32ToInt64 : Int32 -> Int64;
    int32ToNat32 : Int32 -> Nat32;
    int64ToFloat : Int64 -> Float;
    int64ToInt : Int64 -> Int;
    int64ToInt32 : Int64 -> Int32;
    int64ToNat64 : Int64 -> Nat64;
    int8ToInt : Int8 -> Int;
    int8ToInt16 : Int8 -> Int16;
    int8ToNat8 : Int8 -> Nat8;
    intToFloat : Int -> Float;
    intToInt16 : Int -> Int16;
    intToInt16Wrap : Int -> Int16;
    intToInt32 : Int -> Int32;
    intToInt32Wrap : Int -> Int32;
    intToInt64 : Int -> Int64;
    intToInt64Wrap : Int -> Int64;
    intToInt8 : Int -> Int8;
    intToInt8Wrap : Int -> Int8;
    intToNat16Wrap : Int -> Nat16;
    intToNat32Wrap : Int -> Nat32;
    intToNat64Wrap : Int -> Nat64;
    intToNat8Wrap : Int -> Nat8;
    isController : Principal -> Bool;
    log : Float -> Float;
    nat16ToInt16 : Nat16 -> Int16;
    nat16ToNat : Nat16 -> Nat;
    nat16ToNat32 : Nat16 -> Nat32;
    nat16ToNat8 : Nat16 -> Nat8;
    nat32ToChar : Nat32 -> Char;
    nat32ToInt32 : Nat32 -> Int32;
    nat32ToNat : Nat32 -> Nat;
    nat32ToNat16 : Nat32 -> Nat16;
    nat32ToNat64 : Nat32 -> Nat64;
    nat64ToInt64 : Nat64 -> Int64;
    nat64ToNat : Nat64 -> Nat;
    nat64ToNat32 : Nat64 -> Nat32;
    nat8ToInt8 : Nat8 -> Int8;
    nat8ToNat : Nat8 -> Nat;
    nat8ToNat16 : Nat8 -> Nat16;
    natToNat16 : Nat -> Nat16;
    natToNat32 : Nat -> Nat32;
    natToNat64 : Nat -> Nat64;
    natToNat8 : Nat -> Nat8;
    performanceCounter : Nat32 -> Nat64;
    popcntInt16 : Int16 -> Int16;
    popcntInt32 : Int32 -> Int32;
    popcntInt64 : Int64 -> Int64;
    popcntInt8 : Int8 -> Int8;
    popcntNat16 : Nat16 -> Nat16;
    popcntNat32 : Nat32 -> Nat32;
    popcntNat64 : Nat64 -> Nat64;
    popcntNat8 : Nat8 -> Nat8;
    principalOfActor : (actor {}) -> Principal;
    principalOfBlob : Blob -> Principal;
    rts_callback_table_count : () -> Nat;
    rts_callback_table_size : () -> Nat;
    rts_collector_instructions : () -> Nat;
    rts_heap_size : () -> Nat;
    rts_max_live_size : () -> Nat;
    rts_max_stack_size : () -> Nat;
    rts_memory_size : () -> Nat;
    rts_mutator_instructions : () -> Nat;
    rts_reclaimed : () -> Nat;
    rts_total_allocation : () -> Nat;
    rts_version : () -> Text;
    setCertifiedData : Blob -> ();
    setTimer : (Nat64, Bool, () -> async ()) -> Nat;
    shiftLeft : (Nat, Nat32) -> Nat;
    shiftRight : (Nat, Nat32) -> Nat;
    sin : Float -> Float;
    stableMemoryGrow : Nat64 -> Nat64;
    stableMemoryLoadBlob : (Nat64, Nat) -> Blob;
    stableMemoryLoadFloat : Nat64 -> Float;
    stableMemoryLoadInt16 : Nat64 -> Int16;
    stableMemoryLoadInt32 : Nat64 -> Int32;
    stableMemoryLoadInt64 : Nat64 -> Int64;
    stableMemoryLoadInt8 : Nat64 -> Int8;
    stableMemoryLoadNat16 : Nat64 -> Nat16;
    stableMemoryLoadNat32 : Nat64 -> Nat32;
    stableMemoryLoadNat64 : Nat64 -> Nat64;
    stableMemoryLoadNat8 : Nat64 -> Nat8;
    stableMemorySize : () -> Nat64;
    stableMemoryStoreBlob : (Nat64, Blob) -> ();
    stableMemoryStoreFloat : (Nat64, Float) -> ();
    stableMemoryStoreInt16 : (Nat64, Int16) -> ();
    stableMemoryStoreInt32 : (Nat64, Int32) -> ();
    stableMemoryStoreInt64 : (Nat64, Int64) -> ();
    stableMemoryStoreInt8 : (Nat64, Int8) -> ();
    stableMemoryStoreNat16 : (Nat64, Nat16) -> ();
    stableMemoryStoreNat32 : (Nat64, Nat32) -> ();
    stableMemoryStoreNat64 : (Nat64, Nat64) -> ();
    stableMemoryStoreNat8 : (Nat64, Nat8) -> ();
    stableVarQuery : () -> shared query () -> async {size : Nat64};
    tan : Float -> Float;
    textCompare : (Text, Text) -> Int8;
    time : () -> Nat64;
    trap : Text -> None
  }
.mops/base@0.10.2/src/Text.mo:825.43-825.47: type error [M0072], field textUppercase does not exist in type
  module {
    type ErrorCode =
      {
        #call_error : {err_code : Nat32};
        #canister_error;
        #canister_reject;
        #destination_invalid;
        #future : Nat32;
        #system_fatal;
        #system_transient
      };
    Array_init : <T>(Nat, T) -> [var T];
    Array_tabulate : <T>(Nat, Nat -> T) -> [T];
    Types :
      module {
        type Any = Any;
        type Blob = Blob;
        type Bool = Bool;
        type Char = Char;
        type Error = Error;
        type Float = Float;
        type Int = Int;
        type Int16 = Int16;
        type Int32 = Int32;
        type Int64 = Int64;
        type Int8 = Int8;
        type Nat = Nat;
        type Nat16 = Nat16;
        type Nat32 = Nat32;
        type Nat64 = Nat64;
        type Nat8 = Nat8;
        type None = None;
        type Null = Null;
        type Principal = Principal;
        type Text = Text
      };
    abs : Int -> Nat;
    arccos : Float -> Float;
    arcsin : Float -> Float;
    arctan : Float -> Float;
    arctan2 : (Float, Float) -> Float;
    arrayMutToBlob : [var Nat8] -> Blob;
    arrayToBlob : [Nat8] -> Blob;
    blobCompare : (Blob, Blob) -> Int8;
    blobOfPrincipal : Principal -> Blob;
    blobToArray : Blob -> [Nat8];
    blobToArrayMut : Blob -> [var Nat8];
    btstInt16 : (Int16, Int16) -> Bool;
    btstInt32 : (Int32, Int32) -> Bool;
    btstInt64 : (Int64, Int64) -> Bool;
    btstInt8 : (Int8, Int8) -> Bool;
    btstNat16 : (Nat16, Nat16) -> Bool;
    btstNat32 : (Nat32, Nat32) -> Bool;
    btstNat64 : (Nat64, Nat64) -> Bool;
    btstNat8 : (Nat8, Nat8) -> Bool;
    call_raw : (Principal, Text, Blob) -> async Blob;
    cancelTimer : Nat -> ();
    canisterVersion : () -> Nat64;
    charIsAlphabetic : Char -> Bool;
    charIsLowercase : Char -> Bool;
    charIsUppercase : Char -> Bool;
    charIsWhitespace : Char -> Bool;
    charToLower : Char -> Char;
    charToNat32 : Char -> Nat32;
    charToText : Char -> Text;
    charToUpper : Char -> Char;
    clzInt16 : Int16 -> Int16;
    clzInt32 : Int32 -> Int32;
    clzInt64 : Int64 -> Int64;
    clzInt8 : Int8 -> Int8;
    clzNat16 : Nat16 -> Nat16;
    clzNat32 : Nat32 -> Nat32;
    clzNat64 : Nat64 -> Nat64;
    clzNat8 : Nat8 -> Nat8;
    cos : Float -> Float;
    createActor : (Blob, Blob) -> async Principal;
    ctzInt16 : Int16 -> Int16;
    ctzInt32 : Int32 -> Int32;
    ctzInt64 : Int64 -> Int64;
    ctzInt8 : Int8 -> Int8;
    ctzNat16 : Nat16 -> Nat16;
    ctzNat32 : Nat32 -> Nat32;
    ctzNat64 : Nat64 -> Nat64;
    ctzNat8 : Nat8 -> Nat8;
    cyclesAccept : Nat -> Nat;
    cyclesAdd : Nat -> ();
    cyclesAvailable : () -> Nat;
    cyclesBalance : () -> Nat;
    cyclesRefunded : () -> Nat;
    debugPrint : Text -> ();
    debugPrintChar : Char -> ();
    debugPrintInt : Int -> ();
    debugPrintNat : Nat -> ();
    decodeUtf8 : Blob -> ?Text;
    encodeUtf8 : Text -> Blob;
    error : Text -> Error;
    errorCode : Error -> ErrorCode;
    errorMessage : Error -> Text;
    exp : Float -> Float;
    floatAbs : Float -> Float;
    floatCeil : Float -> Float;
    floatCopySign : (Float, Float) -> Float;
    floatFloor : Float -> Float;
    floatMax : (Float, Float) -> Float;
    floatMin : (Float, Float) -> Float;
    floatNearest : Float -> Float;
    floatSqrt : Float -> Float;
    floatToFormattedText : (Float, Nat8, Nat8) -> Text;
    floatToInt : Float -> Int;
    floatToInt64 : Float -> Int64;
    floatToText : Float -> Text;
    floatTrunc : Float -> Float;
    getCertificate : () -> ?Blob;
    hashBlob : Blob -> Nat32;
    idlHash : Text -> Nat32;
    int16ToInt : Int16 -> Int;
    int16ToInt32 : Int16 -> Int32;
    int16ToInt8 : Int16 -> Int8;
    int16ToNat16 : Int16 -> Nat16;
    int32ToInt : Int32 -> Int;
    int32ToInt16 : Int32 -> Int16;
    int32ToInt64 : Int32 -> Int64;
    int32ToNat32 : Int32 -> Nat32;
    int64ToFloat : Int64 -> Float;
    int64ToInt : Int64 -> Int;
    int64ToInt32 : Int64 -> Int32;
    int64ToNat64 : Int64 -> Nat64;
    int8ToInt : Int8 -> Int;
    int8ToInt16 : Int8 -> Int16;
    int8ToNat8 : Int8 -> Nat8;
    intToFloat : Int -> Float;
    intToInt16 : Int -> Int16;
    intToInt16Wrap : Int -> Int16;
    intToInt32 : Int -> Int32;
    intToInt32Wrap : Int -> Int32;
    intToInt64 : Int -> Int64;
    intToInt64Wrap : Int -> Int64;
    intToInt8 : Int -> Int8;
    intToInt8Wrap : Int -> Int8;
    intToNat16Wrap : Int -> Nat16;
    intToNat32Wrap : Int -> Nat32;
    intToNat64Wrap : Int -> Nat64;
    intToNat8Wrap : Int -> Nat8;
    isController : Principal -> Bool;
    log : Float -> Float;
    nat16ToInt16 : Nat16 -> Int16;
    nat16ToNat : Nat16 -> Nat;
    nat16ToNat32 : Nat16 -> Nat32;
    nat16ToNat8 : Nat16 -> Nat8;
    nat32ToChar : Nat32 -> Char;
    nat32ToInt32 : Nat32 -> Int32;
    nat32ToNat : Nat32 -> Nat;
    nat32ToNat16 : Nat32 -> Nat16;
    nat32ToNat64 : Nat32 -> Nat64;
    nat64ToInt64 : Nat64 -> Int64;
    nat64ToNat : Nat64 -> Nat;
    nat64ToNat32 : Nat64 -> Nat32;
    nat8ToInt8 : Nat8 -> Int8;
    nat8ToNat : Nat8 -> Nat;
    nat8ToNat16 : Nat8 -> Nat16;
    natToNat16 : Nat -> Nat16;
    natToNat32 : Nat -> Nat32;
    natToNat64 : Nat -> Nat64;
    natToNat8 : Nat -> Nat8;
    performanceCounter : Nat32 -> Nat64;
    popcntInt16 : Int16 -> Int16;
    popcntInt32 : Int32 -> Int32;
    popcntInt64 : Int64 -> Int64;
    popcntInt8 : Int8 -> Int8;
    popcntNat16 : Nat16 -> Nat16;
    popcntNat32 : Nat32 -> Nat32;
    popcntNat64 : Nat64 -> Nat64;
    popcntNat8 : Nat8 -> Nat8;
    principalOfActor : (actor {}) -> Principal;
    principalOfBlob : Blob -> Principal;
    rts_callback_table_count : () -> Nat;
    rts_callback_table_size : () -> Nat;
    rts_collector_instructions : () -> Nat;
    rts_heap_size : () -> Nat;
    rts_max_live_size : () -> Nat;
    rts_max_stack_size : () -> Nat;
    rts_memory_size : () -> Nat;
    rts_mutator_instructions : () -> Nat;
    rts_reclaimed : () -> Nat;
    rts_total_allocation : () -> Nat;
    rts_version : () -> Text;
    setCertifiedData : Blob -> ();
    setTimer : (Nat64, Bool, () -> async ()) -> Nat;
    shiftLeft : (Nat, Nat32) -> Nat;
    shiftRight : (Nat, Nat32) -> Nat;
    sin : Float -> Float;
    stableMemoryGrow : Nat64 -> Nat64;
    stableMemoryLoadBlob : (Nat64, Nat) -> Blob;
    stableMemoryLoadFloat : Nat64 -> Float;
    stableMemoryLoadInt16 : Nat64 -> Int16;
    stableMemoryLoadInt32 : Nat64 -> Int32;
    stableMemoryLoadInt64 : Nat64 -> Int64;
    stableMemoryLoadInt8 : Nat64 -> Int8;
    stableMemoryLoadNat16 : Nat64 -> Nat16;
    stableMemoryLoadNat32 : Nat64 -> Nat32;
    stableMemoryLoadNat64 : Nat64 -> Nat64;
    stableMemoryLoadNat8 : Nat64 -> Nat8;
    stableMemorySize : () -> Nat64;
    stableMemoryStoreBlob : (Nat64, Blob) -> ();
    stableMemoryStoreFloat : (Nat64, Float) -> ();
    stableMemoryStoreInt16 : (Nat64, Int16) -> ();
    stableMemoryStoreInt32 : (Nat64, Int32) -> ();
    stableMemoryStoreInt64 : (Nat64, Int64) -> ();
    stableMemoryStoreInt8 : (Nat64, Int8) -> ();
    stableMemoryStoreNat16 : (Nat64, Nat16) -> ();
    stableMemoryStoreNat32 : (Nat64, Nat32) -> ();
    stableMemoryStoreNat64 : (Nat64, Nat64) -> ();
    stableMemoryStoreNat8 : (Nat64, Nat8) -> ();
    stableVarQuery : () -> shared query () -> async {size : Nat64};
    tan : Float -> Float;
    textCompare : (Text, Text) -> Int8;
    time : () -> Nat64;
    trap : Text -> None
  }