Fix gasPrice regression
This commit is contained in:
		
							
								
								
									
										15
									
								
								src/0x.ts
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/0x.ts
									
									
									
									
									
								
							| @@ -170,13 +170,16 @@ export class ZeroEx { | ||||
|             // We re-assign the send method so that Web3@1.0 providers work with 0x.js | ||||
|             (provider as any).sendAsync = (provider as any).send; | ||||
|         } | ||||
|         this._web3Wrapper = new Web3Wrapper(provider); | ||||
|         const gasPrice = _.isUndefined(config) ? undefined : config.gasPrice; | ||||
|         this.token = new TokenWrapper(this._web3Wrapper, gasPrice); | ||||
|         this.proxy = new TokenTransferProxyWrapper(this._web3Wrapper, gasPrice); | ||||
|         this.exchange = new ExchangeWrapper(this._web3Wrapper, this.token, gasPrice); | ||||
|         this.tokenRegistry = new TokenRegistryWrapper(this._web3Wrapper, gasPrice); | ||||
|         this.etherToken = new EtherTokenWrapper(this._web3Wrapper, this.token, gasPrice); | ||||
|         const defaults = { | ||||
|             gasPrice, | ||||
|         }; | ||||
|         this._web3Wrapper = new Web3Wrapper(provider, defaults); | ||||
|         this.token = new TokenWrapper(this._web3Wrapper); | ||||
|         this.proxy = new TokenTransferProxyWrapper(this._web3Wrapper); | ||||
|         this.exchange = new ExchangeWrapper(this._web3Wrapper, this.token); | ||||
|         this.tokenRegistry = new TokenRegistryWrapper(this._web3Wrapper); | ||||
|         this.etherToken = new EtherTokenWrapper(this._web3Wrapper, this.token); | ||||
|     } | ||||
|     /** | ||||
|      * Sets a new web3 provider for 0x.js. Updating the provider will stop all | ||||
|   | ||||
| @@ -6,11 +6,13 @@ export class Contract implements Web3.ContractInstance { | ||||
|     public address: string; | ||||
|     public abi: Web3.ContractAbi; | ||||
|     private contract: Web3.ContractInstance; | ||||
|     private defaults: Partial<Web3.TxData>; | ||||
|     [name: string]: any; | ||||
|     constructor(web3ContractInstance: Web3.ContractInstance) { | ||||
|     constructor(web3ContractInstance: Web3.ContractInstance, defaults: Partial<Web3.TxData>) { | ||||
|         this.contract = web3ContractInstance; | ||||
|         this.address = web3ContractInstance.address; | ||||
|         this.abi = web3ContractInstance.abi; | ||||
|         this.defaults = defaults; | ||||
|         this.populateEvents(); | ||||
|         this.populateFunctions(); | ||||
|     } | ||||
| @@ -18,11 +20,12 @@ export class Contract implements Web3.ContractInstance { | ||||
|         const functionsAbi = _.filter(this.abi, abiPart => abiPart.type === 'function'); | ||||
|         _.forEach(functionsAbi, (functionAbi: Web3.MethodAbi) => { | ||||
|             const cbStyleFunction = this.contract[functionAbi.name]; | ||||
|             this[functionAbi.name] = promisify(cbStyleFunction, this.contract); | ||||
|             if (functionAbi.constant) { | ||||
|                 this[functionAbi.name] = promisify(cbStyleFunction, this.contract); | ||||
|                 const cbStyleCallFunction = this.contract[functionAbi.name].call; | ||||
|                 this[functionAbi.name].call = promisify(cbStyleCallFunction, this.contract); | ||||
|             } else { | ||||
|                 this[functionAbi.name] = this.promisifyWithDefaultParams(cbStyleFunction); | ||||
|                 const cbStyleEstimateGasFunction = this.contract[functionAbi.name].estimateGas; | ||||
|                 this[functionAbi.name].estimateGas = | ||||
|                     promisify(cbStyleEstimateGasFunction, this.contract); | ||||
| @@ -35,4 +38,31 @@ export class Contract implements Web3.ContractInstance { | ||||
|             this[eventAbi.name] = this.contract[eventAbi.name]; | ||||
|         }); | ||||
|     } | ||||
|     private promisifyWithDefaultParams(fn: (...args: any[]) => void): (...args: any[]) => Promise<any> { | ||||
|         const promisifiedWithDefaultParams = (...args: any[]) => { | ||||
|             const promise = new Promise((resolve, reject) => { | ||||
|                 const lastArg = args[args.length - 1]; | ||||
|                 let txData: Partial<Web3.TxData> = {}; | ||||
|                 if (_.isObject(lastArg) && !_.isArray(lastArg) && !lastArg.isBigNumber) { | ||||
|                     txData = args.pop(); | ||||
|                 } | ||||
|                 txData = { | ||||
|                     ...txData, | ||||
|                     ...this.defaults, | ||||
|                 }; | ||||
|                 const callback = (err: Error, data: any) => { | ||||
|                     if (_.isNull(err)) { | ||||
|                         resolve(data); | ||||
|                     } else { | ||||
|                         reject(err); | ||||
|                     } | ||||
|                 }; | ||||
|                 args.push(txData); | ||||
|                 args.push(callback); | ||||
|                 fn.apply(this.contract, args); | ||||
|             }); | ||||
|             return promise; | ||||
|         }; | ||||
|         return promisifiedWithDefaultParams; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -6,10 +6,8 @@ import {utils} from '../utils/utils'; | ||||
|  | ||||
| export class ContractWrapper { | ||||
|     protected _web3Wrapper: Web3Wrapper; | ||||
|     private _gasPrice?: BigNumber.BigNumber; | ||||
|     constructor(web3Wrapper: Web3Wrapper, gasPrice?: BigNumber.BigNumber) { | ||||
|     constructor(web3Wrapper: Web3Wrapper) { | ||||
|         this._web3Wrapper = web3Wrapper; | ||||
|         this._gasPrice = gasPrice; | ||||
|     } | ||||
|     protected async _instantiateContractIfExistsAsync<A extends Web3.ContractInstance>(artifact: Artifact, | ||||
|                                                                                        address?: string): Promise<A> { | ||||
|   | ||||
| @@ -13,8 +13,8 @@ import * as EtherTokenArtifacts from '../artifacts/EtherToken.json'; | ||||
| export class EtherTokenWrapper extends ContractWrapper { | ||||
|     private _etherTokenContractIfExists?: EtherTokenContract; | ||||
|     private _tokenWrapper: TokenWrapper; | ||||
|     constructor(web3Wrapper: Web3Wrapper, tokenWrapper: TokenWrapper, gasPrice?: BigNumber.BigNumber) { | ||||
|         super(web3Wrapper, gasPrice); | ||||
|     constructor(web3Wrapper: Web3Wrapper, tokenWrapper: TokenWrapper) { | ||||
|         super(web3Wrapper); | ||||
|         this._tokenWrapper = tokenWrapper; | ||||
|     } | ||||
|     /** | ||||
|   | ||||
| @@ -72,8 +72,8 @@ export class ExchangeWrapper extends ContractWrapper { | ||||
|         ]; | ||||
|         return [orderAddresses, orderValues]; | ||||
|     } | ||||
|     constructor(web3Wrapper: Web3Wrapper, tokenWrapper: TokenWrapper, gasPrice?: BigNumber.BigNumber) { | ||||
|         super(web3Wrapper, gasPrice); | ||||
|     constructor(web3Wrapper: Web3Wrapper, tokenWrapper: TokenWrapper) { | ||||
|         super(web3Wrapper); | ||||
|         this._tokenWrapper = tokenWrapper; | ||||
|         this._orderValidationUtils = new OrderValidationUtils(tokenWrapper, this); | ||||
|         this._exchangeLogEventEmitters = []; | ||||
|   | ||||
| @@ -11,8 +11,8 @@ import * as TokenRegistryArtifacts from '../artifacts/TokenRegistry.json'; | ||||
|  */ | ||||
| export class TokenRegistryWrapper extends ContractWrapper { | ||||
|     private _tokenRegistryContractIfExists?: TokenRegistryContract; | ||||
|     constructor(web3Wrapper: Web3Wrapper, gasPrice?: BigNumber.BigNumber) { | ||||
|         super(web3Wrapper, gasPrice); | ||||
|     constructor(web3Wrapper: Web3Wrapper) { | ||||
|         super(web3Wrapper); | ||||
|     } | ||||
|     /** | ||||
|      * Retrieves all the tokens currently listed in the Token Registry smart contract | ||||
|   | ||||
| @@ -31,8 +31,8 @@ export class TokenWrapper extends ContractWrapper { | ||||
|     public UNLIMITED_ALLOWANCE_IN_BASE_UNITS = constants.UNLIMITED_ALLOWANCE_IN_BASE_UNITS; | ||||
|     private _tokenContractsByAddress: {[address: string]: TokenContract}; | ||||
|     private _tokenLogEventEmitters: ContractEventEmitter[]; | ||||
|     constructor(web3Wrapper: Web3Wrapper, gasPrice?: BigNumber.BigNumber) { | ||||
|         super(web3Wrapper, gasPrice); | ||||
|     constructor(web3Wrapper: Web3Wrapper) { | ||||
|         super(web3Wrapper); | ||||
|         this._tokenContractsByAddress = {}; | ||||
|         this._tokenLogEventEmitters = []; | ||||
|     } | ||||
|   | ||||
| @@ -7,10 +7,12 @@ import {Contract} from './contract'; | ||||
|  | ||||
| export class Web3Wrapper { | ||||
|     private web3: Web3; | ||||
|     private defaults: Partial<Web3.TxData>; | ||||
|     private networkIdIfExists?: number; | ||||
|     constructor(provider: Web3.Provider) { | ||||
|     constructor(provider: Web3.Provider, defaults: Partial<Web3.TxData>) { | ||||
|         this.web3 = new Web3(); | ||||
|         this.web3.setProvider(provider); | ||||
|         this.defaults = defaults; | ||||
|     } | ||||
|     public setProvider(provider: Web3.Provider) { | ||||
|         delete this.networkIdIfExists; | ||||
| @@ -97,7 +99,7 @@ export class Web3Wrapper { | ||||
|     } | ||||
|     private getContractInstance<A extends Web3.ContractInstance>(abi: Web3.ContractAbi, address: string): A { | ||||
|         const web3ContractInstance = this.web3.eth.contract(abi).at(address); | ||||
|         const contractInstance = new Contract(web3ContractInstance) as any as A; | ||||
|         const contractInstance = new Contract(web3ContractInstance, this.defaults) as any as A; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     private async getNetworkAsync(): Promise<number> { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user