public {{this.name}} = { async sendTransactionAsync( {{> typed_params inputs=inputs}} {{#this.payable}} txData: TxDataPayable = {}, {{/this.payable}} {{^this.payable}} txData: TxData = {}, {{/this.payable}} ): Promise { const self = this as {{contractName}}Contract; const inputAbi = _.find(this.abi, {name: '{{this.name}}'}).inputs; [{{> params inputs=inputs}}] = BaseContract._transformABIData(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(this)); const encodedData = this._ethersInterface.functions.{{this.name}}( {{> params inputs=inputs}} ).data const txDataWithDefaults = await self._applyDefaultsToTxDataAsync( { ...txData, data: encodedData, }, self.{{this.name}}.estimateGasAsync.bind( self, {{> params inputs=inputs}} ), ); const txHash = await this._web3Wrapper.sendTransactionAsync(txDataWithDefaults); return txHash; }, async estimateGasAsync( {{> typed_params inputs=inputs}} txData: TxData = {}, ): Promise { const self = this as {{contractName}}Contract; const encodedData = this._ethersInterface.functions.{{this.name}}( {{> params inputs=inputs}} ).data const txDataWithDefaults = await self._applyDefaultsToTxDataAsync( { ...txData, data: encodedData, } ); const gas = await this._web3Wrapper.estimateGasAsync(txDataWithDefaults); return gas; }, getABIEncodedTransactionData( {{> typed_params inputs=inputs}} txData: TxData = {}, ): string { const self = this as {{contractName}}Contract; const abiEncodedTransactionData = this._ethersInterface.functions.{{this.name}}( {{> params inputs=inputs}} ).data return abiEncodedTransactionData; }, async callAsync( {{> typed_params inputs=inputs}} {{#this.payable}} txData: TxDataPayable = {}, {{/this.payable}} {{^this.payable}} txData: TxData = {}, {{/this.payable}} ): Promise<{{> return_type outputs=outputs}}> { const self = this as {{contractName}}Contract; const inputAbi = _.find(this.abi, {name: '{{this.name}}'}).inputs; [{{> params inputs=inputs}}] = BaseContract._transformABIData(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(this)); const callDescription = self._ethersInterface.functions.{{this.name}}( {{> params inputs=inputs}} ) as ethersContracts.CallDescription; const callData = await self._applyDefaultsToTxDataAsync( { data: callDescription.data, } ) const rawCallResult = await self._web3Wrapper.callAsync(callData); let resultArray = callDescription.parse(rawCallResult); const outputAbi = _.find(this.abi, {name: '{{this.name}}'}).outputs; resultArray = BaseContract._transformABIData(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); return resultArray{{#singleReturnValue}}[0]{{/singleReturnValue}}; }, };