diff --git a/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js
index dc2244d5..10447e87 100644
--- a/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js
+++ b/src/components/UI/TransferLogContainer/TransferLogContainer.strings.js
@@ -1,6 +1,6 @@
-import {getString} from '../../../utils';
+import utils from '../../../utils';
-const {title_txt, overview_txt, empty_msg_txt, view_more_txt} = getString(
+const {title_txt, overview_txt, empty_msg_txt, view_more_txt} = utils.getTranslation(
'menus.account.transferLogContainer'
);
diff --git a/src/components/UI/TransferMenuTab/TransferMenuTab.js b/src/components/UI/TransferMenuTab/TransferMenuTab.js
index 13cf8820..14dbcbbe 100644
--- a/src/components/UI/TransferMenuTab/TransferMenuTab.js
+++ b/src/components/UI/TransferMenuTab/TransferMenuTab.js
@@ -1,11 +1,14 @@
import PropTypes from 'prop-types';
import React from 'react';
-import {toClasses} from '../../../utils';
+import utils from '../../../utils';
import styles from './TransferMenuTab.module.scss';
export const TransferMenuTab = ({text, isActive, onClick}) => (
-
+
{text}
);
diff --git a/src/components/UI/WalletButton/WalletButton.js b/src/components/UI/WalletButton/WalletButton.js
index c70f1138..a0c4ae6c 100644
--- a/src/components/UI/WalletButton/WalletButton.js
+++ b/src/components/UI/WalletButton/WalletButton.js
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import {useColors} from '../../../hooks';
-import {shortenAddress} from '../../../utils';
+import utils from '../../../utils';
import {Button, DynamicIcon} from '../index';
import {WALLET_LOGO_SIZE} from './WalletButton.constants';
import {BTN_TXT} from './WalletButton.strings';
@@ -18,7 +18,7 @@ export const WalletButton = ({account, logoPath, onClick}) => {
height={40}
icon={
}
style={{borderWidth: '2px'}}
- text={BTN_TXT(shortenAddress(account))}
+ text={BTN_TXT(utils.wallet.shortenAddress(account))}
onClick={onClick}
/>
);
diff --git a/src/components/UI/WalletButton/WalletButton.strings.js b/src/components/UI/WalletButton/WalletButton.strings.js
index c8711844..b54ee676 100644
--- a/src/components/UI/WalletButton/WalletButton.strings.js
+++ b/src/components/UI/WalletButton/WalletButton.strings.js
@@ -1,4 +1,4 @@
-import {evaluate, getString} from '../../../utils';
+import utils from '../../../utils';
export const BTN_TXT = address =>
- evaluate(getString('containers.header.wallet_btn_txt'), {address});
+ utils.object.evaluate(utils.getTranslation('containers.header.wallet_btn_txt'), {address});
diff --git a/src/components/UI/WalletLogin/WalletLogin.js b/src/components/UI/WalletLogin/WalletLogin.js
index c0b601e1..068bc661 100644
--- a/src/components/UI/WalletLogin/WalletLogin.js
+++ b/src/components/UI/WalletLogin/WalletLogin.js
@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import {ReactComponent as ForwardIcon} from '../../../assets/svg/icons/forward.svg';
-import {capitalize} from '../../../utils';
+import utils from '../../../utils';
import {DynamicIcon} from '../index';
import styles from './WalletLogin.module.scss';
@@ -12,8 +12,8 @@ export const WalletLogin = ({name, description, logoPath, onClick}) => (
-
{capitalize(name)}
-
{capitalize(description)}
+
{utils.string.capitalize(name)}
+
{utils.string.capitalize(description)}
diff --git a/src/config/addresses/contracts/contracts.l1.js b/src/config/addresses/contracts/contracts.l1.js
index 210e347a..866391da 100644
--- a/src/config/addresses/contracts/contracts.l1.js
+++ b/src/config/addresses/contracts/contracts.l1.js
@@ -1,6 +1,6 @@
import {ChainType} from '../../../enums';
-export const MESSAGING_CONTRACT_ADDRESS = {
+export const STARKNET_CONTRACT_ADDRESS = {
[ChainType.MAIN.id]: '',
[ChainType.GOERLI.id]: '0xde29d060D45901Fb19ED6C6e959EB22d8626708e'
};
diff --git a/src/config/constants.js b/src/config/constants.js
new file mode 100644
index 00000000..e0e3bed5
--- /dev/null
+++ b/src/config/constants.js
@@ -0,0 +1,38 @@
+import {byChainId} from '../enums';
+import utils from '../utils';
+
+const constants = {
+ LOCAL_STORAGE_TRANSFERS_KEY: 'STARKGATE_TRANSFERS',
+ ETHERSCAN_URL: 'etherscan.io',
+ VOYAGER_URL: 'voyager.online',
+ LINKS: {
+ ETHERSCAN: {
+ text: 'etherscan',
+ txUrl: (chainId, hash) =>
+ utils.object.evaluate('{{url}}/tx/{{hash}}', {
+ url: byChainId(chainId).blockExplorerUrl,
+ hash
+ }),
+ accountUrl: (chainId, account) =>
+ utils.object.evaluate('{{url}}/address/{{account}}', {
+ url: byChainId(chainId).blockExplorerUrl,
+ account
+ })
+ },
+ VOYAGER: {
+ text: 'voyager',
+ txUrl: (chainId, hash) =>
+ utils.object.evaluate('{{url}}/tx/{{hash}}', {
+ url: byChainId(chainId).l2BlockExplorerUrl,
+ hash
+ }),
+ accountUrl: (chainId, account) =>
+ utils.object.evaluate('{{url}}/contract/{{account}}', {
+ url: byChainId(chainId).l2BlockExplorerUrl,
+ account
+ })
+ }
+ }
+};
+
+export default constants;
diff --git a/src/config/config.js b/src/config/envs.js
similarity index 72%
rename from src/config/config.js
rename to src/config/envs.js
index c4a7f234..4fd21c57 100644
--- a/src/config/config.js
+++ b/src/config/envs.js
@@ -1,6 +1,7 @@
-export default {
+const envs = {
autoConnect: Boolean(process.env.REACT_APP_AUTO_CONNECT),
- pollBalanceInterval: Number(process.env.REACT_APP_POLL_BALANCE_INTERVAL),
pollBlockNumberInterval: Number(process.env.REACT_APP_POLL_BLOCK_NUMBER_INTERVAL),
supportedChainIds: process.env.REACT_APP_SUPPORTED_CHAIN_IDS.split(' ').map(id => Number(id))
};
+
+export default envs;
diff --git a/src/config/strings.js b/src/config/strings.js
new file mode 100644
index 00000000..286e7804
--- /dev/null
+++ b/src/config/strings.js
@@ -0,0 +1,107 @@
+const strings = {
+ containers: {
+ header: {
+ chain_txt: '{{chainName}} testnet',
+ wallet_btn_txt: 'Account | {{address}}'
+ },
+ footer: {
+ rights_txt: '© 2022 StarkWare Industries Ltd. All Rights Reserved'
+ }
+ },
+ menus: {
+ back_btn_txt: 'Back',
+ login: {
+ title_txt: 'Login',
+ subtitle_txt: 'Please select {{networkName}} wallet to connect with this dApp:',
+ download_txt: ['Don’t have a wallet?', 'Download Here'],
+ modal_txt: 'Waiting for confirmation from {{walletName}}'
+ },
+ account: {
+ title_txt: '{{network}} Account',
+ copied_msg_txt: 'Copied!',
+ logout_btn_txt: 'Logout',
+ transferLogContainer: {
+ title_txt: 'Transfers log',
+ overview_txt: 'recent transfers',
+ empty_msg_txt: 'Transfers will appear here...',
+ view_more_txt: 'View more',
+ transferLog: {
+ complete_transfer_btn_txt: 'Complete transfer'
+ }
+ }
+ },
+ selectToken: {
+ title_txt: 'Select token from:',
+ search_placeholder: 'Token name, symbol, or address'
+ },
+ transfer: {
+ to_txt: 'to',
+ from_txt: 'from',
+ insufficient_balance_error_msg: 'Insufficient balance',
+ max_amount_error_msg:
+ 'StarkNet Alpha Limitation: transfer to StarkNet limited to {{maxAmount}} {{symbol}}.',
+ max_btn_txt: 'Max',
+ balance_title_txt: 'Available balance',
+ input_placeholder_txt: '0.00',
+ transfer_btn_txt: 'Transfer'
+ }
+ },
+ modals: {
+ transactionSubmitted: {
+ title_txt: 'Transaction sent',
+ btn_txt: 'View on {{explorer}}',
+ transfer_to_l1_txt:
+ 'Your transaction is now being processing on L2. When it will be accepted on-chain, we will promote you to complete your transfer.',
+ transfer_to_l2_txt: 'Your transaction has been sent to L2!',
+ complete_transfer_to_l1_txt: 'Your transaction is completed on L1!',
+ status_txt: 'Follow the transaction status on the right side of the browser.'
+ },
+ transferProgress: {
+ approval: {
+ type: 'Approval required',
+ message: 'Requesting permission to access your {{symbol}} funds.'
+ },
+ deposit: {
+ type: 'Transfer in progress',
+ message: 'Transferring {{amount}} {{symbol}} to L2...'
+ },
+ initiateWithdraw: {
+ type: 'Initiate transfer',
+ message: 'Initiating transfer of {{amount}} {{symbol}} from L2...'
+ },
+ waitForAccept: {
+ type: 'Transaction sent',
+ message: 'Waiting for transaction to be accepted on L2...'
+ },
+ withdraw: {
+ type: 'Transfer in progress',
+ message: 'Transferring {{amount}} {{symbol}} to L1...'
+ },
+ waitForConfirm: {
+ type: '{{walletName}}',
+ message: 'Waiting for confirmation from {{walletName}}'
+ },
+ confirm_txt: 'Confirm this transaction in your wallet',
+ error_title: 'Transaction error'
+ }
+ },
+ toasts: {
+ alpha_disclaimer_msg:
+ 'This is an ALPHA version of StarkNet, and its Bridge. As such, deyals may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.',
+ transfer_log_link: 'View on Transfer Log',
+ pendingTransfer: {
+ pending_txt: 'Waiting for transaction to be accepted on L2',
+ consumed_txt: 'Transaction accepted on L2',
+ rejected_txt: 'Transaction rejected on L2'
+ },
+ completeTransfer: {
+ title_txt: 'L2 finished processing your transfer!',
+ body_txt:
+ 'Click on Complete Transfer to transfer the funds from L2 Bridge to your L1 address.',
+ dismiss_btn_txt: 'Dismiss',
+ complete_transfer_btn_txt: 'Complete Transfer'
+ }
+ }
+};
+
+export default strings;
diff --git a/src/config/strings.json b/src/config/strings.json
deleted file mode 100644
index 551dbc74..00000000
--- a/src/config/strings.json
+++ /dev/null
@@ -1,101 +0,0 @@
-{
- "containers": {
- "header": {
- "chain_txt": "{{chainName}} testnet",
- "wallet_btn_txt": "Account | {{address}}"
- },
- "footer": {
- "rights_txt": "© 2022 StarkWare Industries Ltd. All Rights Reserved"
- }
- },
- "menus": {
- "back_btn_txt": "Back",
- "login": {
- "title_txt": "Login",
- "subtitle_txt": "Please select {{networkName}} wallet to connect with this dApp:",
- "download_txt": ["Don’t have a wallet?", "Download Here"],
- "modal_txt": "Waiting for confirmation from {{walletName}}"
- },
- "account": {
- "title_txt": "{{network}} Account",
- "copied_msg_txt": "Copied!",
- "logout_btn_txt": "Logout",
- "transferLogContainer": {
- "title_txt": "Transfers log",
- "overview_txt": "recent transfers",
- "empty_msg_txt": "Transfers will appear here...",
- "view_more_txt": "View more",
- "transferLog": {
- "complete_transfer_btn_txt": "Complete transfer"
- }
- }
- },
- "selectToken": {
- "title_txt": "Select token from:",
- "search_placeholder": "Token name, symbol, or address"
- },
- "transfer": {
- "to_txt": "to",
- "from_txt": "from",
- "insufficient_balance_error_msg": "Insufficient balance",
- "max_amount_error_msg": "StarkNet Alpha Limitation: transfer to StarkNet limited to {{maxAmount}} {{symbol}}.",
- "max_btn_txt": "Max",
- "balance_title_txt": "Available balance",
- "input_placeholder_txt": "0.00",
- "transfer_btn_txt": "Transfer"
- }
- },
- "modals": {
- "transactionSubmitted": {
- "title_txt": "Transaction sent",
- "btn_txt": "View on {{explorer}}",
- "transfer_to_l1_txt": "Your transaction is now being processing on L2. When it will be accepted on-chain, we will promote you to complete your transfer.",
- "transfer_to_l2_txt": "Your transaction has been sent to L2!",
- "complete_transfer_to_l1_txt": "Your transaction is completed on L1!",
- "status_txt": "Follow the transaction status on the right side of the browser."
- },
- "transferProgress": {
- "approval": {
- "type": "Approval required",
- "message": "Requesting permission to access your {{symbol}} funds."
- },
- "deposit": {
- "type": "Transfer in progress",
- "message": "Transferring {{amount}} {{symbol}} to L2..."
- },
- "initiateWithdraw": {
- "type": "Initiate transfer",
- "message": "Initiating transfer of {{amount}} {{symbol}} from L2..."
- },
- "waitForAccept": {
- "type": "Transaction sent",
- "message": "Waiting for transaction to be accepted on L2..."
- },
- "withdraw": {
- "type": "Transfer in progress",
- "message": "Transferring {{amount}} {{symbol}} to L1..."
- },
- "waitForConfirm": {
- "type": "{{walletName}}",
- "message": "Waiting for confirmation from {{walletName}}"
- },
- "confirm_txt": "Confirm this transaction in your wallet",
- "error_title": "Transaction error"
- }
- },
- "toasts": {
- "alpha_disclaimer_msg": "This is an ALPHA version of StarkNet, and its Bridge. As such, deyals may occur, and catastrophic bugs may lurk. Thanks, OGs, for trying it at this early stage.",
- "transfer_log_link": "View on Transfer Log",
- "pendingTransfer": {
- "pending_txt": "Waiting for transaction to be accepted on L2",
- "consumed_txt": "Transaction accepted on L2",
- "rejected_txt": "Transaction rejected on L2"
- },
- "completeTransfer": {
- "title_txt": "L2 finished processing your transfer!",
- "body_txt": "Click on Complete Transfer to transfer the funds from L2 Bridge to your L1 address.",
- "dismiss_btn_txt": "Dismiss",
- "complete_transfer_btn_txt": "Complete Transfer"
- }
- }
-}
diff --git a/src/config/wallets.js b/src/config/wallets.js
index b7889711..7aded763 100644
--- a/src/config/wallets.js
+++ b/src/config/wallets.js
@@ -1,6 +1,6 @@
import {WalletType} from '../enums';
-export default [
+const wallets = [
{
id: 'metamask',
name: 'MetaMask',
@@ -17,3 +17,5 @@ export default [
logoPath: 'wallets/argent/logo.svg'
}
];
+
+export default wallets;
diff --git a/src/constants.js b/src/constants.js
deleted file mode 100644
index f2311527..00000000
--- a/src/constants.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import {byChainId} from './enums';
-import {evaluate} from './utils';
-
-export const LOCAL_STORAGE_TRANSFERS_KEY = 'STARKGATE_TRANSFERS';
-export const ETHERSCAN_URL = 'etherscan.io';
-export const VOYAGER_URL = 'voyager.online';
-export const LINKS = {
- ETHERSCAN: {
- text: 'etherscan',
- txUrl: (chainId, hash) =>
- evaluate('{{url}}/tx/{{hash}}', {
- url: byChainId(chainId).blockExplorerUrl,
- hash
- }),
- accountUrl: (chainId, account) =>
- evaluate('{{url}}/address/{{account}}', {
- url: byChainId(chainId).blockExplorerUrl,
- account
- })
- },
- VOYAGER: {
- text: 'voyager',
- txUrl: (chainId, hash) =>
- evaluate('{{url}}/tx/{{hash}}', {
- url: byChainId(chainId).l2BlockExplorerUrl,
- hash
- }),
- accountUrl: (chainId, account) =>
- evaluate('{{url}}/contract/{{account}}', {
- url: byChainId(chainId).l2BlockExplorerUrl,
- account
- })
- }
-};
diff --git a/src/enums/ChainType.js b/src/enums/ChainType.js
index c7df6276..6c7b0201 100644
--- a/src/enums/ChainType.js
+++ b/src/enums/ChainType.js
@@ -1,4 +1,6 @@
-import {ETHERSCAN_URL, VOYAGER_URL} from '../constants';
+import constants from '../config/constants';
+
+const {ETHERSCAN_URL, VOYAGER_URL} = constants;
export const ChainType = {
MAIN: {
diff --git a/src/enums/TransactionStatus.js b/src/enums/TransactionStatus.js
index 6932592d..3f21e6be 100644
--- a/src/enums/TransactionStatus.js
+++ b/src/enums/TransactionStatus.js
@@ -31,6 +31,15 @@ export const TransactionConsumedStatuses = [
TransactionStatus.PENDING
];
+export const TransactionStatusStep = {
+ NOT_RECEIVED: 0,
+ RECEIVED: 1,
+ PENDING: 2,
+ ACCEPTED_ON_L2: 3,
+ ACCEPTED_ON_L1: 4,
+ REJECTED: 5
+};
+
export const isPending = status => TransactionPendingStatuses.includes(status);
export const isConsumed = status => TransactionConsumedStatuses.includes(status);
diff --git a/src/hooks/useConfig.js b/src/hooks/useConfig.js
index df179418..0f7728e1 100644
--- a/src/hooks/useConfig.js
+++ b/src/hooks/useConfig.js
@@ -1,5 +1,5 @@
import {useMemo} from 'react';
-import config from '../config/config.js';
+import config from '../config/envs.js';
export const useConfig = () => useMemo(() => config, []);
diff --git a/src/hooks/useContract.js b/src/hooks/useContract.js
index 471b0faa..b6f472e9 100644
--- a/src/hooks/useContract.js
+++ b/src/hooks/useContract.js
@@ -3,15 +3,15 @@ import {useCallback, useMemo} from 'react';
import {L1_ERC20_ABI, L1_ERC20_BRIDGE_ABI, L1_ETH_BRIDGE_ABI, L1_MESSAGING_ABI} from '../abis/l1';
import {L2_BRIDGE_ABI, L2_ERC20_ABI} from '../abis/l2';
import {useTransferData} from '../components/Features/Transfer/Transfer.hooks';
-import {MESSAGING_CONTRACT_ADDRESS} from '../config/addresses';
+import {STARKNET_CONTRACT_ADDRESS} from '../config/addresses';
import {NetworkType} from '../enums';
import {useL1Token} from '../providers/TokensProvider';
import {useL1Wallet, useWallets} from '../providers/WalletsProvider';
-import {l1_getContract, l2_getContract} from '../utils/contract';
+import utils from '../utils';
const cache = {};
-export const useContract = (ABI, getContractHandler = l1_getContract) => {
+export const useContract = (ABI, getContractHandler = utils.blockchain.ethereum.createContract) => {
const {chainId} = useWallets();
return useCallback(
addresses => {
@@ -55,7 +55,7 @@ export const useTokenBridgeContract = () => {
};
export const useL2TokenContract = () => {
- const getContract = useContract(L2_ERC20_ABI, l2_getContract);
+ const getContract = useContract(L2_ERC20_ABI, utils.blockchain.starknet.createContract);
return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]);
};
@@ -64,13 +64,13 @@ export const useL1TokenContract = () => {
return useCallback(tokenAddresses => getContract(tokenAddresses), [getContract]);
};
-export const useMessagingContract = () => {
+export const useStarknetContract = () => {
const getContract = useContract(L1_MESSAGING_ABI);
- return useMemo(() => getContract(MESSAGING_CONTRACT_ADDRESS), [getContract]);
+ return useMemo(() => getContract(STARKNET_CONTRACT_ADDRESS), [getContract]);
};
export const useL2TokenBridgeContract = () => {
- const getContract = useContract(L2_BRIDGE_ABI, l2_getContract);
+ const getContract = useContract(L2_BRIDGE_ABI, utils.blockchain.starknet.createContract);
return useCallback(bridgeAddress => getContract(bridgeAddress), [getContract]);
};
diff --git a/src/hooks/useEventListener.js b/src/hooks/useEventListener.js
index 542abd00..eee3392b 100644
--- a/src/hooks/useEventListener.js
+++ b/src/hooks/useEventListener.js
@@ -5,8 +5,8 @@ import {TransactionHashPrefix} from '../enums';
import {starknet} from '../libs';
import {useL1Token, useL2Token} from '../providers/TokensProvider';
import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider';
-import {txHash} from '../utils';
-import {useMessagingContract, useTokenBridgeContract} from './useContract';
+import utils from '../utils';
+import {useStarknetContract, useTokenBridgeContract} from './useContract';
import {useLogger} from './useLogger';
const HOOK_MODULE = 'useEventListener';
@@ -16,7 +16,7 @@ export const useLogMessageToL2Listener = () => {
const selectedToken = useSelectedToken();
const getL1Token = useL1Token();
const getL2Token = useL2Token();
- const messagingContract = useMessagingContract();
+ const starknetContract = useStarknetContract();
const addEventListener = useEventListener();
const {chainId} = useL1Wallet();
@@ -26,7 +26,7 @@ export const useLogMessageToL2Listener = () => {
const l1BridgeAddress = getL1Token(symbol).bridgeAddress[chainId];
const l2BridgeAddress = getL2Token(symbol).bridgeAddress[chainId];
try {
- const event = await addEventListener(messagingContract, 'LogMessageToL2', {
+ const event = await addEventListener(starknetContract, 'LogMessageToL2', {
filter: {
to_address: l2BridgeAddress,
from_address: l1BridgeAddress,
@@ -35,7 +35,7 @@ export const useLogMessageToL2Listener = () => {
});
logger.log('Event received', {event});
const {to_address, from_address, selector, payload, nonce} = event.returnValues;
- return txHash(
+ return utils.blockchain.starknet.getTransactionHash(
TransactionHashPrefix.L1_HANDLER,
from_address,
to_address,
@@ -48,7 +48,7 @@ export const useLogMessageToL2Listener = () => {
logger.error('Event error', {ex});
return Promise.reject(ex.message);
}
- }, [addEventListener, chainId, getL1Token, getL2Token, logger, messagingContract, selectedToken]);
+ }, [addEventListener, chainId, getL1Token, getL2Token, logger, starknetContract, selectedToken]);
};
export const useLogDepositListener = () => {
diff --git a/src/hooks/useLogger.js b/src/hooks/useLogger.js
index 739c44bd..8ab47e9a 100644
--- a/src/hooks/useLogger.js
+++ b/src/hooks/useLogger.js
@@ -1,3 +1,3 @@
-import {getLogger} from '../services';
+import utils from '../utils';
-export const useLogger = name => getLogger(name);
+export const useLogger = name => utils.logger.getLogger(name);
diff --git a/src/hooks/useTokenBalance.js b/src/hooks/useTokenBalance.js
index b72080da..421dd343 100644
--- a/src/hooks/useTokenBalance.js
+++ b/src/hooks/useTokenBalance.js
@@ -2,7 +2,7 @@ import {useCallback} from 'react';
import {balanceOf, ethBalanceOf} from '../api/erc20';
import {useTransferData} from '../components/Features/Transfer/Transfer.hooks';
-import {isEth} from '../utils';
+import utils from '../utils';
import {useL1TokenContract, useL2TokenContract} from './useContract';
export const useTokenBalance = account => {
@@ -32,7 +32,7 @@ export const useL1TokenBalance = account => {
return useCallback(
async token => {
const {tokenAddress, decimals} = token;
- return isEth(token)
+ return utils.token.isEth(token)
? await ethBalanceOf(account)
: await balanceOf({account, decimals, contract: getContract(tokenAddress)}, true);
},
diff --git a/src/hooks/useTransfer.js b/src/hooks/useTransfer.js
index 632ed5ff..d9a3e3d4 100644
--- a/src/hooks/useTransfer.js
+++ b/src/hooks/useTransfer.js
@@ -14,8 +14,7 @@ import {starknet} from '../libs';
import {useL1Token, useTokens} from '../providers/TokensProvider';
import {useTransfers} from '../providers/TransfersProvider';
import {useL1Wallet, useL2Wallet} from '../providers/WalletsProvider';
-import {isEth} from '../utils';
-import {l2_waitForTransaction} from '../utils/contract';
+import utils from '../utils';
import {useL1TokenBridgeContract, useTokenBridgeContract, useTokenContract} from './useContract';
import {useLogMessageToL2Listener} from './useEventListener';
import {useLogger} from './useLogger';
@@ -39,7 +38,7 @@ export const useTransferToL2 = () => {
try {
logger.log('TransferToL2 called');
const {symbol, decimals, tokenAddress, bridgeAddress, name} = selectedToken;
- const isEthToken = isEth(symbol);
+ const isEthToken = utils.token.isEth(symbol);
const bridgeContract = getTokenBridgeContract(bridgeAddress);
const depositHandler = isEthToken ? depositEth : deposit;
logger.log('Prepared contract and handler', {isEthToken, bridgeContract, depositHandler});
@@ -145,10 +144,16 @@ export const useTransferToL1 = () => {
logger.log('Tx hash received', {transaction_hash});
handleProgress(progressOptions.initiateWithdraw(amount, symbol));
logger.log('Waiting for tx to be received on L2');
- await l2_waitForTransaction(transaction_hash, TransactionStatus.RECEIVED);
+ await utils.blockchain.starknet.waitForTransaction(
+ transaction_hash,
+ TransactionStatus.RECEIVED
+ );
handleProgress(progressOptions.waitForAccept());
logger.log('Waiting for tx to be accepted on L2');
- await l2_waitForTransaction(transaction_hash);
+ await utils.blockchain.starknet.waitForTransaction(
+ transaction_hash,
+ TransactionStatus.PENDING
+ );
logger.log('Done', {transaction_hash});
handleData({
type: ActionType.TRANSFER_TO_L1,
@@ -237,7 +242,7 @@ const useTransfer = () => {
const hideModal = useHideModal();
const showTransactionSubmittedModal = useTransactionSubmittedModal();
const {addTransfer} = useTransfers();
- const {updateTokens} = useTokens();
+ const {updateTokenBalance} = useTokens();
const [, , clearAmount] = useAmount();
const handleProgress = progress => {
@@ -252,7 +257,7 @@ const useTransfer = () => {
const handleData = data => {
addTransfer(data);
showTransactionSubmittedModal(data);
- updateTokens();
+ updateTokenBalance(data.symbol);
clearAmount();
};
diff --git a/src/hooks/useTransferProgress.js b/src/hooks/useTransferProgress.js
index f64dea2e..a8fe5452 100644
--- a/src/hooks/useTransferProgress.js
+++ b/src/hooks/useTransferProgress.js
@@ -1,14 +1,14 @@
import {useMemo} from 'react';
-import {evaluate, getString} from '../utils';
+import utils from '../utils';
export const useTransferProgress = () => {
- const transferProgressStrings = getString('modals.transferProgress');
+ const transferProgressStrings = utils.getTranslation('modals.transferProgress');
return useMemo(
() => ({
approval: symbol => {
const {approval} = transferProgressStrings;
- const message = evaluate(approval.message, {symbol});
+ const message = utils.object.evaluate(approval.message, {symbol});
return {
type: approval.type,
message
@@ -16,7 +16,7 @@ export const useTransferProgress = () => {
},
deposit: (amount, symbol) => {
const {deposit} = transferProgressStrings;
- const message = evaluate(deposit.message, {amount, symbol});
+ const message = utils.object.evaluate(deposit.message, {amount, symbol});
return {
type: deposit.type,
message
@@ -24,7 +24,7 @@ export const useTransferProgress = () => {
},
initiateWithdraw: (amount, symbol) => {
const {initiateWithdraw} = transferProgressStrings;
- const message = evaluate(initiateWithdraw.message, {amount, symbol});
+ const message = utils.object.evaluate(initiateWithdraw.message, {amount, symbol});
return {
type: initiateWithdraw.type,
message
@@ -32,8 +32,8 @@ export const useTransferProgress = () => {
},
waitForConfirm: walletName => {
const {waitForConfirm} = transferProgressStrings;
- const type = evaluate(waitForConfirm.type, {walletName});
- const message = evaluate(waitForConfirm.message, {walletName});
+ const type = utils.object.evaluate(waitForConfirm.type, {walletName});
+ const message = utils.object.evaluate(waitForConfirm.message, {walletName});
return {
type,
message
@@ -48,7 +48,7 @@ export const useTransferProgress = () => {
},
withdraw: (amount, symbol) => {
const {withdraw} = transferProgressStrings;
- const message = evaluate(withdraw.message, {amount, symbol});
+ const message = utils.object.evaluate(withdraw.message, {amount, symbol});
return {
type: withdraw.type,
message
diff --git a/src/hooks/useWalletHandlerProvider.js b/src/hooks/useWalletHandlerProvider.js
index 19605591..3a1d8cb7 100644
--- a/src/hooks/useWalletHandlerProvider.js
+++ b/src/hooks/useWalletHandlerProvider.js
@@ -1,11 +1,11 @@
import {useCallback, useEffect, useState} from 'react';
import WalletsConfig from '../config/wallets.js';
-import {ArgentHandler, MetaMaskHandler} from '../services';
+import {ArgentX, MetaMask} from '../wallets';
const SUPPORTED_HANDLERS_REGISTRY = {
- metamask: MetaMaskHandler,
- argent: ArgentHandler
+ metamask: MetaMask,
+ argent: ArgentX
};
export const useWalletHandlerProvider = () => {
diff --git a/src/index.js b/src/index.js
index 52e82815..b4a8eb10 100644
--- a/src/index.js
+++ b/src/index.js
@@ -5,13 +5,12 @@ import {App} from './App';
import {ModalProvider} from './components/Features';
import './index.scss';
import {Providers} from './providers';
-import {getLogger, setLogLevel} from './services';
-import {getUrlParameter, printPackageInfo} from './utils';
+import utils from './utils';
-printPackageInfo(process.env.REACT_APP_NAME, process.env.REACT_APP_VERSION, '#734d7e');
+utils.printPackageInfo(process.env.REACT_APP_NAME, process.env.REACT_APP_VERSION, '#734d7e');
-if (process.env.NODE_ENV === 'development' || getUrlParameter('debugApp')) {
- setLogLevel(getLogger().DEBUG);
+if (process.env.NODE_ENV === 'development' || utils.browser.getUrlParameter('debugApp')) {
+ utils.logger.setLogLevel(utils.logger.getLogger().DEBUG);
}
ReactDOM.render(
diff --git a/src/providers/TokensProvider/TokensProvider.js b/src/providers/TokensProvider/TokensProvider.js
index 0c45daf2..ac85b8de 100644
--- a/src/providers/TokensProvider/TokensProvider.js
+++ b/src/providers/TokensProvider/TokensProvider.js
@@ -1,14 +1,13 @@
import PropTypes from 'prop-types';
import React, {useEffect, useReducer} from 'react';
-import {useLogger, useConfig} from '../../hooks';
+import {useLogger} from '../../hooks';
import {useL1TokenBalance, useL2TokenBalance} from '../../hooks/useTokenBalance';
import {useL1Wallet, useL2Wallet} from '../WalletsProvider';
import {TokensContext} from './tokens-context';
import {actions, initialState, reducer} from './tokens-reducer';
export const TokensProvider = ({children}) => {
- const {pollBalanceInterval} = useConfig();
const logger = useLogger(TokensProvider.displayName);
const [tokens, dispatch] = useReducer(reducer, initialState);
const {account: l1Account} = useL1Wallet();
@@ -17,17 +16,15 @@ export const TokensProvider = ({children}) => {
const getL2TokenBalance = useL2TokenBalance(l2Account);
useEffect(() => {
- updateTokens();
- const intervalId = setInterval(() => {
- updateTokens();
- }, pollBalanceInterval);
- return () => clearInterval(intervalId);
- }, [pollBalanceInterval]);
+ updateTokenBalance();
+ }, []);
- const updateTokens = () => {
- logger.log(`It's time to update tokens balances!`);
- for (let index = 0; index < tokens.length; index++) {
- const token = tokens[index];
+ const updateTokenBalance = symbol => {
+ logger.log(`Update token balance`, {symbol});
+ const tokensToUpdate = symbol ? tokens.filter(token => token.symbol === symbol) : tokens;
+ logger.log(`Tokens to update`, {tokensToUpdate});
+ for (let index = 0; index < tokensToUpdate.length; index++) {
+ const token = tokensToUpdate[index];
if (token.isLoading) {
logger.log('Token already loading, skip balance update');
break;
@@ -63,7 +60,7 @@ export const TokensProvider = ({children}) => {
const context = {
tokens,
- updateTokens
+ updateTokenBalance
};
return
{children};
diff --git a/src/providers/TokensProvider/tokens-context.js b/src/providers/TokensProvider/tokens-context.js
index 8c4a1357..52baec2b 100644
--- a/src/providers/TokensProvider/tokens-context.js
+++ b/src/providers/TokensProvider/tokens-context.js
@@ -2,5 +2,5 @@ import {createContext} from 'react';
export const TokensContext = createContext({
tokens: [],
- updateTokens: () => {}
+ updateTokenBalance: symbol => symbol
});
diff --git a/src/providers/TokensProvider/tokens-hooks.js b/src/providers/TokensProvider/tokens-hooks.js
index b772ee76..f6f590ad 100644
--- a/src/providers/TokensProvider/tokens-hooks.js
+++ b/src/providers/TokensProvider/tokens-hooks.js
@@ -7,14 +7,14 @@ export const useTokens = () => {
const {isL1} = useTransferData();
const l2Tokens = useL2Tokens();
const l1Tokens = useL1Tokens();
- const {updateTokens} = useContext(TokensContext);
+ const {updateTokenBalance} = useContext(TokensContext);
const [tokens, setTokens] = useState(isL1 ? l1Tokens : l2Tokens);
useEffect(() => {
setTokens(isL1 ? l1Tokens : l2Tokens);
}, [isL1, l2Tokens, l1Tokens]);
- return {tokens, updateTokens};
+ return {tokens, updateTokenBalance};
};
export const useL2Tokens = () => {
diff --git a/src/providers/TransfersProvider/TransfersProvider.js b/src/providers/TransfersProvider/TransfersProvider.js
index 6af38379..aa57d499 100644
--- a/src/providers/TransfersProvider/TransfersProvider.js
+++ b/src/providers/TransfersProvider/TransfersProvider.js
@@ -2,22 +2,24 @@ import PropTypes from 'prop-types';
import React, {useEffect, useReducer} from 'react';
import useDeepCompareEffect from 'use-deep-compare-effect';
-import {LOCAL_STORAGE_TRANSFERS_KEY} from '../../constants';
+import constants from '../../config/constants';
import {isCompleted} from '../../enums';
import {useLogger} from '../../hooks';
import {starknet} from '../../libs';
-import {StorageManager} from '../../services';
+import utils from '../../utils';
import {useBlockHash} from '../BlockHashProvider';
import {TransfersContext} from './transfers-context';
import {actions, initialState, reducer} from './transfers-reducer';
+const {LOCAL_STORAGE_TRANSFERS_KEY} = constants;
+
export const TransfersProvider = ({children}) => {
const logger = useLogger(TransfersProvider.displayName);
const [transfers, dispatch] = useReducer(reducer, initialState);
const blockHash = useBlockHash();
useEffect(() => {
- const storedTransfers = StorageManager.getItem(LOCAL_STORAGE_TRANSFERS_KEY);
+ const storedTransfers = utils.storage.getItem(LOCAL_STORAGE_TRANSFERS_KEY);
if (Array.isArray(storedTransfers)) {
setTransfers(storedTransfers);
}
@@ -25,15 +27,12 @@ export const TransfersProvider = ({children}) => {
useDeepCompareEffect(() => {
const updateTransfers = async () => {
- logger.log(`It's time to update transfers!`);
+ logger.log(`Update transfers`);
if (!blockHash) {
return;
}
const checkTransaction = async transfer => {
- if (isCompleted(transfer.status)) {
- return transfer;
- }
- if (transfer.lastChecked === blockHash) {
+ if (isCompleted(transfer.status) || transfer.lastChecked === blockHash) {
return transfer;
}
try {
@@ -65,7 +64,7 @@ export const TransfersProvider = ({children}) => {
logger.log(`Done update transfers`, {newTransfers});
if (newTransfers.length) {
setTransfers(newTransfers);
- StorageManager.setItem(LOCAL_STORAGE_TRANSFERS_KEY, newTransfers);
+ utils.storage.setItem(LOCAL_STORAGE_TRANSFERS_KEY, newTransfers);
}
};
updateTransfers();
diff --git a/src/services/index.js b/src/services/index.js
deleted file mode 100644
index 22a624ad..00000000
--- a/src/services/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from './wallet-handlers';
-export * from './storage-manager';
-export * from './logger';
diff --git a/src/services/wallet-handlers/index.js b/src/services/wallet-handlers/index.js
deleted file mode 100644
index e0475038..00000000
--- a/src/services/wallet-handlers/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './argent-handler';
-export * from './metamask-handler';
diff --git a/src/utils/blockchain/ethereum.js b/src/utils/blockchain/ethereum.js
new file mode 100644
index 00000000..5649dd9e
--- /dev/null
+++ b/src/utils/blockchain/ethereum.js
@@ -0,0 +1,21 @@
+import {web3} from '../../libs';
+
+export const createContract = (address, ABI) => {
+ return new web3.eth.Contract(ABI, address);
+};
+
+export const callContract = async (contract, method, args = []) => {
+ try {
+ return await contract.methods?.[method](...args).call();
+ } catch (ex) {
+ return Promise.reject(ex);
+ }
+};
+
+export const sendTransaction = async (contract, method, args = [], options = {}, cb = () => {}) => {
+ try {
+ return contract.methods?.[method](...args).send(options, cb);
+ } catch (ex) {
+ return Promise.reject(ex);
+ }
+};
diff --git a/src/utils/blockchain/index.js b/src/utils/blockchain/index.js
new file mode 100644
index 00000000..caf1867e
--- /dev/null
+++ b/src/utils/blockchain/index.js
@@ -0,0 +1,2 @@
+export * as ethereum from './ethereum';
+export * as starknet from './starknet';
diff --git a/src/utils/blockchain/starknet.js b/src/utils/blockchain/starknet.js
new file mode 100644
index 00000000..0bb34566
--- /dev/null
+++ b/src/utils/blockchain/starknet.js
@@ -0,0 +1,81 @@
+import {byChainId, isRejected, TransactionStatusStep} from '../../enums';
+import {getStarknet, starknet} from '../../libs';
+
+const {compileCalldata, Contract, defaultProvider, stark, hash, number} = starknet;
+
+export const createContract = (address, ABI) => {
+ return new Contract(ABI, address);
+};
+
+export const callContract = async (contract, method, args = [], blockIdentifier = null) => {
+ try {
+ return await contract.call(method, ...args, blockIdentifier);
+ } catch (ex) {
+ return Promise.reject(ex);
+ }
+};
+
+export const sendTransaction = async (contract, method, args = {}) => {
+ try {
+ const methodSelector = stark.getSelectorFromName(method);
+ const compiledCalldata = compileCalldata(args);
+ return getStarknet().signer.invokeFunction(
+ contract.connectedTo,
+ methodSelector,
+ compiledCalldata
+ );
+ } catch (ex) {
+ return Promise.reject(ex);
+ }
+};
+
+export const waitForTransaction = async (transactionHash, requiredStatus, retryInterval = 5000) => {
+ return new Promise((resolve, reject) => {
+ let processing = false;
+ const intervalId = setInterval(async () => {
+ if (processing) return;
+ const statusPromise = defaultProvider.getTransactionStatus(transactionHash);
+ processing = true;
+ try {
+ const {tx_status} = await statusPromise;
+ if (
+ tx_status === requiredStatus ||
+ (TransactionStatusStep[tx_status] > TransactionStatusStep[requiredStatus] &&
+ !isRejected(tx_status))
+ ) {
+ clearInterval(intervalId);
+ resolve(tx_status);
+ } else if (isRejected(tx_status)) {
+ clearInterval(intervalId);
+ reject();
+ } else {
+ processing = false;
+ }
+ } catch (ex) {
+ processing = false;
+ }
+ }, retryInterval);
+ });
+};
+
+export const getTransactionHash = (
+ txHashPrefix,
+ fromAddress,
+ toAddress,
+ selector,
+ payload,
+ chainId,
+ ...additionalData
+) => {
+ const calldata = [number.hexToDecimalString(fromAddress), ...payload];
+ const calldataHash = hash.hashCalldata(calldata);
+ const {l2IdPrefix} = byChainId(chainId);
+ return hash.computeHashOnElements([
+ txHashPrefix,
+ toAddress,
+ selector,
+ calldataHash,
+ l2IdPrefix,
+ ...additionalData
+ ]);
+};
diff --git a/src/utils/contract.js b/src/utils/contract.js
deleted file mode 100644
index 288cdd44..00000000
--- a/src/utils/contract.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import {TransactionConsumedStatuses} from '../enums';
-import {getStarknet, starknet, web3} from '../libs';
-import {getLogger} from '../services';
-
-export const l1_getContract = (address, ABI) => new web3.eth.Contract(ABI, address);
-
-export const l1_callContract = async (contract, method, args = []) => {
- try {
- return await contract.methods?.[method](...args).call();
- } catch (ex) {
- return Promise.reject(ex);
- }
-};
-
-export const l1_sendTransaction = async (
- contract,
- method,
- args = [],
- options = {},
- cb = () => {}
-) => {
- try {
- return contract.methods?.[method](...args).send(options, cb);
- } catch (ex) {
- return Promise.reject(ex);
- }
-};
-
-export const l2_getContract = (address, ABI) => new starknet.Contract(ABI, address);
-
-export const l2_callContract = async (contract, method, args = [], blockIdentifier = null) => {
- try {
- return await contract.call(method, ...args, blockIdentifier);
- } catch (ex) {
- return Promise.reject(ex);
- }
-};
-
-export const l2_sendTransaction = async (contract, method, args = {}) => {
- try {
- const methodSelector = starknet.stark.getSelectorFromName(method);
- const compiledCalldata = starknet.compileCalldata(args);
- return getStarknet().signer.invokeFunction(
- contract.connectedTo,
- methodSelector,
- compiledCalldata
- );
- } catch (ex) {
- return Promise.reject(ex);
- }
-};
-
-export const l2_waitForTransaction = async (hash, customStatus, retryInterval = 5000) => {
- const logger = getLogger('l2_waitForTransaction');
- return new Promise(resolve => {
- let processing = false;
- const waitingForStatuses = customStatus ? [customStatus] : TransactionConsumedStatuses;
- logger.debug(`Waiting for transaction with statuses ${waitingForStatuses.join(' ')}`);
- const intervalId = setInterval(async () => {
- if (processing) return;
- logger.debug(`Checking transaction again`);
- const statusPromise = starknet.defaultProvider.getTransactionStatus(hash);
- processing = true;
- try {
- const {tx_status} = await statusPromise;
- logger.debug(`Transaction status is ${tx_status}`);
- if (waitingForStatuses.includes(tx_status)) {
- logger.debug(`We got our desired status!`);
- clearInterval(intervalId);
- resolve();
- } else {
- logger.debug(`We haven't got our desired status, trying again.`);
- processing = false;
- }
- } catch (ex) {
- logger.error(`Error while calling get status: ${ex.message}, trying again.`);
- processing = false;
- }
- }, retryInterval);
- });
-};
diff --git a/src/utils/hash.js b/src/utils/hash.js
index f17bce92..bdbe1b5d 100644
--- a/src/utils/hash.js
+++ b/src/utils/hash.js
@@ -1,28 +1,5 @@
-import {byChainId} from '../enums';
import {starknet} from '../libs';
-export const txHash = (
- txHashPrefix,
- fromAddress,
- toAddress,
- selector,
- payload,
- chainId,
- ...additionalData
-) => {
- const calldata = [starknet.number.hexToDecimalString(fromAddress), ...payload];
- const calldataHash = starknet.hash.hashCalldata(calldata);
- const {l2IdPrefix} = byChainId(chainId);
- return starknet.hash.computeHashOnElements([
- txHashPrefix,
- toAddress,
- selector,
- calldataHash,
- l2IdPrefix,
- ...additionalData
- ]);
-};
-
export const hashEquals = (...data) => {
return !!data.reduce((d1, d2) =>
starknet.hash.computeHashOnElements(d1) === starknet.hash.computeHashOnElements(d2) ? d1 : ''
diff --git a/src/utils/helpers.js b/src/utils/helpers.js
deleted file mode 100644
index 39da649b..00000000
--- a/src/utils/helpers.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import strings from '../config/strings.json';
-import {getLogger, getLogLevel, setLogLevel} from '../services';
-import {getPropertyPath} from './object';
-
-export const printPackageInfo = (name, version, color) => {
- const currentLogLevel = getLogLevel();
- setLogLevel(getLogger().INFO);
- getLogger().info(`%c ${name} v${version}`, `color: ${color || '#ff98f9'}; font-size: large`);
- setLogLevel(currentLogLevel);
-};
-
-export const getString = path => getPropertyPath(strings, path);
diff --git a/src/utils/index.js b/src/utils/index.js
index 9be9adf3..eb94672a 100644
--- a/src/utils/index.js
+++ b/src/utils/index.js
@@ -1,9 +1,41 @@
-export * from './wallet';
-export * from './browser';
-export * from './string';
-export * from './token';
-export * from './number';
-export * from './hash';
-export * from './date';
-export * from './object';
-export * from './helpers';
+import strings from '../config/strings';
+import * as blockchain from './blockchain';
+import * as browser from './browser';
+import * as date from './date';
+import * as hash from './hash';
+import * as logger from './logger';
+import * as object from './object';
+import * as parser from './parser';
+import * as storage from './storage';
+import * as string from './string';
+import * as token from './token';
+import * as wallet from './wallet';
+
+const {getLogger, getLogLevel, setLogLevel} = logger;
+
+const printPackageInfo = (name, version, color) => {
+ const currentLogLevel = getLogLevel();
+ setLogLevel(getLogger().INFO);
+ getLogger().info(`%c ${name} v${version}`, `color: ${color || '#ff98f9'}; font-size: large`);
+ setLogLevel(currentLogLevel);
+};
+
+const getTranslation = path => object.getPropertyPath(strings, path);
+
+const utils = {
+ wallet,
+ browser,
+ string,
+ token,
+ parser,
+ hash,
+ date,
+ object,
+ blockchain,
+ logger,
+ storage,
+ printPackageInfo,
+ getTranslation
+};
+
+export default utils;
diff --git a/src/services/logger.js b/src/utils/logger.js
similarity index 100%
rename from src/services/logger.js
rename to src/utils/logger.js
diff --git a/src/utils/number.js b/src/utils/parser.js
similarity index 56%
rename from src/utils/number.js
rename to src/utils/parser.js
index 7061ae51..e122a489 100644
--- a/src/utils/number.js
+++ b/src/utils/parser.js
@@ -1,39 +1,42 @@
import {web3, starknet} from '../libs';
+const {number, uint256} = starknet;
+const {utils} = web3;
+
const TEN = 10;
const DEFAULT_DECIMALS = 18;
export const UNIT_MAP = {};
-for (let key in web3.utils.unitMap) {
- UNIT_MAP[web3.utils.unitMap[key]] = key;
+for (let key in utils.unitMap) {
+ UNIT_MAP[utils.unitMap[key]] = key;
}
export const parseToDecimals = (value, decimals = DEFAULT_DECIMALS) => {
- return web3.utils.toWei(value, UNIT_MAP[Math.pow(TEN, decimals)]);
+ return utils.toWei(value, UNIT_MAP[Math.pow(TEN, decimals)]);
};
export const parseFromDecimals = (value, decimals = DEFAULT_DECIMALS) => {
- return Number(web3.utils.fromWei(value, UNIT_MAP[Math.pow(TEN, decimals)]));
+ return Number(utils.fromWei(value, UNIT_MAP[Math.pow(TEN, decimals)]));
};
export const parseFromFelt = value => {
- return starknet.number.toBN(value).toNumber();
+ return number.toBN(value).toNumber();
};
export const parseToFelt = value => {
- return starknet.number.toBN(value).toString();
+ return number.toBN(value).toString();
};
export const parseToUint256 = (value, decimals = DEFAULT_DECIMALS) => {
const decimalsValue = parseToDecimals(value, decimals);
- const uint256 = starknet.uint256.bnToUint256(starknet.number.toBN(decimalsValue));
+ const uint256Value = uint256.bnToUint256(number.toBN(decimalsValue));
return {
type: 'struct',
- ...uint256
+ ...uint256Value
};
};
export const parseFromUint256 = (value, decimals = DEFAULT_DECIMALS) => {
- const bnString = starknet.uint256.uint256ToBN(value).toString();
+ const bnString = uint256.uint256ToBN(value).toString();
return parseFromDecimals(bnString, decimals);
};
diff --git a/src/services/storage-manager.js b/src/utils/storage.js
similarity index 72%
rename from src/services/storage-manager.js
rename to src/utils/storage.js
index 81b26686..b944be7d 100644
--- a/src/services/storage-manager.js
+++ b/src/utils/storage.js
@@ -1,19 +1,18 @@
-export const StorageManager = {
- setItem: (key, item) => {
- if (localStorage) {
- localStorage.setObjectHash(key, JSON.stringify(item));
- return true;
- }
- return false;
- },
- getItem: key => {
- if (localStorage) {
- let item = localStorage.getObjectHash(key);
- try {
- return JSON.parse(Object.values(item).join(''));
- } catch (ex) {
- return item;
- }
+export const setItem = (key, item) => {
+ if (localStorage) {
+ localStorage.setObjectHash(key, JSON.stringify(item));
+ return true;
+ }
+ return false;
+};
+
+export const getItem = key => {
+ if (localStorage) {
+ let item = localStorage.getObjectHash(key);
+ try {
+ return JSON.parse(Object.values(item).join(''));
+ } catch (ex) {
+ return item;
}
}
};
diff --git a/src/services/wallet-handlers/argent-handler.js b/src/wallets/argent-x.js
similarity index 72%
rename from src/services/wallet-handlers/argent-handler.js
rename to src/wallets/argent-x.js
index f4c530df..093fb4ef 100644
--- a/src/services/wallet-handlers/argent-handler.js
+++ b/src/wallets/argent-x.js
@@ -1,6 +1,6 @@
-import {getStarknet} from '../../libs';
+import {getStarknet} from '../libs';
-export class ArgentHandler {
+export class ArgentX {
constructor(config) {
this.config = config;
}
diff --git a/src/wallets/index.js b/src/wallets/index.js
new file mode 100644
index 00000000..65a2afc7
--- /dev/null
+++ b/src/wallets/index.js
@@ -0,0 +1,2 @@
+export * from './argent-x';
+export * from './metamask';
diff --git a/src/services/wallet-handlers/metamask-handler.js b/src/wallets/metamask.js
similarity index 91%
rename from src/services/wallet-handlers/metamask-handler.js
rename to src/wallets/metamask.js
index a8e7d3a1..9248f67e 100644
--- a/src/services/wallet-handlers/metamask-handler.js
+++ b/src/wallets/metamask.js
@@ -1,6 +1,6 @@
import MetaMaskOnboarding from '@metamask/onboarding';
-export class MetaMaskHandler {
+export class MetaMask {
constructor(config) {
this.config = config;
this.onboarding = new MetaMaskOnboarding();