diff --git a/.gitignore b/.gitignore
index 5791fc8..6a54e5a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,6 @@ node_modules
coverage
gh-pages
-/lib/
# Visual Studio Code - https://code.visualstudio.com/
.settings/
diff --git a/lib/address/address.d.ts b/lib/address/address.d.ts
new file mode 100644
index 0000000..6666c67
--- /dev/null
+++ b/lib/address/address.d.ts
@@ -0,0 +1,31 @@
+import { H160 } from "../value/H160";
+import { H256Value } from "../value/H256";
+export type AddressValue = Address | string;
+/**
+ * The bech32 form of account id. The human readable part(HRP) is used to
+ * represent the network. For address, the HRP is "ccc" for mainnet or
+ * "tcc" for testnet.
+ *
+ * Refer to the spec for the details about Address.
+ * https://github.com/CodeChain-io/codechain/blob/master/spec/CodeChain-Address.md
+ */
+export declare class Address {
+ static fromPublic(publicKey: H256Value, options: {
+ networkId: string;
+ version?: number;
+ }): Address;
+ static fromAccountId(accountId: H160 | string, options: {
+ networkId: string;
+ version?: number;
+ }): Address;
+ static fromString(address: string): Address;
+ static check(address: any): boolean;
+ static ensure(address: AddressValue): Address;
+ static ensureAccount(address: Address | H160 | string): H160;
+ private static checkString;
+ readonly accountId: H160;
+ readonly value: string;
+ private constructor();
+ toString(): string;
+ getAccountId(): H160;
+}
diff --git a/lib/address/address.js b/lib/address/address.js
new file mode 100644
index 0000000..ab3c7b4
--- /dev/null
+++ b/lib/address/address.js
@@ -0,0 +1,109 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Address = void 0;
+const buffer_1 = require("buffer");
+const _ = require("lodash");
+const hash_1 = require("../hash");
+const utility_1 = require("../utility");
+const H160_1 = require("../value/H160");
+const H256_1 = require("../value/H256");
+const bech32_1 = require("./bech32");
+/**
+ * The bech32 form of account id. The human readable part(HRP) is used to
+ * represent the network. For address, the HRP is "ccc" for mainnet or
+ * "tcc" for testnet.
+ *
+ * Refer to the spec for the details about Address.
+ * https://github.com/CodeChain-io/codechain/blob/master/spec/CodeChain-Address.md
+ */
+class Address {
+ static fromPublic(publicKey, options) {
+ if (!H256_1.H256.check(publicKey)) {
+ throw Error(`Invalid public key for creating Address: ${publicKey}`);
+ }
+ return Address.fromAccountId(getAccountIdFromPublic(H256_1.H256.ensure(publicKey).value), options);
+ }
+ static fromAccountId(accountId, options) {
+ const { networkId, version = 1 } = options;
+ if (!H160_1.H160.check(accountId)) {
+ throw Error(`Invalid accountId for creating Address: "${accountId}"`);
+ }
+ if (version !== 1) {
+ throw Error(`Unsupported version for Address: "${version}"`);
+ }
+ if (typeof networkId !== "string" || networkId.length !== 2) {
+ throw Error(`Unsupported networkId for Address: "${networkId}"`);
+ }
+ const words = (0, bech32_1.toWords)(buffer_1.Buffer.from(_.padStart(version.toString(16), 2, "0") +
+ H160_1.H160.ensure(accountId).value, "hex"));
+ return new Address(H160_1.H160.ensure(accountId), (0, bech32_1.encode)(networkId + "c", words));
+ }
+ static fromString(address) {
+ if (typeof address !== "string") {
+ throw Error(`Expected Address string but found: "${address}"`);
+ }
+ else if (address.charAt(2) !== "c") {
+ throw Error(`Unknown prefix for Address: ${address}`);
+ }
+ const { words } = (0, bech32_1.decode)(address, address.substr(0, 3));
+ const bytes = (0, bech32_1.fromWords)(words);
+ const version = bytes[0];
+ if (version !== 1) {
+ throw Error(`Unsupported version for Address: ${version}`);
+ }
+ const accountId = (0, utility_1.toHex)(buffer_1.Buffer.from(bytes.slice(1)));
+ return new Address(new H160_1.H160(accountId), address);
+ }
+ static check(address) {
+ return address instanceof Address ? true : Address.checkString(address);
+ }
+ static ensure(address) {
+ if (address instanceof Address) {
+ return address;
+ }
+ else if (typeof address === "string") {
+ return Address.fromString(address);
+ }
+ else {
+ throw Error(`Expected either Address or string but found ${address}`);
+ }
+ }
+ static ensureAccount(address) {
+ if (address instanceof Address) {
+ // FIXME: verify network id
+ return address.getAccountId();
+ }
+ else if (address instanceof H160_1.H160) {
+ return address;
+ }
+ else if (address.match(`^(0x)?[a-fA-F0-9]{40}$`)) {
+ return new H160_1.H160(address);
+ }
+ else {
+ return Address.fromString(address).getAccountId();
+ }
+ }
+ static checkString(value) {
+ // FIXME: verify checksum
+ return /^.{2}c[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{40}$/.test(value);
+ }
+ constructor(accountId, address) {
+ this.accountId = accountId;
+ this.value = address;
+ }
+ toString() {
+ return this.value;
+ }
+ getAccountId() {
+ return this.accountId;
+ }
+}
+exports.Address = Address;
+function getAccountIdFromPublic(publicKey) {
+ if (typeof publicKey !== "string") {
+ throw Error(`Unexpected parameter for getAccountIdFromPublic: ${publicKey}`);
+ }
+ // FIXME: Check 512-bit hexstring
+ return (0, hash_1.blake160)(publicKey);
+}
+//# sourceMappingURL=address.js.map
\ No newline at end of file
diff --git a/lib/address/address.js.map b/lib/address/address.js.map
new file mode 100644
index 0000000..a060fd4
--- /dev/null
+++ b/lib/address/address.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/address/address.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/address/bech32.d.ts b/lib/address/bech32.d.ts
new file mode 100644
index 0000000..0d1ba6c
--- /dev/null
+++ b/lib/address/bech32.d.ts
@@ -0,0 +1,19 @@
+/**
+ * @hidden
+ */
+export declare function encode(prefix: any, words: any, LIMIT?: any): any;
+/**
+ * @hidden
+ */
+export declare function decode(str: string, prefix: string, LIMIT?: number): {
+ prefix: string;
+ words: number[];
+};
+/**
+ * @hidden
+ */
+export declare function toWords(bytes: any): number[];
+/**
+ * @hidden
+ */
+export declare function fromWords(words: any): number[];
diff --git a/lib/address/bech32.js b/lib/address/bech32.js
new file mode 100644
index 0000000..a6daf94
--- /dev/null
+++ b/lib/address/bech32.js
@@ -0,0 +1,182 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.fromWords = exports.toWords = exports.decode = exports.encode = void 0;
+/**
+ * @hidden
+ */
+const ALPHABET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
+/* tslint:disable:prefer-for-of */
+// pre-compute lookup table
+/**
+ * @hidden
+ */
+const ALPHABET_MAP = {};
+for (let z = 0; z < ALPHABET.length; z++) {
+ const x = ALPHABET.charAt(z);
+ if (ALPHABET_MAP[x] !== undefined) {
+ throw new TypeError(x + " is ambiguous");
+ }
+ ALPHABET_MAP[x] = z;
+}
+// FIXME: any
+/**
+ * @hidden
+ */
+function polymodStep(pre) {
+ const b = pre >> 25;
+ return (((pre & 0x1ffffff) << 5) ^
+ (-((b >> 0) & 1) & 0x3b6a57b2) ^
+ (-((b >> 1) & 1) & 0x26508e6d) ^
+ (-((b >> 2) & 1) & 0x1ea119fa) ^
+ (-((b >> 3) & 1) & 0x3d4233dd) ^
+ (-((b >> 4) & 1) & 0x2a1462b3));
+}
+// FIXME: any
+/**
+ * @hidden
+ */
+function prefixChk(prefix) {
+ let chk = 1;
+ for (let i = 0; i < prefix.length; ++i) {
+ const c = prefix.charCodeAt(i);
+ if (c < 33 || c > 126) {
+ throw new Error("Invalid prefix (" + prefix + ")");
+ }
+ chk = polymodStep(chk) ^ (c >> 5);
+ }
+ chk = polymodStep(chk);
+ for (let i = 0; i < prefix.length; ++i) {
+ const v = prefix.charCodeAt(i);
+ chk = polymodStep(chk) ^ (v & 0x1f);
+ }
+ return chk;
+}
+// FIXME: any
+/**
+ * @hidden
+ */
+function encode(prefix, words, LIMIT) {
+ LIMIT = LIMIT || 90;
+ if (prefix.length + 7 + words.length > LIMIT) {
+ throw new TypeError("Exceeds length limit");
+ }
+ prefix = prefix.toLowerCase();
+ // determine chk mod
+ let chk = prefixChk(prefix);
+ let result = prefix;
+ for (let i = 0; i < words.length; ++i) {
+ const x = words[i];
+ if (x >> 5 !== 0) {
+ throw new Error("Non 5-bit word");
+ }
+ chk = polymodStep(chk) ^ x;
+ result += ALPHABET.charAt(x);
+ }
+ for (let i = 0; i < 6; ++i) {
+ chk = polymodStep(chk);
+ }
+ chk ^= 1;
+ for (let i = 0; i < 6; ++i) {
+ const v = (chk >> ((5 - i) * 5)) & 0x1f;
+ result += ALPHABET.charAt(v);
+ }
+ return result;
+}
+exports.encode = encode;
+// FIXME: any
+/**
+ * @hidden
+ */
+function decode(str, prefix, LIMIT) {
+ LIMIT = LIMIT || 90;
+ if (str.length < 8) {
+ throw new TypeError(str + " too short");
+ }
+ if (str.length > LIMIT) {
+ throw new TypeError("Exceeds length limit");
+ }
+ // don't allow mixed case
+ const lowered = str.toLowerCase();
+ const uppered = str.toUpperCase();
+ if (str !== lowered && str !== uppered) {
+ throw new Error("Mixed-case string " + str);
+ }
+ str = lowered;
+ if (!str.startsWith(prefix)) {
+ throw new Error("Missing prefix for " + str);
+ }
+ const split = prefix.length;
+ const wordChars = str.slice(split);
+ if (wordChars.length < 6) {
+ throw new Error("Data too short");
+ }
+ let chk = prefixChk(prefix);
+ const words = [];
+ for (let i = 0; i < wordChars.length; ++i) {
+ const c = wordChars.charAt(i);
+ const v = ALPHABET_MAP[c];
+ if (v === undefined) {
+ throw new Error("Unknown character " + c);
+ }
+ chk = polymodStep(chk) ^ v;
+ // not in the checksum?
+ if (i + 6 >= wordChars.length) {
+ continue;
+ }
+ words.push(v);
+ }
+ if (chk !== 1) {
+ throw new Error("Invalid checksum for " + str);
+ }
+ return { prefix, words };
+}
+exports.decode = decode;
+// FIXME: any
+/**
+ * @hidden
+ */
+function convert(data, inBits, outBits, pad) {
+ let value = 0;
+ let bits = 0;
+ const maxV = (1 << outBits) - 1;
+ const result = [];
+ for (let i = 0; i < data.length; ++i) {
+ value = (value << inBits) | data[i];
+ bits += inBits;
+ while (bits >= outBits) {
+ bits -= outBits;
+ result.push((value >> bits) & maxV);
+ }
+ }
+ if (pad) {
+ if (bits > 0) {
+ result.push((value << (outBits - bits)) & maxV);
+ }
+ }
+ else {
+ if (bits >= inBits) {
+ throw new Error("Excess padding");
+ }
+ if ((value << (outBits - bits)) & maxV) {
+ throw new Error("Non-zero padding");
+ }
+ }
+ return result;
+}
+// FIXME: any
+/**
+ * @hidden
+ */
+function toWords(bytes) {
+ return convert(bytes, 8, 5, true);
+}
+exports.toWords = toWords;
+// FIXME: any
+/**
+ * @hidden
+ */
+function fromWords(words) {
+ return convert(words, 5, 8, false);
+}
+exports.fromWords = fromWords;
+//# sourceMappingURL=bech32.js.map
\ No newline at end of file
diff --git a/lib/address/bech32.js.map b/lib/address/bech32.js.map
new file mode 100644
index 0000000..b388a8f
--- /dev/null
+++ b/lib/address/bech32.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"bech32.js","sourceRoot":"","sources":["../../src/address/bech32.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/hash.d.ts b/lib/hash.d.ts
new file mode 100644
index 0000000..1e779fa
--- /dev/null
+++ b/lib/hash.d.ts
@@ -0,0 +1,46 @@
+///
+/**
+ * Gets data's 256 bit blake hash.
+ * @param data buffer or hexadecimal string
+ * @returns 32 byte hexadecimal string
+ */
+export declare const blake256: (data: Buffer | string) => string;
+/**
+ * Gets data's 256 bit blake hash by using the key.
+ * @param data buffer or hexadecimal string
+ * @param key
+ * @returns 32 byte hexadecimal string
+ */
+export declare const blake256WithKey: (data: Buffer | string, key: Uint8Array) => string;
+/**
+ * Gets data's 160 bit blake hash.
+ * @param data buffer or hexadecimal string
+ * @returns 20 byte hexadecimal string
+ */
+export declare const blake160: (data: Buffer | string) => string;
+/**
+ * Gets data's 160 bit blake hash by using the key.
+ * @param data buffer or hexadecimal string
+ * @param key
+ * @returns 20 byte hexadecimal string
+ */
+export declare const blake160WithKey: (data: Buffer | string, key: Uint8Array) => string;
+/**
+ * Gets data's 128 bit blake hash.
+ * @param data buffer or hexadecimal string
+ * @returns 16 byte hexadecimal string
+ */
+export declare const blake128: (data: Buffer | string) => string;
+/**
+ * Gets data's 128 bit blake hash by using the key.
+ * @param data buffer or hexadecimal string
+ * @param key
+ * @returns 16 byte hexadecimal string
+ */
+export declare const blake128WithKey: (data: Buffer | string, key: Uint8Array) => string;
+/**
+ * Gets data's 160 bit RIPEMD hash.
+ * @param data buffer or hexadecimal string
+ * @returns 20 byte hexadecimal string
+ */
+export declare const ripemd160: (data: Buffer | string) => string;
diff --git a/lib/hash.js b/lib/hash.js
new file mode 100644
index 0000000..2f063e1
--- /dev/null
+++ b/lib/hash.js
@@ -0,0 +1,109 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ripemd160 = exports.blake128WithKey = exports.blake128 = exports.blake160WithKey = exports.blake160 = exports.blake256WithKey = exports.blake256 = void 0;
+const crypto_js_1 = require("crypto-js");
+const utility_1 = require("./utility");
+/**
+ * @hidden
+ */
+const blake = require("blakejs");
+/**
+ * Gets data's 256 bit blake hash.
+ * @param data buffer or hexadecimal string
+ * @returns 32 byte hexadecimal string
+ */
+const blake256 = (data) => {
+ if (!(data instanceof Buffer)) {
+ data = Buffer.from(data, "hex");
+ }
+ const context = blake.blake2bInit(32, null);
+ blake.blake2bUpdate(context, data);
+ return (0, utility_1.toHex)(blake.blake2bFinal(context));
+};
+exports.blake256 = blake256;
+/**
+ * Gets data's 256 bit blake hash by using the key.
+ * @param data buffer or hexadecimal string
+ * @param key
+ * @returns 32 byte hexadecimal string
+ */
+const blake256WithKey = (data, key) => {
+ if (!(data instanceof Buffer)) {
+ data = Buffer.from(data, "hex");
+ }
+ const context = blake.blake2bInit(32, key);
+ blake.blake2bUpdate(context, data);
+ return (0, utility_1.toHex)(blake.blake2bFinal(context));
+};
+exports.blake256WithKey = blake256WithKey;
+/**
+ * Gets data's 160 bit blake hash.
+ * @param data buffer or hexadecimal string
+ * @returns 20 byte hexadecimal string
+ */
+const blake160 = (data) => {
+ if (!(data instanceof Buffer)) {
+ data = Buffer.from(data, "hex");
+ }
+ const context = blake.blake2bInit(20, null);
+ blake.blake2bUpdate(context, data);
+ return (0, utility_1.toHex)(blake.blake2bFinal(context));
+};
+exports.blake160 = blake160;
+/**
+ * Gets data's 160 bit blake hash by using the key.
+ * @param data buffer or hexadecimal string
+ * @param key
+ * @returns 20 byte hexadecimal string
+ */
+const blake160WithKey = (data, key) => {
+ if (!(data instanceof Buffer)) {
+ data = Buffer.from(data, "hex");
+ }
+ const context = blake.blake2bInit(20, key);
+ blake.blake2bUpdate(context, data);
+ return (0, utility_1.toHex)(blake.blake2bFinal(context));
+};
+exports.blake160WithKey = blake160WithKey;
+/**
+ * Gets data's 128 bit blake hash.
+ * @param data buffer or hexadecimal string
+ * @returns 16 byte hexadecimal string
+ */
+const blake128 = (data) => {
+ if (!(data instanceof Buffer)) {
+ data = Buffer.from(data, "hex");
+ }
+ const context = blake.blake2bInit(16, null);
+ blake.blake2bUpdate(context, data);
+ return (0, utility_1.toHex)(blake.blake2bFinal(context));
+};
+exports.blake128 = blake128;
+/**
+ * Gets data's 128 bit blake hash by using the key.
+ * @param data buffer or hexadecimal string
+ * @param key
+ * @returns 16 byte hexadecimal string
+ */
+const blake128WithKey = (data, key) => {
+ if (!(data instanceof Buffer)) {
+ data = Buffer.from(data, "hex");
+ }
+ const context = blake.blake2bInit(16, key);
+ blake.blake2bUpdate(context, data);
+ return (0, utility_1.toHex)(blake.blake2bFinal(context));
+};
+exports.blake128WithKey = blake128WithKey;
+/**
+ * Gets data's 160 bit RIPEMD hash.
+ * @param data buffer or hexadecimal string
+ * @returns 20 byte hexadecimal string
+ */
+const ripemd160 = (data) => {
+ if (!(data instanceof Buffer)) {
+ data = Buffer.from(data, "hex");
+ }
+ return (0, crypto_js_1.RIPEMD160)(crypto_js_1.enc.Hex.parse(data.toString("hex"))).toString();
+};
+exports.ripemd160 = ripemd160;
+//# sourceMappingURL=hash.js.map
\ No newline at end of file
diff --git a/lib/hash.js.map b/lib/hash.js.map
new file mode 100644
index 0000000..d6cd33c
--- /dev/null
+++ b/lib/hash.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/index.d.ts b/lib/index.d.ts
new file mode 100644
index 0000000..dcdd1e0
--- /dev/null
+++ b/lib/index.d.ts
@@ -0,0 +1,13 @@
+export { Address, AddressValue } from "./address/address";
+export { H128, H128Value } from "./value/H128";
+export { H160, H160Value } from "./value/H160";
+export { H256, H256Value } from "./value/H256";
+export { H512, H512Value } from "./value/H512";
+export { U64, U64Value } from "./value/U64";
+export { U128, U128Value } from "./value/U128";
+export { U256, U256Value } from "./value/U256";
+export { blake128, blake128WithKey, blake160, blake160WithKey, blake256, blake256WithKey, ripemd160 } from "./hash";
+export { generatePrivateKey, getPublicFromPrivate } from "./key/key";
+export { exchange, x25519GetPublicFromPrivate, X25519Private, X25519Public } from "./key/keyExchange";
+export { Ed25519Signature, signEd25519, verifyEd25519 } from "./key/ed25519";
+export { toHex, toArray, getAccountIdFromPrivate, getAccountIdFromPublic, toLocaleString } from "./utility";
diff --git a/lib/index.js b/lib/index.js
new file mode 100644
index 0000000..b6b20a8
--- /dev/null
+++ b/lib/index.js
@@ -0,0 +1,43 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.toLocaleString = exports.getAccountIdFromPublic = exports.getAccountIdFromPrivate = exports.toArray = exports.toHex = exports.verifyEd25519 = exports.signEd25519 = exports.x25519GetPublicFromPrivate = exports.exchange = exports.getPublicFromPrivate = exports.generatePrivateKey = exports.ripemd160 = exports.blake256WithKey = exports.blake256 = exports.blake160WithKey = exports.blake160 = exports.blake128WithKey = exports.blake128 = exports.U256 = exports.U128 = exports.U64 = exports.H512 = exports.H256 = exports.H160 = exports.H128 = exports.Address = void 0;
+var address_1 = require("./address/address");
+Object.defineProperty(exports, "Address", { enumerable: true, get: function () { return address_1.Address; } });
+var H128_1 = require("./value/H128");
+Object.defineProperty(exports, "H128", { enumerable: true, get: function () { return H128_1.H128; } });
+var H160_1 = require("./value/H160");
+Object.defineProperty(exports, "H160", { enumerable: true, get: function () { return H160_1.H160; } });
+var H256_1 = require("./value/H256");
+Object.defineProperty(exports, "H256", { enumerable: true, get: function () { return H256_1.H256; } });
+var H512_1 = require("./value/H512");
+Object.defineProperty(exports, "H512", { enumerable: true, get: function () { return H512_1.H512; } });
+var U64_1 = require("./value/U64");
+Object.defineProperty(exports, "U64", { enumerable: true, get: function () { return U64_1.U64; } });
+var U128_1 = require("./value/U128");
+Object.defineProperty(exports, "U128", { enumerable: true, get: function () { return U128_1.U128; } });
+var U256_1 = require("./value/U256");
+Object.defineProperty(exports, "U256", { enumerable: true, get: function () { return U256_1.U256; } });
+var hash_1 = require("./hash");
+Object.defineProperty(exports, "blake128", { enumerable: true, get: function () { return hash_1.blake128; } });
+Object.defineProperty(exports, "blake128WithKey", { enumerable: true, get: function () { return hash_1.blake128WithKey; } });
+Object.defineProperty(exports, "blake160", { enumerable: true, get: function () { return hash_1.blake160; } });
+Object.defineProperty(exports, "blake160WithKey", { enumerable: true, get: function () { return hash_1.blake160WithKey; } });
+Object.defineProperty(exports, "blake256", { enumerable: true, get: function () { return hash_1.blake256; } });
+Object.defineProperty(exports, "blake256WithKey", { enumerable: true, get: function () { return hash_1.blake256WithKey; } });
+Object.defineProperty(exports, "ripemd160", { enumerable: true, get: function () { return hash_1.ripemd160; } });
+var key_1 = require("./key/key");
+Object.defineProperty(exports, "generatePrivateKey", { enumerable: true, get: function () { return key_1.generatePrivateKey; } });
+Object.defineProperty(exports, "getPublicFromPrivate", { enumerable: true, get: function () { return key_1.getPublicFromPrivate; } });
+var keyExchange_1 = require("./key/keyExchange");
+Object.defineProperty(exports, "exchange", { enumerable: true, get: function () { return keyExchange_1.exchange; } });
+Object.defineProperty(exports, "x25519GetPublicFromPrivate", { enumerable: true, get: function () { return keyExchange_1.x25519GetPublicFromPrivate; } });
+var ed25519_1 = require("./key/ed25519");
+Object.defineProperty(exports, "signEd25519", { enumerable: true, get: function () { return ed25519_1.signEd25519; } });
+Object.defineProperty(exports, "verifyEd25519", { enumerable: true, get: function () { return ed25519_1.verifyEd25519; } });
+var utility_1 = require("./utility");
+Object.defineProperty(exports, "toHex", { enumerable: true, get: function () { return utility_1.toHex; } });
+Object.defineProperty(exports, "toArray", { enumerable: true, get: function () { return utility_1.toArray; } });
+Object.defineProperty(exports, "getAccountIdFromPrivate", { enumerable: true, get: function () { return utility_1.getAccountIdFromPrivate; } });
+Object.defineProperty(exports, "getAccountIdFromPublic", { enumerable: true, get: function () { return utility_1.getAccountIdFromPublic; } });
+Object.defineProperty(exports, "toLocaleString", { enumerable: true, get: function () { return utility_1.toLocaleString; } });
+//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/lib/index.js.map b/lib/index.js.map
new file mode 100644
index 0000000..ad60dca
--- /dev/null
+++ b/lib/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6CAA0D;AAAjD,kGAAA,OAAO,OAAA;AAEhB,qCAA+C;AAAtC,4FAAA,IAAI,OAAA;AACb,qCAA+C;AAAtC,4FAAA,IAAI,OAAA;AACb,qCAA+C;AAAtC,4FAAA,IAAI,OAAA;AACb,qCAA+C;AAAtC,4FAAA,IAAI,OAAA;AAEb,mCAA4C;AAAnC,0FAAA,GAAG,OAAA;AACZ,qCAA+C;AAAtC,4FAAA,IAAI,OAAA;AACb,qCAA+C;AAAtC,4FAAA,IAAI,OAAA;AAEb,+BAQgB;AAPZ,gGAAA,QAAQ,OAAA;AACR,uGAAA,eAAe,OAAA;AACf,gGAAA,QAAQ,OAAA;AACR,uGAAA,eAAe,OAAA;AACf,gGAAA,QAAQ,OAAA;AACR,uGAAA,eAAe,OAAA;AACf,iGAAA,SAAS,OAAA;AAGb,iCAAqE;AAA5D,yGAAA,kBAAkB,OAAA;AAAE,2GAAA,oBAAoB,OAAA;AACjD,iDAK2B;AAJvB,uGAAA,QAAQ,OAAA;AACR,yHAAA,0BAA0B,OAAA;AAI9B,yCAA6E;AAAlD,sGAAA,WAAW,OAAA;AAAE,wGAAA,aAAa,OAAA;AAErD,qCAMmB;AALf,gGAAA,KAAK,OAAA;AACL,kGAAA,OAAO,OAAA;AACP,kHAAA,uBAAuB,OAAA;AACvB,iHAAA,sBAAsB,OAAA;AACtB,yGAAA,cAAc,OAAA"}
\ No newline at end of file
diff --git a/lib/key/ed25519.d.ts b/lib/key/ed25519.d.ts
new file mode 100644
index 0000000..292a8dd
--- /dev/null
+++ b/lib/key/ed25519.d.ts
@@ -0,0 +1,16 @@
+export type Ed25519Signature = string;
+/**
+ * Gets EdDSA(Ed25519) signature for message from private key.
+ * @param message 32 byte hexadecimal string
+ * @param priv 64 byte hexadecimal string of private key
+ * @returns 64 byte hexadecimal string of Ed25519 signature
+ */
+export declare const signEd25519: (message: string, priv: string) => Ed25519Signature;
+/**
+ * Checks if the signature from signEd25519 is valid.
+ * @param message 32 byte hexadecimal string
+ * @param signature 64 byte hexadecimal string of Ed25519 signature
+ * @param pub 32 byte hexadecimal string of public key
+ * @returns if signature is valid, true. Else false.
+ */
+export declare const verifyEd25519: (message: string, signature: Ed25519Signature, pub: string) => boolean;
diff --git a/lib/key/ed25519.js b/lib/key/ed25519.js
new file mode 100644
index 0000000..273e91c
--- /dev/null
+++ b/lib/key/ed25519.js
@@ -0,0 +1,27 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.verifyEd25519 = exports.signEd25519 = void 0;
+const nacl = require("tweetnacl");
+const utility_1 = require("../utility");
+/**
+ * Gets EdDSA(Ed25519) signature for message from private key.
+ * @param message 32 byte hexadecimal string
+ * @param priv 64 byte hexadecimal string of private key
+ * @returns 64 byte hexadecimal string of Ed25519 signature
+ */
+const signEd25519 = (message, priv) => {
+ return (0, utility_1.toHex)(Buffer.from(nacl.sign.detached((0, utility_1.toArray)(message), (0, utility_1.toArray)(priv))));
+};
+exports.signEd25519 = signEd25519;
+/**
+ * Checks if the signature from signEd25519 is valid.
+ * @param message 32 byte hexadecimal string
+ * @param signature 64 byte hexadecimal string of Ed25519 signature
+ * @param pub 32 byte hexadecimal string of public key
+ * @returns if signature is valid, true. Else false.
+ */
+const verifyEd25519 = (message, signature, pub) => {
+ return nacl.sign.detached.verify((0, utility_1.toArray)(message), (0, utility_1.toArray)(signature), (0, utility_1.toArray)(pub));
+};
+exports.verifyEd25519 = verifyEd25519;
+//# sourceMappingURL=ed25519.js.map
\ No newline at end of file
diff --git a/lib/key/ed25519.js.map b/lib/key/ed25519.js.map
new file mode 100644
index 0000000..dff0e87
--- /dev/null
+++ b/lib/key/ed25519.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../src/key/ed25519.ts"],"names":[],"mappings":";;;AACA,kCAAmC;AACnC,wCAA4C;AAI5C;;;;;GAKG;AACI,MAAM,WAAW,GAAG,CACvB,OAAe,EACf,IAAY,EACI,EAAE;IAClB,OAAO,IAAA,eAAK,EACR,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,EAAE,IAAA,iBAAO,EAAC,IAAI,CAAC,CAAC,CAAC,CACnE,CAAC;AACN,CAAC,CAAC;AAPW,QAAA,WAAW,eAOtB;AAEF;;;;;;GAMG;AACI,MAAM,aAAa,GAAG,CACzB,OAAe,EACf,SAA2B,EAC3B,GAAW,EACJ,EAAE;IACT,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC5B,IAAA,iBAAO,EAAC,OAAO,CAAC,EAChB,IAAA,iBAAO,EAAC,SAAS,CAAC,EAClB,IAAA,iBAAO,EAAC,GAAG,CAAC,CACf,CAAC;AACN,CAAC,CAAC;AAVW,QAAA,aAAa,iBAUxB"}
\ No newline at end of file
diff --git a/lib/key/key.d.ts b/lib/key/key.d.ts
new file mode 100644
index 0000000..21eba99
--- /dev/null
+++ b/lib/key/key.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Generates a private key.
+ * @returns 64 byte hexadecimal string of private key
+ */
+export declare const generatePrivateKey: () => string;
+/**
+ * Gets public key from private key.
+ * @param priv 64 byte hexadecimal string of private key
+ * @returns 32 byte hexadecimal string of public key
+ */
+export declare const getPublicFromPrivate: (priv: string) => string;
diff --git a/lib/key/key.js b/lib/key/key.js
new file mode 100644
index 0000000..6746a74
--- /dev/null
+++ b/lib/key/key.js
@@ -0,0 +1,23 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getPublicFromPrivate = exports.generatePrivateKey = void 0;
+const nacl = require("tweetnacl");
+const utility_1 = require("../utility");
+/**
+ * Generates a private key.
+ * @returns 64 byte hexadecimal string of private key
+ */
+const generatePrivateKey = () => {
+ return (0, utility_1.toHex)(Buffer.from(nacl.sign.keyPair().secretKey));
+};
+exports.generatePrivateKey = generatePrivateKey;
+/**
+ * Gets public key from private key.
+ * @param priv 64 byte hexadecimal string of private key
+ * @returns 32 byte hexadecimal string of public key
+ */
+const getPublicFromPrivate = (priv) => {
+ return (0, utility_1.toHex)(Buffer.from(nacl.sign.keyPair.fromSecretKey((0, utility_1.toArray)(priv)).publicKey));
+};
+exports.getPublicFromPrivate = getPublicFromPrivate;
+//# sourceMappingURL=key.js.map
\ No newline at end of file
diff --git a/lib/key/key.js.map b/lib/key/key.js.map
new file mode 100644
index 0000000..d9374a2
--- /dev/null
+++ b/lib/key/key.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/key/key.ts"],"names":[],"mappings":";;;AACA,kCAAmC;AACnC,wCAA4C;AAE5C;;;GAGG;AACI,MAAM,kBAAkB,GAAG,GAAW,EAAE;IAC3C,OAAO,IAAA,eAAK,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AAFW,QAAA,kBAAkB,sBAE7B;AAEF;;;;GAIG;AACI,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAU,EAAE;IACzD,OAAO,IAAA,eAAK,EACR,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAA,iBAAO,EAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CACxE,CAAC;AACN,CAAC,CAAC;AAJW,QAAA,oBAAoB,wBAI/B"}
\ No newline at end of file
diff --git a/lib/key/keyExchange.d.ts b/lib/key/keyExchange.d.ts
new file mode 100644
index 0000000..5d48e14
--- /dev/null
+++ b/lib/key/keyExchange.d.ts
@@ -0,0 +1,15 @@
+export type X25519Public = string;
+export type X25519Private = string;
+/**
+ * Gets an ECDH session key for encryption and decryption between two parties
+ * @param otherPublic 32 byte hexadecimal string of the other side public key
+ * @param myPrivate 32 byte hexadecimal string of my side private key
+ * @returns 32 byte hexadecimal string of the shared secret
+ */
+export declare const exchange: (otherPublic: X25519Public, myPrivate: X25519Private) => string;
+/**
+ * Gets the X25519 public key(on Curve25519) for a private key
+ * @param x25519Private 32 byte hexadecimal string of a secret key
+ * @returns 32 byte hexadecimal string of the public key
+ */
+export declare const x25519GetPublicFromPrivate: (x25519Private: string) => string;
diff --git a/lib/key/keyExchange.js b/lib/key/keyExchange.js
new file mode 100644
index 0000000..03098c9
--- /dev/null
+++ b/lib/key/keyExchange.js
@@ -0,0 +1,33 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.x25519GetPublicFromPrivate = exports.exchange = void 0;
+const utility_1 = require("../utility");
+/**
+ * @hidden
+ */
+const nacl = require("tweetnacl");
+/**
+ * Gets an ECDH session key for encryption and decryption between two parties
+ * @param otherPublic 32 byte hexadecimal string of the other side public key
+ * @param myPrivate 32 byte hexadecimal string of my side private key
+ * @returns 32 byte hexadecimal string of the shared secret
+ */
+const exchange = (otherPublic, myPrivate) => {
+ const groupElement = (0, utility_1.toArray)(otherPublic);
+ const scalar = (0, utility_1.toArray)(myPrivate);
+ const sharedSecret = nacl.scalarMult(scalar, groupElement);
+ return (0, utility_1.toHex)(sharedSecret);
+};
+exports.exchange = exchange;
+/**
+ * Gets the X25519 public key(on Curve25519) for a private key
+ * @param x25519Private 32 byte hexadecimal string of a secret key
+ * @returns 32 byte hexadecimal string of the public key
+ */
+const x25519GetPublicFromPrivate = (x25519Private) => {
+ const scalar = (0, utility_1.toArray)(x25519Private);
+ const x25519Public = nacl.scalarMult.base(scalar);
+ return (0, utility_1.toHex)(x25519Public);
+};
+exports.x25519GetPublicFromPrivate = x25519GetPublicFromPrivate;
+//# sourceMappingURL=keyExchange.js.map
\ No newline at end of file
diff --git a/lib/key/keyExchange.js.map b/lib/key/keyExchange.js.map
new file mode 100644
index 0000000..3fd9335
--- /dev/null
+++ b/lib/key/keyExchange.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"keyExchange.js","sourceRoot":"","sources":["../../src/key/keyExchange.ts"],"names":[],"mappings":";;;AAAA,wCAA4C;AAE5C;;GAEG;AACH,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAKlC;;;;;GAKG;AACI,MAAM,QAAQ,GAAG,CACpB,WAAyB,EACzB,SAAwB,EAClB,EAAE;IACR,MAAM,YAAY,GAAG,IAAA,iBAAO,EAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAA,iBAAO,EAAC,SAAS,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3D,OAAO,IAAA,eAAK,EAAC,YAAY,CAAC,CAAC;AAC/B,CAAC,CAAC;AARW,QAAA,QAAQ,YAQnB;AAEF;;;;GAIG;AACI,MAAM,0BAA0B,GAAG,CAAC,aAAqB,EAAU,EAAE;IACxE,MAAM,MAAM,GAAG,IAAA,iBAAO,EAAC,aAAa,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,IAAA,eAAK,EAAC,YAAY,CAAC,CAAC;AAC/B,CAAC,CAAC;AAJW,QAAA,0BAA0B,8BAIrC"}
\ No newline at end of file
diff --git a/lib/utility.d.ts b/lib/utility.d.ts
new file mode 100644
index 0000000..b54bf68
--- /dev/null
+++ b/lib/utility.d.ts
@@ -0,0 +1,35 @@
+///
+import BigNumber from "bignumber.js";
+/**
+ * Converts buffer to hexadecimal string.
+ * @param buffer arbritrary length of data
+ * @returns hexadecimal string
+ */
+export declare const toHex: (buffer: Buffer) => string;
+/**
+ * Converts hexadecimal string to Uint8Array.
+ * @param string arbritrary length of data
+ * @returns Uint8Array
+ */
+export declare const toArray: (hex: string) => Uint8Array;
+/**
+ * Gets account id from private key.
+ * @param priv 32 byte hexadecimal string of private key
+ * @returns 20 byte hexadecimal string of account id
+ */
+export declare const getAccountIdFromPrivate: (priv: string) => string;
+/**
+ * Gets account id from the given public key.
+ * @param publicKey 64 byte hexadecimal string of uncompressed public key
+ * @returns 20 byte hexadecimal string of account id
+ */
+export declare const getAccountIdFromPublic: (publicKey: string) => string;
+/**
+ * Converts BigNumber to formatted number string
+ * Default decimalSeparator is point: "."
+ * Default groupSeparator is comma; ","
+ * Default groupSize is 3
+ * @param num BigNumber object
+ * @returns formatted number string
+ */
+export declare const toLocaleString: (num: BigNumber) => string;
diff --git a/lib/utility.js b/lib/utility.js
new file mode 100644
index 0000000..8055107
--- /dev/null
+++ b/lib/utility.js
@@ -0,0 +1,61 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.toLocaleString = exports.getAccountIdFromPublic = exports.getAccountIdFromPrivate = exports.toArray = exports.toHex = void 0;
+const hash_1 = require("./hash");
+const key_1 = require("./key/key");
+/**
+ * @hidden
+ */
+const toHexByte = (byte) => byte < 0x10 ? `0${byte.toString(16)}` : byte.toString(16);
+/**
+ * Converts buffer to hexadecimal string.
+ * @param buffer arbritrary length of data
+ * @returns hexadecimal string
+ */
+const toHex = (buffer) => {
+ return Array.from(buffer)
+ .map(toHexByte)
+ .join("");
+};
+exports.toHex = toHex;
+/**
+ * Converts hexadecimal string to Uint8Array.
+ * @param string arbritrary length of data
+ * @returns Uint8Array
+ */
+const toArray = (hex) => {
+ return Uint8Array.from(Buffer.from(hex, "hex"));
+};
+exports.toArray = toArray;
+/**
+ * Gets account id from private key.
+ * @param priv 32 byte hexadecimal string of private key
+ * @returns 20 byte hexadecimal string of account id
+ */
+const getAccountIdFromPrivate = (priv) => {
+ const publicKey = (0, key_1.getPublicFromPrivate)(priv);
+ return (0, exports.getAccountIdFromPublic)(publicKey);
+};
+exports.getAccountIdFromPrivate = getAccountIdFromPrivate;
+/**
+ * Gets account id from the given public key.
+ * @param publicKey 64 byte hexadecimal string of uncompressed public key
+ * @returns 20 byte hexadecimal string of account id
+ */
+const getAccountIdFromPublic = (publicKey) => {
+ return (0, hash_1.blake160)(publicKey);
+};
+exports.getAccountIdFromPublic = getAccountIdFromPublic;
+/**
+ * Converts BigNumber to formatted number string
+ * Default decimalSeparator is point: "."
+ * Default groupSeparator is comma; ","
+ * Default groupSize is 3
+ * @param num BigNumber object
+ * @returns formatted number string
+ */
+const toLocaleString = (num) => {
+ return num.toFormat();
+};
+exports.toLocaleString = toLocaleString;
+//# sourceMappingURL=utility.js.map
\ No newline at end of file
diff --git a/lib/utility.js.map b/lib/utility.js.map
new file mode 100644
index 0000000..d1b543c
--- /dev/null
+++ b/lib/utility.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"utility.js","sourceRoot":"","sources":["../src/utility.ts"],"names":[],"mappings":";;;AACA,iCAAkC;AAClC,mCAAiD;AAEjD;;GAEG;AACH,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAC/B,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAE9D;;;;GAIG;AACI,MAAM,KAAK,GAAG,CAAC,MAAc,EAAU,EAAE;IAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;SACpB,GAAG,CAAC,SAAS,CAAC;SACd,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC;AAJW,QAAA,KAAK,SAIhB;AAEF;;;;GAIG;AACI,MAAM,OAAO,GAAG,CAAC,GAAW,EAAc,EAAE;IAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC;AAFW,QAAA,OAAO,WAElB;AAEF;;;;GAIG;AACI,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC5D,MAAM,SAAS,GAAG,IAAA,0BAAoB,EAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,IAAA,8BAAsB,EAAC,SAAS,CAAC,CAAC;AAC7C,CAAC,CAAC;AAHW,QAAA,uBAAuB,2BAGlC;AAEF;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,CAAC,SAAiB,EAAU,EAAE;IAChE,OAAO,IAAA,eAAQ,EAAC,SAAS,CAAC,CAAC;AAC/B,CAAC,CAAC;AAFW,QAAA,sBAAsB,0BAEjC;AAEF;;;;;;;GAOG;AACI,MAAM,cAAc,GAAG,CAAC,GAAc,EAAU,EAAE;IACrD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB"}
\ No newline at end of file
diff --git a/lib/value/H128.d.ts b/lib/value/H128.d.ts
new file mode 100644
index 0000000..a0693f2
--- /dev/null
+++ b/lib/value/H128.d.ts
@@ -0,0 +1,19 @@
+///
+export type H128Value = H128 | string;
+/**
+ * Handles 128-bit data.
+ */
+export declare class H128 {
+ static fromBytes(buffer: Buffer): H128;
+ static zero(): H128;
+ static check(param: any): boolean;
+ static ensure(param: H128Value): H128;
+ private static checkString;
+ value: string;
+ constructor(value: string);
+ toEncodeObject(): string;
+ rlpBytes(): Buffer;
+ isEqualTo(rhs: H128): boolean;
+ toString(): string;
+ toJSON(): string;
+}
diff --git a/lib/value/H128.js b/lib/value/H128.js
new file mode 100644
index 0000000..9421868
--- /dev/null
+++ b/lib/value/H128.js
@@ -0,0 +1,61 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.H128 = void 0;
+/**
+ * @hidden
+ */
+const RLP = require("rlp");
+/**
+ * Handles 128-bit data.
+ */
+class H128 {
+ static fromBytes(buffer) {
+ const bytes = Array.from(buffer.values());
+ const length = bytes.shift() - 0x80;
+ if (length !== 16 || bytes.length !== length) {
+ throw Error(`Invalid RLP for H128: ${bytes}`);
+ }
+ return new H128(bytes
+ .map(byte => byte < 0x10
+ ? `0${byte.toString(16)}`
+ : byte.toString(16))
+ .join(""));
+ }
+ static zero() {
+ return new H128("00000000000000000000000000000000");
+ }
+ static check(param) {
+ return param instanceof H128 ? true : H128.checkString(param);
+ }
+ static ensure(param) {
+ return param instanceof H128 ? param : new H128(param);
+ }
+ static checkString(value) {
+ return /^(0x)?[0-9a-fA-F]{32}$/.test(value);
+ }
+ constructor(value) {
+ if (!H128.checkString(value)) {
+ throw Error(`Expected 16 byte hexstring for creating H128 but found "${value}"`);
+ }
+ this.value = value.startsWith("0x")
+ ? value.slice(2).toLowerCase()
+ : value.toLowerCase();
+ }
+ toEncodeObject() {
+ return `0x${this.value}`;
+ }
+ rlpBytes() {
+ return RLP.encode(this.toEncodeObject());
+ }
+ isEqualTo(rhs) {
+ return this.value === rhs.value;
+ }
+ toString() {
+ return this.value;
+ }
+ toJSON() {
+ return `0x${this.value}`;
+ }
+}
+exports.H128 = H128;
+//# sourceMappingURL=H128.js.map
\ No newline at end of file
diff --git a/lib/value/H128.js.map b/lib/value/H128.js.map
new file mode 100644
index 0000000..12ddef9
--- /dev/null
+++ b/lib/value/H128.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"H128.js","sourceRoot":"","sources":["../../src/value/H128.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAI3B;;GAEG;AACH,MAAa,IAAI;IACN,MAAM,CAAC,SAAS,CAAC,MAAc;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAG,GAAG,IAAI,CAAC;QACrC,IAAI,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC1C,MAAM,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,IAAI,CACX,KAAK;aACA,GAAG,CACA,IAAI,CAAC,EAAE,CACH,IAAI,GAAG,IAAI;YACP,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC9B;aACA,IAAI,CAAC,EAAE,CAAC,CAChB,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,IAAI;QACd,OAAO,IAAI,IAAI,CAAC,kCAAkC,CAAC,CAAC;IACxD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAU;QAC1B,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAgB;QACjC,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,KAAa;QACpC,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAID,YAAY,KAAa;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,KAAK,CACP,2DAA2D,KAAK,GAAG,CACtE,CAAC;SACL;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAC/B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC9B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAEM,cAAc;QACjB,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAEM,QAAQ;QACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,SAAS,CAAC,GAAS;QACtB,OAAO,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;IACpC,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,MAAM;QACT,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACJ;AAnED,oBAmEC"}
\ No newline at end of file
diff --git a/lib/value/H160.d.ts b/lib/value/H160.d.ts
new file mode 100644
index 0000000..2efc3e5
--- /dev/null
+++ b/lib/value/H160.d.ts
@@ -0,0 +1,19 @@
+///
+export type H160Value = H160 | string;
+/**
+ * Handles 160-bit data. Used to express account addresses.
+ */
+export declare class H160 {
+ static fromBytes(buffer: Buffer): H160;
+ static zero(): H160;
+ static check(param: any): boolean;
+ static ensure(param: H160Value): H160;
+ private static checkString;
+ value: string;
+ constructor(value: string);
+ toEncodeObject(): string;
+ rlpBytes(): Buffer;
+ isEqualTo(rhs: H160): boolean;
+ toString(): string;
+ toJSON(): string;
+}
diff --git a/lib/value/H160.js b/lib/value/H160.js
new file mode 100644
index 0000000..3134a70
--- /dev/null
+++ b/lib/value/H160.js
@@ -0,0 +1,61 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.H160 = void 0;
+/**
+ * @hidden
+ */
+const RLP = require("rlp");
+/**
+ * Handles 160-bit data. Used to express account addresses.
+ */
+class H160 {
+ static fromBytes(buffer) {
+ const bytes = Array.from(buffer.values());
+ const length = bytes.shift() - 0x80;
+ if (length !== 20 || bytes.length !== length) {
+ throw Error(`Invalid RLP for H160: ${bytes}`);
+ }
+ return new H160(bytes
+ .map(byte => byte < 0x10
+ ? `0${byte.toString(16)}`
+ : byte.toString(16))
+ .join(""));
+ }
+ static zero() {
+ return new H160("0000000000000000000000000000000000000000");
+ }
+ static check(param) {
+ return param instanceof H160 ? true : H160.checkString(param);
+ }
+ static ensure(param) {
+ return param instanceof H160 ? param : new H160(param);
+ }
+ static checkString(value) {
+ return /^(0x)?[0-9a-fA-F]{40}$/.test(value);
+ }
+ constructor(value) {
+ if (!H160.checkString(value)) {
+ throw Error(`Expected 20 byte hexstring for creating H160 but found "${value}"`);
+ }
+ this.value = value.startsWith("0x")
+ ? value.slice(2).toLowerCase()
+ : value.toLowerCase();
+ }
+ toEncodeObject() {
+ return `0x${this.value}`;
+ }
+ rlpBytes() {
+ return RLP.encode(this.toEncodeObject());
+ }
+ isEqualTo(rhs) {
+ return this.value === rhs.value;
+ }
+ toString() {
+ return this.value;
+ }
+ toJSON() {
+ return `0x${this.value}`;
+ }
+}
+exports.H160 = H160;
+//# sourceMappingURL=H160.js.map
\ No newline at end of file
diff --git a/lib/value/H160.js.map b/lib/value/H160.js.map
new file mode 100644
index 0000000..ca12ecc
--- /dev/null
+++ b/lib/value/H160.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"H160.js","sourceRoot":"","sources":["../../src/value/H160.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAI3B;;GAEG;AACH,MAAa,IAAI;IACN,MAAM,CAAC,SAAS,CAAC,MAAc;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAG,GAAG,IAAI,CAAC;QACrC,IAAI,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC1C,MAAM,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,IAAI,CACX,KAAK;aACA,GAAG,CACA,IAAI,CAAC,EAAE,CACH,IAAI,GAAG,IAAI;YACP,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC9B;aACA,IAAI,CAAC,EAAE,CAAC,CAChB,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,IAAI;QACd,OAAO,IAAI,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAU;QAC1B,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAgB;QACjC,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,KAAa;QACpC,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAID,YAAY,KAAa;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,KAAK,CACP,2DAA2D,KAAK,GAAG,CACtE,CAAC;SACL;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAC/B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC9B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAEM,cAAc;QACjB,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAEM,QAAQ;QACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,SAAS,CAAC,GAAS;QACtB,OAAO,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;IACpC,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,MAAM;QACT,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACJ;AAnED,oBAmEC"}
\ No newline at end of file
diff --git a/lib/value/H256.d.ts b/lib/value/H256.d.ts
new file mode 100644
index 0000000..44bbae5
--- /dev/null
+++ b/lib/value/H256.d.ts
@@ -0,0 +1,19 @@
+///
+export type H256Value = H256 | string;
+/**
+ * Handles 256-bit data. Used to express block hash, parcel hash, transaction hash, merkle root, etc.
+ */
+export declare class H256 {
+ static fromBytes(buffer: Buffer): H256;
+ static zero(): H256;
+ static check(param: any): boolean;
+ static ensure(param: H256Value): H256;
+ private static checkString;
+ value: string;
+ constructor(value: string);
+ toEncodeObject(): string;
+ rlpBytes(): Buffer;
+ isEqualTo(rhs: H256): boolean;
+ toString(): string;
+ toJSON(): string;
+}
diff --git a/lib/value/H256.js b/lib/value/H256.js
new file mode 100644
index 0000000..aa8fcd0
--- /dev/null
+++ b/lib/value/H256.js
@@ -0,0 +1,61 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.H256 = void 0;
+/**
+ * @hidden
+ */
+const RLP = require("rlp");
+/**
+ * Handles 256-bit data. Used to express block hash, parcel hash, transaction hash, merkle root, etc.
+ */
+class H256 {
+ static fromBytes(buffer) {
+ const bytes = Array.from(buffer.values());
+ const length = bytes.shift() - 0x80;
+ if (length !== 32 || bytes.length !== length) {
+ throw Error(`Invalid RLP for H256: ${bytes}`);
+ }
+ return new H256(bytes
+ .map(byte => byte < 0x10
+ ? `0${byte.toString(16)}`
+ : byte.toString(16))
+ .join(""));
+ }
+ static zero() {
+ return new H256("0000000000000000000000000000000000000000000000000000000000000000");
+ }
+ static check(param) {
+ return param instanceof H256 ? true : H256.checkString(param);
+ }
+ static ensure(param) {
+ return param instanceof H256 ? param : new H256(param);
+ }
+ static checkString(value) {
+ return /^(0x)?[0-9a-fA-F]{64}$/.test(value);
+ }
+ constructor(value) {
+ if (!H256.checkString(value)) {
+ throw Error(`Expected 32 byte hexstring for creating H256 but found "${value}"`);
+ }
+ this.value = value.startsWith("0x")
+ ? value.slice(2).toLowerCase()
+ : value.toLowerCase();
+ }
+ toEncodeObject() {
+ return `0x${this.value}`;
+ }
+ rlpBytes() {
+ return RLP.encode(this.toEncodeObject());
+ }
+ isEqualTo(rhs) {
+ return this.value === rhs.value;
+ }
+ toString() {
+ return this.value;
+ }
+ toJSON() {
+ return `0x${this.value}`;
+ }
+}
+exports.H256 = H256;
+//# sourceMappingURL=H256.js.map
\ No newline at end of file
diff --git a/lib/value/H256.js.map b/lib/value/H256.js.map
new file mode 100644
index 0000000..46ffd6b
--- /dev/null
+++ b/lib/value/H256.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"H256.js","sourceRoot":"","sources":["../../src/value/H256.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAI3B;;GAEG;AACH,MAAa,IAAI;IACN,MAAM,CAAC,SAAS,CAAC,MAAc;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAG,GAAG,IAAI,CAAC;QACrC,IAAI,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAC1C,MAAM,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,IAAI,CACX,KAAK;aACA,GAAG,CACA,IAAI,CAAC,EAAE,CACH,IAAI,GAAG,IAAI;YACP,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC9B;aACA,IAAI,CAAC,EAAE,CAAC,CAChB,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,IAAI;QACd,OAAO,IAAI,IAAI,CACX,kEAAkE,CACrE,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAU;QAC1B,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAgB;QACjC,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,KAAa;QACpC,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAID,YAAY,KAAa;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,KAAK,CACP,2DAA2D,KAAK,GAAG,CACtE,CAAC;SACL;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAC/B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC9B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAEM,cAAc;QACjB,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAEM,QAAQ;QACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,SAAS,CAAC,GAAS;QACtB,OAAO,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;IACpC,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,MAAM;QACT,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACJ;AArED,oBAqEC"}
\ No newline at end of file
diff --git a/lib/value/H512.d.ts b/lib/value/H512.d.ts
new file mode 100644
index 0000000..023f4ff
--- /dev/null
+++ b/lib/value/H512.d.ts
@@ -0,0 +1,19 @@
+///
+export type H512Value = H512 | string;
+/**
+ * Handles 512-bit data. Used to express public keys.
+ */
+export declare class H512 {
+ static fromBytes(buffer: Buffer): H512;
+ static zero(): H512;
+ static check(param: any): boolean;
+ static ensure(param: H512Value): H512;
+ private static checkString;
+ value: string;
+ constructor(value: string);
+ toEncodeObject(): string;
+ rlpBytes(): Buffer;
+ isEqualTo(rhs: H512): boolean;
+ toString(): string;
+ toJSON(): string;
+}
diff --git a/lib/value/H512.js b/lib/value/H512.js
new file mode 100644
index 0000000..caee6b8
--- /dev/null
+++ b/lib/value/H512.js
@@ -0,0 +1,62 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.H512 = void 0;
+/**
+ * @hidden
+ */
+const RLP = require("rlp");
+/**
+ * Handles 512-bit data. Used to express public keys.
+ */
+class H512 {
+ static fromBytes(buffer) {
+ const bytes = Array.from(buffer.values());
+ const firstByte = bytes.shift();
+ const length = bytes.shift();
+ if (firstByte !== 0xb8 || length !== 64 || bytes.length !== length) {
+ throw Error(`Invalid RLP for H512: ${bytes}`);
+ }
+ return new H512(bytes
+ .map(byte => byte < 0x10
+ ? `0${byte.toString(16)}`
+ : byte.toString(16))
+ .join(""));
+ }
+ static zero() {
+ return new H512("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
+ }
+ static check(param) {
+ return param instanceof H512 ? true : H512.checkString(param);
+ }
+ static ensure(param) {
+ return param instanceof H512 ? param : new H512(param);
+ }
+ static checkString(value) {
+ return /^(0x)?[0-9a-fA-F]{128}$/.test(value);
+ }
+ constructor(value) {
+ if (!H512.checkString(value)) {
+ throw Error(`Expected 64 byte hexstring for creating H512 but found "${value}"`);
+ }
+ this.value = value.startsWith("0x")
+ ? value.slice(2).toLowerCase()
+ : value.toLowerCase();
+ }
+ toEncodeObject() {
+ return `0x${this.value}`;
+ }
+ rlpBytes() {
+ return RLP.encode(this.toEncodeObject());
+ }
+ isEqualTo(rhs) {
+ return this.value === rhs.value;
+ }
+ toString() {
+ return this.value;
+ }
+ toJSON() {
+ return `0x${this.value}`;
+ }
+}
+exports.H512 = H512;
+//# sourceMappingURL=H512.js.map
\ No newline at end of file
diff --git a/lib/value/H512.js.map b/lib/value/H512.js.map
new file mode 100644
index 0000000..3c0ee7e
--- /dev/null
+++ b/lib/value/H512.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"H512.js","sourceRoot":"","sources":["../../src/value/H512.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAI3B;;GAEG;AACH,MAAa,IAAI;IACN,MAAM,CAAC,SAAS,CAAC,MAAc;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,SAAS,KAAK,IAAI,IAAI,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;YAChE,MAAM,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,IAAI,CACX,KAAK;aACA,GAAG,CACA,IAAI,CAAC,EAAE,CACH,IAAI,GAAG,IAAI;YACP,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACzB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC9B;aACA,IAAI,CAAC,EAAE,CAAC,CAChB,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,IAAI;QACd,OAAO,IAAI,IAAI,CACX,kIAAkI,CACrI,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,KAAU;QAC1B,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAgB;QACjC,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,KAAa;QACpC,OAAO,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAID,YAAY,KAAa;QACrB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,KAAK,CACP,2DAA2D,KAAK,GAAG,CACtE,CAAC;SACL;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAC/B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC9B,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAEM,cAAc;QACjB,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAEM,QAAQ;QACX,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,SAAS,CAAC,GAAS;QACtB,OAAO,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;IACpC,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,MAAM;QACT,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACJ;AAtED,oBAsEC"}
\ No newline at end of file
diff --git a/lib/value/U128.d.ts b/lib/value/U128.d.ts
new file mode 100644
index 0000000..72a7be6
--- /dev/null
+++ b/lib/value/U128.d.ts
@@ -0,0 +1,41 @@
+///
+import { BigNumber } from "bignumber.js";
+import { U64, U64Value } from "./U64";
+export type U128Value = U128 | U64Value;
+/**
+ * Handles 128-bit unsigned integers. Used to express nonce, asset amount, etc.
+ */
+export declare class U128 {
+ static MAX_VALUE: U128;
+ static plus(lhsValue: U128Value, rhsValue: U128Value): U128;
+ static minus(lhsValue: U128Value, rhsValue: U128Value): U128;
+ static times(lhsValue: U128Value, rhsValue: U128Value): U128;
+ static idiv(lhsValue: U128Value, rhsValue: U128Value): U128;
+ static mod(lhsValue: U128Value, rhsValue: U128Value): U128;
+ static fromBytes(buffer: Buffer): U128;
+ static check(param: any): boolean;
+ static ensure(param: U128Value): U128;
+ private static checkString;
+ readonly value: BigNumber;
+ constructor(value: number | string | BigNumber | U64);
+ plus(rhsValue: U128Value): U128;
+ minus(rhsValue: U128Value): U128;
+ times(rhsValue: U128Value): U128;
+ idiv(rhsValue: U128Value): U128;
+ mod(rhsValue: U128Value): U128;
+ toEncodeObject(): string | number;
+ rlpBytes(): Buffer;
+ isEqualTo(rhs: U128Value): boolean;
+ eq(rhs: U128Value): boolean;
+ isGreaterThan(rhs: U128Value): boolean;
+ gt(rhs: U128Value): boolean;
+ isGreaterThanOrEqualTo(rhs: U128Value): boolean;
+ gte(rhs: U128Value): boolean;
+ isLessThan(rhs: U128Value): boolean;
+ lt(rhs: U128Value): boolean;
+ isLessThanOrEqualTo(rhs: U128Value): boolean;
+ lte(rhs: U128Value): boolean;
+ toString(base?: 10 | 16): string;
+ toLocaleString(): string;
+ toJSON(): string;
+}
diff --git a/lib/value/U128.js b/lib/value/U128.js
new file mode 100644
index 0000000..ce3afcd
--- /dev/null
+++ b/lib/value/U128.js
@@ -0,0 +1,187 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.U128 = void 0;
+const bignumber_js_1 = require("bignumber.js");
+const utility_1 = require("../utility");
+const U64_1 = require("./U64");
+/**
+ * @hidden
+ */
+const RLP = require("rlp");
+/**
+ * Handles 128-bit unsigned integers. Used to express nonce, asset amount, etc.
+ */
+class U128 {
+ static plus(lhsValue, rhsValue) {
+ const lhs = U128.ensure(lhsValue);
+ const rhs = U128.ensure(rhsValue);
+ const result = lhs.value.plus(rhs.value);
+ if (result.isGreaterThan(U128.MAX_VALUE.value)) {
+ throw Error(`Integer overflow`);
+ }
+ return new U128(result);
+ }
+ static minus(lhsValue, rhsValue) {
+ const lhs = U128.ensure(lhsValue);
+ const rhs = U128.ensure(rhsValue);
+ if (lhs.isLessThan(rhs)) {
+ throw Error(`Integer underflow`);
+ }
+ return new U128(lhs.value.minus(rhs.value));
+ }
+ static times(lhsValue, rhsValue) {
+ const lhs = U128.ensure(lhsValue);
+ const rhs = U128.ensure(rhsValue);
+ const result = lhs.value.times(rhs.value);
+ if (result.isGreaterThan(U128.MAX_VALUE.value)) {
+ throw Error(`Integer overflow`);
+ }
+ return new U128(result);
+ }
+ static idiv(lhsValue, rhsValue) {
+ const lhs = U128.ensure(lhsValue);
+ const rhs = U128.ensure(rhsValue);
+ if (rhs.isEqualTo(0)) {
+ throw Error(`Divided by 0`);
+ }
+ return new U128(lhs.value.idiv(rhs.value));
+ }
+ static mod(lhsValue, rhsValue) {
+ const lhs = U128.ensure(lhsValue);
+ const rhs = U128.ensure(rhsValue);
+ if (rhs.isEqualTo(0)) {
+ throw Error(`Divided by 0`);
+ }
+ return new U128(lhs.value.mod(rhs.value));
+ }
+ static fromBytes(buffer) {
+ const bytes = Array.from(buffer.values());
+ const first = bytes.shift();
+ if (first < 0x80) {
+ return new U64_1.U64(first);
+ }
+ const length = first - 0x80;
+ if (bytes.length !== length) {
+ throw Error(`Invalid RLP for U128: ${bytes}`);
+ }
+ else if (length > 16) {
+ throw Error("Buffer for U128 must be less than or equal to 16");
+ }
+ else if (length === 0) {
+ return new U128(0);
+ }
+ return new U128("0x" +
+ bytes
+ .map(byte => byte < 0x10
+ ? `0${byte.toString(16)}`
+ : byte.toString(16))
+ .join(""));
+ }
+ static check(param) {
+ if (param instanceof U128 || param instanceof U64_1.U64) {
+ return true;
+ }
+ else if (param instanceof bignumber_js_1.BigNumber) {
+ return (param.isInteger() &&
+ !param.isNegative() &&
+ param.isLessThanOrEqualTo(U128.MAX_VALUE.value));
+ }
+ else if (typeof param === "number") {
+ return Number.isInteger(param) && param >= 0;
+ }
+ else {
+ return U128.checkString(param);
+ }
+ }
+ static ensure(param) {
+ return param instanceof U128 ? param : new U128(param);
+ }
+ static checkString(param) {
+ if (typeof param !== "string") {
+ return false;
+ }
+ const num = new bignumber_js_1.BigNumber(param);
+ return (num.isInteger() &&
+ !num.isNegative() &&
+ num.isLessThanOrEqualTo(U128.MAX_VALUE.value));
+ }
+ constructor(value) {
+ this.value = new bignumber_js_1.BigNumber(value instanceof U64_1.U64 ? value.value : value);
+ if (!this.value.isInteger() || this.value.isNegative()) {
+ throw Error(`U128 must be a positive integer but found ${value}`);
+ }
+ else if (this.value.toString(16).length > 32) {
+ throw Error(`Given value is out of range for U128: ${this.value.toString(16)}`);
+ }
+ }
+ plus(rhsValue) {
+ return U128.plus(this, rhsValue);
+ }
+ minus(rhsValue) {
+ return U128.minus(this, rhsValue);
+ }
+ times(rhsValue) {
+ return U128.times(this, rhsValue);
+ }
+ idiv(rhsValue) {
+ return U128.idiv(this, rhsValue);
+ }
+ mod(rhsValue) {
+ return U128.mod(this, rhsValue);
+ }
+ toEncodeObject() {
+ const hex = this.value.toString(16);
+ // NOTE: workaround that RLP.encode("0x0") results to 00
+ if (hex === "0") {
+ return 0;
+ }
+ else {
+ return hex.length % 2 === 0 ? `0x${hex}` : `0x0${hex}`;
+ }
+ }
+ rlpBytes() {
+ return RLP.encode(this.toEncodeObject());
+ }
+ isEqualTo(rhs) {
+ return this.value.isEqualTo(U128.ensure(rhs).value);
+ }
+ eq(rhs) {
+ return this.isEqualTo(rhs);
+ }
+ isGreaterThan(rhs) {
+ return this.value.isGreaterThan(U128.ensure(rhs).value);
+ }
+ gt(rhs) {
+ return this.isGreaterThan(rhs);
+ }
+ isGreaterThanOrEqualTo(rhs) {
+ return this.value.isGreaterThanOrEqualTo(U128.ensure(rhs).value);
+ }
+ gte(rhs) {
+ return this.isGreaterThanOrEqualTo(rhs);
+ }
+ isLessThan(rhs) {
+ return this.value.isLessThan(U128.ensure(rhs).value);
+ }
+ lt(rhs) {
+ return this.isLessThan(rhs);
+ }
+ isLessThanOrEqualTo(rhs) {
+ return this.value.isLessThanOrEqualTo(U128.ensure(rhs).value);
+ }
+ lte(rhs) {
+ return this.isLessThanOrEqualTo(rhs);
+ }
+ toString(base) {
+ return this.value.toString(base || 10);
+ }
+ toLocaleString() {
+ return (0, utility_1.toLocaleString)(this.value);
+ }
+ toJSON() {
+ return `0x${this.value.toString(16)}`;
+ }
+}
+U128.MAX_VALUE = new U128(new bignumber_js_1.BigNumber("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));
+exports.U128 = U128;
+//# sourceMappingURL=U128.js.map
\ No newline at end of file
diff --git a/lib/value/U128.js.map b/lib/value/U128.js.map
new file mode 100644
index 0000000..e407deb
--- /dev/null
+++ b/lib/value/U128.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"U128.js","sourceRoot":"","sources":["../../src/value/U128.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/value/U256.d.ts b/lib/value/U256.d.ts
new file mode 100644
index 0000000..1ba1b83
--- /dev/null
+++ b/lib/value/U256.d.ts
@@ -0,0 +1,42 @@
+///
+import { BigNumber } from "bignumber.js";
+import { U128, U128Value } from "./U128";
+import { U64 } from "./U64";
+export type U256Value = U256 | U128Value;
+/**
+ * Handles 256-bit unsigned integers.
+ */
+export declare class U256 {
+ static MAX_VALUE: U256;
+ static plus(lhsValue: U256Value, rhsValue: U256Value): U256;
+ static minus(lhsValue: U256Value, rhsValue: U256Value): U256;
+ static times(lhsValue: U256Value, rhsValue: U256Value): U256;
+ static idiv(lhsValue: U256Value, rhsValue: U256Value): U256;
+ static mod(lhsValue: U256Value, rhsValue: U256Value): U256;
+ static fromBytes(buffer: Buffer): U256;
+ static check(param: any): boolean;
+ static ensure(param: U256Value): U256;
+ private static checkString;
+ value: BigNumber;
+ constructor(value: number | string | BigNumber | U128 | U64);
+ plus(rhsValue: U256Value): U256;
+ minus(rhsValue: U256Value): U256;
+ times(rhsValue: U256Value): U256;
+ idiv(rhsValue: U256Value): U256;
+ mod(rhsValue: U256Value): U256;
+ toEncodeObject(): string | number;
+ rlpBytes(): Buffer;
+ isEqualTo(rhs: U256Value): boolean;
+ eq(rhs: U256Value): boolean;
+ isGreaterThan(rhs: U256Value): boolean;
+ gt(rhs: U256Value): boolean;
+ isGreaterThanOrEqualTo(rhs: U256Value): boolean;
+ gte(rhs: U256Value): boolean;
+ isLessThan(rhs: U256Value): boolean;
+ lt(rhs: U256Value): boolean;
+ isLessThanOrEqualTo(rhs: U256Value): boolean;
+ lte(rhs: U256Value): boolean;
+ toString(base?: 10 | 16): string;
+ toLocaleString(): string;
+ toJSON(): string;
+}
diff --git a/lib/value/U256.js b/lib/value/U256.js
new file mode 100644
index 0000000..1ce8dec
--- /dev/null
+++ b/lib/value/U256.js
@@ -0,0 +1,194 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.U256 = void 0;
+const bignumber_js_1 = require("bignumber.js");
+const utility_1 = require("../utility");
+const U128_1 = require("./U128");
+const U64_1 = require("./U64");
+/**
+ * @hidden
+ */
+const RLP = require("rlp");
+/**
+ * Handles 256-bit unsigned integers.
+ */
+class U256 {
+ static plus(lhsValue, rhsValue) {
+ const lhs = U256.ensure(lhsValue);
+ const rhs = U256.ensure(rhsValue);
+ const result = lhs.value.plus(rhs.value);
+ if (result.isGreaterThan(U256.MAX_VALUE.value)) {
+ throw Error(`Integer overflow`);
+ }
+ return new U256(result);
+ }
+ static minus(lhsValue, rhsValue) {
+ const lhs = U256.ensure(lhsValue);
+ const rhs = U256.ensure(rhsValue);
+ if (lhs.isLessThan(rhs)) {
+ throw Error(`Integer underflow`);
+ }
+ return new U256(lhs.value.minus(rhs.value));
+ }
+ static times(lhsValue, rhsValue) {
+ const lhs = U256.ensure(lhsValue);
+ const rhs = U256.ensure(rhsValue);
+ const result = lhs.value.times(rhs.value);
+ if (result.isGreaterThan(U256.MAX_VALUE.value)) {
+ throw Error(`Integer overflow`);
+ }
+ return new U256(result);
+ }
+ static idiv(lhsValue, rhsValue) {
+ const lhs = U256.ensure(lhsValue);
+ const rhs = U256.ensure(rhsValue);
+ if (rhs.isEqualTo(0)) {
+ throw Error(`Divided by 0`);
+ }
+ return new U256(lhs.value.idiv(rhs.value));
+ }
+ static mod(lhsValue, rhsValue) {
+ const lhs = U256.ensure(lhsValue);
+ const rhs = U256.ensure(rhsValue);
+ if (rhs.isEqualTo(0)) {
+ throw Error(`Divided by 0`);
+ }
+ return new U256(lhs.value.mod(rhs.value));
+ }
+ static fromBytes(buffer) {
+ const bytes = Array.from(buffer.values());
+ const first = bytes.shift();
+ if (first < 0x80) {
+ return new U64_1.U64(first);
+ }
+ const length = first - 0x80;
+ if (bytes.length !== length) {
+ throw Error(`Invalid RLP for U256: ${bytes}`);
+ }
+ else if (length > 32) {
+ throw Error("Buffer for U256 must be less than or equal to 32");
+ }
+ else if (length === 0) {
+ return new U256(0);
+ }
+ return new U256("0x" +
+ bytes
+ .map(byte => byte < 0x10
+ ? `0${byte.toString(16)}`
+ : byte.toString(16))
+ .join(""));
+ }
+ static check(param) {
+ if (param instanceof U256 ||
+ param instanceof U128_1.U128 ||
+ param instanceof U64_1.U64) {
+ return true;
+ }
+ else if (param instanceof bignumber_js_1.BigNumber) {
+ return (param.isInteger() &&
+ !param.isNegative() &&
+ param.isLessThanOrEqualTo(U256.MAX_VALUE.value));
+ }
+ else if (typeof param === "number") {
+ return Number.isInteger(param) && param >= 0;
+ }
+ else {
+ return U256.checkString(param);
+ }
+ }
+ static ensure(param) {
+ return param instanceof U256
+ ? param
+ : new U256(param instanceof U128_1.U128 || param instanceof U64_1.U64
+ ? param.value
+ : param);
+ }
+ static checkString(param) {
+ if (typeof param !== "string") {
+ return false;
+ }
+ const num = new bignumber_js_1.BigNumber(param);
+ return (num.isInteger() &&
+ !num.isNegative() &&
+ num.isLessThanOrEqualTo(U256.MAX_VALUE.value));
+ }
+ constructor(value) {
+ this.value = new bignumber_js_1.BigNumber(value instanceof U128_1.U128 || value instanceof U64_1.U64 ? value.value : value);
+ if (!this.value.isInteger() || this.value.isNegative()) {
+ throw Error(`U256 must be a positive integer but found ${value}`);
+ }
+ else if (this.value.toString(16).length > 64) {
+ throw Error(`Given value is out of range for U256: ${this.value.toString(16)}`);
+ }
+ }
+ plus(rhsValue) {
+ return U256.plus(this, rhsValue);
+ }
+ minus(rhsValue) {
+ return U256.minus(this, rhsValue);
+ }
+ times(rhsValue) {
+ return U256.times(this, rhsValue);
+ }
+ idiv(rhsValue) {
+ return U256.idiv(this, rhsValue);
+ }
+ mod(rhsValue) {
+ return U256.mod(this, rhsValue);
+ }
+ toEncodeObject() {
+ const hex = this.value.toString(16);
+ // NOTE: workaround that RLP.encode("0x0") results to 00
+ if (hex === "0") {
+ return 0;
+ }
+ else {
+ return hex.length % 2 === 0 ? `0x${hex}` : `0x0${hex}`;
+ }
+ }
+ rlpBytes() {
+ return RLP.encode(this.toEncodeObject());
+ }
+ isEqualTo(rhs) {
+ return this.value.isEqualTo(U256.ensure(rhs).value);
+ }
+ eq(rhs) {
+ return this.isEqualTo(rhs);
+ }
+ isGreaterThan(rhs) {
+ return this.value.isGreaterThan(U256.ensure(rhs).value);
+ }
+ gt(rhs) {
+ return this.isGreaterThan(rhs);
+ }
+ isGreaterThanOrEqualTo(rhs) {
+ return this.value.isGreaterThanOrEqualTo(U256.ensure(rhs).value);
+ }
+ gte(rhs) {
+ return this.isGreaterThanOrEqualTo(rhs);
+ }
+ isLessThan(rhs) {
+ return this.value.isLessThan(U256.ensure(rhs).value);
+ }
+ lt(rhs) {
+ return this.isLessThan(rhs);
+ }
+ isLessThanOrEqualTo(rhs) {
+ return this.value.isLessThanOrEqualTo(U256.ensure(rhs).value);
+ }
+ lte(rhs) {
+ return this.isLessThanOrEqualTo(rhs);
+ }
+ toString(base) {
+ return this.value.toString(base || 10);
+ }
+ toLocaleString() {
+ return (0, utility_1.toLocaleString)(this.value);
+ }
+ toJSON() {
+ return `0x${this.value.toString(16)}`;
+ }
+}
+U256.MAX_VALUE = new U256(new bignumber_js_1.BigNumber("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));
+exports.U256 = U256;
+//# sourceMappingURL=U256.js.map
\ No newline at end of file
diff --git a/lib/value/U256.js.map b/lib/value/U256.js.map
new file mode 100644
index 0000000..4564e1c
--- /dev/null
+++ b/lib/value/U256.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"U256.js","sourceRoot":"","sources":["../../src/value/U256.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/value/U64.d.ts b/lib/value/U64.d.ts
new file mode 100644
index 0000000..df53ffe
--- /dev/null
+++ b/lib/value/U64.d.ts
@@ -0,0 +1,40 @@
+///
+import { BigNumber } from "bignumber.js";
+export type U64Value = U64 | BigNumber | number | string;
+/**
+ * Handles 64-bit unsigned integers. Used to express nonce, asset amount, etc.
+ */
+export declare class U64 {
+ static MAX_VALUE: U64;
+ static plus(lhsValue: U64Value, rhsValue: U64Value): U64;
+ static minus(lhsValue: U64Value, rhsValue: U64Value): U64;
+ static times(lhsValue: U64Value, rhsValue: U64Value): U64;
+ static idiv(lhsValue: U64Value, rhsValue: U64Value): U64;
+ static mod(lhsValue: U64Value, rhsValue: U64Value): U64;
+ static fromBytes(buffer: Buffer): U64;
+ static check(param: any): boolean;
+ static ensure(param: U64Value): U64;
+ private static checkString;
+ readonly value: BigNumber;
+ constructor(value: number | string | BigNumber);
+ plus(rhsValue: U64Value): U64;
+ minus(rhsValue: U64Value): U64;
+ times(rhsValue: U64Value): U64;
+ idiv(rhsValue: U64Value): U64;
+ mod(rhsValue: U64Value): U64;
+ toEncodeObject(): string | number;
+ rlpBytes(): Buffer;
+ isEqualTo(rhs: U64Value): boolean;
+ eq(rhs: U64Value): boolean;
+ isGreaterThan(rhs: U64Value): boolean;
+ gt(rhs: U64Value): boolean;
+ isGreaterThanOrEqualTo(rhs: U64Value): boolean;
+ gte(rhs: U64Value): boolean;
+ isLessThan(rhs: U64Value): boolean;
+ lt(rhs: U64Value): boolean;
+ isLessThanOrEqualTo(rhs: U64Value): boolean;
+ lte(rhs: U64Value): boolean;
+ toString(base?: 10 | 16): string;
+ toLocaleString(): string;
+ toJSON(): string;
+}
diff --git a/lib/value/U64.js b/lib/value/U64.js
new file mode 100644
index 0000000..de72beb
--- /dev/null
+++ b/lib/value/U64.js
@@ -0,0 +1,186 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.U64 = void 0;
+const bignumber_js_1 = require("bignumber.js");
+const utility_1 = require("../utility");
+/**
+ * @hidden
+ */
+const RLP = require("rlp");
+/**
+ * Handles 64-bit unsigned integers. Used to express nonce, asset amount, etc.
+ */
+class U64 {
+ static plus(lhsValue, rhsValue) {
+ const lhs = U64.ensure(lhsValue);
+ const rhs = U64.ensure(rhsValue);
+ const result = lhs.value.plus(rhs.value);
+ if (result.isGreaterThan(U64.MAX_VALUE.value)) {
+ throw Error(`Integer overflow`);
+ }
+ return new U64(result);
+ }
+ static minus(lhsValue, rhsValue) {
+ const lhs = U64.ensure(lhsValue);
+ const rhs = U64.ensure(rhsValue);
+ if (lhs.isLessThan(rhs)) {
+ throw Error(`Integer underflow`);
+ }
+ return new U64(lhs.value.minus(rhs.value));
+ }
+ static times(lhsValue, rhsValue) {
+ const lhs = U64.ensure(lhsValue);
+ const rhs = U64.ensure(rhsValue);
+ const result = lhs.value.times(rhs.value);
+ if (result.isGreaterThan(U64.MAX_VALUE.value)) {
+ throw Error(`Integer overflow`);
+ }
+ return new U64(result);
+ }
+ static idiv(lhsValue, rhsValue) {
+ const lhs = U64.ensure(lhsValue);
+ const rhs = U64.ensure(rhsValue);
+ if (rhs.isEqualTo(0)) {
+ throw Error(`Divided by 0`);
+ }
+ return new U64(lhs.value.idiv(rhs.value));
+ }
+ static mod(lhsValue, rhsValue) {
+ const lhs = U64.ensure(lhsValue);
+ const rhs = U64.ensure(rhsValue);
+ if (rhs.isEqualTo(0)) {
+ throw Error(`Divided by 0`);
+ }
+ return new U64(lhs.value.mod(rhs.value));
+ }
+ static fromBytes(buffer) {
+ const bytes = Array.from(buffer.values());
+ const first = bytes.shift();
+ if (first < 0x80) {
+ return new U64(first);
+ }
+ const length = first - 0x80;
+ if (bytes.length !== length) {
+ throw Error(`Invalid RLP for U64: ${bytes}`);
+ }
+ else if (length > 8) {
+ throw Error("Buffer for U64 must be less than or equal to 8");
+ }
+ else if (length === 0) {
+ return new U64(0);
+ }
+ return new U64("0x" +
+ bytes
+ .map(byte => byte < 0x10
+ ? `0${byte.toString(16)}`
+ : byte.toString(16))
+ .join(""));
+ }
+ static check(param) {
+ if (param instanceof U64) {
+ return true;
+ }
+ else if (param instanceof bignumber_js_1.BigNumber) {
+ return (param.isInteger() &&
+ !param.isNegative() &&
+ param.isLessThanOrEqualTo(U64.MAX_VALUE.value));
+ }
+ else if (typeof param === "number") {
+ return Number.isInteger(param) && param >= 0;
+ }
+ else {
+ return U64.checkString(param);
+ }
+ }
+ static ensure(param) {
+ return param instanceof U64 ? param : new U64(param);
+ }
+ static checkString(param) {
+ if (typeof param !== "string") {
+ return false;
+ }
+ const num = new bignumber_js_1.BigNumber(param);
+ return (num.isInteger() &&
+ !num.isNegative() &&
+ num.isLessThanOrEqualTo(U64.MAX_VALUE.value));
+ }
+ constructor(value) {
+ this.value = new bignumber_js_1.BigNumber(value);
+ if (!this.value.isInteger() || this.value.isNegative()) {
+ throw Error(`U64 must be a positive integer but found ${value}`);
+ }
+ else if (this.value.toString(16).length > 16) {
+ throw Error(`Given value is out of range for U64: ${this.value.toString(16)}`);
+ }
+ }
+ plus(rhsValue) {
+ return U64.plus(this, rhsValue);
+ }
+ minus(rhsValue) {
+ return U64.minus(this, rhsValue);
+ }
+ times(rhsValue) {
+ return U64.times(this, rhsValue);
+ }
+ idiv(rhsValue) {
+ return U64.idiv(this, rhsValue);
+ }
+ mod(rhsValue) {
+ return U64.mod(this, rhsValue);
+ }
+ toEncodeObject() {
+ const hex = this.value.toString(16);
+ // NOTE: workaround that RLP.encode("0x0") results to 00
+ if (hex === "0") {
+ return 0;
+ }
+ else {
+ return hex.length % 2 === 0 ? `0x${hex}` : `0x0${hex}`;
+ }
+ }
+ rlpBytes() {
+ return RLP.encode(this.toEncodeObject());
+ }
+ isEqualTo(rhs) {
+ return this.value.isEqualTo(U64.ensure(rhs).value);
+ }
+ eq(rhs) {
+ return this.isEqualTo(rhs);
+ }
+ isGreaterThan(rhs) {
+ return this.value.isGreaterThan(U64.ensure(rhs).value);
+ }
+ gt(rhs) {
+ return this.isGreaterThan(rhs);
+ }
+ isGreaterThanOrEqualTo(rhs) {
+ return this.value.isGreaterThanOrEqualTo(U64.ensure(rhs).value);
+ }
+ gte(rhs) {
+ return this.isGreaterThanOrEqualTo(rhs);
+ }
+ isLessThan(rhs) {
+ return this.value.isLessThan(U64.ensure(rhs).value);
+ }
+ lt(rhs) {
+ return this.isLessThan(rhs);
+ }
+ isLessThanOrEqualTo(rhs) {
+ return this.value.isLessThanOrEqualTo(U64.ensure(rhs).value);
+ }
+ lte(rhs) {
+ return this.isLessThanOrEqualTo(rhs);
+ }
+ toString(base) {
+ return this.value.toString(base || 10);
+ }
+ toLocaleString() {
+ return (0, utility_1.toLocaleString)(this.value);
+ }
+ toJSON() {
+ return `0x${this.value.toString(16)}`;
+ }
+}
+U64.MAX_VALUE = new U64(new bignumber_js_1.BigNumber("0xFFFFFFFFFFFFFFFF"));
+exports.U64 = U64;
+//# sourceMappingURL=U64.js.map
\ No newline at end of file
diff --git a/lib/value/U64.js.map b/lib/value/U64.js.map
new file mode 100644
index 0000000..43d130e
--- /dev/null
+++ b/lib/value/U64.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"U64.js","sourceRoot":"","sources":["../../src/value/U64.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/package.json b/package.json
index e93ab83..265bea6 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
"@types/jest": "^23.3.2",
"@types/lodash": "^4.14.116",
"@types/node": "^10.10.0",
- "@types/node-forge": "^0.7.5",
+ "@types/node-forge": "^1.3.2",
"jest": "^23.6.0",
"prettier": "1.14.2",
"remap-istanbul": "^0.12.0",
@@ -48,7 +48,7 @@
"tslint": "^5.11.0",
"tslint-config-prettier": "^1.15.0",
"typedoc": "^0.12.0",
- "typescript": "^3.0.3"
+ "typescript": "^5.0.4"
},
"dependencies": {
"bignumber.js": "^7.2.1",
@@ -58,8 +58,8 @@
"crypto-js": "^3.1.9-1",
"elliptic": "^6.4.1",
"hmac-drbg": "^1.0.1",
- "lodash": "^4.17.14",
- "node-forge": "^0.7.6",
+ "lodash": "^4.17.21",
+ "node-forge": "^0.10.0",
"rlp": "^2.1.0",
"tweetnacl": "^1.0.3"
}