Update ZEIP from strings to numbers

This commit is contained in:
Jacob Evans
2019-02-17 18:24:48 -08:00
parent b35e1d350b
commit abd597c7a6
8 changed files with 38 additions and 71 deletions

View File

@@ -19,8 +19,8 @@ const navData = [
},
{
title: 'Governance',
description: 'xxxxxxxxx',
url: WebsitePaths.Governance,
description: 'Vote on changes to the 0x protocol',
url: WebsitePaths.Vote,
},
];

View File

@@ -7,9 +7,6 @@ import { colors } from 'ts/style/colors';
import { DialogContent, DialogOverlay } from '@reach/dialog';
import '@reach/dialog/styles.css';
// tslint:disable-next-line: no-duplicate-imports
import { FormEvent } from 'react';
import { Button } from 'ts/components/button';
import { Icon } from 'ts/components/icon';
import { CheckBoxInput, Input, InputWidth, OptionSelector } from 'ts/components/modals/input';
@@ -360,7 +357,7 @@ export class ModalContact extends React.Component<Props> {
</>
);
}
private async _onSubmitAsync(e: FormEvent): Promise<void> {
private async _onSubmitAsync(e: React.FormEvent): Promise<void> {
e.preventDefault();
let jsonBody;

View File

@@ -6,9 +6,8 @@ import { BigNumber } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
import { constants } from 'ts/utils/constants';
// tslint:disable-next-line: no-duplicate-imports
import { ChangeEvent } from 'react';
import { AddressTableRow } from 'ts/pages/governance/address_table_row';
import { configs } from 'ts/utils/configs';
interface AddressTableProps {
networkId: number;
@@ -30,7 +29,6 @@ export class AddressTable extends React.Component<AddressTableProps, AddressTabl
};
}
public render(): React.ReactNode {
// const { userAddresses, addressBalances } = this.props;
return (
<Wrapper>
<Table>
@@ -45,8 +43,8 @@ export class AddressTable extends React.Component<AddressTableProps, AddressTabl
const rows = _.map(userAddresses, (userAddress: string, i: number) => {
const balanceInZrxBaseUnits = addressBalances[i];
const addressRowId = `address-${userAddress}`;
const balanceInEth = Web3Wrapper.toUnitAmount(balanceInZrxBaseUnits, constants.DECIMAL_PLACES_ETH);
const balanceString = `${balanceInEth.toString()} ZRX`;
const balanceInZrx = Web3Wrapper.toUnitAmount(balanceInZrxBaseUnits, constants.DECIMAL_PLACES_ETH);
const balanceString = `${balanceInZrx.toFixed(configs.AMOUNT_DISPLAY_PRECSION)} ZRX`;
return (
<AddressTableRow
key={addressRowId}
@@ -60,8 +58,8 @@ export class AddressTable extends React.Component<AddressTableProps, AddressTabl
});
return rows;
}
private _onSelectAddress(e: ChangeEvent<HTMLInputElement>): void {
const selectedAddressIndex = parseInt(e.currentTarget.value, 10);
private _onSelectAddress(e: React.ChangeEvent<HTMLInputElement>): void {
const selectedAddressIndex = _.parseInt(e.currentTarget.value);
this.setState({ selectedAddressIndex });
if (this.props.onSelectAddress) {
@@ -70,15 +68,15 @@ export class AddressTable extends React.Component<AddressTableProps, AddressTabl
}
}
const Wrapper = styled.div<{ marginBottom?: string }>`
background-color: #fff;
border-radius: 4px;
margin-bottom: ${props => props.marginBottom || '25px'};
padding: 10px 30px;
height: 230px;
overflow-y: auto;
background - color: #fff;
border -radius;: 4;px;
margin-bottom;: $;{props => props.marginBottom || '25px';}
padding: 10;px; 30;px;
height: 230;px;
overflow - y;: auto;
`;
const Table = styled.table`
border-collapse: collapse;
width: 100%;
const Table = styled.table`;
border-collapse;: collapse;
width: 100%;
`;

View File

@@ -2,9 +2,6 @@ import * as _ from 'lodash';
import * as React from 'react';
import styled from 'styled-components';
// tslint:disable-next-line: no-duplicate-imports
import { ChangeEvent } from 'react';
import { CheckMark } from 'ts/components/ui/check_mark';
import { colors } from 'ts/style/colors';
@@ -12,7 +9,7 @@ interface RadioProps {
address: string;
value: number;
isActive: boolean;
onSelectAddress: (e: ChangeEvent<HTMLInputElement>) => void;
onSelectAddress: (e: React.ChangeEvent<HTMLInputElement>) => void;
}
interface PreferenceSelecterProps extends RadioProps {
@@ -27,7 +24,6 @@ interface MarkerProps {
const Radio: React.StatelessComponent<RadioProps> = ({ address, onSelectAddress, isActive, value }) => {
return (
<>
{/* <Marker isActive={isActive} /> */}
<CheckMark isChecked={isActive} color={colors.brandLight} />
<RadioInput value={value} onChange={onSelectAddress} checked={isActive} />
</>

View File

@@ -32,7 +32,6 @@ import { Provider } from 'ethereum-types';
import { InjectedProvider, Providers } from 'ts/types';
import { configs } from 'ts/utils/configs';
import { constants } from 'ts/utils/constants';
import FilterSubprovider from 'web3-provider-engine/subproviders/filters';
const providerToName: { [provider: string]: string } = {
[Providers.Metamask]: constants.PROVIDER_NAME_METAMASK,
@@ -60,8 +59,7 @@ interface Props {
onVoted?: () => void;
onError?: (errorMessage: string) => void;
web3Wrapper?: Web3Wrapper;
currentBalance: string;
web3?: any;
currentBalance: BigNumber;
}
interface State {
@@ -74,7 +72,6 @@ interface State {
preferredNetworkId: number;
selectedUserAddressIndex: number;
errors: ErrorProps;
web3?: any;
userAddresses: string[];
addressBalances: BigNumber[];
derivationPath: string;
@@ -90,9 +87,11 @@ enum ConnectSteps {
SelectAddress,
}
const ZERO = new BigNumber(0);
export class ConnectForm extends React.Component<Props, State> {
public static defaultProps = {
currentBalance: '0.00',
currentBalance: ZERO,
isWalletConnected: false,
errors: {},
};
@@ -145,7 +144,6 @@ export class ConnectForm extends React.Component<Props, State> {
}
}
public _renderButtonsContent(errors: ErrorProps): React.ReactNode {
// const { currentBalance, web3Wrapper } = this.state;
return (
<div style={{ maxWidth: '470px', margin: '0 auto' }}>
<Heading color={colors.textDarkPrimary} size={34} asElement="h2">
@@ -155,7 +153,7 @@ export class ConnectForm extends React.Component<Props, State> {
In order to vote on this issue you will need to connect a wallet with a balance of ZRX tokens.
</Paragraph>
<ButtonRow>
<ButtonHalf onClick={this._onConnectWalletClickAsync.bind(this)}>Connect Metamask</ButtonHalf>
<ButtonHalf onClick={this._onConnectWalletClickAsync.bind(this)}>Connect Wallet</ButtonHalf>
<ButtonHalf onClick={this._onConnectLedgerClickAsync.bind(this)}>Connect Ledger</ButtonHalf>
</ButtonRow>
{!_.isUndefined(errors.connectionError) && (
@@ -225,10 +223,6 @@ export class ConnectForm extends React.Component<Props, State> {
}
this._ledgerSubprovider.setPath(path);
}
public async getBalanceInWeiAsync(owner: string): Promise<BigNumber> {
const balanceInWei = await this._web3Wrapper.getBalanceInWeiAsync(owner);
return balanceInWei;
}
public async getZrxBalanceAsync(owner: string): Promise<BigNumber> {
utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.');
const injectedProvider = await this._getInjectedProviderIfExistsAsync();
@@ -240,11 +234,11 @@ export class ConnectForm extends React.Component<Props, State> {
const amount = await this._contractWrappers.erc20Token.getBalanceAsync(tokenAddress, owner);
return amount;
} catch (error) {
return new BigNumber(0);
return ZERO;
}
}
return new BigNumber(0);
return ZERO;
}
private async _onConnectWalletClickAsync(): Promise<boolean> {
const shouldUseLedgerProvider = false;
@@ -389,34 +383,34 @@ export class ConnectForm extends React.Component<Props, State> {
networkIdIfExists?: number,
shouldUserLedgerProvider: boolean = false,
): Promise<[Provider, LedgerSubprovider | undefined]> {
// This code is based off of the Blockchain.ts code.
// TODO refactor to re-use this utility outside of Blockchain.ts
const doesInjectedProviderExist = !_.isUndefined(injectedProviderIfExists);
const isNetworkIdAvailable = !_.isUndefined(networkIdIfExists);
const publicNodeUrlsIfExistsForNetworkId = configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists];
const isPublicNodeAvailableForNetworkId = !_.isUndefined(publicNodeUrlsIfExistsForNetworkId);
const provider = new Web3ProviderEngine();
const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists], publicNodeUrl => {
return new RPCSubprovider(publicNodeUrl);
});
if (shouldUserLedgerProvider && isNetworkIdAvailable) {
const isU2FSupported = await utils.isU2FSupportedAsync();
if (!isU2FSupported) {
throw new Error('Cannot update providerType to LEDGER without U2F support');
}
const provider = new Web3ProviderEngine();
const ledgerWalletConfigs = {
networkId: networkIdIfExists,
ledgerEthereumClientFactoryAsync: ledgerEthereumBrowserClientFactoryAsync,
};
const ledgerSubprovider = new LedgerSubprovider(ledgerWalletConfigs);
provider.addProvider(ledgerSubprovider);
provider.addProvider(new FilterSubprovider());
const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists], publicNodeUrl => {
return new RPCSubprovider(publicNodeUrl);
});
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
provider.start();
return [provider, ledgerSubprovider];
} else if (doesInjectedProviderExist && isPublicNodeAvailableForNetworkId) {
// We catch all requests involving a users account and send it to the injectedWeb3
// instance. All other requests go to the public hosted node.
const provider = new Web3ProviderEngine();
const providerName = this._getNameGivenProvider(injectedProviderIfExists);
// Wrap Metamask in a compatability wrapper MetamaskSubprovider (to handle inconsistencies)
const signerSubprovider =
@@ -424,10 +418,6 @@ export class ConnectForm extends React.Component<Props, State> {
? new MetamaskSubprovider(injectedProviderIfExists)
: new SignerSubprovider(injectedProviderIfExists);
provider.addProvider(signerSubprovider);
provider.addProvider(new FilterSubprovider());
const rpcSubproviders = _.map(publicNodeUrlsIfExistsForNetworkId, publicNodeUrl => {
return new RPCSubprovider(publicNodeUrl);
});
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
provider.start();
return [provider, undefined];
@@ -438,13 +428,11 @@ export class ConnectForm extends React.Component<Props, State> {
// If no injectedWeb3 instance, all requests fallback to our public hosted mainnet/testnet node
// We do this so that users can still browse the 0x Portal DApp even if they do not have web3
// injected into their browser.
const provider = new Web3ProviderEngine();
provider.addProvider(new FilterSubprovider());
const networkId = constants.NETWORK_ID_MAINNET;
const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkId], publicNodeUrl => {
const defaultRpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkId], publicNodeUrl => {
return new RPCSubprovider(publicNodeUrl);
});
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
provider.addProvider(new RedundantSubprovider(defaultRpcSubproviders));
provider.start();
return [provider, undefined];
}
@@ -485,10 +473,6 @@ export class ConnectForm extends React.Component<Props, State> {
return networkIdIfExists;
}
private async _resetOrInitializeAsync(networkId: number, shouldUserLedgerProvider: boolean = false): Promise<void> {
if (!shouldUserLedgerProvider) {
// this._dispatcher.updateBlockchainIsLoaded(false);
}
// this._dispatcher.updateUserWeiBalance(undefined);
this.networkId = networkId;
const injectedProviderIfExists = await this._getInjectedProviderIfExistsAsync();
const [provider, ledgerSubproviderIfExists] = await this._getProviderAsync(
@@ -514,11 +498,6 @@ export class ConnectForm extends React.Component<Props, State> {
delete this._ledgerSubprovider;
const userAddresses = await this._web3Wrapper.getAvailableAddressesAsync();
this._userAddressIfExists = userAddresses[0];
// this._dispatcher.updateUserAddress(this._userAddressIfExists);
if (!_.isUndefined(injectedProviderIfExists)) {
// this._dispatcher.updateProviderType(ProviderType.Injected);
}
// await this.fetchTokenInformationAsync();
}
}
private async _getUserAddressesAsync(): Promise<string[]> {

View File

@@ -49,9 +49,6 @@ function millisToDaysHoursMinutes(futureDateMs: number): string {
let delta = Math.abs(futureDateMs - now.milliseconds()) / 1000;
const result: TimeStructure = {};
const structure: TimeStructure = {
// year: 31536000,
// month: 2592000,
// week: 604800,
day: 86400,
hour: 3600,
minute: 60,

View File

@@ -45,7 +45,7 @@ interface State {
isU2fSupported: boolean;
isVoted: boolean;
votePreference: string | null;
zeip: string;
zeip: number;
voteHash?: string;
signedVote?: any;
errorMessage?: string;
@@ -81,7 +81,7 @@ export class ModalVote extends React.Component<Props> {
isSuccessful: false,
isVoted: false,
votePreference: null,
zeip: '1',
zeip: 23,
errors: {},
};
// shared fields

View File

@@ -62,7 +62,7 @@ interface State {
isVoted: boolean;
selectedAddress?: string;
votePreference?: string;
zeip: string;
zeip: number;
voteHash?: string;
signedVote?: SignedVote;
comment?: string;
@@ -73,7 +73,7 @@ interface State {
interface SignedVote {
signature: string;
from: string;
zeip: string;
zeip: number;
preference: string;
}
@@ -86,7 +86,7 @@ interface ErrorProps {
[key: string]: string;
}
const defaultZeip = '23';
const defaultZeip = 23;
export class VoteForm extends React.Component<Props> {
public static defaultProps = {