@coolwallet/sol
Version:
Coolwallet Solana sdk
184 lines (169 loc) • 16.5 kB
JavaScript
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");
var _PublicKey;
/**
* Maximum length of derived pubkey seed
*/
var MAX_SEED_LENGTH = exports.MAX_SEED_LENGTH = 32;
/**
* Size of public key in bytes
*/
var PUBLIC_KEY_LENGTH = exports.PUBLIC_KEY_LENGTH = 32;
/**
* Value to be converted into public key
*/
/**
* JSON object representation of PublicKey class
*/
function isPublicKeyData(value) {
return value._bn !== undefined;
}
// local counter used by PublicKey.unique()
var uniquePublicKeyCounter = 1;
/**
* A public key
*/
var PublicKey = exports.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
*/
return (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;
}())
}]);
}();
_PublicKey = PublicKey;
(0, _defineProperty2["default"])(PublicKey, "default", new _PublicKey('11111111111111111111111111111111'));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9icyIsIl9idWZmZXIiLCJfc2hhIiwiX1B1YmxpY0tleSIsIk1BWF9TRUVEX0xFTkdUSCIsImV4cG9ydHMiLCJQVUJMSUNfS0VZX0xFTkdUSCIsImlzUHVibGljS2V5RGF0YSIsInZhbHVlIiwidW5kZWZpbmVkIiwidW5pcXVlUHVibGljS2V5Q291bnRlciIsIlB1YmxpY0tleSIsIl9jbGFzc0NhbGxDaGVjazIiLCJkZWNvZGVkIiwiYnM1OCIsImRlY29kZSIsImxlbmd0aCIsIkVycm9yIiwiQk4iLCJieXRlTGVuZ3RoIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImVxdWFscyIsInB1YmxpY0tleSIsImVxIiwidG9CYXNlNTgiLCJlbmNvZGUiLCJ0b0J5dGVzIiwidG9KU09OIiwiYnVmIiwidG9CdWZmZXIiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwiYnl0ZU9mZnNldCIsImIiLCJ0b0FycmF5TGlrZSIsIkJ1ZmZlciIsInplcm9QYWQiLCJhbGxvYyIsImNvcHkiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsImdldCIsImNvbmNhdCIsInRvU3RyaW5nIiwidW5pcXVlIiwiX2NyZWF0ZVdpdGhTZWVkIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJmcm9tUHVibGljS2V5Iiwic2VlZCIsInByb2dyYW1JZCIsInB1YmxpY0tleUJ5dGVzIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImZyb20iLCJzaGEyNTYiLCJhYnJ1cHQiLCJzdG9wIiwiY3JlYXRlV2l0aFNlZWQiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2RlZmluZVByb3BlcnR5MiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wdWJsaWNrZXkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJOIGZyb20gJ2JuLmpzJztcbmltcG9ydCBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ0Bub2JsZS9oYXNoZXMvc2hhMjU2JztcblxuLyoqXG4gKiBNYXhpbXVtIGxlbmd0aCBvZiBkZXJpdmVkIHB1YmtleSBzZWVkXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfU0VFRF9MRU5HVEggPSAzMjtcblxuLyoqXG4gKiBTaXplIG9mIHB1YmxpYyBrZXkgaW4gYnl0ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJQ19LRVlfTEVOR1RIID0gMzI7XG5cbi8qKlxuICogVmFsdWUgdG8gYmUgY29udmVydGVkIGludG8gcHVibGljIGtleVxuICovXG5leHBvcnQgdHlwZSBQdWJsaWNLZXlJbml0RGF0YSA9XG4gIHwgbnVtYmVyXG4gIHwgc3RyaW5nXG4gIHwgVWludDhBcnJheVxuICB8IEFycmF5PG51bWJlcj5cbiAgfCBQdWJsaWNLZXlEYXRhO1xuXG4vKipcbiAqIEpTT04gb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIFB1YmxpY0tleSBjbGFzc1xuICovXG5leHBvcnQgdHlwZSBQdWJsaWNLZXlEYXRhID0ge1xuICAvKiogQGludGVybmFsICovXG4gIF9ibjogQk47XG59O1xuXG5mdW5jdGlvbiBpc1B1YmxpY0tleURhdGEodmFsdWU6IFB1YmxpY0tleUluaXREYXRhKTogdmFsdWUgaXMgUHVibGljS2V5RGF0YSB7XG4gIHJldHVybiAodmFsdWUgYXMgUHVibGljS2V5RGF0YSkuX2JuICE9PSB1bmRlZmluZWQ7XG59XG5cbi8vIGxvY2FsIGNvdW50ZXIgdXNlZCBieSBQdWJsaWNLZXkudW5pcXVlKClcbmxldCB1bmlxdWVQdWJsaWNLZXlDb3VudGVyID0gMTtcblxuLyoqXG4gKiBBIHB1YmxpYyBrZXlcbiAqL1xuZXhwb3J0IGNsYXNzIFB1YmxpY0tleSB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2JuOiBCTjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFB1YmxpY0tleSBvYmplY3RcbiAgICogQHBhcmFtIHZhbHVlIGVkMjU1MTkgcHVibGljIGtleSBhcyBidWZmZXIgb3IgYmFzZS01OCBlbmNvZGVkIHN0cmluZ1xuICAgKi9cbiAgY29uc3RydWN0b3IodmFsdWU6IFB1YmxpY0tleUluaXREYXRhKSB7XG5cbiAgICBpZiAoaXNQdWJsaWNLZXlEYXRhKHZhbHVlKSkge1xuICAgICAgdGhpcy5fYm4gPSB2YWx1ZS5fYm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIGFzc3VtZSBiYXNlIDU4IGVuY29kaW5nIGJ5IGRlZmF1bHRcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGJzNTguZGVjb2RlKHZhbHVlKTtcbiAgICAgICAgaWYgKGRlY29kZWQubGVuZ3RoICE9IFBVQkxJQ19LRVlfTEVOR1RIKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHB1YmxpYyBrZXkgaW5wdXRgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ibiA9IG5ldyBCTihkZWNvZGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2JuID0gbmV3IEJOKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JuLmJ5dGVMZW5ndGgoKSA+IFBVQkxJQ19LRVlfTEVOR1RIKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwdWJsaWMga2V5IGlucHV0YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB1bmlxdWUgUHVibGljS2V5IGZvciB0ZXN0cyBhbmQgYmVuY2htYXJrcyB1c2luZyBhIGNvdW50ZXJcbiAgICovXG4gIHN0YXRpYyB1bmlxdWUoKTogUHVibGljS2V5IHtcbiAgICBjb25zdCBrZXkgPSBuZXcgUHVibGljS2V5KHVuaXF1ZVB1YmxpY0tleUNvdW50ZXIpO1xuICAgIHVuaXF1ZVB1YmxpY0tleUNvdW50ZXIgKz0gMTtcbiAgICByZXR1cm4gbmV3IFB1YmxpY0tleShrZXkudG9CdWZmZXIoKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBwdWJsaWMga2V5IHZhbHVlLiBUaGUgYmFzZTU4LWVuY29kZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzIGFsbCBvbmVzIChhcyBzZWVuIGJlbG93KVxuICAgKiBUaGUgdW5kZXJseWluZyBCTiBudW1iZXIgaXMgMzIgYnl0ZXMgdGhhdCBhcmUgYWxsIHplcm9zXG4gICAqL1xuICBzdGF0aWMgZGVmYXVsdDogUHVibGljS2V5ID0gbmV3IFB1YmxpY0tleSgnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnKTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHR3byBwdWJsaWNLZXlzIGFyZSBlcXVhbFxuICAgKi9cbiAgZXF1YWxzKHB1YmxpY0tleTogUHVibGljS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2JuLmVxKHB1YmxpY0tleS5fYm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgYmFzZS01OCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHVibGljIGtleVxuICAgKi9cbiAgdG9CYXNlNTgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYnM1OC5lbmNvZGUodGhpcy50b0J5dGVzKCkpO1xuICB9XG5cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9CYXNlNTgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGJ5dGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHB1YmxpYyBrZXkgaW4gYmlnIGVuZGlhblxuICAgKi9cbiAgdG9CeXRlcygpOiBVaW50OEFycmF5IHtcbiAgICBjb25zdCBidWYgPSB0aGlzLnRvQnVmZmVyKCk7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBCdWZmZXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIHB1YmxpYyBrZXkgaW4gYmlnIGVuZGlhblxuICAgKi9cbiAgdG9CdWZmZXIoKTogQnVmZmVyIHtcbiAgICBjb25zdCBiID0gdGhpcy5fYm4udG9BcnJheUxpa2UoQnVmZmVyKTtcbiAgICBpZiAoYi5sZW5ndGggPT09IFBVQkxJQ19LRVlfTEVOR1RIKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9XG5cbiAgICBjb25zdCB6ZXJvUGFkID0gQnVmZmVyLmFsbG9jKDMyKTtcbiAgICBiLmNvcHkoemVyb1BhZCwgMzIgLSBiLmxlbmd0aCk7XG4gICAgcmV0dXJuIHplcm9QYWQ7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFB1YmxpY0tleSgke3RoaXMudG9TdHJpbmcoKX0pYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGJhc2UtNTggcmVwcmVzZW50YXRpb24gb2YgdGhlIHB1YmxpYyBrZXlcbiAgICovXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9CYXNlNTgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmUgYSBwdWJsaWMga2V5IGZyb20gYW5vdGhlciBrZXksIGEgc2VlZCwgYW5kIGEgcHJvZ3JhbSBJRC5cbiAgICogVGhlIHByb2dyYW0gSUQgd2lsbCBhbHNvIHNlcnZlIGFzIHRoZSBvd25lciBvZiB0aGUgcHVibGljIGtleSwgZ2l2aW5nXG4gICAqIGl0IHBlcm1pc3Npb24gdG8gd3JpdGUgZGF0YSB0byB0aGUgYWNjb3VudC5cbiAgICovXG4gIC8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVdpdGhTZWVkKFxuICAgIGZyb21QdWJsaWNLZXk6IFB1YmxpY0tleSxcbiAgICBzZWVkOiBzdHJpbmcsXG4gICAgcHJvZ3JhbUlkOiBQdWJsaWNLZXksXG4gICk6IFByb21pc2U8UHVibGljS2V5PiB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBmcm9tUHVibGljS2V5LnRvQnVmZmVyKCksXG4gICAgICBCdWZmZXIuZnJvbShzZWVkKSxcbiAgICAgIHByb2dyYW1JZC50b0J1ZmZlcigpLFxuICAgIF0pO1xuICAgIGNvbnN0IHB1YmxpY0tleUJ5dGVzID0gc2hhMjU2KGJ1ZmZlcik7XG4gICAgcmV0dXJuIG5ldyBQdWJsaWNLZXkocHVibGljS2V5Qnl0ZXMpO1xuICB9XG59XG5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsR0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsR0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsSUFBQSxHQUFBSCxPQUFBO0FBQThDLElBQUFJLFVBQUE7QUFFOUM7QUFDQTtBQUNBO0FBQ08sSUFBTUMsZUFBZSxHQUFBQyxPQUFBLENBQUFELGVBQUEsR0FBRyxFQUFFOztBQUVqQztBQUNBO0FBQ0E7QUFDTyxJQUFNRSxpQkFBaUIsR0FBQUQsT0FBQSxDQUFBQyxpQkFBQSxHQUFHLEVBQUU7O0FBRW5DO0FBQ0E7QUFDQTs7QUFRQTtBQUNBO0FBQ0E7O0FBTUEsU0FBU0MsZUFBZUEsQ0FBQ0MsS0FBd0IsRUFBMEI7RUFDekUsT0FBUUEsS0FBSyxDQUFtQlgsR0FBRyxLQUFLWSxTQUFTO0FBQ25EOztBQUVBO0FBQ0EsSUFBSUMsc0JBQXNCLEdBQUcsQ0FBQzs7QUFFOUI7QUFDQTtBQUNBO0FBRkEsSUFHYUMsU0FBUyxHQUFBTixPQUFBLENBQUFNLFNBQUE7RUFDcEI7O0VBR0E7QUFDRjtBQUNBO0FBQ0E7RUFDRSxTQUFBQSxVQUFZSCxLQUF3QixFQUFFO0lBQUEsSUFBQUksZ0JBQUEsbUJBQUFELFNBQUE7SUFFcEMsSUFBSUosZUFBZSxDQUFD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
;