Implement zeroEx.token.getProxyAllowanceAsync
This commit is contained in:
parent
86cdb6cb83
commit
b5e496ea0f
@ -4,7 +4,8 @@ import {Web3Wrapper} from '../web3_wrapper';
|
|||||||
import {assert} from '../utils/assert';
|
import {assert} from '../utils/assert';
|
||||||
import {ContractWrapper} from './contract_wrapper';
|
import {ContractWrapper} from './contract_wrapper';
|
||||||
import * as TokenArtifacts from '../artifacts/Token.json';
|
import * as TokenArtifacts from '../artifacts/Token.json';
|
||||||
import {TokenContract} from '../types';
|
import * as ProxyArtifacts from '../artifacts/Proxy.json';
|
||||||
|
import {TokenContract, InternalError} from '../types';
|
||||||
|
|
||||||
export class TokenWrapper extends ContractWrapper {
|
export class TokenWrapper extends ContractWrapper {
|
||||||
private tokenContractsByAddress: {[address: string]: TokenContract};
|
private tokenContractsByAddress: {[address: string]: TokenContract};
|
||||||
@ -29,6 +30,19 @@ export class TokenWrapper extends ContractWrapper {
|
|||||||
balance = _.isUndefined(balance) ? new BigNumber(0) : new BigNumber(balance);
|
balance = _.isUndefined(balance) ? new BigNumber(0) : new BigNumber(balance);
|
||||||
return balance;
|
return balance;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Retrieves the allowance of an ERC20 token set to the 0x proxy contract by an owner address
|
||||||
|
*/
|
||||||
|
public async getProxyAllowanceAsync(tokenAddress: string, ownerAddress: string) {
|
||||||
|
assert.isETHAddressHex('ownerAddress', ownerAddress);
|
||||||
|
assert.isETHAddressHex('tokenAddress', tokenAddress);
|
||||||
|
|
||||||
|
const tokenContract = await this.getTokenContractAsync(tokenAddress);
|
||||||
|
const proxyAddress = await this.getProxyAddressAsync();
|
||||||
|
let allowance = await tokenContract.allowance.call(ownerAddress, proxyAddress);
|
||||||
|
allowance = _.isUndefined(allowance) ? new BigNumber(0) : new BigNumber(allowance);
|
||||||
|
return allowance;
|
||||||
|
}
|
||||||
private async getTokenContractAsync(tokenAddress: string): Promise<TokenContract> {
|
private async getTokenContractAsync(tokenAddress: string): Promise<TokenContract> {
|
||||||
let tokenContract = this.tokenContractsByAddress[tokenAddress];
|
let tokenContract = this.tokenContractsByAddress[tokenAddress];
|
||||||
if (!_.isUndefined(tokenContract)) {
|
if (!_.isUndefined(tokenContract)) {
|
||||||
@ -39,4 +53,15 @@ export class TokenWrapper extends ContractWrapper {
|
|||||||
this.tokenContractsByAddress[tokenAddress] = tokenContract;
|
this.tokenContractsByAddress[tokenAddress] = tokenContract;
|
||||||
return tokenContract;
|
return tokenContract;
|
||||||
}
|
}
|
||||||
|
private async getProxyAddressAsync() {
|
||||||
|
const networkIdIfExists = await this.web3Wrapper.getNetworkIdIfExistsAsync();
|
||||||
|
const proxyNetworkConfigsIfExists = _.isUndefined(networkIdIfExists) ?
|
||||||
|
undefined :
|
||||||
|
(ProxyArtifacts as any).networks[networkIdIfExists];
|
||||||
|
if (_.isUndefined(proxyNetworkConfigsIfExists)) {
|
||||||
|
throw new Error(InternalError.PROXY_ADDRESS_NOT_FOUND);
|
||||||
|
}
|
||||||
|
const proxyAddress = proxyNetworkConfigsIfExists.address;
|
||||||
|
return proxyAddress;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,11 @@ export const ZeroExError = strEnum([
|
|||||||
]);
|
]);
|
||||||
export type ZeroExError = keyof typeof ZeroExError;
|
export type ZeroExError = keyof typeof ZeroExError;
|
||||||
|
|
||||||
|
export const InternalError = strEnum([
|
||||||
|
'PROXY_ADDRESS_NOT_FOUND',
|
||||||
|
]);
|
||||||
|
export type InternalError = keyof typeof InternalError;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Elliptic Curve signature
|
* Elliptic Curve signature
|
||||||
*/
|
*/
|
||||||
@ -34,6 +39,9 @@ export interface TokenContract {
|
|||||||
balanceOf: {
|
balanceOf: {
|
||||||
call: (address: string) => Promise<BigNumber.BigNumber>;
|
call: (address: string) => Promise<BigNumber.BigNumber>;
|
||||||
};
|
};
|
||||||
|
allowance: {
|
||||||
|
call: (ownerAddress: string, allowedAddress: string) => Promise<BigNumber.BigNumber>;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TokenRegistryContract {
|
export interface TokenRegistryContract {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user