diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/0x.js.ts | 3 | ||||
-rw-r--r-- | src/contract_wrappers/erc20_wrapper.ts | 28 | ||||
-rw-r--r-- | src/types.ts | 6 |
3 files changed, 37 insertions, 0 deletions
diff --git a/src/0x.js.ts b/src/0x.js.ts index 7e48bc0a5..7932559fb 100644 --- a/src/0x.js.ts +++ b/src/0x.js.ts @@ -13,6 +13,7 @@ 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; @@ -21,6 +22,7 @@ export class ZeroEx { public web3Wrapper: Web3Wrapper; public exchange: ExchangeWrapper; public tokenRegistry: TokenRegistryWrapper; + public erc20: ERC20Wrapper; /** * Computes the orderHash given the order parameters and returns it as a hex encoded string. */ @@ -135,6 +137,7 @@ export class ZeroEx { this.web3Wrapper = new Web3Wrapper(web3); this.exchange = new ExchangeWrapper(this.web3Wrapper); this.tokenRegistry = new TokenRegistryWrapper(this.web3Wrapper); + 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 273389480..f5b0f3e7c 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: any; getTokenAddresses: any; |