From 7d110bcf22a869d5161aeb8a84ee4f37ef57d82b Mon Sep 17 00:00:00 2001 From: sim Date: Thu, 13 Jan 2022 18:02:11 +0900 Subject: [PATCH] feature: Multisig wallet --- .env | 2 ++ package.json | 2 +- public/manifest.json | 2 +- src/data/settings/Theme.ts | 5 +++ src/extension/App.tsx | 10 ++++++ src/extension/RequestContainer.tsx | 20 ++++++++++- src/extension/auth/Auth.tsx | 2 ++ src/extension/auth/NewMultisigWalletPage.tsx | 15 +++++++++ src/extension/auth/SwitchWallet.tsx | 18 ++++++++-- .../components/ExtensionList.module.scss | 2 +- src/extension/components/ExtensionList.tsx | 11 ++++--- src/extension/components/WalletCard.tsx | 13 ++++++-- src/extension/modules/ConfirmTx.tsx | 31 +++++++++++++----- src/extension/modules/Front.tsx | 3 +- src/extension/modules/Welcome.module.scss | 3 +- src/extension/modules/Welcome.tsx | 8 ++--- src/styles/themes/Blossom/Front.png | Bin 0 -> 7566 bytes src/styles/themes/Dark/Front.png | Bin 0 -> 8143 bytes src/styles/themes/Light/Front.png | Bin 0 -> 7754 bytes src/styles/themes/Madness/Front.png | Bin 0 -> 8045 bytes src/styles/themes/Moon/Front.png | Bin 0 -> 8167 bytes src/styles/themes/Whale/Front.png | Bin 0 -> 7743 bytes src/styles/themes/themes.tsx | 15 +++++++++ 23 files changed, 132 insertions(+), 30 deletions(-) create mode 100644 src/extension/auth/NewMultisigWalletPage.tsx create mode 100644 src/styles/themes/Blossom/Front.png create mode 100644 src/styles/themes/Dark/Front.png create mode 100644 src/styles/themes/Light/Front.png create mode 100644 src/styles/themes/Madness/Front.png create mode 100644 src/styles/themes/Moon/Front.png create mode 100644 src/styles/themes/Whale/Front.png diff --git a/.env b/.env index 0157db51e..8322cdda4 100644 --- a/.env +++ b/.env @@ -1 +1,3 @@ SASS_PATH=node_modules:src/styles +INLINE_RUNTIME_CHUNK=false +REACT_APP_SANDBOX=true diff --git a/package.json b/package.json index 880ad0854..8293be222 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "start": "react-scripts start", "build-scripts": "webpack --config scripts/webpack.config.js", - "build": "cross-env REACT_APP_SANDBOX=true INLINE_RUNTIME_CHUNK=false react-app-rewired build && npm run build-scripts", + "build": "cross-env react-app-rewired build && npm run build-scripts", "test": "react-scripts test", "prepare": "husky install", "pre-commit": "lint-staged", diff --git a/public/manifest.json b/public/manifest.json index ae2de8ba6..cd5677399 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "Terra Station Wallet", - "version": "2.0.0", + "version": "2.1.0", "background": { "scripts": ["background.js"], "persistent": true diff --git a/src/data/settings/Theme.ts b/src/data/settings/Theme.ts index 91d458e60..78116b62f 100644 --- a/src/data/settings/Theme.ts +++ b/src/data/settings/Theme.ts @@ -30,6 +30,11 @@ export const useThemeFavicon = () => { return favicon } +export const useThemeFront = () => { + const { front } = useTheme() + return front +} + export const useThemeAnimation = () => { const { animation } = useTheme() return animation diff --git a/src/extension/App.tsx b/src/extension/App.tsx index 1940ed9ba..6cab8cde4 100644 --- a/src/extension/App.tsx +++ b/src/extension/App.tsx @@ -8,6 +8,8 @@ import LatestTx from "app/sections/LatestTx" import NetworkName from "app/sections/NetworkName" import SendTx from "txs/send/SendTx" import SwapTx from "txs/swap/SwapTx" +import SignMultisigTxPage from "pages/multisig/SignMultisigTxPage" +import PostMultisigTxPage from "pages/multisig/PostMultisigTxPage" import { storeNetwork, storeWalletAddress } from "./storage" import RequestContainer from "./RequestContainer" import ManageNetworks from "./networks/ManageNetworks" @@ -33,9 +35,17 @@ const App = () => { const routes = useRoutes([ { path: "/networks", element: }, { path: "/network/new", element: }, + + /* auth */ { path: "/auth/*", element: }, + + /* default txs */ { path: "/send", element: }, { path: "/swap", element: }, + { path: "/multisig/sign", element: }, + { path: "/multisig/post", element: }, + + /* 404 */ { path: "*", element: }, ]) diff --git a/src/extension/RequestContainer.tsx b/src/extension/RequestContainer.tsx index 89c28ff6e..e9c72c983 100644 --- a/src/extension/RequestContainer.tsx +++ b/src/extension/RequestContainer.tsx @@ -22,6 +22,7 @@ interface RequestContext { response: TxResponse, password?: string ) => void + multisigTx: (request: PrimitiveDefaultRequest) => void } } @@ -117,9 +118,26 @@ const RequestContainer: FC = ({ children }) => { }) } + /* multisig */ + const handleMultisigTx = (request: PrimitiveDefaultRequest) => { + // Delete request + extension.storage?.local.get(["post"], (storage: ExtensionStorage) => { + const list = storage.post || [] + const next = list.filter( + ({ id, origin }) => !(id === request.id && origin === request.origin) + ) + + extension.storage?.local.set({ post: next }, () => setTx(undefined)) + }) + } + /* context */ const requests = { connect, tx } - const actions = { connect: handleConnect, tx: handleTx } + const actions = { + connect: handleConnect, + tx: handleTx, + multisigTx: handleMultisigTx, + } return ( {children} diff --git a/src/extension/auth/Auth.tsx b/src/extension/auth/Auth.tsx index 226d1a57f..475962047 100644 --- a/src/extension/auth/Auth.tsx +++ b/src/extension/auth/Auth.tsx @@ -7,6 +7,7 @@ import AccessWithLedgerPage from "./AccessWithLedgerPage" import NewWalletPage from "./NewWalletPage" import RecoverWalletPage from "./RecoverWalletPage" import ImportWalletPage from "./ImportWalletPage" +import NewMultisigWalletPage from "./NewMultisigWalletPage" /* manage */ import ExportWalletPage from "./ExportWalletPage" @@ -24,6 +25,7 @@ const Auth = () => { } /> } /> } /> + } /> {/* manage */} } /> diff --git a/src/extension/auth/NewMultisigWalletPage.tsx b/src/extension/auth/NewMultisigWalletPage.tsx new file mode 100644 index 000000000..438c73780 --- /dev/null +++ b/src/extension/auth/NewMultisigWalletPage.tsx @@ -0,0 +1,15 @@ +import { useTranslation } from "react-i18next" +import NewMultisigWalletForm from "auth/modules/create/NewMultisigWalletForm" +import ExtensionPage from "../components/ExtensionPage" + +const NewMultisigWalletPage = () => { + const { t } = useTranslation() + + return ( + + + + ) +} + +export default NewMultisigWalletPage diff --git a/src/extension/auth/SwitchWallet.tsx b/src/extension/auth/SwitchWallet.tsx index 6aaccdd16..a81be8f40 100644 --- a/src/extension/auth/SwitchWallet.tsx +++ b/src/extension/auth/SwitchWallet.tsx @@ -1,4 +1,6 @@ -import { useAuth } from "auth" +import { isWallet, useAuth } from "auth" +import { Flex } from "components/layout" +import MultisigBadge from "auth/components/MultisigBadge" import { clearStoredPassword } from "../storage" import ExtensionList from "../components/ExtensionList" @@ -7,13 +9,23 @@ const SwitchWallet = () => { const list = wallets .filter(({ name }) => name !== connectedWallet?.name) - .map(({ name, address }) => { + .map((wallet) => { const select = () => { connect(name) clearStoredPassword() } - return { children: name, description: address, onClick: select } + const { name, address } = wallet + return { + children: ( + + {isWallet.multisig(wallet) && } + {name} + + ), + description: address, + onClick: select, + } }) return diff --git a/src/extension/components/ExtensionList.module.scss b/src/extension/components/ExtensionList.module.scss index 287f91a17..a55103b20 100644 --- a/src/extension/components/ExtensionList.module.scss +++ b/src/extension/components/ExtensionList.module.scss @@ -11,7 +11,7 @@ @include flex(space-between); color: var(--text); - padding: 20px; + padding: 16px 20px; text-align: left; transition: background var(--transition); width: 100%; diff --git a/src/extension/components/ExtensionList.tsx b/src/extension/components/ExtensionList.tsx index e93d047ac..10ca79de3 100644 --- a/src/extension/components/ExtensionList.tsx +++ b/src/extension/components/ExtensionList.tsx @@ -5,7 +5,7 @@ import { Flex, Grid } from "components/layout" import styles from "./ExtensionList.module.scss" interface DefaultItemProps { - children: string + children: ReactNode description?: string icon?: ReactNode active?: boolean @@ -22,7 +22,10 @@ interface ButtonItem extends DefaultItemProps { type Item = LinkItem | ButtonItem const ExtensionList = ({ list }: { list: Item[] }) => { - const renderItem = ({ children, description, icon, ...item }: Item) => { + const renderItem = ( + { children, description, icon, ...item }: Item, + index: number + ) => { const props = { className: styles.item, children: ( @@ -32,14 +35,14 @@ const ExtensionList = ({ list }: { list: Item[] }) => {

{children}

-

{description}

+ {description &&

{description}

}
), - key: children, + key: index, } return "to" in item ? ( diff --git a/src/extension/components/WalletCard.tsx b/src/extension/components/WalletCard.tsx index b125ae9f4..7548efad5 100644 --- a/src/extension/components/WalletCard.tsx +++ b/src/extension/components/WalletCard.tsx @@ -1,6 +1,7 @@ import { ReactNode } from "react" import { Flex, Grid } from "components/layout" -import { useAuth } from "auth" +import { isWallet, useAuth } from "auth" +import MultisigBadge from "auth/components/MultisigBadge" import Copy from "./Copy" import styles from "./WalletCard.module.scss" import WalletQR from "./WalletQR" @@ -14,12 +15,18 @@ const WalletCard = ({ extra }: Props) => { if (!wallet) return null const { address } = wallet - const name = "name" in wallet ? wallet.name : undefined + const name = isWallet.local(wallet) ? wallet.name : undefined return (
- {name &&

{name}

} + {name && ( + + {isWallet.multisig(wallet) && } +

{name}

+
+ )} + {address} diff --git a/src/extension/modules/ConfirmTx.tsx b/src/extension/modules/ConfirmTx.tsx index 27ba5d9b1..fc6d4ee84 100644 --- a/src/extension/modules/ConfirmTx.tsx +++ b/src/extension/modules/ConfirmTx.tsx @@ -1,5 +1,6 @@ import { useEffect, useState } from "react" import { useTranslation } from "react-i18next" +import { useNavigate } from "react-router-dom" import { useForm } from "react-hook-form" import { getErrorMessage } from "utils/error" import { useThemeAnimation } from "data/settings/Theme" @@ -8,9 +9,10 @@ import { Flex, FlexColumn, Grid } from "components/layout" import { Form, FormError, FormItem, FormWarning } from "components/form" import { Input, Checkbox } from "components/form" import Overlay from "app/components/Overlay" -import { useAuth } from "auth" +import useToPostMultisigTx from "pages/multisig/utils/useToPostMultisigTx" +import { isWallet, useAuth } from "auth" import { PasswordError } from "auth/scripts/keystore" -import { getStoredPassword } from "../storage" +import { getOpenURL, getStoredPassword } from "../storage" import { getIsDangerousTx, SignBytesRequest, TxRequest } from "../utils" import { useRequest } from "../RequestContainer" import ExtensionPage from "../components/ExtensionPage" @@ -26,7 +28,7 @@ const ConfirmTx = (props: TxRequest | SignBytesRequest) => { const animation = useThemeAnimation() const { wallet, ...auth } = useAuth() const { actions } = useRequest() - const passwordRequired = wallet && "name" in wallet + const passwordRequired = isWallet.single(wallet) /* form */ const form = useForm({ @@ -58,6 +60,8 @@ const ConfirmTx = (props: TxRequest | SignBytesRequest) => { ? t("Enter password") : "" + const navigate = useNavigate() + const toPostMultisigTx = useToPostMultisigTx() const submit = async ({ password }: Values) => { setSubmitting(true) @@ -66,9 +70,19 @@ const ConfirmTx = (props: TxRequest | SignBytesRequest) => { try { if (disabled) throw new Error(disabled) - const result = await auth[requestType](tx, password) - const response = { result, success: true } - actions.tx(requestType, props, response, nextPassword) + + if (isWallet.multisig(wallet)) { + const unsignedTx = await auth.create(props.tx) + const { pathname, search } = toPostMultisigTx(unsignedTx) + const openURL = getOpenURL([pathname, search].join("?")) + actions.multisigTx(props) + if (openURL) openURL() + else navigate({ pathname, search }) + } else { + const result = await auth[requestType](tx, password) + const response = { result, success: true } + actions.tx(requestType, props, response, nextPassword) + } } catch (error) { if (error instanceof PasswordError) { setIncorrect(error.message) @@ -118,8 +132,7 @@ const ConfirmTx = (props: TxRequest | SignBytesRequest) => { const error = props.requestType === "signBytes" && - wallet && - "ledger" in wallet && + isWallet.ledger(wallet) && t("Arbitrary data cannot be signed by Ledger") const SIZE = { width: 100, height: 100 } @@ -127,7 +140,7 @@ const ConfirmTx = (props: TxRequest | SignBytesRequest) => { {t("Submitting...")} - {wallet && "ledger" in wallet &&

{t("Confirm in ledger")}

} + {isWallet.ledger(wallet) &&

{t("Confirm in ledger")}

}
) : ( diff --git a/src/extension/modules/Front.tsx b/src/extension/modules/Front.tsx index 62acb0f4b..7468efaec 100644 --- a/src/extension/modules/Front.tsx +++ b/src/extension/modules/Front.tsx @@ -14,7 +14,7 @@ const Front = () => { const { requests } = useRequest() const { connect, tx } = requests - if (!wallet) + if (!wallet) { return ( @@ -23,6 +23,7 @@ const Front = () => { ) + } if (connect) return if (tx) return diff --git a/src/extension/modules/Welcome.module.scss b/src/extension/modules/Welcome.module.scss index e0571a876..3b5f5c2b4 100644 --- a/src/extension/modules/Welcome.module.scss +++ b/src/extension/modules/Welcome.module.scss @@ -1,6 +1,5 @@ .component { - padding-top: 32px; - padding-bottom: 8px; + padding-top: 8px; } .content { diff --git a/src/extension/modules/Welcome.tsx b/src/extension/modules/Welcome.tsx index d74e028a8..fa2370315 100644 --- a/src/extension/modules/Welcome.tsx +++ b/src/extension/modules/Welcome.tsx @@ -1,15 +1,15 @@ import { useTranslation } from "react-i18next" -import { useThemeFavicon } from "data/settings/Theme" +import { useThemeFront } from "data/settings/Theme" import { FlexColumn } from "components/layout" import styles from "./Welcome.module.scss" const Welcome = () => { const { t } = useTranslation() - const favicon = useThemeFavicon() + const front = useThemeFront() return ( - - Terra Station + + Terra Station

{t("Connect to Terra blockchain")}

) diff --git a/src/styles/themes/Blossom/Front.png b/src/styles/themes/Blossom/Front.png new file mode 100644 index 0000000000000000000000000000000000000000..fc4a8fb5370e9b4e4b2d214aecad2b3b919b403b GIT binary patch literal 7566 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 literal 0 HcmV?d00001 diff --git a/src/styles/themes/Dark/Front.png b/src/styles/themes/Dark/Front.png new file mode 100644 index 0000000000000000000000000000000000000000..7cda291229c6eb3e5cadc9ca86d63f5489eb98c0 GIT binary patch literal 8143 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 literal 0 HcmV?d00001 diff --git a/src/styles/themes/Light/Front.png b/src/styles/themes/Light/Front.png new file mode 100644 index 0000000000000000000000000000000000000000..c150625e58a07cf831dbd615819cee3e1cfb5125 GIT binary patch literal 7754 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 Q$N&HU07*qoM6N<$f&oVgN&o-= literal 0 HcmV?d00001 diff --git a/src/styles/themes/Madness/Front.png b/src/styles/themes/Madness/Front.png new file mode 100644 index 0000000000000000000000000000000000000000..585fa3eef3e94e7e573123f954e12da445359b16 GIT binary patch literal 8045 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 literal 0 HcmV?d00001 diff --git a/src/styles/themes/Moon/Front.png b/src/styles/themes/Moon/Front.png new file mode 100644 index 0000000000000000000000000000000000000000..9a1f528e44c0ac0ffd5857fe89ae613a40531845 GIT binary patch literal 8167 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 N002ovPDHLkV1lo>ycPfe literal 0 HcmV?d00001 diff --git a/src/styles/themes/Whale/Front.png b/src/styles/themes/Whale/Front.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb64b19467825b2016aa7bfc9ed6126ed7b713f GIT binary patch literal 7743 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 literal 0 HcmV?d00001 diff --git a/src/styles/themes/themes.tsx b/src/styles/themes/themes.tsx index 9026439f8..365abc6dc 100644 --- a/src/styles/themes/themes.tsx +++ b/src/styles/themes/themes.tsx @@ -17,6 +17,14 @@ import FaviconMoon from "./Moon/favicon.svg" import FaviconWhale from "./Whale/favicon.svg" import FaviconMadness from "./Madness/favicon.svg" +/* favicon */ +import FrontLight from "./Light/Front.png" +import FrontDark from "./Dark/Front.png" +import FrontBlossom from "./Blossom/Front.png" +import FrontMoon from "./Moon/Front.png" +import FrontWhale from "./Whale/Front.png" +import FrontMadness from "./Madness/Front.png" + /* preview */ import { ReactComponent as PreviewLight } from "./Light/preview.svg" import { ReactComponent as PreviewDark } from "./Dark/preview.svg" @@ -30,6 +38,7 @@ export interface Theme { unlock: Amount animation: string favicon: string + front: string preview: ReactNode } @@ -39,6 +48,7 @@ export const themes: Theme[] = [ unlock: toAmount("0"), animation: AnimationLight, favicon: FaviconLight, + front: FrontLight, preview: , }, { @@ -46,6 +56,7 @@ export const themes: Theme[] = [ unlock: toAmount("0"), animation: AnimationDark, favicon: FaviconDark, + front: FrontDark, preview: , }, { @@ -53,6 +64,7 @@ export const themes: Theme[] = [ unlock: toAmount("1"), animation: AnimationBlossom, favicon: FaviconBlossom, + front: FrontBlossom, preview: , }, { @@ -60,6 +72,7 @@ export const themes: Theme[] = [ unlock: toAmount("10"), animation: AnimationMoon, favicon: FaviconMoon, + front: FrontMoon, preview: , }, { @@ -67,6 +80,7 @@ export const themes: Theme[] = [ unlock: toAmount("100"), animation: AnimationWhale, favicon: FaviconWhale, + front: FrontWhale, preview: , }, { @@ -74,6 +88,7 @@ export const themes: Theme[] = [ unlock: toAmount("1000"), animation: AnimationMadness, favicon: FaviconMadness, + front: FrontMadness, preview: , }, ]