1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.getCreate2Address = exports.getCreateAddress = void 0;
- const index_js_1 = require("../crypto/index.js");
- const index_js_2 = require("../utils/index.js");
- const address_js_1 = require("./address.js");
- // http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed
- /**
- * Returns the address that would result from a ``CREATE`` for %%tx%%.
- *
- * This can be used to compute the address a contract will be
- * deployed to by an EOA when sending a deployment transaction (i.e.
- * when the ``to`` address is ``null``).
- *
- * This can also be used to compute the address a contract will be
- * deployed to by a contract, by using the contract's address as the
- * ``to`` and the contract's nonce.
- *
- * @example
- * from = "0x8ba1f109551bD432803012645Ac136ddd64DBA72";
- * nonce = 5;
- *
- * getCreateAddress({ from, nonce });
- * //_result:
- */
- function getCreateAddress(tx) {
- const from = (0, address_js_1.getAddress)(tx.from);
- const nonce = (0, index_js_2.getBigInt)(tx.nonce, "tx.nonce");
- let nonceHex = nonce.toString(16);
- if (nonceHex === "0") {
- nonceHex = "0x";
- }
- else if (nonceHex.length % 2) {
- nonceHex = "0x0" + nonceHex;
- }
- else {
- nonceHex = "0x" + nonceHex;
- }
- return (0, address_js_1.getAddress)((0, index_js_2.dataSlice)((0, index_js_1.keccak256)((0, index_js_2.encodeRlp)([from, nonceHex])), 12));
- }
- exports.getCreateAddress = getCreateAddress;
- /**
- * Returns the address that would result from a ``CREATE2`` operation
- * with the given %%from%%, %%salt%% and %%initCodeHash%%.
- *
- * To compute the %%initCodeHash%% from a contract's init code, use
- * the [[keccak256]] function.
- *
- * For a quick overview and example of ``CREATE2``, see [[link-ricmoo-wisps]].
- *
- * @example
- * // The address of the contract
- * from = "0x8ba1f109551bD432803012645Ac136ddd64DBA72"
- *
- * // The salt
- * salt = id("HelloWorld")
- *
- * // The hash of the initCode
- * initCode = "0x6394198df16000526103ff60206004601c335afa6040516060f3";
- * initCodeHash = keccak256(initCode)
- *
- * getCreate2Address(from, salt, initCodeHash)
- * //_result:
- */
- function getCreate2Address(_from, _salt, _initCodeHash) {
- const from = (0, address_js_1.getAddress)(_from);
- const salt = (0, index_js_2.getBytes)(_salt, "salt");
- const initCodeHash = (0, index_js_2.getBytes)(_initCodeHash, "initCodeHash");
- (0, index_js_2.assertArgument)(salt.length === 32, "salt must be 32 bytes", "salt", _salt);
- (0, index_js_2.assertArgument)(initCodeHash.length === 32, "initCodeHash must be 32 bytes", "initCodeHash", _initCodeHash);
- return (0, address_js_1.getAddress)((0, index_js_2.dataSlice)((0, index_js_1.keccak256)((0, index_js_2.concat)(["0xff", from, salt, initCodeHash])), 12));
- }
- exports.getCreate2Address = getCreate2Address;
- //# sourceMappingURL=contract-address.js.map
|