UNPKG

@coolwallet/sol

Version:
187 lines (173 loc) 16.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.PublicKey = exports.PUBLIC_KEY_LENGTH = exports.MAX_SEED_LENGTH = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _bn = _interopRequireDefault(require("bn.js")); var _bs = _interopRequireDefault(require("bs58")); var _buffer = require("buffer"); var _sha = require("@noble/hashes/sha256"); /** * Maximum length of derived pubkey seed */ var MAX_SEED_LENGTH = 32; /** * Size of public key in bytes */ exports.MAX_SEED_LENGTH = MAX_SEED_LENGTH; var PUBLIC_KEY_LENGTH = 32; /** * Value to be converted into public key */ /** * JSON object representation of PublicKey class */ exports.PUBLIC_KEY_LENGTH = PUBLIC_KEY_LENGTH; function isPublicKeyData(value) { return value._bn !== undefined; } // local counter used by PublicKey.unique() var uniquePublicKeyCounter = 1; /** * A public key */ var PublicKey = /*#__PURE__*/function () { /** @internal */ /** * Create a new PublicKey object * @param value ed25519 public key as buffer or base-58 encoded string */ function PublicKey(value) { (0, _classCallCheck2["default"])(this, PublicKey); if (isPublicKeyData(value)) { this._bn = value._bn; } else { if (typeof value === 'string') { // assume base 58 encoding by default var decoded = _bs["default"].decode(value); if (decoded.length != PUBLIC_KEY_LENGTH) { throw new Error("Invalid public key input"); } this._bn = new _bn["default"](decoded); } else { this._bn = new _bn["default"](value); } if (this._bn.byteLength() > PUBLIC_KEY_LENGTH) { throw new Error("Invalid public key input"); } } } /** * Returns a unique PublicKey for tests and benchmarks using a counter */ (0, _createClass2["default"])(PublicKey, [{ key: "equals", value: /** * Checks if two publicKeys are equal */ function equals(publicKey) { return this._bn.eq(publicKey._bn); } /** * Return the base-58 representation of the public key */ }, { key: "toBase58", value: function toBase58() { return _bs["default"].encode(this.toBytes()); } }, { key: "toJSON", value: function toJSON() { return this.toBase58(); } /** * Return the byte array representation of the public key in big endian */ }, { key: "toBytes", value: function toBytes() { var buf = this.toBuffer(); return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength); } /** * Return the Buffer representation of the public key in big endian */ }, { key: "toBuffer", value: function toBuffer() { var b = this._bn.toArrayLike(_buffer.Buffer); if (b.length === PUBLIC_KEY_LENGTH) { return b; } var zeroPad = _buffer.Buffer.alloc(32); b.copy(zeroPad, 32 - b.length); return zeroPad; } }, { key: Symbol.toStringTag, get: function get() { return "PublicKey(".concat(this.toString(), ")"); } /** * Return the base-58 representation of the public key */ }, { key: "toString", value: function toString() { return this.toBase58(); } /** * Derive a public key from another key, a seed, and a program ID. * The program ID will also serve as the owner of the public key, giving * it permission to write data to the account. */ /* eslint-disable require-await */ }], [{ key: "unique", value: function unique() { var key = new PublicKey(uniquePublicKeyCounter); uniquePublicKeyCounter += 1; return new PublicKey(key.toBuffer()); } /** * Default public key value. The base58-encoded string representation is all ones (as seen below) * The underlying BN number is 32 bytes that are all zeros */ }, { key: "createWithSeed", value: (function () { var _createWithSeed = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(fromPublicKey, seed, programId) { var buffer, publicKeyBytes; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: buffer = _buffer.Buffer.concat([fromPublicKey.toBuffer(), _buffer.Buffer.from(seed), programId.toBuffer()]); publicKeyBytes = (0, _sha.sha256)(buffer); return _context.abrupt("return", new PublicKey(publicKeyBytes)); case 3: case "end": return _context.stop(); } } }, _callee); })); function createWithSeed(_x, _x2, _x3) { return _createWithSeed.apply(this, arguments); } return createWithSeed; }()) }]); return PublicKey; }(); exports.PublicKey = PublicKey; (0, _defineProperty2["default"])(PublicKey, "default", new PublicKey('11111111111111111111111111111111')); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9icyIsIl9idWZmZXIiLCJfc2hhIiwiTUFYX1NFRURfTEVOR1RIIiwiZXhwb3J0cyIsIlBVQkxJQ19LRVlfTEVOR1RIIiwiaXNQdWJsaWNLZXlEYXRhIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJ1bmlxdWVQdWJsaWNLZXlDb3VudGVyIiwiUHVibGljS2V5IiwiX2NsYXNzQ2FsbENoZWNrMiIsImRlY29kZWQiLCJiczU4IiwiZGVjb2RlIiwibGVuZ3RoIiwiRXJyb3IiLCJCTiIsImJ5dGVMZW5ndGgiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiZXF1YWxzIiwicHVibGljS2V5IiwiZXEiLCJ0b0Jhc2U1OCIsImVuY29kZSIsInRvQnl0ZXMiLCJ0b0pTT04iLCJidWYiLCJ0b0J1ZmZlciIsIlVpbnQ4QXJyYXkiLCJidWZmZXIiLCJieXRlT2Zmc2V0IiwiYiIsInRvQXJyYXlMaWtlIiwiQnVmZmVyIiwiemVyb1BhZCIsImFsbG9jIiwiY29weSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiZ2V0IiwiY29uY2F0IiwidG9TdHJpbmciLCJ1bmlxdWUiLCJfY3JlYXRlV2l0aFNlZWQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImZyb21QdWJsaWNLZXkiLCJzZWVkIiwicHJvZ3JhbUlkIiwicHVibGljS2V5Qnl0ZXMiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiZnJvbSIsInNoYTI1NiIsImFicnVwdCIsInN0b3AiLCJjcmVhdGVXaXRoU2VlZCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfZGVmaW5lUHJvcGVydHkyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3B1YmxpY2tleS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQk4gZnJvbSAnYm4uanMnO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgc2hhMjU2IH0gZnJvbSAnQG5vYmxlL2hhc2hlcy9zaGEyNTYnO1xuXG4vKipcbiAqIE1heGltdW0gbGVuZ3RoIG9mIGRlcml2ZWQgcHVia2V5IHNlZWRcbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9TRUVEX0xFTkdUSCA9IDMyO1xuXG4vKipcbiAqIFNpemUgb2YgcHVibGljIGtleSBpbiBieXRlc1xuICovXG5leHBvcnQgY29uc3QgUFVCTElDX0tFWV9MRU5HVEggPSAzMjtcblxuLyoqXG4gKiBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBwdWJsaWMga2V5XG4gKi9cbmV4cG9ydCB0eXBlIFB1YmxpY0tleUluaXREYXRhID1cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBVaW50OEFycmF5XG4gIHwgQXJyYXk8bnVtYmVyPlxuICB8IFB1YmxpY0tleURhdGE7XG5cbi8qKlxuICogSlNPTiBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgUHVibGljS2V5IGNsYXNzXG4gKi9cbmV4cG9ydCB0eXBlIFB1YmxpY0tleURhdGEgPSB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2JuOiBCTjtcbn07XG5cbmZ1bmN0aW9uIGlzUHVibGljS2V5RGF0YSh2YWx1ZTogUHVibGljS2V5SW5pdERhdGEpOiB2YWx1ZSBpcyBQdWJsaWNLZXlEYXRhIHtcbiAgcmV0dXJuICh2YWx1ZSBhcyBQdWJsaWNLZXlEYXRhKS5fYm4gIT09IHVuZGVmaW5lZDtcbn1cblxuLy8gbG9jYWwgY291bnRlciB1c2VkIGJ5IFB1YmxpY0tleS51bmlxdWUoKVxubGV0IHVuaXF1ZVB1YmxpY0tleUNvdW50ZXIgPSAxO1xuXG4vKipcbiAqIEEgcHVibGljIGtleVxuICovXG5leHBvcnQgY2xhc3MgUHVibGljS2V5IHtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfYm46IEJOO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUHVibGljS2V5IG9iamVjdFxuICAgKiBAcGFyYW0gdmFsdWUgZWQyNTUxOSBwdWJsaWMga2V5IGFzIGJ1ZmZlciBvciBiYXNlLTU4IGVuY29kZWQgc3RyaW5nXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih2YWx1ZTogUHVibGljS2V5SW5pdERhdGEpIHtcblxuICAgIGlmIChpc1B1YmxpY0tleURhdGEodmFsdWUpKSB7XG4gICAgICB0aGlzLl9ibiA9IHZhbHVlLl9ibjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gYXNzdW1lIGJhc2UgNTggZW5jb2RpbmcgYnkgZGVmYXVsdFxuICAgICAgICBjb25zdCBkZWNvZGVkID0gYnM1OC5kZWNvZGUodmFsdWUpO1xuICAgICAgICBpZiAoZGVjb2RlZC5sZW5ndGggIT0gUFVCTElDX0tFWV9MRU5HVEgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHVibGljIGtleSBpbnB1dGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2JuID0gbmV3IEJOKGRlY29kZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYm4gPSBuZXcgQk4odmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm4uYnl0ZUxlbmd0aCgpID4gUFVCTElDX0tFWV9MRU5HVEgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHB1YmxpYyBrZXkgaW5wdXRgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHVuaXF1ZSBQdWJsaWNLZXkgZm9yIHRlc3RzIGFuZCBiZW5jaG1hcmtzIHVzaW5nIGEgY291bnRlclxuICAgKi9cbiAgc3RhdGljIHVuaXF1ZSgpOiBQdWJsaWNLZXkge1xuICAgIGNvbnN0IGtleSA9IG5ldyBQdWJsaWNLZXkodW5pcXVlUHVibGljS2V5Q291bnRlcik7XG4gICAgdW5pcXVlUHVibGljS2V5Q291bnRlciArPSAxO1xuICAgIHJldHVybiBuZXcgUHVibGljS2V5KGtleS50b0J1ZmZlcigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHB1YmxpYyBrZXkgdmFsdWUuIFRoZSBiYXNlNTgtZW5jb2RlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgYWxsIG9uZXMgKGFzIHNlZW4gYmVsb3cpXG4gICAqIFRoZSB1bmRlcmx5aW5nIEJOIG51bWJlciBpcyAzMiBieXRlcyB0aGF0IGFyZSBhbGwgemVyb3NcbiAgICovXG4gIHN0YXRpYyBkZWZhdWx0OiBQdWJsaWNLZXkgPSBuZXcgUHVibGljS2V5KCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMScpO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdHdvIHB1YmxpY0tleXMgYXJlIGVxdWFsXG4gICAqL1xuICBlcXVhbHMocHVibGljS2V5OiBQdWJsaWNLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYm4uZXEocHVibGljS2V5Ll9ibik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBiYXNlLTU4IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwdWJsaWMga2V5XG4gICAqL1xuICB0b0Jhc2U1OCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBiczU4LmVuY29kZSh0aGlzLnRvQnl0ZXMoKSk7XG4gIH1cblxuICB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b0Jhc2U1OCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgYnl0ZSBhcnJheSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHVibGljIGtleSBpbiBiaWcgZW5kaWFuXG4gICAqL1xuICB0b0J5dGVzKCk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IGJ1ZiA9IHRoaXMudG9CdWZmZXIoKTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIEJ1ZmZlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHVibGljIGtleSBpbiBiaWcgZW5kaWFuXG4gICAqL1xuICB0b0J1ZmZlcigpOiBCdWZmZXIge1xuICAgIGNvbnN0IGIgPSB0aGlzLl9ibi50b0FycmF5TGlrZShCdWZmZXIpO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gUFVCTElDX0tFWV9MRU5HVEgpIHtcbiAgICAgIHJldHVybiBiO1xuICAgIH1cblxuICAgIGNvbnN0IHplcm9QYWQgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICAgIGIuY29weSh6ZXJvUGFkLCAzMiAtIGIubGVuZ3RoKTtcbiAgICByZXR1cm4gemVyb1BhZDtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgUHVibGljS2V5KCR7dGhpcy50b1N0cmluZygpfSlgO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgYmFzZS01OCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHVibGljIGtleVxuICAgKi9cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50b0Jhc2U1OCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcml2ZSBhIHB1YmxpYyBrZXkgZnJvbSBhbm90aGVyIGtleSwgYSBzZWVkLCBhbmQgYSBwcm9ncmFtIElELlxuICAgKiBUaGUgcHJvZ3JhbSBJRCB3aWxsIGFsc28gc2VydmUgYXMgdGhlIG93bmVyIG9mIHRoZSBwdWJsaWMga2V5LCBnaXZpbmdcbiAgICogaXQgcGVybWlzc2lvbiB0byB3cml0ZSBkYXRhIHRvIHRoZSBhY2NvdW50LlxuICAgKi9cbiAgLyogZXNsaW50LWRpc2FibGUgcmVxdWlyZS1hd2FpdCAqL1xuICBzdGF0aWMgYXN5bmMgY3JlYXRlV2l0aFNlZWQoXG4gICAgZnJvbVB1YmxpY0tleTogUHVibGljS2V5LFxuICAgIHNlZWQ6IHN0cmluZyxcbiAgICBwcm9ncmFtSWQ6IFB1YmxpY0tleSxcbiAgKTogUHJvbWlzZTxQdWJsaWNLZXk+IHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIGZyb21QdWJsaWNLZXkudG9CdWZmZXIoKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHNlZWQpLFxuICAgICAgcHJvZ3JhbUlkLnRvQnVmZmVyKCksXG4gICAgXSk7XG4gICAgY29uc3QgcHVibGljS2V5Qnl0ZXMgPSBzaGEyNTYoYnVmZmVyKTtcbiAgICByZXR1cm4gbmV3IFB1YmxpY0tleShwdWJsaWNLZXlCeXRlcyk7XG4gIH1cbn1cblxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxHQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxHQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxJQUFBLEdBQUFILE9BQUE7QUFFQTtBQUNBO0FBQ0E7QUFDTyxJQUFNSSxlQUFlLEdBQUcsRUFBRTs7QUFFakM7QUFDQTtBQUNBO0FBRkFDLE9BQUEsQ0FBQUQsZUFBQSxHQUFBQSxlQUFBO0FBR08sSUFBTUUsaUJBQWlCLEdBQUcsRUFBRTs7QUFFbkM7QUFDQTtBQUNBOztBQVFBO0FBQ0E7QUFDQTtBQUZBRCxPQUFBLENBQUFDLGlCQUFBLEdBQUFBLGlCQUFBO0FBUUEsU0FBU0MsZUFBZUEsQ0FBQ0MsS0FBd0IsRUFBMEI7RUFDekUsT0FBUUEsS0FBSyxDQUFtQlYsR0FBRyxLQUFLVyxTQUFTO0FBQ25EOztBQUVBO0FBQ0EsSUFBSUMsc0JBQXNCLEdBQUcsQ0FBQzs7QUFFOUI7QUFDQTtBQUNBO0FBRkEsSUFHYUMsU0FBUztFQUNwQjs7RUFHQTtBQUNGO0FBQ0E7QUFDQTtFQUNFLFNBQUFBLFVBQVlILEtBQXdCLEVBQUU7SUFBQSxJQUFBSSxnQkFBQSxtQkFBQUQsU0FBQTtJQUVwQyxJQUFJSixlQUFlLENBQUNDLEtBQUssQ0FBQyxFQUFFO01BQzFCLElBQUksQ0FB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