Skip to main content

Address Module

Generate, validate, and encode Hoosat addresses.

Overview

The address.mo module handles Hoosat address operations using CashAddr encoding format.

Address Types

import Address "mo:hoosat-mo/address";

Address.SCHNORR // 0 - 32-byte Schnorr pubkeys
Address.ECDSA // 1 - 33-byte ECDSA pubkeys
Address.P2SH // 2 - 32-byte script hashes

Key Functions

generateAddress

Generate a Hoosat address from a public key.

public func generateAddress(
pubkey: Blob,
addrType: Nat
) : Result.Result<AddressInfo, HoosatError>

Example:

let pubkeyBlob = Blob.fromArray([0x02, 0xa1, ...]);
let result = Address.generateAddress(pubkeyBlob, Address.ECDSA);

switch (result) {
case (#ok(info)) {
Debug.print("Address: " # info.address);
// "hoosat:qp..."
};
case (#err(e)) {
Debug.print("Error: " # Errors.errorToText(e));
};
};

decodeAddress

Decode a Hoosat address into type and payload.

public func decodeAddress(
address: Text
) : ?(Nat, [Nat8])

Example:

switch (Address.decodeAddress("hoosat:qp...")) {
case (?(addrType, payload)) {
Debug.print("Type: " # debug_show(addrType));
Debug.print("Payload length: " # debug_show(payload.size()));
};
case (null) {
Debug.print("Invalid address");
};
};

pubkeyToScript

Convert public key to script public key.

public func pubkeyToScript(
pubkey: [Nat8],
addrType: Nat
) : Text

Example:

let pubkey = Address.arrayFromHex("02a1b2c3...");
let script = Address.pubkeyToScript(pubkey, Address.ECDSA);
// Returns: "2102a1b2c3...ac"

Utility Functions

hexFromArray / arrayFromHex

// Bytes to hex
let hex = Address.hexFromArray([0xa1, 0xb2, 0xc3]);
// "a1b2c3"

// Hex to bytes
let bytes = Address.arrayFromHex("a1b2c3");
// [0xa1, 0xb2, 0xc3]