@coolwallet/sol
Version:
Coolwallet Solana sdk
187 lines (173 loc) • 16.6 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");
/**
* 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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