UNPKG

ethers

Version:
1,113 lines (1,070 loc) 598 kB
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethers = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.version = "4.0.17"; },{}],2:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var properties_1 = require("./utils/properties"); var Signer = /** @class */ (function () { function Signer() { properties_1.setType(this, 'Signer'); } Signer.isSigner = function (value) { return properties_1.isType(value, 'Signer'); }; return Signer; }()); exports.Signer = Signer; //defineReadOnly(Signer, 'inherits', inheritable(Signer)); },{"./utils/properties":72}],3:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var bignumber_1 = require("./utils/bignumber"); var AddressZero = '0x0000000000000000000000000000000000000000'; exports.AddressZero = AddressZero; var HashZero = '0x0000000000000000000000000000000000000000000000000000000000000000'; exports.HashZero = HashZero; // NFKD (decomposed) //const EtherSymbol = '\uD835\uDF63'; // NFKC (composed) var EtherSymbol = '\u039e'; exports.EtherSymbol = EtherSymbol; var NegativeOne = bignumber_1.bigNumberify(-1); exports.NegativeOne = NegativeOne; var Zero = bignumber_1.bigNumberify(0); exports.Zero = Zero; var One = bignumber_1.bigNumberify(1); exports.One = One; var Two = bignumber_1.bigNumberify(2); exports.Two = Two; var WeiPerEther = bignumber_1.bigNumberify('1000000000000000000'); exports.WeiPerEther = WeiPerEther; var MaxUint256 = bignumber_1.bigNumberify('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); exports.MaxUint256 = MaxUint256; },{"./utils/bignumber":61}],4:[function(require,module,exports){ 'use strict'; var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var constants_1 = require("./constants"); var errors = __importStar(require("./errors")); var abi_coder_1 = require("./utils/abi-coder"); var address_1 = require("./utils/address"); var bignumber_1 = require("./utils/bignumber"); var bytes_1 = require("./utils/bytes"); var interface_1 = require("./utils/interface"); var properties_1 = require("./utils/properties"); /////////////////////////////// // Imported Abstracts var abstract_provider_1 = require("./providers/abstract-provider"); var abstract_signer_1 = require("./abstract-signer"); /////////////////////////////// var VoidSigner = /** @class */ (function (_super) { __extends(VoidSigner, _super); function VoidSigner(address, provider) { var _this = _super.call(this) || this; properties_1.defineReadOnly(_this, 'address', address); properties_1.defineReadOnly(_this, 'provider', provider); return _this; } VoidSigner.prototype.getAddress = function () { return Promise.resolve(this.address); }; VoidSigner.prototype._fail = function (message, operation) { return Promise.resolve().then(function () { errors.throwError(message, errors.UNSUPPORTED_OPERATION, { operation: operation }); }); }; VoidSigner.prototype.signMessage = function (message) { return this._fail('VoidSigner cannot sign messages', 'signMessage'); }; VoidSigner.prototype.sendTransaction = function (transaction) { return this._fail('VoidSigner cannot sign transactions', 'sendTransaction'); }; VoidSigner.prototype.connect = function (provider) { return new VoidSigner(this.address, provider); }; return VoidSigner; }(abstract_signer_1.Signer)); exports.VoidSigner = VoidSigner; var allowedTransactionKeys = { chainId: true, data: true, from: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true }; // Recursively replaces ENS names with promises to resolve the name and // stalls until all promises have returned // @TODO: Expand this to resolve any promises too function resolveAddresses(provider, value, paramType) { if (Array.isArray(paramType)) { var promises_1 = []; paramType.forEach(function (paramType, index) { var v = null; if (Array.isArray(value)) { v = value[index]; } else { v = value[paramType.name]; } promises_1.push(resolveAddresses(provider, v, paramType)); }); return Promise.all(promises_1); } if (paramType.type === 'address') { return provider.resolveName(value); } if (paramType.type === 'tuple') { return resolveAddresses(provider, value, paramType.components); } // Strips one level of array indexing off the end to recuse into var isArrayMatch = paramType.type.match(/(.*)(\[[0-9]*\]$)/); if (isArrayMatch) { if (!Array.isArray(value)) { throw new Error('invalid value for array'); } var promises = []; var subParamType = { components: paramType.components, type: isArrayMatch[1], }; value.forEach(function (v) { promises.push(resolveAddresses(provider, v, subParamType)); }); return Promise.all(promises); } return Promise.resolve(value); } function runMethod(contract, functionName, estimateOnly) { var method = contract.interface.functions[functionName]; return function () { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } var tx = {}; var blockTag = null; // If 1 extra parameter was passed in, it contains overrides if (params.length === method.inputs.length + 1 && typeof (params[params.length - 1]) === 'object') { tx = properties_1.shallowCopy(params.pop()); if (tx.blockTag != null) { blockTag = tx.blockTag; } delete tx.blockTag; // Check for unexpected keys (e.g. using "gas" instead of "gasLimit") for (var key in tx) { if (!allowedTransactionKeys[key]) { throw new Error('unknown transaction override ' + key); } } } if (params.length != method.inputs.length) { throw new Error('incorrect number of arguments'); } // Check overrides make sense ['data', 'to'].forEach(function (key) { if (tx[key] != null) { errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key }); } }); // Send to the contract address (after checking the contract is deployed) tx.to = contract.deployed().then(function () { return contract.addressPromise; }); return resolveAddresses(contract.provider, params, method.inputs).then(function (params) { tx.data = method.encode(params); if (method.type === 'call') { // Call (constant functions) always cost 0 ether if (estimateOnly) { return Promise.resolve(constants_1.Zero); } if (!contract.provider) { errors.throwError('call (constant functions) require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'call' }); } // Check overrides make sense ['gasLimit', 'gasPrice', 'value'].forEach(function (key) { if (tx[key] != null) { throw new Error('call cannot override ' + key); } }); if (tx.from == null && contract.signer) { tx.from = contract.signer.getAddress(); } return contract.provider.call(tx, blockTag).then(function (value) { if ((bytes_1.hexDataLength(value) % 32) === 4 && bytes_1.hexDataSlice(value, 0, 4) === '0x08c379a0') { var reason = abi_coder_1.defaultAbiCoder.decode(['string'], bytes_1.hexDataSlice(value, 4)); errors.throwError('call revert exception', errors.CALL_EXCEPTION, { address: contract.address, args: params, method: method.signature, errorSignature: 'Error(string)', errorArgs: [reason], reason: reason, transaction: tx }); } try { var result = method.decode(value); if (method.outputs.length === 1) { result = result[0]; } return result; } catch (error) { if (value === '0x' && method.outputs.length > 0) { errors.throwError('call exception', errors.CALL_EXCEPTION, { address: contract.address, method: method.signature, args: params }); } throw error; } }); } else if (method.type === 'transaction') { // Only computing the transaction estimate if (estimateOnly) { if (!contract.provider) { errors.throwError('estimate gas require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'estimateGas' }); } if (tx.from == null && contract.signer) { tx.from = contract.signer.getAddress(); } return contract.provider.estimateGas(tx); } if (tx.gasLimit == null && method.gas != null) { tx.gasLimit = bignumber_1.bigNumberify(method.gas).add(21000); } if (!contract.signer) { errors.throwError('sending a transaction require a signer', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction' }); } // Make sure they aren't overriding something they shouldn't if (tx.from != null) { errors.throwError('cannot override from in a transaction', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction' }); } return contract.signer.sendTransaction(tx).then(function (tx) { var wait = tx.wait.bind(tx); tx.wait = function (confirmations) { return wait(confirmations).then(function (receipt) { receipt.events = receipt.logs.map(function (log) { var event = properties_1.deepCopy(log); var parsed = contract.interface.parseLog(log); if (parsed) { event.args = parsed.values; event.decode = parsed.decode; event.event = parsed.name; event.eventSignature = parsed.signature; } event.removeListener = function () { return contract.provider; }; event.getBlock = function () { return contract.provider.getBlock(receipt.blockHash); }; event.getTransaction = function () { return contract.provider.getTransaction(receipt.transactionHash); }; event.getTransactionReceipt = function () { return Promise.resolve(receipt); }; return event; }); return receipt; }); }; return tx; }); } throw new Error('invalid type - ' + method.type); return null; }); }; } function getEventTag(filter) { if (filter.address && (filter.topics == null || filter.topics.length === 0)) { return '*'; } return (filter.address || '*') + '@' + (filter.topics ? filter.topics.join(':') : ''); } var Contract = /** @class */ (function () { // https://github.com/Microsoft/TypeScript/issues/5453 // Once this issue is resolved (there are open PR) we can do this nicer // by making addressOrName default to null for 2 operand calls. :) function Contract(addressOrName, contractInterface, signerOrProvider) { var _this = this; errors.checkNew(this, Contract); // @TODO: Maybe still check the addressOrName looks like a valid address or name? //address = getAddress(address); if (interface_1.Interface.isInterface(contractInterface)) { properties_1.defineReadOnly(this, 'interface', contractInterface); } else { properties_1.defineReadOnly(this, 'interface', new interface_1.Interface(contractInterface)); } if (abstract_signer_1.Signer.isSigner(signerOrProvider)) { properties_1.defineReadOnly(this, 'provider', signerOrProvider.provider); properties_1.defineReadOnly(this, 'signer', signerOrProvider); } else if (abstract_provider_1.Provider.isProvider(signerOrProvider)) { properties_1.defineReadOnly(this, 'provider', signerOrProvider); properties_1.defineReadOnly(this, 'signer', null); } else { errors.throwError('invalid signer or provider', errors.INVALID_ARGUMENT, { arg: 'signerOrProvider', value: signerOrProvider }); } properties_1.defineReadOnly(this, 'estimate', {}); properties_1.defineReadOnly(this, 'functions', {}); properties_1.defineReadOnly(this, 'filters', {}); Object.keys(this.interface.events).forEach(function (eventName) { var event = _this.interface.events[eventName]; properties_1.defineReadOnly(_this.filters, eventName, function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return { address: _this.address, topics: event.encodeTopics(args) }; }); }); this._events = []; properties_1.defineReadOnly(this, 'address', addressOrName); if (this.provider) { properties_1.defineReadOnly(this, 'addressPromise', this.provider.resolveName(addressOrName).then(function (address) { if (address == null) { throw new Error('name not found'); } return address; }).catch(function (error) { console.log('ERROR: Cannot find Contract - ' + addressOrName); throw error; })); } else { try { properties_1.defineReadOnly(this, 'addressPromise', Promise.resolve(address_1.getAddress(addressOrName))); } catch (error) { // Without a provider, we cannot use ENS names errors.throwError('provider is required to use non-address contract address', errors.INVALID_ARGUMENT, { argument: 'addressOrName', value: addressOrName }); } } Object.keys(this.interface.functions).forEach(function (name) { var run = runMethod(_this, name, false); if (_this[name] == null) { properties_1.defineReadOnly(_this, name, run); } else { console.log('WARNING: Multiple definitions for ' + name); } if (_this.functions[name] == null) { properties_1.defineReadOnly(_this.functions, name, run); properties_1.defineReadOnly(_this.estimate, name, runMethod(_this, name, true)); } }); } // @TODO: Allow timeout? Contract.prototype.deployed = function () { var _this = this; if (!this._deployed) { // If we were just deployed, we know the transaction we should occur in if (this.deployTransaction) { this._deployed = this.deployTransaction.wait().then(function () { return _this; }); } else { // @TODO: Once we allow a timeout to be passed in, we will wait // up to that many blocks for getCode // Otherwise, poll for our code to be deployed this._deployed = this.provider.getCode(this.address).then(function (code) { if (code === '0x') { errors.throwError('contract not deployed', errors.UNSUPPORTED_OPERATION, { contractAddress: _this.address, operation: 'getDeployed' }); } return _this; }); } } return this._deployed; }; // @TODO: // estimateFallback(overrides?: TransactionRequest): Promise<BigNumber> // @TODO: // estimateDeploy(bytecode: string, ...args): Promise<BigNumber> Contract.prototype.fallback = function (overrides) { var _this = this; if (!this.signer) { errors.throwError('sending a transaction require a signer', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction(fallback)' }); } var tx = properties_1.shallowCopy(overrides || {}); ['from', 'to'].forEach(function (key) { if (tx[key] == null) { return; } errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key }); }); tx.to = this.addressPromise; return this.deployed().then(function () { return _this.signer.sendTransaction(tx); }); }; // Reconnect to a different signer or provider Contract.prototype.connect = function (signerOrProvider) { if (typeof (signerOrProvider) === 'string') { signerOrProvider = new VoidSigner(signerOrProvider, this.provider); } var contract = new Contract(this.address, this.interface, signerOrProvider); if (this.deployTransaction) { properties_1.defineReadOnly(contract, 'deployTransaction', this.deployTransaction); } return contract; }; // Re-attach to a different on=chain instance of this contract Contract.prototype.attach = function (addressOrName) { return new Contract(addressOrName, this.interface, this.signer || this.provider); }; Contract.isIndexed = function (value) { return interface_1.Interface.isIndexed(value); }; Contract.prototype._getEventFilter = function (eventName) { var _this = this; if (typeof (eventName) === 'string') { // Listen for any event if (eventName === '*') { return { prepareEvent: function (e) { var parsed = _this.interface.parseLog(e); if (parsed) { e.args = parsed.values; e.decode = parsed.decode; e.event = parsed.name; e.eventSignature = parsed.signature; } return [e]; }, eventTag: '*', filter: { address: this.address }, }; } // Normalize the eventName if (eventName.indexOf('(') !== -1) { eventName = abi_coder_1.formatSignature(abi_coder_1.parseSignature('event ' + eventName)); } var event_1 = this.interface.events[eventName]; if (!event_1) { errors.throwError('unknown event - ' + eventName, errors.INVALID_ARGUMENT, { argumnet: 'eventName', value: eventName }); } var filter_1 = { address: this.address, topics: [event_1.topic] }; return { prepareEvent: function (e) { var args = event_1.decode(e.data, e.topics); e.args = args; var result = Array.prototype.slice.call(args); result.push(e); return result; }, event: event_1, eventTag: getEventTag(filter_1), filter: filter_1 }; } var filter = { address: this.address }; // Find the matching event in the ABI; if none, we still allow filtering // since it may be a filter for an otherwise unknown event var event = null; if (eventName.topics && eventName.topics[0]) { filter.topics = eventName.topics; for (var name_1 in this.interface.events) { if (name_1.indexOf('(') === -1) { continue; } var e = this.interface.events[name_1]; if (e.topic === eventName.topics[0].toLowerCase()) { event = e; break; } } } return { prepareEvent: function (e) { if (!event) { return [e]; } var args = event.decode(e.data, e.topics); e.args = args; var result = Array.prototype.slice.call(args); result.push(e); return result; }, event: event, eventTag: getEventTag(filter), filter: filter }; }; Contract.prototype._addEventListener = function (eventFilter, listener, once) { var _this = this; if (!this.provider) { errors.throwError('events require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'once' }); } var wrappedListener = function (log) { var event = properties_1.deepCopy(log); var args = eventFilter.prepareEvent(event); if (eventFilter.event) { event.decode = eventFilter.event.decode; event.event = eventFilter.event.name; event.eventSignature = eventFilter.event.signature; } event.removeListener = function () { _this.removeListener(eventFilter.filter, listener); }; event.getBlock = function () { return _this.provider.getBlock(log.blockHash); }; event.getTransaction = function () { return _this.provider.getTransaction(log.transactionHash); }; event.getTransactionReceipt = function () { return _this.provider.getTransactionReceipt(log.transactionHash); }; _this.emit.apply(_this, [eventFilter.filter].concat(args)); }; this.provider.on(eventFilter.filter, wrappedListener); this._events.push({ eventFilter: eventFilter, listener: listener, wrappedListener: wrappedListener, once: once }); }; Contract.prototype.on = function (event, listener) { this._addEventListener(this._getEventFilter(event), listener, false); return this; }; Contract.prototype.once = function (event, listener) { this._addEventListener(this._getEventFilter(event), listener, true); return this; }; Contract.prototype.addListener = function (eventName, listener) { return this.on(eventName, listener); }; Contract.prototype.emit = function (eventName) { var _this = this; var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } if (!this.provider) { return false; } var result = false; var eventFilter = this._getEventFilter(eventName); this._events = this._events.filter(function (event) { // Not this event (keep it for later) if (event.eventFilter.eventTag !== eventFilter.eventTag) { return true; } // Call the callback in the next event loop setTimeout(function () { event.listener.apply(_this, args); }, 0); result = true; // Reschedule it if it not "once" return !(event.once); }); return result; }; Contract.prototype.listenerCount = function (eventName) { if (!this.provider) { return 0; } var eventFilter = this._getEventFilter(eventName); return this._events.filter(function (event) { return event.eventFilter.eventTag === eventFilter.eventTag; }).length; }; Contract.prototype.listeners = function (eventName) { if (!this.provider) { return []; } var eventFilter = this._getEventFilter(eventName); return this._events.filter(function (event) { return event.eventFilter.eventTag === eventFilter.eventTag; }).map(function (event) { return event.listener; }); }; Contract.prototype.removeAllListeners = function (eventName) { if (!this.provider) { return this; } var eventFilter = this._getEventFilter(eventName); this._events = this._events.filter(function (event) { return event.eventFilter.eventTag !== eventFilter.eventTag; }); return this; }; Contract.prototype.removeListener = function (eventName, listener) { var _this = this; if (!this.provider) { return this; } var found = false; var eventFilter = this._getEventFilter(eventName); this._events = this._events.filter(function (event) { // Make sure this event and listener match if (event.eventFilter.eventTag !== eventFilter.eventTag) { return true; } if (event.listener !== listener) { return true; } _this.provider.removeListener(event.eventFilter.filter, event.wrappedListener); // Already found a matching event in a previous loop if (found) { return true; } // REmove this event (returning false filters us out) found = true; return false; }); return this; }; return Contract; }()); exports.Contract = Contract; var ContractFactory = /** @class */ (function () { function ContractFactory(contractInterface, bytecode, signer) { var bytecodeHex = null; // Allow the bytecode object from the Solidity compiler if (typeof (bytecode) === 'string') { bytecodeHex = bytecode; } else if (bytes_1.isArrayish(bytecode)) { bytecodeHex = bytes_1.hexlify(bytecode); } else if (typeof (bytecode.object) === 'string') { bytecodeHex = bytecode.object; } else { errors.throwError('bytecode must be a valid hex string', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode }); } // Make sure it is 0x prefixed if (bytecodeHex.substring(0, 2) !== '0x') { bytecodeHex = '0x' + bytecodeHex; } if (!bytes_1.isHexString(bytecodeHex)) { errors.throwError('bytecode must be a valid hex string', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode }); } if ((bytecodeHex.length % 2) !== 0) { errors.throwError('bytecode must be valid data (even length)', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode }); } properties_1.defineReadOnly(this, 'bytecode', bytecodeHex); if (interface_1.Interface.isInterface(contractInterface)) { properties_1.defineReadOnly(this, 'interface', contractInterface); } else { properties_1.defineReadOnly(this, 'interface', new interface_1.Interface(contractInterface)); } if (signer && !abstract_signer_1.Signer.isSigner(signer)) { errors.throwError('invalid signer', errors.INVALID_ARGUMENT, { arg: 'signer', value: null }); } properties_1.defineReadOnly(this, 'signer', signer || null); } ContractFactory.prototype.getDeployTransaction = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var tx = {}; // If we have 1 additional argument, we allow transaction overrides if (args.length === this.interface.deployFunction.inputs.length + 1) { tx = properties_1.shallowCopy(args.pop()); for (var key in tx) { if (!allowedTransactionKeys[key]) { throw new Error('unknown transaction override ' + key); } } } // Do not allow these to be overridden in a deployment transaction ['data', 'from', 'to'].forEach(function (key) { if (tx[key] == null) { return; } errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key }); }); // Make sure the call matches the constructor signature errors.checkArgumentCount(args.length, this.interface.deployFunction.inputs.length, ' in Contract constructor'); // Set the data to the bytecode + the encoded constructor arguments tx.data = this.interface.deployFunction.encode(this.bytecode, args); return tx; }; ContractFactory.prototype.deploy = function () { var _this = this; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } // Get the deployment transaction (with optional overrides) var tx = this.getDeployTransaction.apply(this, args); // Send the deployment transaction return this.signer.sendTransaction(tx).then(function (tx) { var contract = new Contract(address_1.getContractAddress(tx), _this.interface, _this.signer); properties_1.defineReadOnly(contract, 'deployTransaction', tx); return contract; }); }; ContractFactory.prototype.attach = function (address) { return new Contract(address, this.interface, this.signer); }; ContractFactory.prototype.connect = function (signer) { return new ContractFactory(this.interface, this.bytecode, signer); }; ContractFactory.fromSolidity = function (compilerOutput, signer) { if (compilerOutput == null) { errors.throwError('missing compiler output', errors.MISSING_ARGUMENT, { argument: 'compilerOutput' }); } if (typeof (compilerOutput) === 'string') { compilerOutput = JSON.parse(compilerOutput); } var abi = compilerOutput.abi; var bytecode = null; if (compilerOutput.bytecode) { bytecode = compilerOutput.bytecode; } else if (compilerOutput.evm && compilerOutput.evm.bytecode) { bytecode = compilerOutput.evm.bytecode; } return new ContractFactory(abi, bytecode, signer); }; return ContractFactory; }()); exports.ContractFactory = ContractFactory; },{"./abstract-signer":2,"./constants":3,"./errors":5,"./providers/abstract-provider":49,"./utils/abi-coder":58,"./utils/address":59,"./utils/bignumber":61,"./utils/bytes":62,"./utils/interface":67,"./utils/properties":72}],5:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _version_1 = require("./_version"); // Unknown Error exports.UNKNOWN_ERROR = 'UNKNOWN_ERROR'; // Not implemented exports.NOT_IMPLEMENTED = 'NOT_IMPLEMENTED'; // Missing new operator to an object // - name: The name of the class exports.MISSING_NEW = 'MISSING_NEW'; // Call exception // - transaction: the transaction // - address?: the contract address // - args?: The arguments passed into the function // - method?: The Solidity method signature // - errorSignature?: The EIP848 error signature // - errorArgs?: The EIP848 error parameters // - reason: The reason (only for EIP848 "Error(string)") exports.CALL_EXCEPTION = 'CALL_EXCEPTION'; // Invalid argument (e.g. value is incompatible with type) to a function: // - arg: The argument name that was invalid // - value: The value of the argument exports.INVALID_ARGUMENT = 'INVALID_ARGUMENT'; // Missing argument to a function: // - count: The number of arguments received // - expectedCount: The number of arguments expected exports.MISSING_ARGUMENT = 'MISSING_ARGUMENT'; // Too many arguments // - count: The number of arguments received // - expectedCount: The number of arguments expected exports.UNEXPECTED_ARGUMENT = 'UNEXPECTED_ARGUMENT'; // Numeric Fault // - operation: the operation being executed // - fault: the reason this faulted exports.NUMERIC_FAULT = 'NUMERIC_FAULT'; // Insufficien funds (< value + gasLimit * gasPrice) // - transaction: the transaction attempted exports.INSUFFICIENT_FUNDS = 'INSUFFICIENT_FUNDS'; // Nonce has already been used // - transaction: the transaction attempted exports.NONCE_EXPIRED = 'NONCE_EXPIRED'; // The replacement fee for the transaction is too low // - transaction: the transaction attempted exports.REPLACEMENT_UNDERPRICED = 'REPLACEMENT_UNDERPRICED'; // Unsupported operation // - operation exports.UNSUPPORTED_OPERATION = 'UNSUPPORTED_OPERATION'; var _permanentCensorErrors = false; var _censorErrors = false; // @TODO: Enum function throwError(message, code, params) { if (_censorErrors) { throw new Error('unknown error'); } if (!code) { code = exports.UNKNOWN_ERROR; } if (!params) { params = {}; } var messageDetails = []; Object.keys(params).forEach(function (key) { try { messageDetails.push(key + '=' + JSON.stringify(params[key])); } catch (error) { messageDetails.push(key + '=' + JSON.stringify(params[key].toString())); } }); messageDetails.push("version=" + _version_1.version); var reason = message; if (messageDetails.length) { message += ' (' + messageDetails.join(', ') + ')'; } // @TODO: Any?? var error = new Error(message); error.reason = reason; error.code = code; Object.keys(params).forEach(function (key) { error[key] = params[key]; }); throw error; } exports.throwError = throwError; function checkNew(self, kind) { if (!(self instanceof kind)) { throwError('missing new', exports.MISSING_NEW, { name: kind.name }); } } exports.checkNew = checkNew; function checkArgumentCount(count, expectedCount, suffix) { if (!suffix) { suffix = ''; } if (count < expectedCount) { throwError('missing argument' + suffix, exports.MISSING_ARGUMENT, { count: count, expectedCount: expectedCount }); } if (count > expectedCount) { throwError('too many arguments' + suffix, exports.UNEXPECTED_ARGUMENT, { count: count, expectedCount: expectedCount }); } } exports.checkArgumentCount = checkArgumentCount; function setCensorship(censorship, permanent) { if (_permanentCensorErrors) { throwError('error censorship permanent', exports.UNSUPPORTED_OPERATION, { operation: 'setCersorship' }); } _censorErrors = !!censorship; _permanentCensorErrors = !!permanent; } exports.setCensorship = setCensorship; function checkNormalize() { try { // Make sure all forms of normalization are supported ["NFD", "NFC", "NFKD", "NFKC"].forEach(function (form) { try { "test".normalize(form); } catch (error) { throw new Error('missing ' + form); } }); if (String.fromCharCode(0xe9).normalize('NFD') !== String.fromCharCode(0x65, 0x0301)) { throw new Error('broken implementation'); } } catch (error) { throwError('platform missing String.prototype.normalize', exports.UNSUPPORTED_OPERATION, { operation: 'String.prototype.normalize', form: error.message }); } } exports.checkNormalize = checkNormalize; },{"./_version":1}],6:[function(require,module,exports){ 'use strict'; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var contract_1 = require("./contract"); exports.Contract = contract_1.Contract; exports.ContractFactory = contract_1.ContractFactory; exports.VoidSigner = contract_1.VoidSigner; var abstract_signer_1 = require("./abstract-signer"); exports.Signer = abstract_signer_1.Signer; var wallet_1 = require("./wallet"); exports.Wallet = wallet_1.Wallet; var constants = __importStar(require("./constants")); exports.constants = constants; var errors = __importStar(require("./errors")); exports.errors = errors; var providers = __importStar(require("./providers")); exports.providers = providers; var utils = __importStar(require("./utils")); exports.utils = utils; var wordlists = __importStar(require("./wordlists")); exports.wordlists = wordlists; //////////////////////// // Compile-Time Constants // This is empty in node, and used by browserify to inject extra goodies var shims_1 = require("./utils/shims"); exports.platform = shims_1.platform; // This is generated by "npm run dist" var _version_1 = require("./_version"); exports.version = _version_1.version; //////////////////////// // Helper Functions function getDefaultProvider(network) { if (network == null) { network = 'homestead'; } var n = utils.getNetwork(network); if (!n || !n._defaultProvider) { errors.throwError('unsupported getDefaultProvider network', errors.UNSUPPORTED_OPERATION, { operation: 'getDefaultProvider', network: network }); } return n._defaultProvider(providers); } exports.getDefaultProvider = getDefaultProvider; },{"./_version":1,"./abstract-signer":2,"./constants":3,"./contract":4,"./errors":5,"./providers":53,"./utils":66,"./utils/shims":78,"./wallet":86,"./wordlists":87}],7:[function(require,module,exports){ "use strict"; function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var ethers = __importStar(require("./ethers")); exports.ethers = ethers; __export(require("./ethers")); },{"./ethers":6}],8:[function(require,module,exports){ "use strict"; (function(root) { function checkInt(value) { return (parseInt(value) === value); } function checkInts(arrayish) { if (!checkInt(arrayish.length)) { return false; } for (var i = 0; i < arrayish.length; i++) { if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) { return false; } } return true; } function coerceArray(arg, copy) { // ArrayBuffer view if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') { if (copy) { if (arg.slice) { arg = arg.slice(); } else { arg = Array.prototype.slice.call(arg); } } return arg; } // It's an array; check it is a valid representation of a byte if (Array.isArray(arg)) { if (!checkInts(arg)) { throw new Error('Array contains invalid value: ' + arg); } return new Uint8Array(arg); } // Something else, but behaves like an array (maybe a Buffer? Arguments?) if (checkInt(arg.length) && checkInts(arg)) { return new Uint8Array(arg); } throw new Error('unsupported array-like object'); } function createArray(length) { return new Uint8Array(length); } function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) { if (sourceStart != null || sourceEnd != null) { if (sourceArray.slice) { sourceArray = sourceArray.slice(sourceStart, sourceEnd); } else { sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd); } } targetArray.set(sourceArray, targetStart); } var convertUtf8 = (function() { function toBytes(text) { var result = [], i = 0; text = encodeURI(text); while (i < text.length) { var c = text.charCodeAt(i++); // if it is a % sign, encode the following 2 bytes as a hex value if (c === 37) { result.push(parseInt(text.substr(i, 2), 16)) i += 2; // otherwise, just the actual byte } else { result.push(c) } } return coerceArray(result); } function fromBytes(bytes) { var result = [], i = 0; while (i < bytes.length) { var c = bytes[i]; if (c < 128) { result.push(String.fromCharCode(c)); i++; } else if (c > 191 && c < 224) { result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f))); i += 2; } else { result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f))); i += 3; } } return result.join(''); } return { toBytes: toBytes, fromBytes: fromBytes, } })(); var convertHex = (function() { function toBytes(text) { var result = []; for (var i = 0; i < text.length; i += 2) { result.push(parseInt(text.substr(i, 2), 16)); } return result; } // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html var Hex = '0123456789abcdef'; function fromBytes(bytes) { var result = []; for (var i = 0; i < bytes.length; i++) { var v = bytes[i]; result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]); } return result.join(''); } return { toBytes: toBytes, fromBytes: fromBytes, } })(); // Number of rounds by keysize var numberOfRounds = {16: 10, 24: 12, 32: 14} // Round constant words var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; // S-box and Inverse S-box (S is for Substitution) var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; // Transformations for encryption var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769,