Skip to content

Commit aa79cfa

Browse files
authored
Merge pull request #38 from celo-tools/enable-ceur
Enable cEUR and syncing fixes
2 parents 44e3add + 956e5e2 commit aa79cfa

13 files changed

Lines changed: 66 additions & 46 deletions

File tree

package-electron.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "celo-web-wallet",
3-
"version": "1.1.2",
3+
"version": "1.1.3",
44
"description": "A lightweight web and desktop wallet for the Celo network",
55
"main": "main.js",
66
"keywords": [

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "celo-web-wallet",
3-
"version": "1.1.2",
3+
"version": "1.1.3",
44
"description": "A lightweight web and desktop wallet for the Celo network",
55
"keywords": [
66
"Celo",

src/blockchain/blocks.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { AVG_BLOCK_TIMES } from 'src/consts'
33
import { logger } from 'src/utils/logger'
44

55
export interface LatestBlockDetails {
6+
nodeUrl: string
67
number: number
78
timestamp: number
89
}
@@ -11,13 +12,15 @@ export async function getLatestBlockDetails(): Promise<LatestBlockDetails | null
1112
if (!isProviderSet()) return null
1213

1314
const provider = getProvider()
15+
const nodeUrl = provider.connection?.url
1416
const block = await provider.getBlock('latest')
1517
if (!block || !block.number) {
1618
logger.warn('Latest block is not valid')
1719
return null
1820
}
1921

2022
return {
23+
nodeUrl,
2124
number: block.number,
2225
timestamp: block.timestamp,
2326
}

src/blockchain/provider.ts

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { CeloProvider } from '@celo-tools/celo-ethers-wrapper'
2+
import { providers } from 'ethers'
23
import { config } from 'src/config'
4+
import { STALE_BLOCK_TIME } from 'src/consts'
35
import { setIsConnected } from 'src/features/wallet/walletSlice'
46
import { logger } from 'src/utils/logger'
57
import { promiseTimeout, sleep } from 'src/utils/promises'
8+
import { isStale } from 'src/utils/time'
69
import { call, put } from 'typed-redux-saga'
710

811
let provider: CeloProvider | undefined
@@ -40,14 +43,11 @@ async function connectToJsonRpcProvider(url: string) {
4043
logger.info(`Connecting to json rpc provider: ${url}`)
4144
provider = new CeloProvider(url)
4245
for (let i = 0; i < 3; i++) {
43-
const providerStateP = Promise.all([provider.getBlockNumber(), provider.getNetwork()])
44-
const providerState = await promiseTimeout(providerStateP, 1000)
45-
if (providerState) {
46-
const [latestBlock, network] = providerState
47-
if (latestBlock > 0 && network?.chainId === config.chainId) {
48-
logger.info('Provider is connected')
49-
return true
50-
}
46+
const blockAndNetworkP = Promise.all([provider.getBlock('latest'), provider.getNetwork()])
47+
const blockAndNetwork = await promiseTimeout(blockAndNetworkP, 1000)
48+
if (blockAndNetwork && isProviderSynced(blockAndNetwork[0], blockAndNetwork[1])) {
49+
logger.info('Provider is connected')
50+
return true
5151
}
5252
// Otherwise wait a bit and then try again
5353
await sleep(1000)
@@ -60,6 +60,17 @@ async function connectToJsonRpcProvider(url: string) {
6060
}
6161
}
6262

63+
function isProviderSynced(block?: providers.Block, network?: providers.Network) {
64+
return (
65+
block &&
66+
block.number &&
67+
block.timestamp &&
68+
!isStale(block.timestamp * 1000, STALE_BLOCK_TIME) &&
69+
network &&
70+
network.chainId === config.chainId
71+
)
72+
}
73+
6374
export function getProvider() {
6475
if (!provider) {
6576
logger.error('Provider is not yet initialized')

src/components/footer/ConnectionStatus.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,14 @@ import { Box } from 'src/components/layout/Box'
55
import { ModalOkAction } from 'src/components/modal/modal'
66
import { useModal } from 'src/components/modal/useModal'
77
import { config } from 'src/config'
8+
import { CONNECTION_CHECK_INTERVAL, STALE_BLOCK_TIME } from 'src/consts'
89
import { Color } from 'src/styles/Color'
910
import { Font } from 'src/styles/fonts'
1011
import { mq } from 'src/styles/mediaQueries'
1112
import { Stylesheet } from 'src/styles/types'
1213
import { logger } from 'src/utils/logger'
1314
import { isStale, useInterval } from 'src/utils/time'
1415

15-
const CONNECTION_CHECK_INTERVAL = 15000
16-
const STALE_BLOCK_TIME = 20000
17-
1816
export function ConnectionStatusLink() {
1917
const [latestBlock, setLatestBlock] = useState<LatestBlockDetails | null | undefined>(undefined)
2018

@@ -78,11 +76,12 @@ export const ConnectionStatus = () => {
7876
}
7977

8078
const { chainId, jsonRpcUrlPrimary } = config
79+
const nodeUrl = latestBlock?.nodeUrl || jsonRpcUrlPrimary
8180

8281
return (
8382
<Box direction="column" align="center" styles={style.container}>
8483
<p css={{ color: `${summaryColor} !important` }}>{summary}</p>
85-
<p>Node: {jsonRpcUrlPrimary}</p>
84+
<p>Node: {nodeUrl}</p>
8685
<p>Last Block Number: {block}</p>
8786
<p>Chain ID: {chainId}</p>
8887
</Box>

src/components/header/BalanceSummary.tsx

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { useNavigate } from 'react-router-dom'
44
import { transparentButtonStyles } from 'src/components/buttons/Button'
55
import { Box } from 'src/components/layout/Box'
66
import { MoneyValue } from 'src/components/MoneyValue'
7-
import { config } from 'src/config'
87
import { useTokens } from 'src/features/wallet/utils'
98
import { Color } from 'src/styles/Color'
109
import { Font } from 'src/styles/fonts'
@@ -17,14 +16,7 @@ export function BalanceSummary() {
1716
if (windowWidth && windowWidth > 550) numItems = 3
1817
if (windowWidth && windowWidth > 1024) numItems = 4
1918

20-
let tokens = useTokens()
21-
// TODO-cEUR remove when activated
22-
if (config.chainId === 42220) {
23-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
24-
const { cEUR, ...rest } = tokens
25-
// @ts-ignore
26-
tokens = rest
27-
}
19+
const tokens = useTokens()
2820

2921
const { tokensToShow, hiddenTokens } = useMemo(() => {
3022
const sortedTokens = Object.values(tokens).sort((t1, t2) => {

src/components/input/AmountAndCurrencyInput.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ import { TokenIcon } from 'src/components/icons/tokens/TokenIcon'
33
import { NumberInput } from 'src/components/input/NumberInput'
44
import { SelectInput, SelectOption } from 'src/components/input/SelectInput'
55
import { Box } from 'src/components/layout/Box'
6-
import { config } from 'src/config'
76
import { useTokens } from 'src/features/wallet/utils'
87
import { Font } from 'src/styles/fonts'
98
import { Stylesheet } from 'src/styles/types'
10-
import { cEUR, isNativeToken } from 'src/tokens'
9+
import { isNativeToken } from 'src/tokens'
1110
import { ErrorState } from 'src/utils/validation'
1211

1312
interface Props {
@@ -43,8 +42,6 @@ export const AmountAndCurrencyInput = (props: Props) => {
4342
() =>
4443
Object.values(tokens)
4544
.filter((t) => (nativeTokensOnly ? isNativeToken(t.id) : true))
46-
// TODO-cEUR remove when activated
47-
.filter((t) => t.id !== cEUR.id || config.chainId === 44787)
4845
.map((t) => ({
4946
display: t.symbol,
5047
value: t.id,

src/consts.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ export const ETHEREUM_DERIVATION_PATH = "m/44'/60'/0'/0"
77
export const CELO_DERIVATION_PATH = "m/44'/52752'/0'/0"
88
export const DERIVATION_PATH_MAX_INDEX = 1000000
99
export const AVG_BLOCK_TIMES = 5000 // 5 seconds
10+
export const CONNECTION_CHECK_INTERVAL = 15000 // 15 seconds
11+
export const STALE_BLOCK_TIME = 20000 // 20 seconds
1012
export const MAX_NUM_ELECTABLE_VALIDATORS = 100
1113

1214
export const MAX_SEND_TOKEN_SIZE = '100000000000000000000' // 100 Tokens

src/features/ledger/tokenData.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { logger } from 'ethers'
22
import { config } from 'src/config'
3-
import { areAddressesEqual, ensureLeading0x } from 'src/utils/addresses'
3+
import { ensureLeading0x } from 'src/utils/addresses'
44

55
// From https://github.com/celo-org/celo-monorepo/blob/master/packages%2Fsdk%2Fwallets%2Fwallet-ledger%2Fsrc%2Fdata.ts
66
const ERC_20_TOKEN_DATA =
7-
'AAAAaARjVVNEdl3oFoRYYedaJfyhIrtomLixKCoAAAASAACk7DBFAiEApwQFHNBKXp+V2jq8BMD2y/5AwC9bhPQ2H4hT/vMl/B4CIFalOVtBFGREUKMU/F5vDlJLeQrTn6GQeDertpB2FpMvAAAAZwRjR0xERx7ON1DaI3+TuOM5xTaYm4l4pDgAAAASAACk7DBEAiAtUE03OVEDTuAgMR8CeUiXVB7Uqa+4gQHaZtXsU0tjMQIgTsY5//96mGMOtyoQFgjDrh3kztxlUO90MJOLElo6baQ='
7+
'AAAAaARDRUxPRx7ON1DaI3+TuOM5xTaYm4l4pDgAAAASAACk7DBFAiEA5rECRg94+fCoIvoG9/5qWh62zl2C6Y+aFuuZrFe4CtcCIEJbRrkL3gqwT/Jj+7L3neazgpVCCTZZ3HX9JXXg5vleAAAAaARjVVNEdl3oFoRYYedaJfyhIrtomLixKCoAAAASAACk7DBFAiEApwQFHNBKXp+V2jq8BMD2y/5AwC9bhPQ2H4hT/vMl/B4CIFalOVtBFGREUKMU/F5vDlJLeQrTn6GQeDertpB2FpMvAAAAaARjRVVS2HY8uidqNzjm3oW0s79f3tbWynMAAAASAACk7DBFAiEAh2UeP1+SI2Ed5SiAjpJF6MkMrVa94gUwjJztyBlzhWMCIHfaOrEsxdxAGx+P+hxuSNO4zcw6KRLfJkkuic1V/CrHAAAAagZiIENFTE/dyb5X9VP+dXUtYWBrlMvX4CZO+AAAABIAAPNwMEUCIQCi62KsBfuNcfX0MriiRZ7a5DKERhtIz7sZ1SqBT7ruhgIgVrfmavyWzxzDW4AQeHn++A4qPjB1pQKoHvNXo8Hf1SMAAABpBmIgY1VTRGJJKmRKWI/ZBCcL7QatUrmr/qGuAAAAEgAA83AwRAIgGDYx4oB/gkYUqLeXqvEZXx9nOxVHzTe2ajyd2wnehxgCICQBe/rBPcXiaQJj3pdoXxroct/hV6r3G2G7y79EOEAPAAAAaQZiIGNFVVL57OMBJHrSziGJSUGDCiRw9Od0ygAAABIAAPNwMEQCIEdcFWP+HxEUoF1sCGVd34QGS0hL5cVUdrWdqVm3bYTgAiBCMA+Rg3Ubc3xla/35wzZesPlbeSMEPcr4uqL+8PeydwAAAGoGYSBDRUxP8ZSv31CwPmm9fQV8GqnhDJlU5MkAAAASAACu8zBFAiEAk/o0FBus2/QCrunFGEyoneQIRaMRC+y5L6Dvar8MU/kCIByJt2ziRhDG3AAbyXBIuJfZQujSHFcSJL3xF0xIlcPdAAAAaQZhIGNVU0SHQGn6HrFtRNYi8uDKJe6hcjabwQAAABIAAK7zMEQCIClrH2xgE3WMbD+hgQ7t5SiAcVG5WiUZ655voqCszKEoAiA/cO8UVgNY891MNJ5yeDk8w47WO0E1DQecrK71LR8g8gAAAGoGYSBjRVVSEMiSpuxDpT5F0LkWtLfTg7G3jA8AAAASAACu8zBFAiEAgpktbB1ZxyAwMJwKTSbZ30n8zgRuW0twbXoZxlsUAswCIHek4l4CIbjVMG2HVr0Ml9/8kA4F9dr69JBMaoSUkdKl'
88

99
export interface TokenInfo {
1010
contractAddress: string
@@ -19,11 +19,7 @@ export interface TokenInfo {
1919
let tokenDataCache: Record<string, TokenInfo> | null = null
2020

2121
export function getTokenData(tokenAddress?: string) {
22-
if (
23-
!tokenAddress ||
24-
(!areAddressesEqual(tokenAddress, config.contractAddresses.StableToken) &&
25-
!areAddressesEqual(tokenAddress, config.contractAddresses.GoldToken))
26-
) {
22+
if (!tokenAddress) {
2723
return null
2824
}
2925

@@ -65,7 +61,7 @@ export function getTokenData(tokenAddress?: string) {
6561
const tokenData = tokenDataCache[tokenAddress.toLowerCase()]
6662
if (!tokenData) {
6763
// Note, there's no data for Alfajores atm, only Mainnet
68-
logger.warn(`No token data found for ${tokenAddress}`)
64+
logger.debug(`No token data found for ${tokenAddress}`)
6965
return null
7066
}
7167
return tokenData

src/features/wallet/BalanceDetailsScreen.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { Color } from 'src/styles/Color'
2121
import { Font } from 'src/styles/fonts'
2222
import { useIsMobile } from 'src/styles/mediaQueries'
2323
import { Stylesheet } from 'src/styles/types'
24-
import { cEUR, isNativeToken, LockedCELO } from 'src/tokens'
24+
import { isNativeToken, LockedCELO } from 'src/tokens'
2525
import { fromWeiRounded } from 'src/utils/amount'
2626
import { SagaStatus } from 'src/utils/saga'
2727

@@ -164,8 +164,6 @@ function balancesToTableData(balances: Balances): BalanceTableRow[] {
164164
: balances.tokens
165165

166166
for (const token of Object.values(tokens)) {
167-
// TODO-cEUR remove when activated
168-
if (config.chainId === 42220 && token.id === cEUR.id) continue
169167
tableRows.push({
170168
id: token.id,
171169
label: token.symbol,

0 commit comments

Comments
 (0)