Commit Graph

71 Commits

Author SHA1 Message Date
Agustin Pane 26a358a3af
(Feature) - 1029 Improve Polling behaviour (#1047)
* Adds exponential backOff for fetch methods

* Avoid multiple requests before the last finished

* Removes unused dependency

* Adds try catch

* Fix isFetchingData variable initialization

* Add return type to fetchAllUserCollectiblesByCategoryAsync

* Improve typings for fetchSafeTokens

* Add more types

* Improve types usage

* Improve types usage

* Refactor useCheckForUpdates to avoid calling the actions before they finished

* Updates typing in OpenSea.ts

* Update store types

* Update store types

* Remove unused promises

* useCheckForUPdates & useFetchTokens refactor wip

* enhanced safe state/selector types

* refactor useCheckForUpdates

* improve comment in useSafeScheduledUpdaates

* type enhancements

* use checksumAddress to checksum an address

* dep bump

Co-authored-by: Mikhail Mikheev <mmvsha73@gmail.com>
Co-authored-by: Mati Dastugue <matias.dastugue@altoros.com>
2020-07-06 16:34:14 -03:00
Mikhail Mikheev ed72219f03 type definition fixes 2020-06-29 15:29:27 +04:00
Mikhail Mikheev 18f03b8bc1 typing loadFromStorage wip 2020-06-23 13:53:10 +04:00
Agustin Pane 231a9a7d35 Remove types 2020-06-22 12:05:08 -03:00
Agustin Pane caa94c879b Types 2020-06-19 13:02:54 -03:00
Agustin Pane 5c00d51c3c Remove types on loadFromStorage 2020-06-19 12:21:24 -03:00
Agustin Pane 3283bf1dc6 Add types 2020-06-19 11:18:33 -03:00
nicolas 982d79c0d0
Migrating to Typescript and bringing back react-scripts (#933)
* remove flow from src

* remove unused files

* remove rules from eslint

* replace absolute paths

* add tsconfig

* update package.json

* remove babel-polyfill

* eslint fix

* remove jsconfig.json

* replace .scss by .module.scss

* Revert "replace absolute paths"

This reverts commit e430c71263a1a4c190d50e72271bba7ea6356bc4.

* replace ~/ by src/

* js fixes

* scss fixes

* fix unused vars

* adding eslint

* adding back config folder

* fix eslint and prettier

* force build

* fix baseUrl

* rename js/jsx to ts/tsx

* some rules

* rename files with jsx syntax to tsx

* fix app build

* Revert "fix baseUrl"

This reverts commit 523f29c7b61e14dd6be0ffc3cd199ff399157467.

* some fixes

* replace ts to tsx

* some TS fixes

* more tsc changes

* more tsc fixes

* more fixes

* more ts fixes

* more fixes

* last fix

* fixes

* prettier fix

* some fixes

* fix safe information aligment

* add yarn.lock

* fix blockies and build memory space

* include blockies in tsconfig

* fix blockies

* fix blockies import

* fix Identicon component

* fix build command

* Fix ref type in Identicon

* add libusb-1.0-0-dev to travis

* build command fix [2]

* build command fix [3]

* fix margin layout

* Update  yarn lock

* remove @ts-ignore

* hide Critial dependency

Co-authored-by: Mikhail Mikheev <mmvsha73@gmail.com>
Co-authored-by: Agustín Longoni <agustin.longoni@altoros.com>
Co-authored-by: Mati Dastugue <matias.dastugue@altoros.com>
2020-05-20 16:15:21 -03:00
Fernando c396b3eaf8
(Feature) Easier Smart Contract Interaction (#741) 2020-05-13 17:06:01 -03:00
Agustin Pane 30ab99c79c
(Fix) #876 - Checksummed addresses (#884)
* Checksum addresses when build address book from localStorage
Checksum owner's addresses when build safe from localStorage

* ChecksumAddresses when add new addressBook entry
ChecksumAddresses when add new owner
ChecksumAddresses when replaces owner

* Adds checksumAddress function
Replaces old web3 usage with checksumAddress

* Refactors all web3.utils.toChecksumAddress with checksumAddress()

* Fix duplicating var name
2020-05-12 15:33:39 -03:00
nicolas a79a86e5cc
Apps fixes (#871)
* Fix 850

* Fix 853

* Apps flag using string value

* Fix unresponsive app when switching to another app

* Fix Apps send TX

* Confirmation Modal, correct app name
2020-05-05 14:24:46 -03:00
Agustin Pane 9d784922f2
Feature #587 - App performance improvement (#738)
* Refactor Balances to functional component
Removes Balances props in Layout.jsx

* Replaces selectors that were using safeParamAddressSelector with safeParamAddressFromStateSelector to avoid the bug of non-loaded safe when called
Also exports extendedTransactionsSelector to let the components use it

* Refactors Transactions.jsx, replaces transactions.tsx with txsTable.jsx
Removes all unused props from transactions.jsx
Makes all childs of txsTable.jsx fetch the props they need instead of sharing all of them even if they are not used

* Adds new selectors: safeNameSelector, safeNeedsUpdateSelector, safeCurrentVersionSelector

* Removes unused props from layout to settings.jsx
Removed props from the settings.jsx childs, now they fetch the values they need directly from the store

* Removes unused redux connect

* Adds safeEthBalanceSelector

* Removes all the props from layout to settings

* Refactor root and layout, extracts checkForUpdate and componentDidMount to components
Extracts header and tabs from Layout.jsx

* Makes routes.jsx use selectors instead of connect to unify the code

* Loads tabs components using react suspense

* Fixs warning when trying to update root component within loadStore.jsx
Replaces safe with safeAddress selector in layout.jsx to reduce the unnecessary rendering
Fixs setState in container.jsx

* Fixs checkForUpdates fetchTokenBalances
Adds FetchTokens.jsx in balances
Adds safeFeaturesEnabledSelector

* Fixs load addressbook action

* Replaces safe with owners in manage owners

* Improves buildSafe promises calls
Improves the loadStorage calls

* Fixs error "Uncaught (in promise) TypeError: Cannot read property 'includes' of undefined"

* Extracts LoadStore from outside the router component to avoid re-loading the store
Adds react lazy for Coins and Collectible tabs

* Reduce the polling rate for fetching transactions

* Removes unused actions.js
Removes unused selector props

* Fixes owners column selector usage

* Fixes processTransaction usage

* Optimize how the transaction list within the transactions tab are loaded

* Fix lint error

* Fix edit addressbook entry

* Fixs show send coins modal

* feature: batchRequest for incoming transactions

* Fixs race condition on loadStore
Fixs check for updates address null validation

* Adds ensureOnceAsync for getGnosisSafeInstanceAt
Adds batch request for safe params

* Removes unnecessary checkAndUpdateSafe from checkForUpdates, now the safe gets updated when a transaction arrives

* Fixs ensureOnce/memoization

* refactor: make a generic generateBatchRequest method

Create a generic method to easily build web3 batch requests

* refactor: use `generateBatchRequest` in `getTokensBalances`

* Removes .toJS in edit entry

* Removes web3 from sendTransactions
Removes pascal case FetchTokens

* Replaces /layout import

* Replaces CheckForUpdates component with useCheckForUpdates hook

* Makes FetchTokens a hook

* Removes getSafeParamsBatch, now the safes gets the data using the generic generateBatchRequests

* Replaces INITIAL_STATUS with INITIAL_STATE

* Replaces regex
Adds spaces before return

* Adds wrapInSuspense

* Runs prettier

* Makes checkAndUpdateSafe use generateBatchRequests

* Makes checkAndUpdateSafe use generateBatchRequests

* Fixs check for updates with null address

* Fixs transaction details getNameFromAddressBook

* Fixes zIndex between cookies banner and transaction details

* fix: cast returned values to number

Original code was expecting a BN instance, now it's a plain string.

* Fix replace owner name

* Fix race condition with adbk load

* Fixes replaces owner

* Fixs apps

* Moved hooks into own folder

* Moved LoadStore to routes.js
Refactors LoadStore as Hook
Move LoadStore to hooks folder

* Moves useLoadStore to safes/index

* Revert loadStore place change

* Fixes bug with fetchEtherBalance that causes updateSafe to be called

* remove useLoadStore, add useAnalytics hook

* remove React.memo from SafeView

* Reverts removing useLoadStore in order to maintain the consistency of the code

* rewrite useLoadStore in a more hook-y way, rename it to useLoadSafe

* Removes unnecessary setSafeLoaded

* Removes unnecessary safeLoaded

* fix: Coins values and balances

The app was retrieving ERC20 tokens information from 3 different endpoints.
 - One from `balance/` to have the list updated
 - another from `balance/usd` to have the values in USD
 - the last one from the blockchain, to update the balances
This was all simplified to `balance/usd`.

Also, added a `currencyRate` to be updated when the currency is modified.

The value calculation happens on a component level, so when the `balanceUsd` value is modified, the value is properly reflected on the screen.

Refactored `activateTokensByBalance` to `fetchSafeTokens`, as this was doing quite more than just _activating_ and also added the `currencyList` calculation in it, so everything is updated when `balance/usd` endpoint is requested.

* fix: Balance screen

Collectibles weren't loading when clicking on the link

Also, refactored setState usage, to properly update current state

* fix: featuresEnabled undefined

* fix: add/activate newly received tokens

* fix: NaN Values in Coins for a newly loaded Safe

Was failing to set a default value for the `currencyRate`

* fix: Settings fails to load if `owners` is not loaded into store

Added a `Loader` until the required Safe's data is loaded into store.

* fix: prefetch txs data

When building the Txs list, we requested data for every tx what was translated into several RPC calls.

Now by _batchRequesting_ all the information on beforehand, Safe's loading is a bit faster.

* fix: prevent requesting safe, when there's no safe available in the store

* enhancement: fetch tokens when loading safe

By doing this, when loading a safe in the balance screen we will have tokens immediately loaded into the coins list

* fix: load collectibles when switch to collectibles screen

Collectibles weren't loaded when clicking menu link for a newly loaded safe.

Now every switch to the collectible's screen will trigger a fetch for collectibles.

* fix: fetch only if safe is ready

Co-authored-by: fernandomg <fernando.greco@gmail.com>
Co-authored-by: Mikhail Mikheev <mmvsha73@gmail.com>
2020-04-23 11:18:06 -03:00
Mikhail Mikheev 31a1565637
Fixes: Offchain signatures (#706)
* offchain signatures wip

* offchain signing wip

* offchain signatures wip

* offchain signatures wip

* save signatures to the history service

* fix eth signer & useEfefct hook

* offchain signatures wip

* signature check, mainnet testing wip

* dep update

* disable offchain signing for smart contract wallets

* Refactor EIP712 signer

* bring back .env.example

* Check if save version is >1.1.1

* use canTryoffchainSigning boolean variable, add comment about 4001 error

* move semver selector for safe version/offchain signatures to a constant, make use of empty_data for isContractWallet

* remove TYPE when sending txs to history service

* add eth_signTypedData_v4 signer, dep bump, add missing await

* add comments about version check for canTryOffchainSigning variable

* hide "please sign notification"

* dep bump

* dep bump

* Check if connected is ledger before trying offchain signatures

* minor fixes, temp deployment to test trezor

* add hardwareWallet boolean property to wallet model, disable offchain signatures for hw wallets

* add personal signer

* prettier fixes

* offchain signatures fixes
2020-03-31 18:16:29 +04:00
Agustin Pane c73dafe3ce
Feature: #528 optimize network requests (#680)
* Generates a cache to avoid multiples getHumanFriendlyToken() for the same token address

* Adds etags implementation for transactions

* Caches outgoing and incoming safe transactions based on etag value

* Removes cachedSafeTransactions, cachedSafeIncommingTransactions

* Refactors getTokenInstance

* Avoid recreating tokens on fetchTokens() once we have them in redux

* Fixs error on catch

* Batch request tokens balances

* Fixs missing token names
Changes the tokens limit from 300 to 3000

* fix: failed to instantiate non-standard ERC-20 tokens

For the batchRequest of balances, we're just using the `balanceOf` method call. So having a simple ABI with that only method prevents errors with non-standard ERC-20 Tokens.

* Removes unnecessary action updateSafeThreshold
Removes unnecessary action fetchEtherBalance

* Updated comments in code
Replaces constant with directly dispatching action

* BatchRequest done right

* fix: invalid action name `savedToken` -> `saveToken`

* Renames getTokenInstance to getTokenInfos
Fixs first load of transactions are empty

* Move fetchTokenBalances to `Balances` and `SendModal` components

* fix: Incoming transaction type

Backend now changed the type from 'incoming' to one of: `'ERC721_TRANSFER', 'ERC20_TRANSFER', 'ETHER_TRANSFER'`

* fix: tokenInstance `symbol` and `decimal` extraction

* Fix property name `decimals` instead of `tokenDecimals`

* Standardize non-standard ERC20 tokens discovery

* fix: isStandardERC20

* Revert "Move fetchTokenBalances to `Balances` and `SendModal` components"

This reverts commit ed84bd92

* Fixs Typo INCOMING_TX_TYPES
Renames tokenInstance with localToken

* Renames getBatchBalances to getTokenBalances
Returns saved tokens instead of tokenInstance in getTokenInfos

* Remove promise returns

Co-authored-by: fernandomg <fernando.greco@gmail.com>
2020-03-30 13:14:04 -03:00
Fernando 5359794e21
(Feature) erc721 feature implementation (#570)
* Add Assets sections

* (add) collectibles tab

* (add) criptokitty items

* (add) collectible items, definitive edition

* (fix) collectibles were overlapping with bottom banner

* (fix) wording

* (fix) responsive issues

* Install `async-sema` dependency

* Create collectible source classes

- source from mocked data and opensea, it's extendable to import information from other sources

* Update `Collectible` implementation to use new data source

* Create constants file to better handle env variables and default values

* Add description to item's cards

- also added a mocked class with real data

* Fix `saveTxToHistory`, remove hardcoded `CALL`

* Fix after merge development

* Set background color for collectible based on data info

- Changed `withStyles` in favor of a hook-like approach with `makeStyles`

* Enhance collectible card info and group title

* Use current safeAddress to query for collectibles information

- also migrated from `withStyles` to `makeStyles`

* Use proper key values for lists and set more significant names

* update yarn.lock after merge

* Fix linting error

* Move ethAsToken verification outside loop

* Use absolute route for `SendModal` import

* Move Collectibles into redux store

* Update yarn.lock file

* Selectable NFTs

* Divide the `collectible` store into `nftAssets` and `nftTokens`

- Also updated components to retain functionality
- Created a `textShortener` function for better presentation

* Update `yarn.lock`

* Update `yarn.lock`

* Fix item background color

* Clears the tokenID select field when the collectible selected changes

* Open Send modal from the assets section

* Use token name for the token selection dropdown

* Add openZeppelin contracts dependency

* Create ERC721 getter

* Fix types, default values and clean code

* Fix: properly refresh list of collectibles when switching safes

* Add ReviewCollectible step in send NFT

* Change items shadow

* Give option to choose what to send by clicking 'Send' button in AddressBook

* Disable [Send] button for Collectibles if not owner

* Set Coins as default option in assets tab

- also fixed styles for `Coins` option

* Use collectible icon in send modal

* Set default message when no assets available

- removed pagination feature

* Create SafeVersionProvider to better handle version-related tasks

Provides:
- current and latest versions,
- a boolean indicating a need for update,
- an upgradeSafe callback to trigger upgrade from any place,
- a list of enabled features, depending on the current version
  - the latter needs a refactor like extract features outside the provider
   and define constants for the features.

* Force build

* Update `yarn.lock`

* Disable Manage list for NFTs

* Fix container shadow

- Also fixes tables shadow, thanks to @gabitoesmiapodo

* Enable nested routes for balances (assets) tab

* Default to `/balance` if invalid nested path

* Disable [Send Collectible] button, if not supported by safe

* Change sub-menu buttons to clickable text

* Replace Paragraph with Link

* Fix invalid props errors for Link component

* Fallback to `transferFrom` if `safeTransferFrom` is not implemented

* Use `transfer` as fallback to ERC-721's `safeTransferFrom`

- need to identify ERC721 token using `transfer` and `name` methods

* Display failed transactions

* Use react.lazy for collectibles' modals

* Identify ERC-721 token transaction

* Fix Send Collectibles modal layout/behavior

- disable dropdown list if there's no item to pick
- fix placeholder for tokens list
- fix dropdown list styles

* Set default `isSuccessful` flag to `true`

* Save version related values into store

- each safe has its `currentVersion`, `needsUpdate` and `featuresEnabled`
- and safes store has the `latestMasterContractVersion`

* Migrate Balance to use store-provided values

* Migrate Settings to use store-provided values

* Migrate ChooseTxType to use store-provided values

* Remove SafeVersionProvider

Co-authored-by: Gabriel Rodriguez Alsina <gabriel.rodriguez@altoros.com>
Co-authored-by: apane <agustin.pane@gmail.com>
2020-03-18 17:24:24 -03:00
Gabriel Rodríguez Alsina 2a8ec9d4db
(add) linter sorting rules (#614)
* (add) linter sorting rules

* (fix) linting errors according to the new rules

Co-authored-by: Fernando <fernando.greco@gmail.com>
2020-02-28 10:58:40 +01:00
Gabriel Rodríguez Alsina 6df5e72135
(Fix) Enforce linting and formatting (#564)
* (remove) unused / old packages / linting script

* (add) eslint / prettier packages and plugins

* (fix) eslint / prettier config

* (add) prettier / eslint scripts

* (fix) linting and formatting problems

* (remove) unused files

* (fix) linting problem that needed to be addressed manually

* (add) pre commit hooks

* (fix) lint-staged config

* (fix) config

* (fix) config

* (check) if pre config formatting works

* Add nvmrc and update yarn.lock

* Update `yarn.lock`

* Make jsx-a11y/no-autofocus report as warn

* Apply lint:fix to project

Co-authored-by: Fernando <fernando.greco@gmail.com>
2020-02-17 19:20:43 -03:00
Fernando f64ebf99a1 Fix #381: notification shown after loading safe (#402)
* Prevent notifications from showing after loading safe

* Make a safe-based sessionStorage control

* Show notifications for new Safes and prevent displaying oldest incoming tx for newly loaded Safe

* Create `currentSession` state

* Add `currentSession` to the Store

* Initialize `currentSession`

* Use `currentSession` to handle notifications for incoming Transactions

* Remove `updateUserStatus`

* Move the load of the current session from storage to app startup

* Fix duplicated reducer id

* Adapt notificationsMiddleware
2020-01-16 18:28:28 +01:00
Agustin Pane 2d282c511b Bug #348: Safelist entries get removed (#358)
* Fix balances saved to localStorage not in format [tokenAdd, balance] but [balance]

* Updates localStorage version value
2019-12-17 12:09:09 +04:00
Fernando d69e5fca7f (Feature) Incoming transactions (#333)
* Add `blockNumber` to transactions model

* Create `incomingTransaction` node in store and load it along with `transactions`

* Add incoming transfers to the Transactions table

* Rename `transactionHash` to `executionTxHash` for better incoming/outgoing txs unification in Transactions table

* Add incoming transactions details

* Add transaction type icon in table row

* Add snackbar notification for incoming txs

* Make incoming transaction snackbar to show on any tab

* Use makeStyles hooks

* Fix incoming amounts conversion from wei

* Make concurrent promise calls

* Use date to calculate transactions ids

* Prevent repeating messages

- also move logic to display snack bar into the notifications middleware

* Merge transactions and incomingTxs to the transactions selector

* Show 'Multiple incoming transfers' if they are more than 3

* Prevent incoming transactions snack bar for first-timer users

* Set ID as the default order

* Use constant for _incoming_ type
2019-12-13 17:45:28 +04:00
Mikhail Mikheev bc7d5836f6
Feature #180: Predict transaction nonce (#293)
* Dep bump

* Fetch transactions when safe view is mounted

* eslint fix

* Calculate new tx nonce from latest tx in service

* Fix tx cancellation, allow passing nonce to createTransaction

* dep bump

* Refactor createTransaction/processTransaction to use object as argument

* Adopting transactions table to new send tx flow with predicted nonces

* dep bump, disable esModule in file-loader options after new v5 release

* Don't show older tx annotation for already executed txs

* sort tx by nonce

* get new safe nonce after tx execution

* Bugfixes

* remove whitespace for showOlderTxAnnotation
2019-12-12 12:30:27 +04:00
Mikhail Mikheev 87a7796a84
set anonymizeIp to true (#335) 2019-12-12 12:29:29 +04:00
Agustin Pane 85ff11796e Feature #272: Google Analytics (#299)
* Adds google analytics tracking for every route

* Adds cookies acceptance check before tracking

* Fix react-ga dependency

* Fix cookieStore deletion

* Merge with #189-cookie-banner

* Fixs react ga version
Refactored HOC with hooks

* Fix TYPO

* Fix path for cookies utils

* Fix imports

* remove flow type definition for polish

* Add GA ID log

* Fix load GA After cookies acceptance
2019-12-05 12:54:42 +04:00
Agustin Pane 434e12edd1 Feature #169: Intercom (#301)
* Implements intercom
Adds REACT_APP_INTERCOM_ID_MAINNET and REACT_APP_INTERCOM_ID_RINKEBY env vars

* Adds .env.example

* Adds intercom env vars

* Updates env vars
Replaces "rinkeby" and "mainnet" with "non-production" and "production"

* Now loads intercom after the user accepted the analytics

* Add env variable for production intercom id

* Update .env.example

* Removes react-intercom
Fixs getIntercomId with default dev appID
Now loads intercom as script

* Renegerate flow-types
2019-12-04 17:19:13 +04:00
Mikhail Mikheev a15a8bf3c3 Use polyfill instead of navigator.clipboard because it doesn't work in safari 2019-11-15 18:29:55 +04:00
Mikhail Mikheev da1353be72 use network in storage prefix key 2019-09-30 13:24:44 +04:00
Germán Martínez 85177d3ddd Refactor error messages 2019-09-27 12:35:13 +02:00
Germán Martínez 5fc9fa6431 Format code 2019-09-12 17:39:55 +02:00
Germán Martínez 9d689a8f48 Remove Safe owners from storage 2019-05-22 12:56:11 +02:00
Mikhail Mikheev 0f7d68b575 eslint fix 2019-04-08 11:46:05 +04:00
Mikhail Mikheev 6e9799bd17 remove cookie store and session storage 2019-04-08 11:19:39 +04:00
Mikhail Mikheev e33c90c230 load safes from localstorage on app load 2019-04-04 17:35:32 +04:00
Mikhail Mikheev 01baabc7cb add loadFromStorage funC 2019-04-03 17:43:49 +04:00
Mikhail Mikheev 76bf32ec16 fix load function for storage 2019-04-01 18:02:27 +04:00
Mikhail Mikheev 1c0917d25a move safe storage logic to logic folder, refactor generic storage logic to use immortaldb 2019-04-01 17:50:56 +04:00
Mikhail Mikheev 633f8738b6 save active tokens via immortaldb 2019-03-27 19:30:32 +04:00
Mikhail Mikheev 7e150a2ff3 immortaldb wip 2019-03-26 19:18:36 +04:00
Mikhail Mikheev c62271bcb8 wip commit: removing side effects from tokens reducer to actions 2019-03-22 19:27:18 +04:00
Mikhail Mikheev 5c8dcb1d8f move token-related localstorage logic to toknes folder 2019-03-22 18:27:47 +04:00
Mikhail Mikheev 745bb06962 move tokens stuff to logic folder because in the new mockups their functionality moved to safe page 2019-03-20 19:13:53 +04:00
Mikhail Mikheev 2b968d53da minor eslint fixes 2019-03-19 18:34:17 +04:00
Mikhail Mikheev 5c358764d1 add a todo comment 2019-03-19 14:49:06 +04:00
mmv d4c6fda203 fetch tokens from relay api: fix tests, token model and other minor stuff 2019-03-13 20:00:25 +04:00
mmv 91c3c9fa91 Fix funds.toNumber is not a function 2019-03-13 15:01:02 +04:00
mmv f2dedc4ad2 add click to copy feature on safe page 2019-03-12 17:46:35 +04:00
apanizo b43aa2feaa #73 Update fetchTransaction action. Fetching info by safe address 2018-10-26 15:11:00 +02:00
apanizo 6bcc351fa2 Creating a log boundaries utility for wrapping react errors 2018-09-03 15:56:19 +02:00
apanizo 1b2504a6e2 Improve upperFirst method 2018-08-28 14:10:14 +02:00
apanizo 6c7b487724 WA-521 Mock signatures service in localstorage 2018-08-22 13:39:08 +02:00
apanizo be9bdd25c1 WA-521 Refactor ethereum modules under logic folder 2018-08-13 18:37:48 +02:00