rename erc20Wrapper to tokenWrapper to be more generic in case we end up supporting another spec
This commit is contained in:
parent
1f09470838
commit
2c3b718a4f
17
src/0x.js.ts
17
src/0x.js.ts
@ -13,16 +13,16 @@ import compareVersions = require('compare-versions');
|
|||||||
import {ExchangeWrapper} from './contract_wrappers/exchange_wrapper';
|
import {ExchangeWrapper} from './contract_wrappers/exchange_wrapper';
|
||||||
import {TokenRegistryWrapper} from './contract_wrappers/token_registry_wrapper';
|
import {TokenRegistryWrapper} from './contract_wrappers/token_registry_wrapper';
|
||||||
import {ecSignatureSchema} from './schemas/ec_signature_schema';
|
import {ecSignatureSchema} from './schemas/ec_signature_schema';
|
||||||
import {ERC20Wrapper} from './contract_wrappers/erc20_wrapper';
|
import {TokenWrapper} from './contract_wrappers/token_wrapper';
|
||||||
import {SolidityTypes, ECSignature, ZeroExError} from './types';
|
import {SolidityTypes, ECSignature, ZeroExError} from './types';
|
||||||
|
|
||||||
const MAX_DIGITS_IN_UNSIGNED_256_INT = 78;
|
const MAX_DIGITS_IN_UNSIGNED_256_INT = 78;
|
||||||
|
|
||||||
export class ZeroEx {
|
export class ZeroEx {
|
||||||
public web3Wrapper: Web3Wrapper;
|
|
||||||
public exchange: ExchangeWrapper;
|
public exchange: ExchangeWrapper;
|
||||||
public tokenRegistry: TokenRegistryWrapper;
|
public tokenRegistry: TokenRegistryWrapper;
|
||||||
public erc20: ERC20Wrapper;
|
public erc20: TokenWrapper;
|
||||||
|
private web3Wrapper: Web3Wrapper;
|
||||||
/**
|
/**
|
||||||
* Computes the orderHash given the order parameters and returns it as a hex encoded string.
|
* Computes the orderHash given the order parameters and returns it as a hex encoded string.
|
||||||
*/
|
*/
|
||||||
@ -137,7 +137,16 @@ export class ZeroEx {
|
|||||||
this.web3Wrapper = new Web3Wrapper(web3);
|
this.web3Wrapper = new Web3Wrapper(web3);
|
||||||
this.exchange = new ExchangeWrapper(this.web3Wrapper);
|
this.exchange = new ExchangeWrapper(this.web3Wrapper);
|
||||||
this.tokenRegistry = new TokenRegistryWrapper(this.web3Wrapper);
|
this.tokenRegistry = new TokenRegistryWrapper(this.web3Wrapper);
|
||||||
this.erc20 = new ERC20Wrapper(this.web3Wrapper);
|
this.erc20 = new TokenWrapper(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.invalidateContractInstances();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Signs an orderHash and returns it's elliptic curve signature
|
* Signs an orderHash and returns it's elliptic curve signature
|
||||||
|
@ -6,9 +6,14 @@ import {ContractWrapper} from './contract_wrapper';
|
|||||||
import * as TokenArtifacts from '../artifacts/Token.json';
|
import * as TokenArtifacts from '../artifacts/Token.json';
|
||||||
import {ERC20Contract} from '../types';
|
import {ERC20Contract} from '../types';
|
||||||
|
|
||||||
export class ERC20Wrapper extends ContractWrapper {
|
export class TokenWrapper extends ContractWrapper {
|
||||||
|
private tokenContractsByAddress: {[address: string]: ERC20Contract};
|
||||||
constructor(web3Wrapper: Web3Wrapper) {
|
constructor(web3Wrapper: Web3Wrapper) {
|
||||||
super(web3Wrapper);
|
super(web3Wrapper);
|
||||||
|
this.tokenContractsByAddress = {};
|
||||||
|
}
|
||||||
|
public invalidateContractInstances() {
|
||||||
|
this.tokenContractsByAddress = {};
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Returns an owner's ERC20 token balance
|
* Returns an owner's ERC20 token balance
|
||||||
@ -17,12 +22,21 @@ export class ERC20Wrapper extends ContractWrapper {
|
|||||||
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
||||||
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
|
|
||||||
const contractInstance = await this.instantiateContractIfExistsAsync((TokenArtifacts as any), tokenAddress);
|
const tokenContract = await this.getTokenContractAsync(tokenAddress);
|
||||||
const tokenContract = contractInstance as ERC20Contract;
|
|
||||||
let balance = await tokenContract.balanceOf.call(ownerAddress);
|
let balance = await tokenContract.balanceOf.call(ownerAddress);
|
||||||
// The BigNumber instance returned by Web3 is of a much older version then our own, we therefore
|
// 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.
|
// should always re-instantiate the returned BigNumber after retrieval.
|
||||||
balance = _.isUndefined(balance) ? new BigNumber(0) : new BigNumber(balance);
|
balance = _.isUndefined(balance) ? new BigNumber(0) : new BigNumber(balance);
|
||||||
return balance;
|
return balance;
|
||||||
}
|
}
|
||||||
|
private async getTokenContractAsync(tokenAddress: string): Promise<ERC20Contract> {
|
||||||
|
let tokenContract = this.tokenContractsByAddress[tokenAddress];
|
||||||
|
if (!_.isUndefined(tokenContract)) {
|
||||||
|
return tokenContract;
|
||||||
|
}
|
||||||
|
const contractInstance = await this.instantiateContractIfExistsAsync((TokenArtifacts as any), tokenAddress);
|
||||||
|
tokenContract = contractInstance as ERC20Contract;
|
||||||
|
this.tokenContractsByAddress[tokenAddress] = tokenContract;
|
||||||
|
return tokenContract;
|
||||||
|
}
|
||||||
}
|
}
|
@ -13,7 +13,7 @@ const expect = chai.expect;
|
|||||||
chai.use(chaiAsPromised);
|
chai.use(chaiAsPromised);
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
describe('ERC20Wrapper', () => {
|
describe('TokenWrapper', () => {
|
||||||
let web3: Web3;
|
let web3: Web3;
|
||||||
let zeroEx: ZeroEx;
|
let zeroEx: ZeroEx;
|
||||||
let userAddresses: string[];
|
let userAddresses: string[];
|
Loading…
x
Reference in New Issue
Block a user