From 9818eb2835a8c06006514c44340c95c709f4aa9f Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Mon, 4 Sep 2017 14:45:01 +0200 Subject: Use custom contract abstraction --- src/contract.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/contract.ts (limited to 'src') diff --git a/src/contract.ts b/src/contract.ts new file mode 100644 index 000000000..b4a54ca09 --- /dev/null +++ b/src/contract.ts @@ -0,0 +1,28 @@ +import * as Web3 from 'web3'; +import * as _ from 'lodash'; +import promisify = require('es6-promisify'); + +export class Contract implements Web3.ContractInstance { + public address: string; + public abi: Web3.ContractAbi; + private contract: A; + [name: string]: any; + constructor(web3ContractInstance: A) { + this.contract = web3ContractInstance; + this.address = web3ContractInstance.address; + this.abi = web3ContractInstance.abi; + const functionsAbi = _.filter(this.abi, abiPart => abiPart.type === 'function'); + _.forEach(functionsAbi, (functionAbi: Web3.MethodAbi) => { + const cbStyleFunction = web3ContractInstance[functionAbi.name]; + this[functionAbi.name] = promisify(cbStyleFunction, web3ContractInstance); + if (functionAbi.constant) { + const cbStyleCallFunction = web3ContractInstance[functionAbi.name].call; + this[functionAbi.name].call = promisify(cbStyleCallFunction, web3ContractInstance); + } else { + const cbStyleEstimateGasFunction = web3ContractInstance[functionAbi.name].estimateGas; + this[functionAbi.name].estimateGas = + promisify(cbStyleEstimateGasFunction, web3ContractInstance); + } + }); + } +} -- cgit v1.2.3