From 1b991b134e82f0437d1c68d864ceb286bd4e1085 Mon Sep 17 00:00:00 2001 From: Manank Patni Date: Sun, 2 Jul 2023 09:04:58 +0530 Subject: [PATCH 01/17] Add api call to deployer Signed-off-by: Manank Patni --- .../contracts/baseDAO/hooks/useOriginate.ts | 22 ++++++++++++++++++- src/services/contracts/baseDAO/utils.ts | 9 ++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/services/contracts/baseDAO/hooks/useOriginate.ts b/src/services/contracts/baseDAO/hooks/useOriginate.ts index 0e01e9612..c5da477d1 100644 --- a/src/services/contracts/baseDAO/hooks/useOriginate.ts +++ b/src/services/contracts/baseDAO/hooks/useOriginate.ts @@ -6,7 +6,7 @@ import { useMutation, useQueryClient } from "react-query" import { deployMetadataCarrier } from "services/contracts/metadataCarrier/deploy" import { initTezosInstance, useTezos } from "services/beacon/hooks/useTezos" -import { BaseDAO } from ".." +import { BaseDAO, replacer } from ".." import { getDAO } from "services/services/dao/services" import mixpanel from "mixpanel-browser" import { InMemorySigner } from "@taquito/signer" @@ -72,6 +72,26 @@ export const useOriginate = (template: DAOTemplate) => { async ({ metadataParams, params }) => { const updatedStates = INITIAL_STATES + const deployParams: any = { + params: { ...params }, + metadataParams: { ...metadataParams } + } + + if (network !== "mainnet") { + const resp = await fetch("http://localhost:3001/deploy", { + method: "POST", + body: JSON.stringify({ deployParams: deployParams }, replacer), + headers: { "Content-Type": "application/json" } + }) + + const data = await resp.json() + console.log("data: ", data) + const contract = data.contract + console.log("contract: ", contract) + + return contract + } + updatedStates[0] = { activeText: "Deploying Metadata Carrier Contract", completedText: "" diff --git a/src/services/contracts/baseDAO/utils.ts b/src/services/contracts/baseDAO/utils.ts index ec0963556..ee93996d2 100644 --- a/src/services/contracts/baseDAO/utils.ts +++ b/src/services/contracts/baseDAO/utils.ts @@ -61,3 +61,12 @@ export const calculateCycleInfo = (originationTime: string, votingPeriod: number export const unpackExtraNumValue = (bytes: string): BigNumber => { return new BigNumber((unpackDataBytes({ bytes }) as { int: string }).int) } + +export const replacer = (name: any, val: any) => { + // convert Number to string + if (val && val.constructor === BigNumber) { + return val.toString() + } else { + return val // return as is + } +} From 4682c953ea30b2e0d773b314e6c1047dfcb98a13 Mon Sep 17 00:00:00 2001 From: Manank Patni Date: Tue, 18 Jul 2023 05:37:13 +0530 Subject: [PATCH 02/17] Add testing Signed-off-by: Manank Patni --- src/services/beacon/hooks/useTezos.ts | 18 ++++++++++++++---- src/services/config/constants.ts | 3 ++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/services/beacon/hooks/useTezos.ts b/src/services/beacon/hooks/useTezos.ts index c1dcca37c..a28b00055 100644 --- a/src/services/beacon/hooks/useTezos.ts +++ b/src/services/beacon/hooks/useTezos.ts @@ -1,11 +1,13 @@ import { useQueryClient } from "react-query" import { useCallback, useContext } from "react" import { MichelCodecPacker, TezosToolkit } from "@taquito/taquito" -import { connectWithBeacon, Network, rpcNodes, TezosActionType } from "services/beacon" +import { ALICE_PRIV_KEY, connectWithBeacon, Network, rpcNodes, TezosActionType } from "services/beacon" import { TezosContext } from "services/beacon/context" import { Tzip16Module } from "@taquito/tzip16" import mixpanel from "mixpanel-browser" import { BeaconWallet } from "@taquito/beacon-wallet" +import { EnvKey, getEnv } from "services/config" +import { InMemorySigner } from "@taquito/signer" type WalletConnectReturn = { tezos: TezosToolkit @@ -35,10 +37,18 @@ export const useTezos = (): WalletConnectReturn => { const connect = useCallback( async (newNetwork?: Network) => { - const { wallet } = await connectWithBeacon(network) - const newTezos: TezosToolkit = initTezosInstance(network || newNetwork) - newTezos.setProvider({ wallet }) + + let wallet + + if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) === "true") { + const { wallet: beaconWallet } = await connectWithBeacon(network) + wallet = beaconWallet + newTezos.setProvider({ wallet }) + } else { + const signer = await InMemorySigner.fromSecretKey(ALICE_PRIV_KEY) + newTezos.setProvider({ signer }) + } const account = await newTezos.wallet.pkh() diff --git a/src/services/config/constants.ts b/src/services/config/constants.ts index 725b4a5ef..56cba9681 100644 --- a/src/services/config/constants.ts +++ b/src/services/config/constants.ts @@ -15,7 +15,8 @@ export enum EnvKey { REACT_APP_V2_URL = "REACT_APP_V2_URL", REACT_APP_LITE_API_URL = "REACT_APP_LITE_API_URL", REACT_APP_API_URL = "REACT_APP_API_URL", - REACT_APP_BASE_URL = "REACT_APP_BASE_URL" + REACT_APP_BASE_URL = "REACT_APP_BASE_URL", + REACT_APP_IS_TESTING = "REACT_APP_IS_TESTING" } export enum FeatureFlag { From 8ab486d9134205dc38f8073d85c9213383bf1199 Mon Sep 17 00:00:00 2001 From: Manank Patni Date: Tue, 18 Jul 2023 05:47:14 +0530 Subject: [PATCH 03/17] Add testing Signed-off-by: Manank Patni --- src/services/config/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/config/constants.ts b/src/services/config/constants.ts index 56cba9681..b6cfa50c5 100644 --- a/src/services/config/constants.ts +++ b/src/services/config/constants.ts @@ -16,7 +16,7 @@ export enum EnvKey { REACT_APP_LITE_API_URL = "REACT_APP_LITE_API_URL", REACT_APP_API_URL = "REACT_APP_API_URL", REACT_APP_BASE_URL = "REACT_APP_BASE_URL", - REACT_APP_IS_TESTING = "REACT_APP_IS_TESTING" + REACT_APP_IS_NOT_TESTING = "REACT_APP_IS_NOT_TESTING" } export enum FeatureFlag { From 9459680a3719e6ab59f4fe9dd4621a3a5252e97b Mon Sep 17 00:00:00 2001 From: Manank Patni Date: Thu, 20 Jul 2023 02:32:15 +0530 Subject: [PATCH 04/17] Fix managed deployment --- .../contracts/baseDAO/hooks/useOriginate.ts | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/src/services/contracts/baseDAO/hooks/useOriginate.ts b/src/services/contracts/baseDAO/hooks/useOriginate.ts index c5da477d1..503b86b88 100644 --- a/src/services/contracts/baseDAO/hooks/useOriginate.ts +++ b/src/services/contracts/baseDAO/hooks/useOriginate.ts @@ -72,26 +72,6 @@ export const useOriginate = (template: DAOTemplate) => { async ({ metadataParams, params }) => { const updatedStates = INITIAL_STATES - const deployParams: any = { - params: { ...params }, - metadataParams: { ...metadataParams } - } - - if (network !== "mainnet") { - const resp = await fetch("http://localhost:3001/deploy", { - method: "POST", - body: JSON.stringify({ deployParams: deployParams }, replacer), - headers: { "Content-Type": "application/json" } - }) - - const data = await resp.json() - console.log("data: ", data) - const contract = data.contract - console.log("contract: ", contract) - - return contract - } - updatedStates[0] = { activeText: "Deploying Metadata Carrier Contract", completedText: "" From 3b40442ecdea4c0edbee2330d60947fda852a3b8 Mon Sep 17 00:00:00 2001 From: Manank Patni Date: Mon, 7 Aug 2023 05:54:55 +0530 Subject: [PATCH 05/17] Fix signature and deployer Signed-off-by: Manank Patni --- src/modules/lite/creator/index.tsx | 13 +++++++-- .../explorer/pages/CreateProposal/index.tsx | 13 +++++++-- .../explorer/pages/ProposalDetails/index.tsx | 14 ++++++++-- src/services/beacon/context.tsx | 28 +++++++++++++------ src/services/beacon/hooks/useTezos.ts | 9 +++--- .../contracts/baseDAO/hooks/useOriginate.ts | 10 +++++-- src/services/lite/utils.ts | 22 +++++++++++++-- src/services/utils/utils.ts | 22 +++++++++++++-- 8 files changed, 102 insertions(+), 29 deletions(-) diff --git a/src/modules/lite/creator/index.tsx b/src/modules/lite/creator/index.tsx index 0da09d8f8..1e51c7450 100644 --- a/src/modules/lite/creator/index.tsx +++ b/src/modules/lite/creator/index.tsx @@ -379,7 +379,7 @@ const CommunityForm = ({ submitForm, values, setFieldValue, errors, touched, set export const CommunityCreator: React.FC = () => { const navigate = useHistory() - const { network, account, wallet } = useTezos() + const { network, account, wallet, tezos } = useTezos() const openNotification = useNotification() const initialState: Community = { @@ -408,8 +408,15 @@ export const CommunityCreator: React.FC = () => { values.members.push(account) try { - const { signature, payloadBytes } = await getSignature(account, wallet, JSON.stringify(values)) - const publicKey = (await wallet?.client.getActiveAccount())?.publicKey + const { signature, payloadBytes } = await getSignature(account, wallet, network, JSON.stringify(values), tezos) + let publicKey + + if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) !== "true") { + publicKey = await tezos.signer.publicKey() + } else { + publicKey = (await wallet?.client.getActiveAccount())?.publicKey + } + if (!signature) { openNotification({ message: `Issue with Signature`, diff --git a/src/modules/lite/explorer/pages/CreateProposal/index.tsx b/src/modules/lite/explorer/pages/CreateProposal/index.tsx index 11c7b6233..842ce708a 100644 --- a/src/modules/lite/explorer/pages/CreateProposal/index.tsx +++ b/src/modules/lite/explorer/pages/CreateProposal/index.tsx @@ -29,6 +29,7 @@ import { useToken } from "../../hooks/useToken" import { ResponsiveDialog } from "modules/explorer/components/ResponsiveDialog" import { useDAO } from "services/services/dao/hooks/useDAO" import { useDAOID } from "modules/explorer/pages/DAO/router" +import { EnvKey, getEnv } from "services/config" dayjs.extend(duration) const ProposalContainer = styled(Grid)(({ theme }) => ({ @@ -533,7 +534,7 @@ const calculateEndTime = (days: number, hours: number, minutes: number) => { export const ProposalCreator: React.FC<{ id?: string }> = props => { const navigate = useHistory() - const { network, account, wallet } = useTezos() + const { network, account, wallet, tezos } = useTezos() const openNotification = useNotification() const [isLoading, setIsLoading] = useState(false) const daoId = useDAOID() @@ -569,8 +570,14 @@ export const ProposalCreator: React.FC<{ id?: string }> = props => { data.startTime = String(dayjs().valueOf()) data.endTime = calculateEndTime(values.endTimeDays!, values.endTimeHours!, values.endTimeMinutes!) - const { signature, payloadBytes } = await getSignature(account, wallet, JSON.stringify(data)) - const publicKey = (await wallet?.client.getActiveAccount())?.publicKey + const { signature, payloadBytes } = await getSignature(account, wallet, network, JSON.stringify(data), tezos) + let publicKey + if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) !== "true") { + publicKey = await tezos.signer.publicKey() + } else { + publicKey = (await wallet?.client.getActiveAccount())?.publicKey + } + if (!signature) { openNotification({ message: `Issue with Signature`, diff --git a/src/modules/lite/explorer/pages/ProposalDetails/index.tsx b/src/modules/lite/explorer/pages/ProposalDetails/index.tsx index 94cba4aaf..92a3979d9 100644 --- a/src/modules/lite/explorer/pages/ProposalDetails/index.tsx +++ b/src/modules/lite/explorer/pages/ProposalDetails/index.tsx @@ -17,6 +17,7 @@ import { useSinglePoll } from "../../hooks/usePoll" import { ProposalStatus } from "../../components/ProposalTableRowStatusBadge" import { BackButton } from "modules/lite/components/BackButton" import { voteOnLiteProposal } from "services/services/lite/lite-services" +import { EnvKey, getEnv } from "services/config" const PageContainer = styled("div")({ marginBottom: 50, @@ -53,7 +54,7 @@ export const ProposalDetails: React.FC<{ id: string }> = ({ id }) => { const isMobileSmall = useMediaQuery(theme.breakpoints.down("sm")) const navigate = useHistory() const { state } = useLocation<{ poll: Poll; choices: Choice[] }>() - const { account, wallet } = useTezos() + const { account, wallet, network, tezos } = useTezos() const openNotification = useNotification() const [refresh, setRefresh] = useState() const community = useCommunity(id) @@ -83,8 +84,14 @@ export const ProposalDetails: React.FC<{ id: string }> = ({ id }) => { } try { - const publicKey = (await wallet?.client.getActiveAccount())?.publicKey - const { signature, payloadBytes } = await getSignature(account, wallet, JSON.stringify(votesData)) + const { signature, payloadBytes } = await getSignature(account, wallet, network, JSON.stringify(votesData), tezos) + let publicKey + if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) !== "true") { + publicKey = await tezos.signer.publicKey() + } else { + publicKey = (await wallet?.client.getActiveAccount())?.publicKey + } + if (!signature) { openNotification({ message: `Issue with Signature`, @@ -111,6 +118,7 @@ export const ProposalDetails: React.FC<{ id: string }> = ({ id }) => { return } } catch (error) { + console.log("error: ", error) openNotification({ message: `Something went wrong!!`, autoHideDuration: 3000, diff --git a/src/services/beacon/context.tsx b/src/services/beacon/context.tsx index d03d388d2..d7b868ca4 100644 --- a/src/services/beacon/context.tsx +++ b/src/services/beacon/context.tsx @@ -1,8 +1,11 @@ import React, { createContext, useEffect, useReducer } from "react" import mixpanel from "mixpanel-browser" -import { createTezos, createWallet, getTezosNetwork } from "./utils" +import { ALICE_PRIV_KEY, createTezos, createWallet, getTezosNetwork } from "./utils" import { INITIAL_STATE, reducer, TezosState } from "./reducer" import { TezosAction, TezosActionType } from "./actions" +import { InMemorySigner } from "@taquito/signer" +import { EnvKey, getEnv } from "services/config" +import { BeaconWallet } from "@taquito/beacon-wallet" interface TezosProvider { state: TezosState @@ -19,20 +22,29 @@ const getSavedState = async (): Promise => { try { const network = getTezosNetwork() const tezos = createTezos(network) - const wallet = createWallet(network) - const activeAccount = await wallet.client.getActiveAccount() - if (!activeAccount?.address) { - throw new Error("No wallet address found") + let wallet, account + + if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) === "true") { + wallet = createWallet(network) + account = await tezos.wallet.pkh() + tezos.setProvider({ wallet }) + } else { + const signer = await InMemorySigner.fromSecretKey(ALICE_PRIV_KEY) + wallet = signer + account = await signer.publicKeyHash() + tezos.setProvider({ signer }) } - tezos.setProvider({ wallet }) + if (!account) { + throw new Error("No wallet address found") + } return { network, tezos, - wallet, - account: activeAccount.address + wallet: wallet as BeaconWallet, + account } } catch (error) { return INITIAL_STATE diff --git a/src/services/beacon/hooks/useTezos.ts b/src/services/beacon/hooks/useTezos.ts index 229c743ef..b1ea2e7ef 100644 --- a/src/services/beacon/hooks/useTezos.ts +++ b/src/services/beacon/hooks/useTezos.ts @@ -39,26 +39,27 @@ export const useTezos = (): WalletConnectReturn => { async (newNetwork?: Network) => { const newTezos: TezosToolkit = initTezosInstance(network || newNetwork) - let wallet + let wallet, account if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) === "true") { const { wallet: beaconWallet } = await connectWithBeacon(network) wallet = beaconWallet newTezos.setProvider({ wallet }) + account = await newTezos.wallet.pkh() } else { const signer = await InMemorySigner.fromSecretKey(ALICE_PRIV_KEY) + wallet = signer + account = await signer.publicKeyHash() newTezos.setProvider({ signer }) } - const account = await newTezos.wallet.pkh() - dispatch({ type: TezosActionType.UPDATE_TEZOS, payload: { network: newNetwork || network, tezos: newTezos, account, - wallet + wallet: wallet as BeaconWallet } }) mixpanel.identify(account) diff --git a/src/services/contracts/baseDAO/hooks/useOriginate.ts b/src/services/contracts/baseDAO/hooks/useOriginate.ts index c39d21dc4..27fbc8fff 100644 --- a/src/services/contracts/baseDAO/hooks/useOriginate.ts +++ b/src/services/contracts/baseDAO/hooks/useOriginate.ts @@ -258,8 +258,14 @@ export const useOriginate = (template: DAOTemplate) => { daoContract: contract.address, tokenID: params.orgSettings.governanceToken.tokenId } - const { signature, payloadBytes } = await getSignature(account, wallet, JSON.stringify(values)) - const publicKey = (await wallet?.client.getActiveAccount())?.publicKey + const { signature, payloadBytes } = await getSignature(account, wallet, network, JSON.stringify(values), tezos) + let publicKey + + if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) !== "true") { + publicKey = await tezos.signer.publicKey() + } else { + publicKey = (await wallet?.client.getActiveAccount())?.publicKey + } await saveLiteCommunity(signature, publicKey, payloadBytes) diff --git a/src/services/lite/utils.ts b/src/services/lite/utils.ts index 5e83bdb8b..ed83b89fb 100644 --- a/src/services/lite/utils.ts +++ b/src/services/lite/utils.ts @@ -8,6 +8,8 @@ import { BeaconWallet } from "@taquito/beacon-wallet" import { RequestSignPayloadInput, SigningType } from "@airgap/beacon-sdk" import BigNumber from "bignumber.js" import { Network } from "services/beacon" +import { TezosToolkit } from "@taquito/taquito" +import { EnvKey, getEnv } from "services/config" export const getCurrentBlock = async (network: Network) => { const url = `https://api.${networkNameMap[network]}.tzkt.io/v1/head` @@ -190,7 +192,13 @@ export const formatByDecimals = (value: string, decimals: string) => { return nFormatter(new BigNumber(value).div(new BigNumber(10).pow(decimals)), 1) } -export const getSignature = async (userAddress: string, wallet: BeaconWallet, data?: string) => { +export const getSignature = async ( + userAddress: string, + wallet: BeaconWallet, + network: Network, + data?: string, + tezos?: TezosToolkit +) => { const formattedInput: string = [ "Tezos Signed Message:", process.env.REACT_APP_BASE_URL, @@ -207,8 +215,16 @@ export const getSignature = async (userAddress: string, wallet: BeaconWallet, da sourceAddress: userAddress } - const signedPayload = await wallet?.client.requestSignPayload(payload) - const { signature } = signedPayload + let signature + + if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) !== "true" && tezos) { + const { sig: walletSign } = await tezos?.signer.sign(payloadBytes) + signature = walletSign + } else { + const signedPayload = await wallet?.client.requestSignPayload(payload) + const { signature: walletSign } = signedPayload + signature = walletSign + } return { signature, payloadBytes } } diff --git a/src/services/utils/utils.ts b/src/services/utils/utils.ts index 1aedca94a..5ab980058 100644 --- a/src/services/utils/utils.ts +++ b/src/services/utils/utils.ts @@ -8,6 +8,8 @@ import { RequestSignPayloadInput, SigningType } from "@airgap/beacon-sdk" import BigNumber from "bignumber.js" import { Network } from "services/beacon" import { networkNameMap } from "services/bakingBad" +import { TezosToolkit } from "@taquito/taquito" +import { EnvKey, getEnv } from "services/config" export const getCurrentBlock = async (network: Network) => { const url = `https://api.${networkNameMap[network]}.tzkt.io/v1/head` @@ -182,7 +184,13 @@ export const formatByDecimals = (value: string, decimals: string) => { return nFormatter(new BigNumber(value).div(new BigNumber(10).pow(decimals)), 1) } -export const getSignature = async (userAddress: string, wallet: BeaconWallet, data?: string) => { +export const getSignature = async ( + userAddress: string, + wallet: BeaconWallet, + network: Network, + data?: string, + tezos?: TezosToolkit +) => { const formattedInput: string = [ "Tezos Signed Message:", process.env.REACT_APP_BASE_URL, @@ -199,8 +207,16 @@ export const getSignature = async (userAddress: string, wallet: BeaconWallet, da sourceAddress: userAddress } - const signedPayload = await wallet?.client.requestSignPayload(payload) - const { signature } = signedPayload + let signature + + if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) !== "true" && tezos) { + const { sig: walletSign } = await tezos?.signer.sign(bytes) + signature = walletSign + } else { + const signedPayload = await wallet?.client.requestSignPayload(payload) + const { signature: walletSign } = signedPayload + signature = walletSign + } return { signature, payloadBytes } } From b9c8c62b51136f8151de27134b2a29614c6f752b Mon Sep 17 00:00:00 2001 From: Manank Patni Date: Mon, 7 Aug 2023 05:56:27 +0530 Subject: [PATCH 06/17] Change account Signed-off-by: Manank Patni --- src/services/beacon/utils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/beacon/utils.ts b/src/services/beacon/utils.ts index 179ae0ff9..fcdabe387 100644 --- a/src/services/beacon/utils.ts +++ b/src/services/beacon/utils.ts @@ -6,7 +6,8 @@ import { EnvKey, getEnv } from "services/config" export type Network = "mainnet" | "ghostnet" -export const ALICE_PRIV_KEY = "edsk3QoqBuvdamxouPhin7swCvkQNgq4jP5KZPbwWNnwdZpSpJiEbq" +export const ALICE_PRIV_KEY = + "edskS1q2utmfdhVsqFKvKbQHShFg7eme6xbVKoc5iRPeW1fX8a4M5iXdhzbyTca3r6CMfCfVQZAZ6yqiE5wqi9UyMr1VZ6S6dA" export const rpcNodes: Record = { mainnet: "https://mainnet.api.tez.ie", From 8d3d35f9e51afe30376eb4440d23ee439e4db9a9 Mon Sep 17 00:00:00 2001 From: Manank Patni Date: Mon, 7 Aug 2023 22:07:39 +0530 Subject: [PATCH 07/17] Fix network switch with inmemory signer Signed-off-by: Manank Patni --- src/services/beacon/hooks/useTezos.ts | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/services/beacon/hooks/useTezos.ts b/src/services/beacon/hooks/useTezos.ts index b1ea2e7ef..00161881c 100644 --- a/src/services/beacon/hooks/useTezos.ts +++ b/src/services/beacon/hooks/useTezos.ts @@ -98,17 +98,27 @@ export const useTezos = (): WalletConnectReturn => { } }) } else { - const { wallet } = await connectWithBeacon(newNetwork) - newTezos.setProvider({ wallet }) - const newAccount = await newTezos.wallet.pkh() + let wallet, account + + if (getEnv(EnvKey.REACT_APP_IS_NOT_TESTING) === "true") { + const { wallet: beaconWallet } = await connectWithBeacon(network) + wallet = beaconWallet + newTezos.setProvider({ wallet }) + account = await newTezos.wallet.pkh() + } else { + const signer = await InMemorySigner.fromSecretKey(ALICE_PRIV_KEY) + wallet = signer + account = await signer.publicKeyHash() + newTezos.setProvider({ signer }) + } dispatch({ type: TezosActionType.UPDATE_TEZOS, payload: { network: newNetwork, tezos: newTezos, - account: newAccount, - wallet + account, + wallet: wallet as BeaconWallet } }) } From 1a121ca5c7557e721e72ca7448554e3cec85c43c Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 27 Dec 2023 13:16:01 -0800 Subject: [PATCH 08/17] Initial draft of action --- .github/workflows/test.yaml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 000000000..a6c364484 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,23 @@ +name: Playwright Tests +on: + deployment_status: +jobs: + test: + timeout-minutes: 60 + runs-on: ubuntu-latest + if: github.event.deployment_status.state == 'success' + steps: + - uses: actions/checkout@v4 + with: + repository: W3DevTeam/TezosHomebaseTests + - uses: actions/setup-node@v4 + with: + node-version: 18 + - name: Install dependencies + run: npm ci + - name: Install Playwright + run: npx playwright install --with-deps + - name: Run Playwright tests + run: npx playwright test + env: + PLAYWRIGHT_TEST_BASE_URL: ${{ github.event.deployment_status.target_url }} \ No newline at end of file From 7f6cda1e20f4dfafdab3efba6831e78f6a36c971 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 27 Dec 2023 13:36:21 -0800 Subject: [PATCH 09/17] Rework action to obtain URL as artifact --- .github/workflows/test.yaml | 17 ++++++++-- .github/workflows/upload_deployment_url.yaml | 34 ++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/upload_deployment_url.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index a6c364484..3a247381d 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -1,11 +1,17 @@ name: Playwright Tests + on: - deployment_status: + workflow_run: + workflows: ["Upload Deployment URL"] + types: + - completed + jobs: test: + needs: capture-deployment-url + if: github.event_name != 'deployment_status' timeout-minutes: 60 runs-on: ubuntu-latest - if: github.event.deployment_status.state == 'success' steps: - uses: actions/checkout@v4 with: @@ -13,6 +19,11 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 18 + - name: Download Deployment URL + uses: actions/download-artifact@v2 + with: + name: deployment-url + - run: echo "$(> $GITHUB_ENV + - name: Save Deployment URL + uses: actions/upload-artifact@v4 + with: + name: deployment-url + path: $GITHUB_ENV \ No newline at end of file From 3f0c83743b8e4f015f819cd9387076180832119d Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 27 Dec 2023 15:14:08 -0800 Subject: [PATCH 10/17] Try to get tests running with hardcoded URL --- .github/workflows/test.yaml | 20 +++++------- .github/workflows/upload_deployment_url.yaml | 34 -------------------- 2 files changed, 8 insertions(+), 46 deletions(-) delete mode 100644 .github/workflows/upload_deployment_url.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 3a247381d..d71e55c5b 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -1,15 +1,16 @@ name: Playwright Tests on: - workflow_run: - workflows: ["Upload Deployment URL"] - types: - - completed + # TODO: Constrain this further + push: + branches: + - '**' + pull_request: + branches: + - '**' jobs: test: - needs: capture-deployment-url - if: github.event_name != 'deployment_status' timeout-minutes: 60 runs-on: ubuntu-latest steps: @@ -19,11 +20,6 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 18 - - name: Download Deployment URL - uses: actions/download-artifact@v2 - with: - name: deployment-url - - run: echo "$(> $GITHUB_ENV - - name: Save Deployment URL - uses: actions/upload-artifact@v4 - with: - name: deployment-url - path: $GITHUB_ENV \ No newline at end of file From 879446d7ebe14c760d0da7e8e28b6b4ede1be4ab Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 27 Dec 2023 16:18:46 -0800 Subject: [PATCH 11/17] Try running tests one at a time to avoid timeouts --- .github/workflows/test.yaml | 40 +++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index d71e55c5b..cbd5a10ae 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -1,18 +1,34 @@ name: Playwright Tests on: - # TODO: Constrain this further - push: - branches: - - '**' +# TODO: uncomment below actual branch constraints + # push: + # branches: + # - develop + # - staging + # - master pull_request: branches: + # TODO: uncomment below actual branch constraints + # types: [opened] + # - develop + # - staging + # - master + # TODO: comment out testing branch constraints - '**' jobs: test: timeout-minutes: 60 runs-on: ubuntu-latest + env: + WEBAPP_URL: https://deploy-preview-740--tezos-homebase.netlify.app + # TODO: uncomment below actual branch constraints + # ${{ + # github.event_name == 'pull_request' && 'https://deploy-preview-${{ github.event.number }}--tezos-homebase.netlify.app' || + # github.ref == 'refs/heads/develop' && 'https://develop--tezos-homebase.netlify.app' || + # github.ref == 'refs/heads/staging' && 'https://staging--tezos-homebase.netlify.app' || + # github.ref == 'refs/heads/master' && 'https://master--tezos-homebase.netlify.app' }} steps: - uses: actions/checkout@v4 with: @@ -24,7 +40,15 @@ jobs: run: npm ci - name: Install Playwright run: npx playwright install --with-deps - - name: Run Playwright tests - run: npx playwright test - env: - WEBAPP_URL: https://deploy-preview-740--tezos-homebase.netlify.app + - name: TC01 - Run Playwright tests + run: npm run test:tc01 + - name: TC02 - Run Playwright tests + run: npm run test:tc02 + - name: TC03 - Run Playwright tests + run: npm run test:tc03 + - name: TC04 - Run Playwright tests + run: npm run test:tc04 + - name: TC05 - Run Playwright tests + run: npm run test:tc05 + - name: TC06 - Run Playwright tests + run: npm run test:tc06 From 802a57ddf7536dff2d190f5722315ff1c893b4df Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 27 Dec 2023 17:37:36 -0800 Subject: [PATCH 12/17] Try using HTML element ID for tests --- .github/workflows/test.yaml | 3 ++- src/modules/explorer/pages/DAOList/index.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index cbd5a10ae..b8d1e09f0 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -18,6 +18,7 @@ on: - '**' jobs: +# TODO: Add something like https://github.com/JakePartusch/wait-for-netlify-action test: timeout-minutes: 60 runs-on: ubuntu-latest @@ -32,7 +33,7 @@ jobs: steps: - uses: actions/checkout@v4 with: - repository: W3DevTeam/TezosHomebaseTests + repository: dOrgTech/homebase-app-tests - uses: actions/setup-node@v4 with: node-version: 18 diff --git a/src/modules/explorer/pages/DAOList/index.tsx b/src/modules/explorer/pages/DAOList/index.tsx index 4dc638247..ff1509745 100644 --- a/src/modules/explorer/pages/DAOList/index.tsx +++ b/src/modules/explorer/pages/DAOList/index.tsx @@ -238,7 +238,7 @@ export const DAOList: React.FC = () => { - + Create DAO From 751c2a792d1d4e668dbc41f3f9cf18c4cb0b0d03 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Wed, 27 Dec 2023 17:49:25 -0800 Subject: [PATCH 13/17] Temporarily disable action --- .github/workflows/test.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index b8d1e09f0..65dfbcec6 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -20,6 +20,8 @@ on: jobs: # TODO: Add something like https://github.com/JakePartusch/wait-for-netlify-action test: + # TODO: Remove this when playwright tests are working again + if: false timeout-minutes: 60 runs-on: ubuntu-latest env: From 2216e857560ab9b6906cec8b9dce3b4bfc1af206 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Thu, 28 Dec 2023 20:11:16 -0800 Subject: [PATCH 14/17] Add back .env.example --- .env.example | 15 +++++++++++++++ .gitignore | 1 - 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..7b27fa957 --- /dev/null +++ b/.env.example @@ -0,0 +1,15 @@ +REACT_APP_BASEDAO_DOCKERISED_URL=#LOCAL_BASEDAO_DOCKERIZED_URL +REACT_APP_CORS_PROXY_URL=#LOCAL_DORG_CORS_PROXY_URL +REACT_APP_DAO_DEPLOYER_API=#LOCAL_DAO_DEPLOYER_URL +REACT_APP_ENV=LOCAL +REACT_APP_HASURA_ADMIN_SECRET=#YOUR_HASURA_ADMIN_SECRET +REACT_APP_HASURA_ADMIN_SECRET_V2=#YOUR_HASURA_ADMIN_SECRET +REACT_APP_HASURA_URL=#YOUR_LOCAL_HOMBASE_INDEXER_HASURA_URL +REACT_APP_HASURA_URL_V2=#YOUR_LOCAL_HOMBASE_INDEXER_HASURA_URL +REACT_APP_LAUNCH_DARKLY_SDK_DEV=#YOUR_DARKLY_SDK_TOKEN_HERE +REACT_APP_LITE_API_URL=#YOUR_LOCAL_HOMBASE_LITE_BACKEND_URL +REACT_APP_MIXPANEL_DEBUG_ENABLED=false +REACT_APP_MIXPANEL_TOKEN=#YOUR_MIXPANEL_TOKEN_HERE +REACT_APP_NETWORK=ghostnet +REACT_APP_URL=http://localhost:3000 +REACT_APP_V2_URL=http://localhost:3000 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 51ee811f5..9ee46ceb3 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,3 @@ yarn-error.log* .vscode .idea -.env.example From 3fa62f807ec6fa08e14b95fed3f1510789d8b647 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Tue, 9 Jan 2024 10:11:03 -0800 Subject: [PATCH 15/17] Fix missing import in merge --- src/modules/lite/creator/index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/lite/creator/index.tsx b/src/modules/lite/creator/index.tsx index dc1fc1c40..cc5d82c82 100644 --- a/src/modules/lite/creator/index.tsx +++ b/src/modules/lite/creator/index.tsx @@ -33,6 +33,7 @@ import CodeOffIcon from "@mui/icons-material/CodeOff" import { ProposalCodeEditorInput } from "modules/explorer/components/ProposalFormInput" import Prism, { highlight } from "prismjs" import "prism-themes/themes/prism-night-owl.css" +import { getEnv, EnvKey } from "services/config" const CodeButton = styled(CodeIcon)(({ theme }) => ({ background: theme.palette.primary.dark, From 65f2ece99666ead771ab556db7a6081ee51d7cf7 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Tue, 9 Jan 2024 10:17:27 -0800 Subject: [PATCH 16/17] Reenable tests --- .github/workflows/test.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 65dfbcec6..b4eb83dcf 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -1,21 +1,21 @@ name: Playwright Tests on: -# TODO: uncomment below actual branch constraints - # push: - # branches: + push: + branches: + # TODO: comment out testing branch constraints + - '**' + # TODO: uncomment below actual branch constraints # - develop # - staging # - master - pull_request: - branches: - # TODO: uncomment below actual branch constraints + # TODO: uncomment below actual branch constraints + # pull_request: + # branches: # types: [opened] # - develop # - staging # - master - # TODO: comment out testing branch constraints - - '**' jobs: # TODO: Add something like https://github.com/JakePartusch/wait-for-netlify-action From 391c596c69bd652898a8242d89c7753565e2a701 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Tue, 9 Jan 2024 10:21:29 -0800 Subject: [PATCH 17/17] Really reenable tests --- .github/workflows/test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index b4eb83dcf..0c7ef174e 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -21,7 +21,7 @@ jobs: # TODO: Add something like https://github.com/JakePartusch/wait-for-netlify-action test: # TODO: Remove this when playwright tests are working again - if: false + # if: false timeout-minutes: 60 runs-on: ubuntu-latest env: