aozhiwei 0a973d12e3 1
2022-01-27 17:32:21 +08:00

105 lines
3.7 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Address = void 0;
var assert_1 = __importDefault(require("assert"));
var bn_js_1 = __importDefault(require("bn.js"));
var bytes_1 = require("./bytes");
var account_1 = require("./account");
var Address = /** @class */ (function () {
function Address(buf) {
(0, assert_1.default)(buf.length === 20, 'Invalid address length');
this.buf = buf;
}
/**
* Returns the zero address.
*/
Address.zero = function () {
return new Address((0, bytes_1.zeros)(20));
};
/**
* Returns an Address object from a hex-encoded string.
* @param str - Hex-encoded address
*/
Address.fromString = function (str) {
(0, assert_1.default)((0, account_1.isValidAddress)(str), 'Invalid address');
return new Address((0, bytes_1.toBuffer)(str));
};
/**
* Returns an address for a given public key.
* @param pubKey The two points of an uncompressed key
*/
Address.fromPublicKey = function (pubKey) {
(0, assert_1.default)(Buffer.isBuffer(pubKey), 'Public key should be Buffer');
var buf = (0, account_1.pubToAddress)(pubKey);
return new Address(buf);
};
/**
* Returns an address for a given private key.
* @param privateKey A private key must be 256 bits wide
*/
Address.fromPrivateKey = function (privateKey) {
(0, assert_1.default)(Buffer.isBuffer(privateKey), 'Private key should be Buffer');
var buf = (0, account_1.privateToAddress)(privateKey);
return new Address(buf);
};
/**
* Generates an address for a newly created contract.
* @param from The address which is creating this new address
* @param nonce The nonce of the from account
*/
Address.generate = function (from, nonce) {
(0, assert_1.default)(bn_js_1.default.isBN(nonce));
return new Address((0, account_1.generateAddress)(from.buf, nonce.toArrayLike(Buffer)));
};
/**
* Generates an address for a contract created using CREATE2.
* @param from The address which is creating this new address
* @param salt A salt
* @param initCode The init code of the contract being created
*/
Address.generate2 = function (from, salt, initCode) {
(0, assert_1.default)(Buffer.isBuffer(salt));
(0, assert_1.default)(Buffer.isBuffer(initCode));
return new Address((0, account_1.generateAddress2)(from.buf, salt, initCode));
};
/**
* Is address equal to another.
*/
Address.prototype.equals = function (address) {
return this.buf.equals(address.buf);
};
/**
* Is address zero.
*/
Address.prototype.isZero = function () {
return this.equals(Address.zero());
};
/**
* True if address is in the address range defined
* by EIP-1352
*/
Address.prototype.isPrecompileOrSystemAddress = function () {
var addressBN = new bn_js_1.default(this.buf);
var rangeMin = new bn_js_1.default(0);
var rangeMax = new bn_js_1.default('ffff', 'hex');
return addressBN.gte(rangeMin) && addressBN.lte(rangeMax);
};
/**
* Returns hex encoding of address.
*/
Address.prototype.toString = function () {
return '0x' + this.buf.toString('hex');
};
/**
* Returns Buffer representation of address.
*/
Address.prototype.toBuffer = function () {
return Buffer.from(this.buf);
};
return Address;
}());
exports.Address = Address;
//# sourceMappingURL=address.js.map