Update ZEIP from strings to numbers
This commit is contained in:
@@ -19,8 +19,8 @@ const navData = [
|
||||
},
|
||||
{
|
||||
title: 'Governance',
|
||||
description: 'xxxxxxxxx',
|
||||
url: WebsitePaths.Governance,
|
||||
description: 'Vote on changes to the 0x protocol',
|
||||
url: WebsitePaths.Vote,
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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%;
|
||||
`;
|
||||
|
||||
@@ -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} />
|
||||
</>
|
||||
|
||||
@@ -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[]> {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user