diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/0x.js.ts | 13 | ||||
-rw-r--r-- | src/contract_wrappers/erc20_wrapper.ts | 28 | ||||
-rw-r--r-- | src/types.ts | 6 |
3 files changed, 38 insertions, 9 deletions
diff --git a/src/0x.js.ts b/src/0x.js.ts index 69c0cc567..7932559fb 100644 --- a/src/0x.js.ts +++ b/src/0x.js.ts @@ -13,14 +13,16 @@ import compareVersions = require('compare-versions'); import {ExchangeWrapper} from './contract_wrappers/exchange_wrapper'; import {TokenRegistryWrapper} from './contract_wrappers/token_registry_wrapper'; import {ecSignatureSchema} from './schemas/ec_signature_schema'; +import {ERC20Wrapper} from './contract_wrappers/erc20_wrapper'; import {SolidityTypes, ECSignature, ZeroExError} from './types'; const MAX_DIGITS_IN_UNSIGNED_256_INT = 78; export class ZeroEx { + public web3Wrapper: Web3Wrapper; public exchange: ExchangeWrapper; public tokenRegistry: TokenRegistryWrapper; - private web3Wrapper: Web3Wrapper; + public erc20: ERC20Wrapper; /** * Computes the orderHash given the order parameters and returns it as a hex encoded string. */ @@ -135,14 +137,7 @@ export class ZeroEx { this.web3Wrapper = new Web3Wrapper(web3); this.exchange = new ExchangeWrapper(this.web3Wrapper); this.tokenRegistry = new TokenRegistryWrapper(this.web3Wrapper); - } - /** - * Sets a new provider for the web3 instance used by 0x.js - */ - public setProvider(provider: Web3.Provider) { - this.web3Wrapper.setProvider(provider); - this.exchange.invalidateContractInstance(); - this.tokenRegistry.invalidateContractInstance(); + this.erc20 = new ERC20Wrapper(this.web3Wrapper); } /** * Signs an orderHash and returns it's elliptic curve signature diff --git a/src/contract_wrappers/erc20_wrapper.ts b/src/contract_wrappers/erc20_wrapper.ts new file mode 100644 index 000000000..60b1887db --- /dev/null +++ b/src/contract_wrappers/erc20_wrapper.ts @@ -0,0 +1,28 @@ +import * as _ from 'lodash'; +import * as BigNumber from 'bignumber.js'; +import {Web3Wrapper} from '../web3_wrapper'; +import {assert} from '../utils/assert'; +import {ContractWrapper} from './contract_wrapper'; +import * as TokenArtifacts from '../artifacts/Token.json'; +import {ERC20Contract} from '../types'; + +export class ERC20Wrapper extends ContractWrapper { + constructor(web3Wrapper: Web3Wrapper) { + super(web3Wrapper); + } + /** + * Returns an owner's ERC20 token balance + */ + public async getBalanceAsync(tokenAddress: string, ownerAddress: string): Promise<BigNumber.BigNumber> { + assert.isETHAddressHex('ownerAddress', ownerAddress); + assert.isETHAddressHex('tokenAddress', tokenAddress); + + const contractInstance = await this.instantiateContractIfExistsAsync((TokenArtifacts as any), tokenAddress); + const tokenContract = contractInstance as ERC20Contract; + let balance = await tokenContract.balanceOf.call(ownerAddress); + // The BigNumber instance returned by Web3 is of a much older version then our own, we therefore + // should always re-instantiate the returned BigNumber after retrieval. + balance = _.isUndefined(balance) ? new BigNumber(0) : new BigNumber(balance); + return balance; + } +} diff --git a/src/types.ts b/src/types.ts index 6fce95706..9c82c1fa6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -30,6 +30,12 @@ export interface ExchangeContract { isValidSignature: any; } +export interface ERC20Contract { + balanceOf: { + call: (address: string) => Promise<BigNumber.BigNumber>; + }; +} + export interface TokenRegistryContract { getTokenMetaData: { call: (address: string) => Promise<TokenMetadata>; |