navio-blsct
Version:
TypeScript bindings for the `libblsct` library used by the [Navio](https://nav.io/) blockchain to construct confidential transactions based on the BLS12-381 curve.
70 lines (69 loc) • 2.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Address = exports.AddressEncoding = void 0;
const blsct_1 = require("./blsct");
const doublePublicKey_1 = require("./keys/doublePublicKey");
/**
* Represents the available address encoding formats.
*/
var AddressEncoding;
(function (AddressEncoding) {
/** Bech32 encoding as defined in BIP-173. */
AddressEncoding[AddressEncoding["Bech32"] = 0] = "Bech32";
/** Bech32m encoding as defined in BIP-350. */
AddressEncoding[AddressEncoding["Bech32M"] = 1] = "Bech32M";
})(AddressEncoding || (exports.AddressEncoding = AddressEncoding = {}));
/**
* Provides static utility methods for encoding and decoding addresses.
*
* This class is intended to be used as a static container and should not be instantiated.
*
* Examples:
* ```ts
* const { Address, DoublePublicKey, AddressEncoding } = require('navio-blsct')
* const dpk = DoublePublicKey.random()
* const addr = Address.encode(dpk, AddressEncoding.Bech32M)
* addr
* const decDpk = Address.decode(addr)
* decDpk.serialize() === dpk.serialize() // true
* ```
*/
class Address {
/** Encode a `DoublePublicKey` to an address string using the specified encoding
*
* @param addrDpk - The `DoublePublicKey` to encode.
* @param encoding - The desired address encoding format (`Bech32` or `Bech32M`).
* @return The encoded address as a string.
*/
static encode(addrDpk, encoding) {
let blsctEncoding = encoding === AddressEncoding.Bech32 ? blsct_1.Bech32 : blsct_1.Bech32M;
const dpk = (0, blsct_1.castToDpk)(addrDpk.value());
const rv = (0, blsct_1.encodeAddress)(dpk, blsctEncoding);
if (rv.result !== 0) {
const msg = `Failed to encode address. Error code = ${rv.result}`;
(0, blsct_1.freeObj)(rv);
throw new Error(msg);
}
const addrCStr = (0, blsct_1.getValueAsCStr)(rv);
(0, blsct_1.freeObj)(rv);
return addrCStr;
}
/** Decode an address string to a `DoublePublicKey`.
*
* @param addrStr - The address string to decode.
* @return A `DoublePublicKey` instance representing the decoded address.
* @throws Error if the decoding fails.
*/
static decode(addrStr) {
const rv = (0, blsct_1.decodeAddress)(addrStr);
if (rv.result !== 0) {
const msg = `Failed to decode address. Error code = ${rv.result}`;
(0, blsct_1.freeObj)(rv);
throw new Error(msg);
}
const addrDpk = doublePublicKey_1.DoublePublicKey.fromObj(rv.value);
(0, blsct_1.freeObj)(rv);
return addrDpk;
}
}
exports.Address = Address;