Implement ERC20Wrapper and it's first method getBalanceAsync
This commit is contained in:
parent
f3d5690d56
commit
6686443317
@ -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
|
||||
|
28
src/contract_wrappers/erc20_wrapper.ts
Normal file
28
src/contract_wrappers/erc20_wrapper.ts
Normal file
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user