Flatten session store

Signed-off-by: Sebastian Martinez <sebastinez@me.com>
This commit is contained in:
Sebastian Martinez
2022-05-18 15:45:47 +02:00
committed by Alexis Sellier
parent f07ee2bc9d
commit 3f28844dc8
3 changed files with 12 additions and 20 deletions
+4 -4
View File
@@ -32,7 +32,7 @@
if (!amount || amount === "0") { return [false, "Not able to withdraw zero tokens"]; }
if (toWei(amount).gt(maxWithdrawAmount)) return [false, `Reduce amount, max withdrawal is ${formatEther(maxWithdrawAmount)}`];
let currentTime = new Date().getTime();
let timelock = await calculateTimeLock(amount, $session.config.signer, config);
let timelock = await calculateTimeLock(amount, $session.signer, config);
// Converting a 10 digit to 13 digit timestamp by multiplying by 1000
// since JS doesn't display a correct Date string when passing a 10 digit timestamp.
let nextAvailableWithdraw = lastWithdrawal.add(timelock).mul(1000);
@@ -46,10 +46,10 @@
return [false];
}
}
$: if ($session) {
getMaxWithdrawAmount($session.config.signer, config).then(x => maxWithdrawAmount = x);
lastWithdrawalByUser($session.config.signer, config).then(x => lastWithdrawal = x);
getMaxWithdrawAmount($session.signer, config).then(x => maxWithdrawAmount = x);
lastWithdrawalByUser($session.signer, config).then(x => lastWithdrawal = x);
}
</script>
+1 -1
View File
@@ -25,7 +25,7 @@
try {
if ($session) {
state.status = Status.Signing;
const tx = await withdraw(amount, $session.config.signer, config);
const tx = await withdraw(amount, $session.signer, config);
state.status = Status.Pending;
await tx.wait();
state.status = Status.Success;
+7 -15
View File
@@ -21,12 +21,7 @@ export type TxState =
| { state: 'fail'; hash: string; blockHash: string; blockNumber: number; error: string }
| null;
// Definitions made in `Config` that need to be part of the session,
// to provide reactivity based on events i.e. accountsChanged
// TODO: Eventually there will be more reactive config needs, e.g. seeds
export interface SessionConfig {
signer: ethers.Signer & TypedDataSigner | WalletConnectSigner | null;
}
export type Signer = ethers.Signer & TypedDataSigner | WalletConnectSigner;
export type State =
{ connection: Connection.Disconnected }
@@ -35,7 +30,7 @@ export type State =
export interface Session {
address: string;
config: SessionConfig;
signer: Signer | null;
tokenBalance: BigNumber | null; // `null` means it isn't loaded yet.
tx: TxState;
}
@@ -62,9 +57,8 @@ export const loadState = (initial: State): Store => {
// Re-connect using previous session.
if (config.metamask.connected) {
const metamask = config.metamask.session;
const sessionConfig = { signer: config.signer };
const tokenBalance: BigNumber = await config.token.balanceOf(metamask.address);
const session = { tokenBalance, tx: null, config: sessionConfig, address: metamask.address };
const session = { tokenBalance, tx: null, seeds: {}, signer: config.metamask.signer, address: metamask.address };
store.set({ connection: Connection.Connected, session });
config.setSigner(config.metamask.signer);
@@ -88,8 +82,7 @@ export const loadState = (initial: State): Store => {
config.walletConnect.state.set({ state: "close" });
const tokenBalance: BigNumber = await config.token.balanceOf(address);
const sessionConfig = { signer: config.signer };
const session = { config: sessionConfig, address, tokenBalance, tx: null };
const session = { address, signer: config.metamask.signer, seeds: {}, tokenBalance, tx: null };
store.set({
connection: Connection.Connected,
@@ -111,9 +104,8 @@ export const loadState = (initial: State): Store => {
const address = await signer.getAddress();
const tokenBalance: BigNumber = await config.token.balanceOf(address);
const sessionConfig = { signer: config.signer };
const session = { config: sessionConfig, address, tokenBalance, tx: null };
const network = await ethers.providers.getNetwork(
const session = { address, signer, seeds: {}, tokenBalance, tx: null };
const network = ethers.providers.getNetwork(
signer.walletConnect.chainId
);
@@ -255,7 +247,7 @@ export const loadState = (initial: State): Store => {
disconnectMetamask();
} else {
s.session.address = address;
s.session.config = { signer: config.signer };
s.session.signer = config.signer;
saveSession(s.session);
}
return s;