diff options
author | Jacob Evans <jacob@dekz.net> | 2018-09-05 22:13:21 +0800 |
---|---|---|
committer | Jacob Evans <jacob@dekz.net> | 2018-09-05 22:13:21 +0800 |
commit | db6ddc0c4ba582923b40e9cca807f70b950db019 (patch) | |
tree | 72eb96b565a7fac8e0d1749eb282e37efb56e491 /packages/testnet-faucets/src/ts/handler.ts | |
parent | 174b36059368631eeaec3ec7c0a3847350b55d73 (diff) | |
download | dexon-sol-tools-db6ddc0c4ba582923b40e9cca807f70b950db019.tar dexon-sol-tools-db6ddc0c4ba582923b40e9cca807f70b950db019.tar.gz dexon-sol-tools-db6ddc0c4ba582923b40e9cca807f70b950db019.tar.bz2 dexon-sol-tools-db6ddc0c4ba582923b40e9cca807f70b950db019.tar.lz dexon-sol-tools-db6ddc0c4ba582923b40e9cca807f70b950db019.tar.xz dexon-sol-tools-db6ddc0c4ba582923b40e9cca807f70b950db019.tar.zst dexon-sol-tools-db6ddc0c4ba582923b40e9cca807f70b950db019.zip |
[testnet-faucets] update to v2
Diffstat (limited to 'packages/testnet-faucets/src/ts/handler.ts')
-rw-r--r-- | packages/testnet-faucets/src/ts/handler.ts | 98 |
1 files changed, 59 insertions, 39 deletions
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}`); |