diff options
author | Leonid <logvinov.leon@gmail.com> | 2017-09-06 16:35:19 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-06 16:35:19 +0800 |
commit | 35c133caeda613121d7d90f3f1347ebdc8087d66 (patch) | |
tree | 6156865472010078a9f27b905bcaec7782f6521c /src/web3_wrapper.ts | |
parent | 18a52a1ea758ee5640680f1097eba1ce9a9e81fc (diff) | |
parent | f0a5ad2d2063fe8ba4682147ec2f73e2763b0275 (diff) | |
download | dexon-sol-tools-35c133caeda613121d7d90f3f1347ebdc8087d66.tar dexon-sol-tools-35c133caeda613121d7d90f3f1347ebdc8087d66.tar.gz dexon-sol-tools-35c133caeda613121d7d90f3f1347ebdc8087d66.tar.bz2 dexon-sol-tools-35c133caeda613121d7d90f3f1347ebdc8087d66.tar.lz dexon-sol-tools-35c133caeda613121d7d90f3f1347ebdc8087d66.tar.xz dexon-sol-tools-35c133caeda613121d7d90f3f1347ebdc8087d66.tar.zst dexon-sol-tools-35c133caeda613121d7d90f3f1347ebdc8087d66.zip |
Merge branch 'development' into fix/signature-verification
Diffstat (limited to 'src/web3_wrapper.ts')
-rw-r--r-- | src/web3_wrapper.ts | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/web3_wrapper.ts b/src/web3_wrapper.ts index 61bac45c9..7b9a28a7d 100644 --- a/src/web3_wrapper.ts +++ b/src/web3_wrapper.ts @@ -2,13 +2,17 @@ import * as _ from 'lodash'; import * as Web3 from 'web3'; import * as BigNumber from 'bignumber.js'; import promisify = require('es6-promisify'); +import {ZeroExError} from './types'; +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; @@ -25,6 +29,10 @@ export class Web3Wrapper { const nodeVersion = await promisify(this.web3.version.getNode)(); return nodeVersion; } + public async getTransactionReceiptAsync(txHash: string): Promise<Web3.TransactionReceipt> { + const transactionReceipt = await promisify(this.web3.eth.getTransactionReceipt)(txHash); + return transactionReceipt; + } public getCurrentProvider(): Web3.Provider { return this.web3.currentProvider; } @@ -41,6 +49,30 @@ export class Web3Wrapper { return undefined; } } + public async getContractInstanceFromArtifactAsync<A extends Web3.ContractInstance>(artifact: Artifact, + address?: string): Promise<A> { + let contractAddress: string; + if (_.isUndefined(address)) { + const networkIdIfExists = await this.getNetworkIdIfExistsAsync(); + if (_.isUndefined(networkIdIfExists)) { + throw new Error(ZeroExError.NoNetworkId); + } + if (_.isUndefined(artifact.networks[networkIdIfExists])) { + throw new Error(ZeroExError.ContractNotDeployedOnNetwork); + } + contractAddress = artifact.networks[networkIdIfExists].address.toLowerCase(); + } else { + contractAddress = address; + } + const doesContractExist = await this.doesContractExistAtAddressAsync(contractAddress); + if (!doesContractExist) { + throw new Error(ZeroExError.ContractDoesNotExist); + } + const contractInstance = this.getContractInstance<A>( + artifact.abi, contractAddress, + ); + return contractInstance; + } public toWei(ethAmount: BigNumber.BigNumber): BigNumber.BigNumber { const balanceWei = this.web3.toWei(ethAmount, 'ether'); return balanceWei; @@ -68,6 +100,11 @@ export class Web3Wrapper { const addresses: string[] = await promisify(this.web3.eth.getAccounts)(); return addresses; } + 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, this.defaults) as any as A; + return contractInstance; + } private async getNetworkAsync(): Promise<number> { const networkId = await promisify(this.web3.version.getNetwork)(); return networkId; |