// tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma // tslint:disable:whitespace no-unbound-method no-trailing-whitespace // tslint:disable:no-unused-variable import { BaseContract, EventCallback, IndexedFilterValues, SubscriptionManager, PromiseWithTransactionHash, } from '@0x/base-contract'; import { schemas } from '@0x/json-schemas'; import { BlockParam, BlockParamLiteral, BlockRange, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, LogWithDecodedArgs, MethodAbi, TransactionReceiptWithDecodedLogs, TxData, TxDataPayable, SupportedProvider, } from 'ethereum-types'; import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import { assert } from '@0x/assert'; import * as ethers from 'ethers'; // tslint:enable:no-unused-variable export type ERC20ProxyEventArgs = | ERC20ProxyAuthorizedAddressAddedEventArgs | ERC20ProxyAuthorizedAddressRemovedEventArgs; export enum ERC20ProxyEvents { AuthorizedAddressAdded = 'AuthorizedAddressAdded', AuthorizedAddressRemoved = 'AuthorizedAddressRemoved', } export interface ERC20ProxyAuthorizedAddressAddedEventArgs extends DecodedLogArgs { target: string; caller: string; } export interface ERC20ProxyAuthorizedAddressRemovedEventArgs extends DecodedLogArgs { target: string; caller: string; } /* istanbul ignore next */ // tslint:disable:no-parameter-reassignment // tslint:disable-next-line:class-name export class ERC20ProxyContract extends BaseContract { public static deployedBytecode = '0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80639ad2674411610076578063b91816111161005b578063b918161114610374578063d39de6e9146103bb578063f2fde38b14610413576100a3565b80639ad26744146102fe578063ae25532e14610337576100a3565b806342f1181e14610248578063494503d41461027d57806370712939146102c35780638da5cb5b146102f6575b7fffffffff00000000000000000000000000000000000000000000000000000000600035167fa85e59e40000000000000000000000000000000000000000000000000000000081141561024257604080513381526001602082015290812054610177577f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c1553454e4445525f4e4f545f415554484f52495a454400000000000000604052600060605260646000fd5b50602860043501357f23b872dd0000000000000000000000000000000000000000000000000000000060005260606024600437602060006064600080855af1600080511160203d14163d15178116905080156101cf57005b50507f08c379a0000000000000000000000000000000000000000000000000000000006000527c20000000000000000000000000000000000000000000000000000000006020527c0f5452414e534645525f4641494c454400000000000000000000000000604052600060605260646000fd5b50600080fd5b61027b6004803603602081101561025e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b005b61029a6004803603602081101561029357600080fd5b5035610632565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61027b600480360360208110156102d957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610666565b61029a610959565b61027b6004803603604081101561031457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610975565b61033f610d26565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6103a76004803603602081101561038a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d5c565b604080519115158252519081900360200190f35b6103c3610d71565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103ff5781810151838201526020016103e7565b505050509050019250505060405180910390f35b61027b6004803603602081101561042957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610de0565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104cc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561056157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5441524745545f414c52454144595f415554484f52495a454400000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6002818154811061063f57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106ec57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1661078057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b600254811015610912578173ffffffffffffffffffffffffffffffffffffffff16600282815481106107fa57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561090a57600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061085257fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061088557fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906109049082610ec6565b50610912565b6001016107cc565b50604051339073ffffffffffffffffffffffffffffffffffffffff8316907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610a8f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5441524745545f4e4f545f415554484f52495a45440000000000000000000000604482015290519081900360640190fd5b6002548110610aff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e4445585f4f55545f4f465f424f554e445300000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610b2357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610bb157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f415554484f52495a45445f414444524553535f4d49534d415443480000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110610c2c57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110610c5f57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190610cde9082610ec6565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b604080517f4552433230546f6b656e28616464726573732900000000000000000000000000815290519081900360130190205b90565b60016020526000908152604090205460ff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610dd657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dab575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e6657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f434f4e54524143545f4f574e455200000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615610ec357600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b815481835581811115610eea57600083815260209020610eea918101908301610eef565b505050565b610d5991905b80821115610f095760008155600101610ef5565b509056fea265627a7a72315820cb3312567959522bd12ea03b9812cab2bace85fe5f172b3ae8014b3eacc85fa864736f6c634300050b0032'; /** * Authorizes an address. */ public addAuthorizedAddress = { /** * Sends an Ethereum transaction executing this method with the supplied parameters. This is a read/write * Ethereum operation and will cost gas. * @param target Address to authorize. * @param txData Additional data for transaction * @returns The hash of the transaction */ async sendTransactionAsync(target: string, txData?: Partial | undefined): Promise { assert.isString('target', target); const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('addAuthorizedAddress(address)', [target.toLowerCase()]); const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...txData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); if (txDataWithDefaults.from !== undefined) { txDataWithDefaults.from = txDataWithDefaults.from.toLowerCase(); } const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); return txHash; }, /** * Sends an Ethereum transaction and waits until the transaction has been successfully mined without reverting. * If the transaction was mined, but reverted, an error is thrown. * @param target Address to authorize. * @param txData Additional data for transaction * @param pollingIntervalMs Interval at which to poll for success * @returns A promise that resolves when the transaction is successful */ awaitTransactionSuccessAsync( target: string, txData?: Partial, pollingIntervalMs?: number, timeoutMs?: number, ): PromiseWithTransactionHash { assert.isString('target', target); const self = (this as any) as ERC20ProxyContract; const txHashPromise = self.addAuthorizedAddress.sendTransactionAsync(target.toLowerCase(), txData); return new PromiseWithTransactionHash( txHashPromise, (async (): Promise => { // When the transaction hash resolves, wait for it to be mined. return self._web3Wrapper.awaitTransactionSuccessAsync( await txHashPromise, pollingIntervalMs, timeoutMs, ); })(), ); }, /** * Estimates the gas cost of sending an Ethereum transaction calling this method with these arguments. * @param target Address to authorize. * @param txData Additional data for transaction * @returns The hash of the transaction */ async estimateGasAsync(target: string, txData?: Partial | undefined): Promise { assert.isString('target', target); const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('addAuthorizedAddress(address)', [target.toLowerCase()]); const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...txData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); if (txDataWithDefaults.from !== undefined) { txDataWithDefaults.from = txDataWithDefaults.from.toLowerCase(); } const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); return gas; }, async validateAndSendTransactionAsync(target: string, txData?: Partial | undefined): Promise { await (this as any).addAuthorizedAddress.callAsync(target, txData); const txHash = await (this as any).addAuthorizedAddress.sendTransactionAsync(target, txData); return txHash; }, /** * Sends a read-only call to the contract method. Returns the result that would happen if one were to send an * Ethereum transaction to this method, given the current state of the blockchain. Calls do not cost gas * since they don't modify state. * @param target Address to authorize. */ async callAsync(target: string, callData: Partial = {}, defaultBlock?: BlockParam): Promise { assert.isString('target', target); assert.doesConformToSchema('callData', callData, schemas.callDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (defaultBlock !== undefined) { assert.isBlockParam('defaultBlock', defaultBlock); } const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('addAuthorizedAddress(address)', [target.toLowerCase()]); const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...callData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); callDataWithDefaults.from = callDataWithDefaults.from ? callDataWithDefaults.from.toLowerCase() : callDataWithDefaults.from; let rawCallResult; try { rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); } catch (err) { BaseContract._throwIfThrownErrorIsRevertError(err); throw err; } BaseContract._throwIfCallResultIsRevertError(rawCallResult); const abiEncoder = self._lookupAbiEncoder('addAuthorizedAddress(address)'); // tslint:disable boolean-naming const result = abiEncoder.strictDecodeReturnValue(rawCallResult); // tslint:enable boolean-naming return result; }, /** * Returns the ABI encoded transaction data needed to send an Ethereum transaction calling this method. Before * sending the Ethereum tx, this encoded tx data can first be sent to a separate signing service or can be used * to create a 0x transaction (see protocol spec for more details). * @param target Address to authorize. * @returns The ABI encoded transaction data as a string */ getABIEncodedTransactionData(target: string): string { assert.isString('target', target); const self = (this as any) as ERC20ProxyContract; const abiEncodedTransactionData = self._strictEncodeArguments('addAuthorizedAddress(address)', [ target.toLowerCase(), ]); return abiEncodedTransactionData; }, /** * Decode the ABI-encoded transaction data into its input arguments * @param callData The ABI-encoded transaction data * @returns An array representing the input arguments in order. Keynames of nested structs are preserved. */ getABIDecodedTransactionData(callData: string): [string] { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('addAuthorizedAddress(address)'); // tslint:disable boolean-naming const abiDecodedCallData = abiEncoder.strictDecode<[string]>(callData); return abiDecodedCallData; }, /** * Decode the ABI-encoded return data from a transaction * @param returnData the data returned after transaction execution * @returns An array representing the output results in order. Keynames of nested structs are preserved. */ getABIDecodedReturnData(returnData: string): void { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('addAuthorizedAddress(address)'); // tslint:disable boolean-naming const abiDecodedReturnData = abiEncoder.strictDecodeReturnValue(returnData); return abiDecodedReturnData; }, }; public authorities = { /** * Sends a read-only call to the contract method. Returns the result that would happen if one were to send an * Ethereum transaction to this method, given the current state of the blockchain. Calls do not cost gas * since they don't modify state. */ async callAsync( index_0: BigNumber, callData: Partial = {}, defaultBlock?: BlockParam, ): Promise { assert.isBigNumber('index_0', index_0); assert.doesConformToSchema('callData', callData, schemas.callDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (defaultBlock !== undefined) { assert.isBlockParam('defaultBlock', defaultBlock); } const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('authorities(uint256)', [index_0]); const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...callData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); callDataWithDefaults.from = callDataWithDefaults.from ? callDataWithDefaults.from.toLowerCase() : callDataWithDefaults.from; let rawCallResult; try { rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); } catch (err) { BaseContract._throwIfThrownErrorIsRevertError(err); throw err; } BaseContract._throwIfCallResultIsRevertError(rawCallResult); const abiEncoder = self._lookupAbiEncoder('authorities(uint256)'); // tslint:disable boolean-naming const result = abiEncoder.strictDecodeReturnValue(rawCallResult); // tslint:enable boolean-naming return result; }, /** * Returns the ABI encoded transaction data needed to send an Ethereum transaction calling this method. Before * sending the Ethereum tx, this encoded tx data can first be sent to a separate signing service or can be used * to create a 0x transaction (see protocol spec for more details). * @returns The ABI encoded transaction data as a string */ getABIEncodedTransactionData(index_0: BigNumber): string { assert.isBigNumber('index_0', index_0); const self = (this as any) as ERC20ProxyContract; const abiEncodedTransactionData = self._strictEncodeArguments('authorities(uint256)', [index_0]); return abiEncodedTransactionData; }, /** * Decode the ABI-encoded transaction data into its input arguments * @param callData The ABI-encoded transaction data * @returns An array representing the input arguments in order. Keynames of nested structs are preserved. */ getABIDecodedTransactionData(callData: string): BigNumber { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('authorities(uint256)'); // tslint:disable boolean-naming const abiDecodedCallData = abiEncoder.strictDecode(callData); return abiDecodedCallData; }, /** * Decode the ABI-encoded return data from a transaction * @param returnData the data returned after transaction execution * @returns An array representing the output results in order. Keynames of nested structs are preserved. */ getABIDecodedReturnData(returnData: string): string { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('authorities(uint256)'); // tslint:disable boolean-naming const abiDecodedReturnData = abiEncoder.strictDecodeReturnValue(returnData); return abiDecodedReturnData; }, }; /** * Removes authorizion of an address. */ public removeAuthorizedAddress = { /** * Sends an Ethereum transaction executing this method with the supplied parameters. This is a read/write * Ethereum operation and will cost gas. * @param target Address to remove authorization from. * @param txData Additional data for transaction * @returns The hash of the transaction */ async sendTransactionAsync(target: string, txData?: Partial | undefined): Promise { assert.isString('target', target); const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('removeAuthorizedAddress(address)', [target.toLowerCase()]); const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...txData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); if (txDataWithDefaults.from !== undefined) { txDataWithDefaults.from = txDataWithDefaults.from.toLowerCase(); } const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); return txHash; }, /** * Sends an Ethereum transaction and waits until the transaction has been successfully mined without reverting. * If the transaction was mined, but reverted, an error is thrown. * @param target Address to remove authorization from. * @param txData Additional data for transaction * @param pollingIntervalMs Interval at which to poll for success * @returns A promise that resolves when the transaction is successful */ awaitTransactionSuccessAsync( target: string, txData?: Partial, pollingIntervalMs?: number, timeoutMs?: number, ): PromiseWithTransactionHash { assert.isString('target', target); const self = (this as any) as ERC20ProxyContract; const txHashPromise = self.removeAuthorizedAddress.sendTransactionAsync(target.toLowerCase(), txData); return new PromiseWithTransactionHash( txHashPromise, (async (): Promise => { // When the transaction hash resolves, wait for it to be mined. return self._web3Wrapper.awaitTransactionSuccessAsync( await txHashPromise, pollingIntervalMs, timeoutMs, ); })(), ); }, /** * Estimates the gas cost of sending an Ethereum transaction calling this method with these arguments. * @param target Address to remove authorization from. * @param txData Additional data for transaction * @returns The hash of the transaction */ async estimateGasAsync(target: string, txData?: Partial | undefined): Promise { assert.isString('target', target); const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('removeAuthorizedAddress(address)', [target.toLowerCase()]); const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...txData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); if (txDataWithDefaults.from !== undefined) { txDataWithDefaults.from = txDataWithDefaults.from.toLowerCase(); } const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); return gas; }, async validateAndSendTransactionAsync(target: string, txData?: Partial | undefined): Promise { await (this as any).removeAuthorizedAddress.callAsync(target, txData); const txHash = await (this as any).removeAuthorizedAddress.sendTransactionAsync(target, txData); return txHash; }, /** * Sends a read-only call to the contract method. Returns the result that would happen if one were to send an * Ethereum transaction to this method, given the current state of the blockchain. Calls do not cost gas * since they don't modify state. * @param target Address to remove authorization from. */ async callAsync(target: string, callData: Partial = {}, defaultBlock?: BlockParam): Promise { assert.isString('target', target); assert.doesConformToSchema('callData', callData, schemas.callDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (defaultBlock !== undefined) { assert.isBlockParam('defaultBlock', defaultBlock); } const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('removeAuthorizedAddress(address)', [target.toLowerCase()]); const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...callData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); callDataWithDefaults.from = callDataWithDefaults.from ? callDataWithDefaults.from.toLowerCase() : callDataWithDefaults.from; let rawCallResult; try { rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); } catch (err) { BaseContract._throwIfThrownErrorIsRevertError(err); throw err; } BaseContract._throwIfCallResultIsRevertError(rawCallResult); const abiEncoder = self._lookupAbiEncoder('removeAuthorizedAddress(address)'); // tslint:disable boolean-naming const result = abiEncoder.strictDecodeReturnValue(rawCallResult); // tslint:enable boolean-naming return result; }, /** * Returns the ABI encoded transaction data needed to send an Ethereum transaction calling this method. Before * sending the Ethereum tx, this encoded tx data can first be sent to a separate signing service or can be used * to create a 0x transaction (see protocol spec for more details). * @param target Address to remove authorization from. * @returns The ABI encoded transaction data as a string */ getABIEncodedTransactionData(target: string): string { assert.isString('target', target); const self = (this as any) as ERC20ProxyContract; const abiEncodedTransactionData = self._strictEncodeArguments('removeAuthorizedAddress(address)', [ target.toLowerCase(), ]); return abiEncodedTransactionData; }, /** * Decode the ABI-encoded transaction data into its input arguments * @param callData The ABI-encoded transaction data * @returns An array representing the input arguments in order. Keynames of nested structs are preserved. */ getABIDecodedTransactionData(callData: string): [string] { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('removeAuthorizedAddress(address)'); // tslint:disable boolean-naming const abiDecodedCallData = abiEncoder.strictDecode<[string]>(callData); return abiDecodedCallData; }, /** * Decode the ABI-encoded return data from a transaction * @param returnData the data returned after transaction execution * @returns An array representing the output results in order. Keynames of nested structs are preserved. */ getABIDecodedReturnData(returnData: string): void { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('removeAuthorizedAddress(address)'); // tslint:disable boolean-naming const abiDecodedReturnData = abiEncoder.strictDecodeReturnValue(returnData); return abiDecodedReturnData; }, }; public owner = { /** * Sends a read-only call to the contract method. Returns the result that would happen if one were to send an * Ethereum transaction to this method, given the current state of the blockchain. Calls do not cost gas * since they don't modify state. */ async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { assert.doesConformToSchema('callData', callData, schemas.callDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (defaultBlock !== undefined) { assert.isBlockParam('defaultBlock', defaultBlock); } const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('owner()', []); const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...callData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); callDataWithDefaults.from = callDataWithDefaults.from ? callDataWithDefaults.from.toLowerCase() : callDataWithDefaults.from; let rawCallResult; try { rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); } catch (err) { BaseContract._throwIfThrownErrorIsRevertError(err); throw err; } BaseContract._throwIfCallResultIsRevertError(rawCallResult); const abiEncoder = self._lookupAbiEncoder('owner()'); // tslint:disable boolean-naming const result = abiEncoder.strictDecodeReturnValue(rawCallResult); // tslint:enable boolean-naming return result; }, /** * Returns the ABI encoded transaction data needed to send an Ethereum transaction calling this method. Before * sending the Ethereum tx, this encoded tx data can first be sent to a separate signing service or can be used * to create a 0x transaction (see protocol spec for more details). * @returns The ABI encoded transaction data as a string */ getABIEncodedTransactionData(): string { const self = (this as any) as ERC20ProxyContract; const abiEncodedTransactionData = self._strictEncodeArguments('owner()', []); return abiEncodedTransactionData; }, /** * Decode the ABI-encoded transaction data into its input arguments * @param callData The ABI-encoded transaction data * @returns An array representing the input arguments in order. Keynames of nested structs are preserved. */ getABIDecodedTransactionData(callData: string): void { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('owner()'); // tslint:disable boolean-naming const abiDecodedCallData = abiEncoder.strictDecode(callData); return abiDecodedCallData; }, /** * Decode the ABI-encoded return data from a transaction * @param returnData the data returned after transaction execution * @returns An array representing the output results in order. Keynames of nested structs are preserved. */ getABIDecodedReturnData(returnData: string): string { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('owner()'); // tslint:disable boolean-naming const abiDecodedReturnData = abiEncoder.strictDecodeReturnValue(returnData); return abiDecodedReturnData; }, }; /** * Removes authorizion of an address. */ public removeAuthorizedAddressAtIndex = { /** * Sends an Ethereum transaction executing this method with the supplied parameters. This is a read/write * Ethereum operation and will cost gas. * @param target Address to remove authorization from. * @param index Index of target in authorities array. * @param txData Additional data for transaction * @returns The hash of the transaction */ async sendTransactionAsync( target: string, index: BigNumber, txData?: Partial | undefined, ): Promise { assert.isString('target', target); assert.isBigNumber('index', index); const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('removeAuthorizedAddressAtIndex(address,uint256)', [ target.toLowerCase(), index, ]); const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...txData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); if (txDataWithDefaults.from !== undefined) { txDataWithDefaults.from = txDataWithDefaults.from.toLowerCase(); } const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); return txHash; }, /** * Sends an Ethereum transaction and waits until the transaction has been successfully mined without reverting. * If the transaction was mined, but reverted, an error is thrown. * @param target Address to remove authorization from. * @param index Index of target in authorities array. * @param txData Additional data for transaction * @param pollingIntervalMs Interval at which to poll for success * @returns A promise that resolves when the transaction is successful */ awaitTransactionSuccessAsync( target: string, index: BigNumber, txData?: Partial, pollingIntervalMs?: number, timeoutMs?: number, ): PromiseWithTransactionHash { assert.isString('target', target); assert.isBigNumber('index', index); const self = (this as any) as ERC20ProxyContract; const txHashPromise = self.removeAuthorizedAddressAtIndex.sendTransactionAsync( target.toLowerCase(), index, txData, ); return new PromiseWithTransactionHash( txHashPromise, (async (): Promise => { // When the transaction hash resolves, wait for it to be mined. return self._web3Wrapper.awaitTransactionSuccessAsync( await txHashPromise, pollingIntervalMs, timeoutMs, ); })(), ); }, /** * Estimates the gas cost of sending an Ethereum transaction calling this method with these arguments. * @param target Address to remove authorization from. * @param index Index of target in authorities array. * @param txData Additional data for transaction * @returns The hash of the transaction */ async estimateGasAsync( target: string, index: BigNumber, txData?: Partial | undefined, ): Promise { assert.isString('target', target); assert.isBigNumber('index', index); const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('removeAuthorizedAddressAtIndex(address,uint256)', [ target.toLowerCase(), index, ]); const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...txData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); if (txDataWithDefaults.from !== undefined) { txDataWithDefaults.from = txDataWithDefaults.from.toLowerCase(); } const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); return gas; }, async validateAndSendTransactionAsync( target: string, index: BigNumber, txData?: Partial | undefined, ): Promise { await (this as any).removeAuthorizedAddressAtIndex.callAsync(target, index, txData); const txHash = await (this as any).removeAuthorizedAddressAtIndex.sendTransactionAsync( target, index, txData, ); return txHash; }, /** * Sends a read-only call to the contract method. Returns the result that would happen if one were to send an * Ethereum transaction to this method, given the current state of the blockchain. Calls do not cost gas * since they don't modify state. * @param target Address to remove authorization from. * @param index Index of target in authorities array. */ async callAsync( target: string, index: BigNumber, callData: Partial = {}, defaultBlock?: BlockParam, ): Promise { assert.isString('target', target); assert.isBigNumber('index', index); assert.doesConformToSchema('callData', callData, schemas.callDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (defaultBlock !== undefined) { assert.isBlockParam('defaultBlock', defaultBlock); } const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('removeAuthorizedAddressAtIndex(address,uint256)', [ target.toLowerCase(), index, ]); const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...callData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); callDataWithDefaults.from = callDataWithDefaults.from ? callDataWithDefaults.from.toLowerCase() : callDataWithDefaults.from; let rawCallResult; try { rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); } catch (err) { BaseContract._throwIfThrownErrorIsRevertError(err); throw err; } BaseContract._throwIfCallResultIsRevertError(rawCallResult); const abiEncoder = self._lookupAbiEncoder('removeAuthorizedAddressAtIndex(address,uint256)'); // tslint:disable boolean-naming const result = abiEncoder.strictDecodeReturnValue(rawCallResult); // tslint:enable boolean-naming return result; }, /** * Returns the ABI encoded transaction data needed to send an Ethereum transaction calling this method. Before * sending the Ethereum tx, this encoded tx data can first be sent to a separate signing service or can be used * to create a 0x transaction (see protocol spec for more details). * @param target Address to remove authorization from. * @param index Index of target in authorities array. * @returns The ABI encoded transaction data as a string */ getABIEncodedTransactionData(target: string, index: BigNumber): string { assert.isString('target', target); assert.isBigNumber('index', index); const self = (this as any) as ERC20ProxyContract; const abiEncodedTransactionData = self._strictEncodeArguments( 'removeAuthorizedAddressAtIndex(address,uint256)', [target.toLowerCase(), index], ); return abiEncodedTransactionData; }, /** * Decode the ABI-encoded transaction data into its input arguments * @param callData The ABI-encoded transaction data * @returns An array representing the input arguments in order. Keynames of nested structs are preserved. */ getABIDecodedTransactionData(callData: string): [string, BigNumber] { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('removeAuthorizedAddressAtIndex(address,uint256)'); // tslint:disable boolean-naming const abiDecodedCallData = abiEncoder.strictDecode<[string, BigNumber]>(callData); return abiDecodedCallData; }, /** * Decode the ABI-encoded return data from a transaction * @param returnData the data returned after transaction execution * @returns An array representing the output results in order. Keynames of nested structs are preserved. */ getABIDecodedReturnData(returnData: string): void { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('removeAuthorizedAddressAtIndex(address,uint256)'); // tslint:disable boolean-naming const abiDecodedReturnData = abiEncoder.strictDecodeReturnValue(returnData); return abiDecodedReturnData; }, }; /** * Gets the proxy id associated with the proxy address. */ public getProxyId = { /** * Sends a read-only call to the contract method. Returns the result that would happen if one were to send an * Ethereum transaction to this method, given the current state of the blockchain. Calls do not cost gas * since they don't modify state. * @returns Proxy id. */ async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { assert.doesConformToSchema('callData', callData, schemas.callDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (defaultBlock !== undefined) { assert.isBlockParam('defaultBlock', defaultBlock); } const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('getProxyId()', []); const encodedDataBytes = Buffer.from(encodedData.substr(2), 'hex'); let rawCallResult; try { rawCallResult = await self.evmExecAsync(encodedDataBytes); } catch (err) { BaseContract._throwIfThrownErrorIsRevertError(err); throw err; } BaseContract._throwIfCallResultIsRevertError(rawCallResult); const abiEncoder = self._lookupAbiEncoder('getProxyId()'); // tslint:disable boolean-naming const result = abiEncoder.strictDecodeReturnValue(rawCallResult); // tslint:enable boolean-naming return result; }, /** * Returns the ABI encoded transaction data needed to send an Ethereum transaction calling this method. Before * sending the Ethereum tx, this encoded tx data can first be sent to a separate signing service or can be used * to create a 0x transaction (see protocol spec for more details). * @returns The ABI encoded transaction data as a string */ getABIEncodedTransactionData(): string { const self = (this as any) as ERC20ProxyContract; const abiEncodedTransactionData = self._strictEncodeArguments('getProxyId()', []); return abiEncodedTransactionData; }, /** * Decode the ABI-encoded transaction data into its input arguments * @param callData The ABI-encoded transaction data * @returns An array representing the input arguments in order. Keynames of nested structs are preserved. */ getABIDecodedTransactionData(callData: string): void { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('getProxyId()'); // tslint:disable boolean-naming const abiDecodedCallData = abiEncoder.strictDecode(callData); return abiDecodedCallData; }, /** * Decode the ABI-encoded return data from a transaction * @param returnData the data returned after transaction execution * @returns An array representing the output results in order. Keynames of nested structs are preserved. */ getABIDecodedReturnData(returnData: string): string { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('getProxyId()'); // tslint:disable boolean-naming const abiDecodedReturnData = abiEncoder.strictDecodeReturnValue(returnData); return abiDecodedReturnData; }, }; public authorized = { /** * Sends a read-only call to the contract method. Returns the result that would happen if one were to send an * Ethereum transaction to this method, given the current state of the blockchain. Calls do not cost gas * since they don't modify state. */ async callAsync( index_0: string, callData: Partial = {}, defaultBlock?: BlockParam, ): Promise { assert.isString('index_0', index_0); assert.doesConformToSchema('callData', callData, schemas.callDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (defaultBlock !== undefined) { assert.isBlockParam('defaultBlock', defaultBlock); } const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('authorized(address)', [index_0.toLowerCase()]); const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...callData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); callDataWithDefaults.from = callDataWithDefaults.from ? callDataWithDefaults.from.toLowerCase() : callDataWithDefaults.from; let rawCallResult; try { rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); } catch (err) { BaseContract._throwIfThrownErrorIsRevertError(err); throw err; } BaseContract._throwIfCallResultIsRevertError(rawCallResult); const abiEncoder = self._lookupAbiEncoder('authorized(address)'); // tslint:disable boolean-naming const result = abiEncoder.strictDecodeReturnValue(rawCallResult); // tslint:enable boolean-naming return result; }, /** * Returns the ABI encoded transaction data needed to send an Ethereum transaction calling this method. Before * sending the Ethereum tx, this encoded tx data can first be sent to a separate signing service or can be used * to create a 0x transaction (see protocol spec for more details). * @returns The ABI encoded transaction data as a string */ getABIEncodedTransactionData(index_0: string): string { assert.isString('index_0', index_0); const self = (this as any) as ERC20ProxyContract; const abiEncodedTransactionData = self._strictEncodeArguments('authorized(address)', [ index_0.toLowerCase(), ]); return abiEncodedTransactionData; }, /** * Decode the ABI-encoded transaction data into its input arguments * @param callData The ABI-encoded transaction data * @returns An array representing the input arguments in order. Keynames of nested structs are preserved. */ getABIDecodedTransactionData(callData: string): string { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('authorized(address)'); // tslint:disable boolean-naming const abiDecodedCallData = abiEncoder.strictDecode(callData); return abiDecodedCallData; }, /** * Decode the ABI-encoded return data from a transaction * @param returnData the data returned after transaction execution * @returns An array representing the output results in order. Keynames of nested structs are preserved. */ getABIDecodedReturnData(returnData: string): boolean { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('authorized(address)'); // tslint:disable boolean-naming const abiDecodedReturnData = abiEncoder.strictDecodeReturnValue(returnData); return abiDecodedReturnData; }, }; /** * Gets all authorized addresses. */ public getAuthorizedAddresses = { /** * Sends a read-only call to the contract method. Returns the result that would happen if one were to send an * Ethereum transaction to this method, given the current state of the blockchain. Calls do not cost gas * since they don't modify state. * @returns Array of authorized addresses. */ async callAsync(callData: Partial = {}, defaultBlock?: BlockParam): Promise { assert.doesConformToSchema('callData', callData, schemas.callDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (defaultBlock !== undefined) { assert.isBlockParam('defaultBlock', defaultBlock); } const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('getAuthorizedAddresses()', []); const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...callData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); callDataWithDefaults.from = callDataWithDefaults.from ? callDataWithDefaults.from.toLowerCase() : callDataWithDefaults.from; let rawCallResult; try { rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); } catch (err) { BaseContract._throwIfThrownErrorIsRevertError(err); throw err; } BaseContract._throwIfCallResultIsRevertError(rawCallResult); const abiEncoder = self._lookupAbiEncoder('getAuthorizedAddresses()'); // tslint:disable boolean-naming const result = abiEncoder.strictDecodeReturnValue(rawCallResult); // tslint:enable boolean-naming return result; }, /** * Returns the ABI encoded transaction data needed to send an Ethereum transaction calling this method. Before * sending the Ethereum tx, this encoded tx data can first be sent to a separate signing service or can be used * to create a 0x transaction (see protocol spec for more details). * @returns The ABI encoded transaction data as a string */ getABIEncodedTransactionData(): string { const self = (this as any) as ERC20ProxyContract; const abiEncodedTransactionData = self._strictEncodeArguments('getAuthorizedAddresses()', []); return abiEncodedTransactionData; }, /** * Decode the ABI-encoded transaction data into its input arguments * @param callData The ABI-encoded transaction data * @returns An array representing the input arguments in order. Keynames of nested structs are preserved. */ getABIDecodedTransactionData(callData: string): void { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('getAuthorizedAddresses()'); // tslint:disable boolean-naming const abiDecodedCallData = abiEncoder.strictDecode(callData); return abiDecodedCallData; }, /** * Decode the ABI-encoded return data from a transaction * @param returnData the data returned after transaction execution * @returns An array representing the output results in order. Keynames of nested structs are preserved. */ getABIDecodedReturnData(returnData: string): string[] { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('getAuthorizedAddresses()'); // tslint:disable boolean-naming const abiDecodedReturnData = abiEncoder.strictDecodeReturnValue(returnData); return abiDecodedReturnData; }, }; public transferOwnership = { /** * Sends an Ethereum transaction executing this method with the supplied parameters. This is a read/write * Ethereum operation and will cost gas. * @param txData Additional data for transaction * @returns The hash of the transaction */ async sendTransactionAsync(newOwner: string, txData?: Partial | undefined): Promise { assert.isString('newOwner', newOwner); const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('transferOwnership(address)', [newOwner.toLowerCase()]); const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...txData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); if (txDataWithDefaults.from !== undefined) { txDataWithDefaults.from = txDataWithDefaults.from.toLowerCase(); } const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); return txHash; }, /** * Sends an Ethereum transaction and waits until the transaction has been successfully mined without reverting. * If the transaction was mined, but reverted, an error is thrown. * @param txData Additional data for transaction * @param pollingIntervalMs Interval at which to poll for success * @returns A promise that resolves when the transaction is successful */ awaitTransactionSuccessAsync( newOwner: string, txData?: Partial, pollingIntervalMs?: number, timeoutMs?: number, ): PromiseWithTransactionHash { assert.isString('newOwner', newOwner); const self = (this as any) as ERC20ProxyContract; const txHashPromise = self.transferOwnership.sendTransactionAsync(newOwner.toLowerCase(), txData); return new PromiseWithTransactionHash( txHashPromise, (async (): Promise => { // When the transaction hash resolves, wait for it to be mined. return self._web3Wrapper.awaitTransactionSuccessAsync( await txHashPromise, pollingIntervalMs, timeoutMs, ); })(), ); }, /** * Estimates the gas cost of sending an Ethereum transaction calling this method with these arguments. * @param txData Additional data for transaction * @returns The hash of the transaction */ async estimateGasAsync(newOwner: string, txData?: Partial | undefined): Promise { assert.isString('newOwner', newOwner); const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('transferOwnership(address)', [newOwner.toLowerCase()]); const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...txData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); if (txDataWithDefaults.from !== undefined) { txDataWithDefaults.from = txDataWithDefaults.from.toLowerCase(); } const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); return gas; }, async validateAndSendTransactionAsync(newOwner: string, txData?: Partial | undefined): Promise { await (this as any).transferOwnership.callAsync(newOwner, txData); const txHash = await (this as any).transferOwnership.sendTransactionAsync(newOwner, txData); return txHash; }, /** * Sends a read-only call to the contract method. Returns the result that would happen if one were to send an * Ethereum transaction to this method, given the current state of the blockchain. Calls do not cost gas * since they don't modify state. */ async callAsync(newOwner: string, callData: Partial = {}, defaultBlock?: BlockParam): Promise { assert.isString('newOwner', newOwner); assert.doesConformToSchema('callData', callData, schemas.callDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (defaultBlock !== undefined) { assert.isBlockParam('defaultBlock', defaultBlock); } const self = (this as any) as ERC20ProxyContract; const encodedData = self._strictEncodeArguments('transferOwnership(address)', [newOwner.toLowerCase()]); const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { to: self.address, ...callData, data: encodedData, }, self._web3Wrapper.getContractDefaults(), ); callDataWithDefaults.from = callDataWithDefaults.from ? callDataWithDefaults.from.toLowerCase() : callDataWithDefaults.from; let rawCallResult; try { rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); } catch (err) { BaseContract._throwIfThrownErrorIsRevertError(err); throw err; } BaseContract._throwIfCallResultIsRevertError(rawCallResult); const abiEncoder = self._lookupAbiEncoder('transferOwnership(address)'); // tslint:disable boolean-naming const result = abiEncoder.strictDecodeReturnValue(rawCallResult); // tslint:enable boolean-naming return result; }, /** * Returns the ABI encoded transaction data needed to send an Ethereum transaction calling this method. Before * sending the Ethereum tx, this encoded tx data can first be sent to a separate signing service or can be used * to create a 0x transaction (see protocol spec for more details). * @returns The ABI encoded transaction data as a string */ getABIEncodedTransactionData(newOwner: string): string { assert.isString('newOwner', newOwner); const self = (this as any) as ERC20ProxyContract; const abiEncodedTransactionData = self._strictEncodeArguments('transferOwnership(address)', [ newOwner.toLowerCase(), ]); return abiEncodedTransactionData; }, /** * Decode the ABI-encoded transaction data into its input arguments * @param callData The ABI-encoded transaction data * @returns An array representing the input arguments in order. Keynames of nested structs are preserved. */ getABIDecodedTransactionData(callData: string): [string] { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('transferOwnership(address)'); // tslint:disable boolean-naming const abiDecodedCallData = abiEncoder.strictDecode<[string]>(callData); return abiDecodedCallData; }, /** * Decode the ABI-encoded return data from a transaction * @param returnData the data returned after transaction execution * @returns An array representing the output results in order. Keynames of nested structs are preserved. */ getABIDecodedReturnData(returnData: string): void { const self = (this as any) as ERC20ProxyContract; const abiEncoder = self._lookupAbiEncoder('transferOwnership(address)'); // tslint:disable boolean-naming const abiDecodedReturnData = abiEncoder.strictDecodeReturnValue(returnData); return abiDecodedReturnData; }, }; private readonly _subscriptionManager: SubscriptionManager; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); if (artifact.compilerOutput === undefined) { throw new Error('Compiler output not found in the artifact file'); } const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; if (Object.keys(logDecodeDependencies) !== undefined) { for (const key of Object.keys(logDecodeDependencies)) { logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; } } return ERC20ProxyContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, schemas.numberSchema, schemas.jsNumber, ]); const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList(constructorAbi.inputs, [], BaseContract._bigNumberToString); const iface = new ethers.utils.Interface(abi); const deployInfo = iface.deployFunction; const txData = deployInfo.encode(bytecode, []); const web3Wrapper = new Web3Wrapper(provider); const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( { data: txData }, txDefaults, web3Wrapper.estimateGasAsync.bind(web3Wrapper), ); const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`ERC20Proxy successfully deployed at ${txReceipt.contractAddress}`); const contractInstance = new ERC20ProxyContract( txReceipt.contractAddress as string, provider, txDefaults, logDecodeDependencies, ); contractInstance.constructorArgs = []; return contractInstance; } /** * @returns The contract ABI */ public static ABI(): ContractAbi { const abi = [ { constant: false, inputs: [ { name: 'target', type: 'address', }, ], name: 'addAuthorizedAddress', outputs: [], payable: false, stateMutability: 'nonpayable', type: 'function', }, { constant: true, inputs: [ { name: 'index_0', type: 'uint256', }, ], name: 'authorities', outputs: [ { name: '', type: 'address', }, ], payable: false, stateMutability: 'view', type: 'function', }, { constant: false, inputs: [ { name: 'target', type: 'address', }, ], name: 'removeAuthorizedAddress', outputs: [], payable: false, stateMutability: 'nonpayable', type: 'function', }, { constant: true, inputs: [], name: 'owner', outputs: [ { name: '', type: 'address', }, ], payable: false, stateMutability: 'view', type: 'function', }, { constant: false, inputs: [ { name: 'target', type: 'address', }, { name: 'index', type: 'uint256', }, ], name: 'removeAuthorizedAddressAtIndex', outputs: [], payable: false, stateMutability: 'nonpayable', type: 'function', }, { constant: true, inputs: [], name: 'getProxyId', outputs: [ { name: '', type: 'bytes4', }, ], payable: false, stateMutability: 'pure', type: 'function', }, { constant: true, inputs: [ { name: 'index_0', type: 'address', }, ], name: 'authorized', outputs: [ { name: '', type: 'bool', }, ], payable: false, stateMutability: 'view', type: 'function', }, { constant: true, inputs: [], name: 'getAuthorizedAddresses', outputs: [ { name: '', type: 'address[]', }, ], payable: false, stateMutability: 'view', type: 'function', }, { constant: false, inputs: [ { name: 'newOwner', type: 'address', }, ], name: 'transferOwnership', outputs: [], payable: false, stateMutability: 'nonpayable', type: 'function', }, { inputs: [], outputs: [], payable: false, stateMutability: 'nonpayable', type: 'fallback', }, { anonymous: false, inputs: [ { name: 'target', type: 'address', indexed: true, }, { name: 'caller', type: 'address', indexed: true, }, ], name: 'AuthorizedAddressAdded', outputs: [], type: 'event', }, { anonymous: false, inputs: [ { name: 'target', type: 'address', indexed: true, }, { name: 'caller', type: 'address', indexed: true, }, ], name: 'AuthorizedAddressRemoved', outputs: [], type: 'event', }, ] as ContractAbi; return abi; } /** * Subscribe to an event type emitted by the ERC20Proxy contract. * @param eventName The ERC20Proxy contract event you would like to subscribe to. * @param indexFilterValues An object where the keys are indexed args returned by the event and * the value is the value you are interested in. E.g `{maker: aUserAddressHex}` * @param callback Callback that gets called when a log is added/removed * @param isVerbose Enable verbose subscription warnings (e.g recoverable network issues encountered) * @return Subscription token used later to unsubscribe */ public subscribe( eventName: ERC20ProxyEvents, indexFilterValues: IndexedFilterValues, callback: EventCallback, isVerbose: boolean = false, blockPollingIntervalMs?: number, ): string { assert.doesBelongToStringEnum('eventName', eventName, ERC20ProxyEvents); assert.doesConformToSchema('indexFilterValues', indexFilterValues, schemas.indexFilterValuesSchema); assert.isFunction('callback', callback); const subscriptionToken = this._subscriptionManager.subscribe( this.address, eventName, indexFilterValues, ERC20ProxyContract.ABI(), callback, isVerbose, blockPollingIntervalMs, ); return subscriptionToken; } /** * Cancel a subscription * @param subscriptionToken Subscription token returned by `subscribe()` */ public unsubscribe(subscriptionToken: string): void { this._subscriptionManager.unsubscribe(subscriptionToken); } /** * Cancels all existing subscriptions */ public unsubscribeAll(): void { this._subscriptionManager.unsubscribeAll(); } /** * Gets historical logs without creating a subscription * @param eventName The ERC20Proxy contract event you would like to subscribe to. * @param blockRange Block range to get logs from. * @param indexFilterValues An object where the keys are indexed args returned by the event and * the value is the value you are interested in. E.g `{_from: aUserAddressHex}` * @return Array of logs that match the parameters */ public async getLogsAsync( eventName: ERC20ProxyEvents, blockRange: BlockRange, indexFilterValues: IndexedFilterValues, ): Promise>> { assert.doesBelongToStringEnum('eventName', eventName, ERC20ProxyEvents); assert.doesConformToSchema('blockRange', blockRange, schemas.blockRangeSchema); assert.doesConformToSchema('indexFilterValues', indexFilterValues, schemas.indexFilterValuesSchema); const logs = await this._subscriptionManager.getLogsAsync( this.address, eventName, blockRange, indexFilterValues, ERC20ProxyContract.ABI(), ); return logs; } constructor( address: string, supportedProvider: SupportedProvider, txDefaults?: Partial, logDecodeDependencies?: { [contractName: string]: ContractAbi }, deployedBytecode: string | undefined = ERC20ProxyContract.deployedBytecode, ) { super( 'ERC20Proxy', ERC20ProxyContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies, deployedBytecode, ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( ERC20ProxyContract.ABI(), this._web3Wrapper, ); } } // tslint:disable:max-file-line-count // tslint:enable:no-unbound-method no-parameter-reassignment no-consecutive-blank-lines ordered-imports align // tslint:enable:trailing-comma whitespace no-trailing-whitespace