aboutsummaryrefslogtreecommitdiffstats
path: root/packages/testnet-faucets/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/testnet-faucets/src')
-rw-r--r--packages/testnet-faucets/src/ts/dispense_asset_tasks.ts26
-rw-r--r--packages/testnet-faucets/src/ts/handler.ts98
-rw-r--r--packages/testnet-faucets/src/ts/rpc_urls.ts1
-rw-r--r--packages/testnet-faucets/src/ts/tokens.ts41
4 files changed, 116 insertions, 50 deletions
diff --git a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts
index 3af5ca747..5c2002600 100644
--- a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts
+++ b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts
@@ -1,13 +1,14 @@
-import { ZeroEx } from '0x.js';
+import { ERC20TokenWrapper } from '0x.js';
import { BigNumber, logUtils } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import { configs } from './configs';
+import { TOKENS_BY_NETWORK } from './tokens';
const DISPENSE_AMOUNT_ETHER = 0.1;
-const DISPENSE_AMOUNT_TOKEN = 0.1;
-const DISPENSE_MAX_AMOUNT_TOKEN = 2;
+const DISPENSE_AMOUNT_TOKEN = 1;
+const DISPENSE_MAX_AMOUNT_TOKEN = 100;
const DISPENSE_MAX_AMOUNT_ETHER = 2;
type AsyncTask = () => Promise<void>;
@@ -32,17 +33,22 @@ export const dispenseAssetTasks = {
logUtils.log(`Sent ${DISPENSE_AMOUNT_ETHER} ETH to ${recipientAddress} tx: ${txHash}`);
};
},
- dispenseTokenTask(recipientAddress: string, tokenSymbol: string, zeroEx: ZeroEx): AsyncTask {
+ dispenseTokenTask(
+ recipientAddress: string,
+ tokenSymbol: string,
+ networkId: number,
+ erc20TokenWrapper: ERC20TokenWrapper,
+ ): AsyncTask {
return async () => {
logUtils.log(`Processing ${tokenSymbol} ${recipientAddress}`);
const amountToDispense = new BigNumber(DISPENSE_AMOUNT_TOKEN);
- const token = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(tokenSymbol);
+ const token = TOKENS_BY_NETWORK[networkId][tokenSymbol];
if (_.isUndefined(token)) {
throw new Error(`Unsupported asset type: ${tokenSymbol}`);
}
- const baseUnitAmount = ZeroEx.toBaseUnitAmount(amountToDispense, token.decimals);
- const userBalanceBaseUnits = await zeroEx.token.getBalanceAsync(token.address, recipientAddress);
- const maxAmountBaseUnits = ZeroEx.toBaseUnitAmount(
+ const baseUnitAmount = Web3Wrapper.toBaseUnitAmount(amountToDispense, token.decimals);
+ const userBalanceBaseUnits = await erc20TokenWrapper.getBalanceAsync(token.address, recipientAddress);
+ const maxAmountBaseUnits = Web3Wrapper.toBaseUnitAmount(
new BigNumber(DISPENSE_MAX_AMOUNT_TOKEN),
token.decimals,
);
@@ -52,13 +58,13 @@ export const dispenseAssetTasks = {
);
return;
}
- const txHash = await zeroEx.token.transferAsync(
+ const txHash = await erc20TokenWrapper.transferAsync(
token.address,
configs.DISPENSER_ADDRESS,
recipientAddress,
baseUnitAmount,
);
- logUtils.log(`Sent ${amountToDispense} ZRX to ${recipientAddress} tx: ${txHash}`);
+ logUtils.log(`Sent ${amountToDispense} ${tokenSymbol} to ${recipientAddress} tx: ${txHash}`);
};
},
};
diff --git a/packages/testnet-faucets/src/ts/handler.ts b/packages/testnet-faucets/src/ts/handler.ts
index 3749bc70b..4c4e439df 100644
--- a/packages/testnet-faucets/src/ts/handler.ts
+++ b/packages/testnet-faucets/src/ts/handler.ts
@@ -1,27 +1,35 @@
-import { Order, ZeroEx } from '0x.js';
-import { BigNumber, logUtils } from '@0xproject/utils';
-import { Web3Wrapper } from '@0xproject/web3-wrapper';
-import { Provider } from 'ethereum-types';
-import * as express from 'express';
-import * as _ from 'lodash';
-
import {
- NonceTrackerSubprovider,
- PrivateKeyWalletSubprovider,
+ assetDataUtils,
+ BigNumber,
+ ContractWrappers,
+ generatePseudoRandomSalt,
+ Order,
+ orderHashUtils,
+ Provider,
RPCSubprovider,
+ signatureUtils,
+ SignedOrder,
+ SignerType,
Web3ProviderEngine,
-} from '@0xproject/subproviders';
+} from '0x.js';
+import { NonceTrackerSubprovider, PrivateKeyWalletSubprovider } from '@0xproject/subproviders';
+import { logUtils } from '@0xproject/utils';
+import { Web3Wrapper } from '@0xproject/web3-wrapper';
+import * as express from 'express';
+import * as _ from 'lodash';
import { configs } from './configs';
import { constants } from './constants';
import { DispatchQueue } from './dispatch_queue';
import { dispenseAssetTasks } from './dispense_asset_tasks';
import { rpcUrls } from './rpc_urls';
+import { TOKENS_BY_NETWORK } from './tokens';
interface NetworkConfig {
dispatchQueue: DispatchQueue;
web3Wrapper: Web3Wrapper;
- zeroEx: ZeroEx;
+ contractWrappers: ContractWrappers;
+ networkId: number;
}
interface ItemByNetworkId<T> {
@@ -35,6 +43,9 @@ enum RequestedAssetType {
}
const FIVE_DAYS_IN_MS = 4.32e8; // TODO: make this configurable
+const NULL_ADDRESS = '0x0000000000000000000000000000000000000000';
+const ZERO = new BigNumber(0);
+const ASSET_AMOUNT = new BigNumber(0.1);
export class Handler {
private readonly _networkConfigByNetworkId: ItemByNetworkId<NetworkConfig> = {};
@@ -50,18 +61,18 @@ export class Handler {
return engine;
}
constructor() {
- _.forIn(rpcUrls, (rpcUrl: string, networkId: string) => {
+ _.forIn(rpcUrls, (rpcUrl: string, networkIdString: string) => {
const providerObj = Handler._createProviderEngine(rpcUrl);
const web3Wrapper = new Web3Wrapper(providerObj);
- const zeroExConfig = {
- networkId: +networkId,
- };
- const zeroEx = new ZeroEx(providerObj, zeroExConfig);
+ // tslint:disable-next-line:custom-no-magic-numbers
+ const networkId = parseInt(networkIdString, 10);
+ const contractWrappers = new ContractWrappers(providerObj, { networkId });
const dispatchQueue = new DispatchQueue();
this._networkConfigByNetworkId[networkId] = {
dispatchQueue,
web3Wrapper,
- zeroEx,
+ contractWrappers,
+ networkId,
};
});
}
@@ -107,7 +118,8 @@ export class Handler {
dispenserTask = dispenseAssetTasks.dispenseTokenTask(
recipient,
requestedAssetType,
- networkConfig.zeroEx,
+ networkConfig.networkId,
+ networkConfig.contractWrappers.erc20Token,
);
break;
default:
@@ -131,39 +143,47 @@ export class Handler {
res.status(constants.BAD_REQUEST_STATUS).send('UNSUPPORTED_NETWORK_ID');
return;
}
- const zeroEx = networkConfig.zeroEx;
res.setHeader('Content-Type', 'application/json');
- const makerToken = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(requestedAssetType);
+ const makerToken = TOKENS_BY_NETWORK[networkConfig.networkId][requestedAssetType];
if (_.isUndefined(makerToken)) {
throw new Error(`Unsupported asset type: ${requestedAssetType}`);
}
const takerTokenSymbol =
requestedAssetType === RequestedAssetType.WETH ? RequestedAssetType.ZRX : RequestedAssetType.WETH;
- const takerToken = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(takerTokenSymbol);
+ const takerToken = TOKENS_BY_NETWORK[networkConfig.networkId][takerTokenSymbol];
if (_.isUndefined(takerToken)) {
throw new Error(`Unsupported asset type: ${requestedAssetType}`);
}
- const makerTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(0.1), makerToken.decimals);
- const takerTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(0.1), takerToken.decimals);
+ const makerAssetAmount = Web3Wrapper.toBaseUnitAmount(ASSET_AMOUNT, makerToken.decimals);
+ const takerAssetAmount = Web3Wrapper.toBaseUnitAmount(ASSET_AMOUNT, takerToken.decimals);
+ const makerAssetData = assetDataUtils.encodeERC20AssetData(makerToken.address);
+ const takerAssetData = assetDataUtils.encodeERC20AssetData(takerToken.address);
const order: Order = {
- maker: configs.DISPENSER_ADDRESS,
- taker: req.params.recipient,
- makerFee: new BigNumber(0),
- takerFee: new BigNumber(0),
- makerTokenAmount,
- takerTokenAmount,
- makerTokenAddress: makerToken.address,
- takerTokenAddress: takerToken.address,
- salt: ZeroEx.generatePseudoRandomSalt(),
- exchangeContractAddress: zeroEx.exchange.getContractAddress(),
- feeRecipient: ZeroEx.NULL_ADDRESS,
- expirationUnixTimestampSec: new BigNumber(Date.now() + FIVE_DAYS_IN_MS),
+ makerAddress: configs.DISPENSER_ADDRESS,
+ takerAddress: req.params.recipient as string,
+ makerFee: ZERO,
+ takerFee: ZERO,
+ makerAssetAmount,
+ takerAssetAmount,
+ makerAssetData,
+ takerAssetData,
+ salt: generatePseudoRandomSalt(),
+ exchangeAddress: networkConfig.contractWrappers.exchange.getContractAddress(),
+ feeRecipientAddress: NULL_ADDRESS,
+ senderAddress: NULL_ADDRESS,
+ // tslint:disable-next-line:custom-no-magic-numbers
+ expirationTimeSeconds: new BigNumber(Date.now() + FIVE_DAYS_IN_MS).div(1000),
};
- const orderHash = ZeroEx.getOrderHashHex(order);
- const signature = await zeroEx.signOrderHashAsync(orderHash, configs.DISPENSER_ADDRESS, false);
- const signedOrder = {
+ const orderHash = orderHashUtils.getOrderHashHex(order);
+ const signature = await signatureUtils.ecSignOrderHashAsync(
+ networkConfig.web3Wrapper.getProvider(),
+ orderHash,
+ configs.DISPENSER_ADDRESS,
+ SignerType.Default,
+ );
+ const signedOrder: SignedOrder = {
...order,
- ecSignature: signature,
+ signature,
};
const payload = JSON.stringify(signedOrder);
logUtils.log(`Dispensed signed order: ${payload}`);
diff --git a/packages/testnet-faucets/src/ts/rpc_urls.ts b/packages/testnet-faucets/src/ts/rpc_urls.ts
index f8a57e171..d31908257 100644
--- a/packages/testnet-faucets/src/ts/rpc_urls.ts
+++ b/packages/testnet-faucets/src/ts/rpc_urls.ts
@@ -2,7 +2,6 @@ import { configs } from './configs';
const productionRpcUrls = {
'3': `https://ropsten.infura.io/${configs.INFURA_API_KEY}`,
- '4': `https://rinkeby.infura.io/${configs.INFURA_API_KEY}`,
'42': `https://kovan.infura.io/${configs.INFURA_API_KEY}`,
};
diff --git a/packages/testnet-faucets/src/ts/tokens.ts b/packages/testnet-faucets/src/ts/tokens.ts
new file mode 100644
index 000000000..70e964b6f
--- /dev/null
+++ b/packages/testnet-faucets/src/ts/tokens.ts
@@ -0,0 +1,41 @@
+export const tokens = {
+ ZRX: {
+ name: '0x Protocol Token',
+ decimals: 18,
+ symbol: 'ZRX',
+ },
+ WETH: {
+ name: 'Wrapped ETH',
+ decimals: 18,
+ symbol: 'WETH',
+ },
+};
+export const ETHER_TOKEN = {
+ name: 'Ether',
+ decimals: 18,
+ symbol: 'ETH',
+};
+export const TOKENS_BY_NETWORK: {
+ [networkId: number]: { [tokenSymbol: string]: { address: string; decimals: number; symbol: string; name: string } };
+} = {
+ 3: {
+ ZRX: {
+ ...tokens.ZRX,
+ address: '0xff67881f8d12f372d91baae9752eb3631ff0ed00',
+ },
+ WETH: {
+ ...tokens.WETH,
+ address: '0xc778417e063141139fce010982780140aa0cd5ab',
+ },
+ },
+ 42: {
+ ZRX: {
+ ...tokens.ZRX,
+ address: '0x2002d3812f58e35f0ea1ffbf80a75a38c32175fa',
+ },
+ WETH: {
+ ...tokens.WETH,
+ address: '0xd0a1e359811322d97991e03f863a0c30c2cf029c',
+ },
+ },
+};