From bca1c54bf7221335c6d6a8494724e803dc2ec25e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 3 Jul 2024 16:56:52 +0200 Subject: [PATCH 1/3] Clear IPFS env vars --- .env.example | 2 +- .github/workflows/app-build.yml | 2 +- constants.ts | 2 +- plugins/dualGovernance/pages/new.tsx | 4 ++-- plugins/lockToVote/pages/new.tsx | 4 ++-- plugins/tokenVoting/pages/new.tsx | 4 ++-- scripts/deploy.ts | 2 +- utils/ipfs.ts | 4 ++-- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.env.example b/.env.example index 6f2e78e..29bb8d7 100644 --- a/.env.example +++ b/.env.example @@ -15,7 +15,7 @@ NEXT_PUBLIC_WEB3_URL_PREFIX=https://eth-sepolia.g.alchemy.com/v2/ NEXT_PUBLIC_ALCHEMY_API_KEY="ALCHEMY KEY" NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID="YOUR WALLET CONNECT PROJECT ID" NEXT_PUBLIC_IPFS_ENDPOINT="https://..." -NEXT_PUBLIC_IPFS_API_KEY="..." +NEXT_PUBLIC_PINATA_JWT="..." NEXT_PUBLIC_ETHERSCAN_API_KEY="OPTIONAL: ETHERSCAN API" # PRIVATE (scripts) diff --git a/.github/workflows/app-build.yml b/.github/workflows/app-build.yml index 3eebb8e..9f23f38 100644 --- a/.github/workflows/app-build.yml +++ b/.github/workflows/app-build.yml @@ -26,6 +26,6 @@ jobs: NEXT_PUBLIC_ALCHEMY_API_KEY: x NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID: x NEXT_PUBLIC_IPFS_ENDPOINT: https://ipfs/ - NEXT_PUBLIC_IPFS_API_KEY: x + NEXT_PUBLIC_PINATA_JWT: x NEXT_PUBLIC_ETHERSCAN_API_KEY: x NODE_ENV: production diff --git a/constants.ts b/constants.ts index ed4f032..824a0f2 100644 --- a/constants.ts +++ b/constants.ts @@ -29,7 +29,7 @@ export const PUB_ETHERSCAN_API_KEY = process.env.NEXT_PUBLIC_ETHERSCAN_API_KEY ? export const PUB_WALLET_CONNECT_PROJECT_ID = process.env.NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID ?? ""; export const PUB_IPFS_ENDPOINT = process.env.NEXT_PUBLIC_IPFS_ENDPOINT ?? ""; -export const PUB_IPFS_API_KEY = process.env.NEXT_PUBLIC_IPFS_API_KEY ?? ""; +export const PUB_PINATA_JWT = process.env.NEXT_PUBLIC_PINATA_JWT ?? ""; // General export const PUB_APP_NAME = "Aragonette"; diff --git a/plugins/dualGovernance/pages/new.tsx b/plugins/dualGovernance/pages/new.tsx index e62f57c..f5f56c6 100644 --- a/plugins/dualGovernance/pages/new.tsx +++ b/plugins/dualGovernance/pages/new.tsx @@ -13,7 +13,7 @@ import { getPlainText } from "@/utils/html"; import { useRouter } from "next/router"; import { Else, ElseIf, If, Then } from "@/components/if"; import { PleaseWaitSpinner } from "@/components/please-wait"; -import { PUB_IPFS_ENDPOINT, PUB_IPFS_API_KEY, PUB_DUAL_GOVERNANCE_PLUGIN_ADDRESS, PUB_CHAIN } from "@/constants"; +import { PUB_IPFS_ENDPOINT, PUB_PINATA_JWT, PUB_DUAL_GOVERNANCE_PLUGIN_ADDRESS, PUB_CHAIN } from "@/constants"; import { ActionCard } from "@/components/actions/action"; enum ActionType { @@ -24,7 +24,7 @@ enum ActionType { const ipfsClient = create({ url: PUB_IPFS_ENDPOINT, - headers: { "X-API-KEY": PUB_IPFS_API_KEY, Accept: "application/json" }, + headers: { "X-API-KEY": PUB_PINATA_JWT, Accept: "application/json" }, }); export default function Create() { diff --git a/plugins/lockToVote/pages/new.tsx b/plugins/lockToVote/pages/new.tsx index bdfcdf5..95023c4 100644 --- a/plugins/lockToVote/pages/new.tsx +++ b/plugins/lockToVote/pages/new.tsx @@ -13,7 +13,7 @@ import { getPlainText } from "@/utils/html"; import { useRouter } from "next/router"; import { Else, ElseIf, If, Then } from "@/components/if"; import { PleaseWaitSpinner } from "@/components/please-wait"; -import { PUB_IPFS_ENDPOINT, PUB_IPFS_API_KEY, PUB_CHAIN, PUB_LOCK_TO_VOTE_PLUGIN_ADDRESS } from "@/constants"; +import { PUB_IPFS_ENDPOINT, PUB_PINATA_JWT, PUB_CHAIN, PUB_LOCK_TO_VOTE_PLUGIN_ADDRESS } from "@/constants"; import { ActionCard } from "@/components/actions/action"; enum ActionType { @@ -24,7 +24,7 @@ enum ActionType { const ipfsClient = create({ url: PUB_IPFS_ENDPOINT, - headers: { "X-API-KEY": PUB_IPFS_API_KEY, Accept: "application/json" }, + headers: { "X-API-KEY": PUB_PINATA_JWT, Accept: "application/json" }, }); export default function Create() { diff --git a/plugins/tokenVoting/pages/new.tsx b/plugins/tokenVoting/pages/new.tsx index cbf1c66..58821a6 100644 --- a/plugins/tokenVoting/pages/new.tsx +++ b/plugins/tokenVoting/pages/new.tsx @@ -13,7 +13,7 @@ import { getPlainText } from "@/utils/html"; import { useRouter } from "next/router"; import { Else, ElseIf, If, Then } from "@/components/if"; import { PleaseWaitSpinner } from "@/components/please-wait"; -import { PUB_CHAIN, PUB_IPFS_API_KEY, PUB_IPFS_ENDPOINT, PUB_TOKEN_VOTING_PLUGIN_ADDRESS } from "@/constants"; +import { PUB_CHAIN, PUB_PINATA_JWT, PUB_IPFS_ENDPOINT, PUB_TOKEN_VOTING_PLUGIN_ADDRESS } from "@/constants"; import { ActionCard } from "@/components/actions/action"; enum ActionType { @@ -24,7 +24,7 @@ enum ActionType { const ipfsClient = create({ url: PUB_IPFS_ENDPOINT, - headers: { "X-API-KEY": PUB_IPFS_API_KEY, Accept: "application/json" }, + headers: { "X-API-KEY": PUB_PINATA_JWT, Accept: "application/json" }, }); export default function Create() { diff --git a/scripts/deploy.ts b/scripts/deploy.ts index b660c8a..2a99cb1 100644 --- a/scripts/deploy.ts +++ b/scripts/deploy.ts @@ -60,7 +60,7 @@ NEXT_PUBLIC_WEB3_URL_PREFIX=https://eth-${DEPLOYMENT_TARGET_CHAIN_ID}.g.alchemy. NEXT_PUBLIC_ALCHEMY_API_KEY= NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID= NEXT_PUBLIC_IPFS_ENDPOINT= -NEXT_PUBLIC_IPFS_API_KEY= +NEXT_PUBLIC_PINATA_JWT= NEXT_PUBLIC_ETHERSCAN_API_KEY= `; console.log(summary); diff --git a/utils/ipfs.ts b/utils/ipfs.ts index d778dce..32e9958 100644 --- a/utils/ipfs.ts +++ b/utils/ipfs.ts @@ -1,4 +1,4 @@ -import { PUB_IPFS_ENDPOINT, PUB_IPFS_API_KEY } from "@/constants"; +import { PUB_IPFS_ENDPOINT, PUB_PINATA_JWT } from "@/constants"; import { CID, IPFSHTTPClient } from "ipfs-http-client"; import { Hex, fromHex } from "viem"; @@ -27,7 +27,7 @@ async function fetchFromIPFS(ipfsUri: string): Promise { const response = await fetch(`${PUB_IPFS_ENDPOINT}/cat?arg=${path}`, { method: "POST", headers: { - "X-API-KEY": PUB_IPFS_API_KEY, + "X-API-KEY": PUB_PINATA_JWT, Accept: "application/json", }, signal: controller.signal, From 15d47552c75df0661386999dbc4e2ced4a5cca96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 3 Jul 2024 16:58:58 +0200 Subject: [PATCH 2/3] Update lock file --- bun.lockb | Bin 631326 -> 631326 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 186ae6e7adee5ca6a598ac8cfbf8eb9713a9b0e8..a1bd5e50e9bf55a202c7e145343794f723515da5 100755 GIT binary patch delta 10594 zcmXBYXBf9+!G`hI5n3sg743hvut`gCRJ3W+#V;>Wyd4)FaM~$n9`)^m zE;wNCqknw-u?PO=|4w>fwBM=0>A_y-274cJ=w5s6Ne|uo=!+S^K1?fv5gb=BhY8%n z6$_ZbJ3_I91^gowD_9{oO0k9w!rLe|VBA(Kf)>o%DaO!&TZe7Ir*#<5xv zv|vVxF?3)ZrWbrV1*!7tYL%j zaf%HXkJpNz1@j4tF?3)Zub4m&yC*89Fo1o6Vg@5PPg2Zb0yj}CUD z3c*tpYuF$>NwERrsag@VV4kcPLkHH=6cgxSmnx<(fPIQ$1|v96SIl7o_Zf->%-}s! zv4jQuXDL>&Lhx+G8a4=@qu79vX+_Y2`CP>qIrILY^ssxgVhRJ;Z&A!(1m~@aIZWWbO|gI(yjrn@1^l-wR#S{jx8^sJpaNehw!vya86$_Zb`+#Bz3-}*YtYC%ULy9$Q z5Pn#(0pnb)2wE^(#TYuU&QnaFhuudMQy9ShsA2{qI3H8YVFLH#iUrKzeL}H>1^iDc zR{eiR7{|U-M5;Q2+pk)bC|$ARIz{=yu%brSipA`D_9{oT(O1?!Xp$L zFpkuUpat_N#TYuUZljn$54+ncrZ9kgJH-q}a6H8vCU9@BSilV49TZDgz`vtn1uF!1 zQmkQv@Xm@27Ug#qkHF@q7D z;}mn4zb0W)}yR4icu|51t+tPng}v4#!8$0#;nJXR}$7R*>Nh7PR9DJIav?(vE# z3}8P&F@q7D;}vt5z!v^6q6&o;~r4>O7 z=Cc)J=)ii8VgfzvGQ|`Iu%D}#!3fUt6myusJyo%Q8NBB!mau?-nqmbj1TRpmVT15= z#RiOAD}olxGZbU!zmVDaO!&^Kn85vQ7BGW% zp<)RO__JaKD+Iq%tYL%j*NP1oztM`I1@pIxF?3-4PBDQVcE49lVF3Fg#SBJp7R4MU zaQ~oKzzp6W6-!va|C3?`D+GU5tYL%jFNzHqf7Obh1@mu;F?3+9iV5_v`@3Qa1K9si z%wPoPpNct5;QmXofEm1hE0(Z;{~yH)RtWy9Si=V4rr3b-KdlH_agMp~C69`+?(UL% zkF}RbpoiVwiYW|W@1vN(2+qEWIZWVQO0j?$JVUXB1^oRKD_9}eU$KS_!b>YQU|dEk zf)>onD#p-(b%0_5J?sutOkn_9KW9${BRH4SmpM$}US6?)8N4efmau?-kYWWZ1Xon7 zVT15WiVYZ7){3A7(^8C~1M4b^3G}eLs$vQQ*jH1`Us>?tq58$ucH`42iA2J6X;=gJ;f9Tu&=L}!3fR`6myuswG|7P z!8=5;ga!N?Dps&Ua3jSUHVAL5*nn{ptq58$Z>ktW2iDCL6X;>*D5fxgeRIVOMsRMS zn8O6_Efoux!Ml}W2@CkQR;*x!;84XHHV6+>Y`}1}B51)pTrq|YtRobYi#hwm==OVV gal*d)p0WRtmz+yoe2k0Feixtp&)fgVOIuI)e*rs@ga7~l delta 10594 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 From 9bda179d7fad634e0448aa3d734a2187f608e1d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8r=E2=88=82=C2=A1?= Date: Wed, 3 Jul 2024 17:24:55 +0200 Subject: [PATCH 3/3] Clean IPFS clients --- .env.example | 6 +- .github/workflows/app-build.yml | 2 +- bun.lockb | Bin 631326 -> 593457 bytes constants.ts | 2 +- hooks/useMetadata.ts | 4 +- package.json | 2 +- plugins/dualGovernance/pages/new.tsx | 19 ++---- plugins/lockToVote/pages/new.tsx | 19 ++---- plugins/tokenVoting/pages/new.tsx | 19 ++---- scripts/deploy.ts | 2 +- scripts/deploy/5-dao.ts | 8 +-- scripts/lib/util/ipfs.ts | 33 +++++++--- utils/ipfs.ts | 90 ++++++++++++++++++++------- 13 files changed, 118 insertions(+), 88 deletions(-) diff --git a/.env.example b/.env.example index 29bb8d7..2db39be 100644 --- a/.env.example +++ b/.env.example @@ -14,7 +14,7 @@ NEXT_PUBLIC_WEB3_URL_PREFIX=https://eth-sepolia.g.alchemy.com/v2/ NEXT_PUBLIC_ALCHEMY_API_KEY="ALCHEMY KEY" NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID="YOUR WALLET CONNECT PROJECT ID" -NEXT_PUBLIC_IPFS_ENDPOINT="https://..." +NEXT_PUBLIC_IPFS_ENDPOINTS="https://domain1/api,https://domain2/api/v0" NEXT_PUBLIC_PINATA_JWT="..." NEXT_PUBLIC_ETHERSCAN_API_KEY="OPTIONAL: ETHERSCAN API" @@ -24,5 +24,5 @@ DEPLOYMENT_WALLET_PRIVATE_KEY="0x..." DEPLOYMENT_ALCHEMY_API_KEY="..." DEPLOYMENT_WEB3_ENDPOINT="https://..." -DEPLOYMENT_IPFS_ENDPOINT="https://..." -DEPLOYMENT_IPFS_API_KEY="..." +DEPLOYMENT_APP_NAME="Taiko" +DEPLOYMENT_PINATA_JWT="..." diff --git a/.github/workflows/app-build.yml b/.github/workflows/app-build.yml index 9f23f38..3e2d7c6 100644 --- a/.github/workflows/app-build.yml +++ b/.github/workflows/app-build.yml @@ -25,7 +25,7 @@ jobs: NEXT_PUBLIC_WEB3_URL_PREFIX: https://rpc/ NEXT_PUBLIC_ALCHEMY_API_KEY: x NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID: x - NEXT_PUBLIC_IPFS_ENDPOINT: https://ipfs/ + NEXT_PUBLIC_IPFS_ENDPOINTS: https://domain1/api,https://domain2/api/v0 NEXT_PUBLIC_PINATA_JWT: x NEXT_PUBLIC_ETHERSCAN_API_KEY: x NODE_ENV: production diff --git a/bun.lockb b/bun.lockb index a1bd5e50e9bf55a202c7e145343794f723515da5..aea284e18a242e739be1172cb2cf0974c35ab7f9 100755 GIT binary patch delta 79823 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

^WPV-_cTP%T9;r=f5vv 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: string) { queryFn: () => { if (!ipfsUri) return Promise.resolve(""); - return fetchJsonFromIpfs(ipfsUri); + return fetchIpfsAsJson(ipfsUri); }, retry: true, refetchOnMount: false, diff --git a/package.json b/package.json index 8fac7dc..6f50a65 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "classnames": "^2.5.1", "dayjs": "^1.11.10", "dompurify": "^3.0.11", - "ipfs-http-client": "^60.0.1", + "multiformats": "^13.1.3", "next": "14.1.4", "react": "^18.2.0", "react-blockies": "^1.4.1", diff --git a/plugins/dualGovernance/pages/new.tsx b/plugins/dualGovernance/pages/new.tsx index f5f56c6..5d18d71 100644 --- a/plugins/dualGovernance/pages/new.tsx +++ b/plugins/dualGovernance/pages/new.tsx @@ -1,7 +1,6 @@ -import { create } from "ipfs-http-client"; import { Button, IconType, Icon, InputText, TextAreaRichText } from "@aragon/ods"; import React, { useEffect, useState } from "react"; -import { uploadToIPFS } from "@/utils/ipfs"; +import { uploadToPinata } from "@/utils/ipfs"; import { useWaitForTransactionReceipt, useWriteContract } from "wagmi"; import { toHex } from "viem"; import { OptimisticTokenVotingPluginAbi } from "@/plugins/dualGovernance/artifacts/OptimisticTokenVotingPlugin.sol"; @@ -13,7 +12,7 @@ import { getPlainText } from "@/utils/html"; import { useRouter } from "next/router"; import { Else, ElseIf, If, Then } from "@/components/if"; import { PleaseWaitSpinner } from "@/components/please-wait"; -import { PUB_IPFS_ENDPOINT, PUB_PINATA_JWT, PUB_DUAL_GOVERNANCE_PLUGIN_ADDRESS, PUB_CHAIN } from "@/constants"; +import { PUB_CHAIN, PUB_DUAL_GOVERNANCE_PLUGIN_ADDRESS } from "@/constants"; import { ActionCard } from "@/components/actions/action"; enum ActionType { @@ -22,11 +21,6 @@ enum ActionType { Custom, } -const ipfsClient = create({ - url: PUB_IPFS_ENDPOINT, - headers: { "X-API-KEY": PUB_PINATA_JWT, Accept: "application/json" }, -}); - export default function Create() { const { push } = useRouter(); const [title, setTitle] = useState(""); @@ -85,7 +79,7 @@ export default function Create() { }); const plainSummary = getPlainText(summary).trim(); - if (!plainSummary.trim()) + if (!plainSummary) return addAlert("Invalid proposal details", { description: "Please, enter a summary of what the proposal is about", type: "error", @@ -113,17 +107,14 @@ export default function Create() { } const proposalMetadataJsonObject = { title, summary }; - const blob = new Blob([JSON.stringify(proposalMetadataJsonObject)], { - type: "application/json", - }); + const ipfsUri = await uploadToPinata(JSON.stringify(proposalMetadataJsonObject)); - const ipfsPin = await uploadToIPFS(ipfsClient, blob); createProposalWrite({ chainId: PUB_CHAIN.id, abi: OptimisticTokenVotingPluginAbi, address: PUB_DUAL_GOVERNANCE_PLUGIN_ADDRESS, functionName: "createProposal", - args: [toHex(ipfsPin), actions, BigInt(0), BigInt(0), BigInt(0)], + args: [toHex(ipfsUri), actions, BigInt(0), BigInt(0), BigInt(0)], }); }; diff --git a/plugins/lockToVote/pages/new.tsx b/plugins/lockToVote/pages/new.tsx index 95023c4..fff8521 100644 --- a/plugins/lockToVote/pages/new.tsx +++ b/plugins/lockToVote/pages/new.tsx @@ -1,7 +1,6 @@ -import { create } from "ipfs-http-client"; import { Button, IconType, Icon, InputText, TextAreaRichText } from "@aragon/ods"; import React, { useEffect, useState } from "react"; -import { uploadToIPFS } from "@/utils/ipfs"; +import { uploadToPinata } from "@/utils/ipfs"; import { useWaitForTransactionReceipt, useWriteContract } from "wagmi"; import { toHex } from "viem"; import { OptimisticTokenVotingPluginAbi } from "@/plugins/dualGovernance/artifacts/OptimisticTokenVotingPlugin.sol"; @@ -13,7 +12,7 @@ import { getPlainText } from "@/utils/html"; import { useRouter } from "next/router"; import { Else, ElseIf, If, Then } from "@/components/if"; import { PleaseWaitSpinner } from "@/components/please-wait"; -import { PUB_IPFS_ENDPOINT, PUB_PINATA_JWT, PUB_CHAIN, PUB_LOCK_TO_VOTE_PLUGIN_ADDRESS } from "@/constants"; +import { PUB_CHAIN, PUB_LOCK_TO_VOTE_PLUGIN_ADDRESS } from "@/constants"; import { ActionCard } from "@/components/actions/action"; enum ActionType { @@ -22,11 +21,6 @@ enum ActionType { Custom, } -const ipfsClient = create({ - url: PUB_IPFS_ENDPOINT, - headers: { "X-API-KEY": PUB_PINATA_JWT, Accept: "application/json" }, -}); - export default function Create() { const { push } = useRouter(); const [title, setTitle] = useState(""); @@ -85,7 +79,7 @@ export default function Create() { }); const plainSummary = getPlainText(summary).trim(); - if (!plainSummary.trim()) + if (!plainSummary) return addAlert("Invalid proposal details", { description: "Please, enter a summary of what the proposal is about", type: "error", @@ -113,17 +107,14 @@ export default function Create() { } const proposalMetadataJsonObject = { title, summary }; - const blob = new Blob([JSON.stringify(proposalMetadataJsonObject)], { - type: "application/json", - }); + const ipfsUri = await uploadToPinata(JSON.stringify(proposalMetadataJsonObject)); - const ipfsPin = await uploadToIPFS(ipfsClient, blob); createProposalWrite({ chainId: PUB_CHAIN.id, abi: OptimisticTokenVotingPluginAbi, address: PUB_LOCK_TO_VOTE_PLUGIN_ADDRESS, functionName: "createProposal", - args: [toHex(ipfsPin), actions, BigInt(0), BigInt(0), BigInt(0)], + args: [toHex(ipfsUri), actions, BigInt(0), BigInt(0), BigInt(0)], }); }; diff --git a/plugins/tokenVoting/pages/new.tsx b/plugins/tokenVoting/pages/new.tsx index 58821a6..25fac96 100644 --- a/plugins/tokenVoting/pages/new.tsx +++ b/plugins/tokenVoting/pages/new.tsx @@ -1,7 +1,6 @@ -import { create } from "ipfs-http-client"; import { Button, IconType, Icon, InputText, TextAreaRichText } from "@aragon/ods"; import React, { useEffect, useState } from "react"; -import { uploadToIPFS } from "@/utils/ipfs"; +import { uploadToPinata } from "@/utils/ipfs"; import { useWaitForTransactionReceipt, useWriteContract } from "wagmi"; import { toHex } from "viem"; import { TokenVotingAbi } from "@/plugins/tokenVoting/artifacts/TokenVoting.sol"; @@ -13,7 +12,7 @@ import { getPlainText } from "@/utils/html"; import { useRouter } from "next/router"; import { Else, ElseIf, If, Then } from "@/components/if"; import { PleaseWaitSpinner } from "@/components/please-wait"; -import { PUB_CHAIN, PUB_PINATA_JWT, PUB_IPFS_ENDPOINT, PUB_TOKEN_VOTING_PLUGIN_ADDRESS } from "@/constants"; +import { PUB_CHAIN, PUB_TOKEN_VOTING_PLUGIN_ADDRESS } from "@/constants"; import { ActionCard } from "@/components/actions/action"; enum ActionType { @@ -22,11 +21,6 @@ enum ActionType { Custom, } -const ipfsClient = create({ - url: PUB_IPFS_ENDPOINT, - headers: { "X-API-KEY": PUB_PINATA_JWT, Accept: "application/json" }, -}); - export default function Create() { const { push } = useRouter(); const [title, setTitle] = useState(""); @@ -86,7 +80,7 @@ export default function Create() { }); const plainSummary = getPlainText(summary).trim(); - if (!plainSummary.trim()) + if (!plainSummary) return addAlert("Invalid proposal details", { description: "Please, enter a summary of what the proposal is about", type: "error", @@ -114,17 +108,14 @@ export default function Create() { } const proposalMetadataJsonObject = { title, summary }; - const blob = new Blob([JSON.stringify(proposalMetadataJsonObject)], { - type: "application/json", - }); + const ipfsUri = await uploadToPinata(JSON.stringify(proposalMetadataJsonObject)); - const ipfsPin = await uploadToIPFS(ipfsClient, blob); createProposalWrite({ chainId: PUB_CHAIN.id, abi: TokenVotingAbi, address: PUB_TOKEN_VOTING_PLUGIN_ADDRESS, functionName: "createProposal", - args: [toHex(ipfsPin), actions, BigInt(0), BigInt(0), BigInt(0), 0, false], + args: [toHex(ipfsUri), actions, BigInt(0), BigInt(0), BigInt(0), 0, false], }); }; diff --git a/scripts/deploy.ts b/scripts/deploy.ts index 2a99cb1..30c499c 100644 --- a/scripts/deploy.ts +++ b/scripts/deploy.ts @@ -59,7 +59,7 @@ NEXT_PUBLIC_WEB3_URL_PREFIX=https://eth-${DEPLOYMENT_TARGET_CHAIN_ID}.g.alchemy. NEXT_PUBLIC_ALCHEMY_API_KEY= NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID= -NEXT_PUBLIC_IPFS_ENDPOINT= +NEXT_PUBLIC_IPFS_ENDPOINTS= NEXT_PUBLIC_PINATA_JWT= NEXT_PUBLIC_ETHERSCAN_API_KEY= `; diff --git a/scripts/deploy/5-dao.ts b/scripts/deploy/5-dao.ts index a9494ca..ca590bd 100644 --- a/scripts/deploy/5-dao.ts +++ b/scripts/deploy/5-dao.ts @@ -10,8 +10,7 @@ import { import { type Address, type Hex, type Log, decodeEventLog, toHex } from "viem"; import { deploymentPublicClient as publicClient, deploymentWalletClient as walletClient } from "../lib/util/client"; import { deploymentAccount as account } from "../lib/util/account"; -import { uploadToIPFS } from "@/utils/ipfs"; -import { deploymentIpfsClient as ipfsClient } from "../lib/util/ipfs"; +import { uploadToPinata } from "@/utils/ipfs"; import { ABI as DaoFactoryABI } from "../lib/artifacts/dao-factory"; import { ABI as DaoRegistryABI } from "../lib/artifacts/dao-registry"; import { ABI as PluginSetupProcessorABI } from "../lib/artifacts/plugin-setup-processor"; @@ -73,11 +72,8 @@ function pinDaoMetadata(): Promise { // }, // ], }; - const blob = new Blob([JSON.stringify(daoMetadata)], { - type: "application/json", - }); - return uploadToIPFS(ipfsClient, blob) + return uploadToPinata(JSON.stringify(daoMetadata)) .then((res) => toHex(res)) .catch((err) => { console.warn("Warning: Could not pin the DAO metadata on IPFS"); diff --git a/scripts/lib/util/ipfs.ts b/scripts/lib/util/ipfs.ts index 04e3def..7bcb35c 100644 --- a/scripts/lib/util/ipfs.ts +++ b/scripts/lib/util/ipfs.ts @@ -1,10 +1,29 @@ -import { create } from "ipfs-http-client"; import { getEnv } from "./env"; -const IPFS_ENDPOINT = getEnv("DEPLOYMENT_IPFS_ENDPOINT", true) ?? ""; -const IPFS_API_KEY = getEnv("DEPLOYMENT_IPFS_API_KEY", true) || ""; +const PINATA_JWT = getEnv("DEPLOYMENT_PINATA_JWT", true) || ""; +const APP_NAME = getEnv("DEPLOYMENT_APP_NAME", true) || ""; -export const deploymentIpfsClient = create({ - url: IPFS_ENDPOINT, - headers: { "X-API-KEY": IPFS_API_KEY, Accept: "application/json" }, -}); +const UPLOAD_FILE_NAME = APP_NAME.toLowerCase().trim().replaceAll(" ", "-") + ".json"; + +export async function uploadToPinata(strBody: string) { + const blob = new Blob([strBody], { type: "text/plain" }); + const file = new File([blob], UPLOAD_FILE_NAME); + const data = new FormData(); + data.append("file", file); + data.append("pinataMetadata", JSON.stringify({ name: UPLOAD_FILE_NAME })); + data.append("pinataOptions", JSON.stringify({ cidVersion: 1 })); + + const res = await fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", { + method: "POST", + headers: { + Authorization: `Bearer ${PINATA_JWT}`, + }, + body: data, + }); + + const resData = await res.json(); + + if (resData.error) throw new Error("Request failed: " + resData.error); + else if (!resData.IpfsHash) throw new Error("Could not pin the metadata"); + return "ipfs://" + resData.IpfsHash; +} diff --git a/utils/ipfs.ts b/utils/ipfs.ts index 32e9958..f7bfade 100644 --- a/utils/ipfs.ts +++ b/utils/ipfs.ts @@ -1,18 +1,57 @@ -import { PUB_IPFS_ENDPOINT, PUB_PINATA_JWT } from "@/constants"; -import { CID, IPFSHTTPClient } from "ipfs-http-client"; -import { Hex, fromHex } from "viem"; +import { PUB_IPFS_ENDPOINTS, PUB_PINATA_JWT, PUB_APP_NAME } from "@/constants"; +import { Hex, fromHex, toBytes } from "viem"; +import { CID } from "multiformats/cid"; +import * as raw from "multiformats/codecs/raw"; +import { sha256 } from "multiformats/hashes/sha2"; -export function fetchJsonFromIpfs(ipfsUri: string) { - return fetchFromIPFS(ipfsUri).then((res) => res.json()); +const IPFS_FETCH_TIMEOUT = 1000; // 1 second +const UPLOAD_FILE_NAME = PUB_APP_NAME.toLowerCase().trim().replaceAll(" ", "-") + ".json"; + +export function fetchIpfsAsJson(ipfsUri: string) { + return fetchRawIpfs(ipfsUri).then((res) => res.json()); +} + +export function fetchIpfsAsText(ipfsUri: string) { + return fetchRawIpfs(ipfsUri).then((res) => res.text()); } -export function uploadToIPFS(client: IPFSHTTPClient, blob: Blob) { - return client.add(blob).then(({ cid }: { cid: CID }) => { - return "ipfs://" + cid.toString(); +export function fetchIpfsAsBlob(ipfsUri: string) { + return fetchRawIpfs(ipfsUri).then((res) => res.blob()); +} + +export async function uploadToPinata(strBody: string) { + const blob = new Blob([strBody], { type: "text/plain" }); + const file = new File([blob], UPLOAD_FILE_NAME); + const data = new FormData(); + data.append("file", file); + data.append("pinataMetadata", JSON.stringify({ name: UPLOAD_FILE_NAME })); + data.append("pinataOptions", JSON.stringify({ cidVersion: 1 })); + + const res = await fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", { + method: "POST", + headers: { + Authorization: `Bearer ${PUB_PINATA_JWT}`, + }, + body: data, }); + + const resData = await res.json(); + + if (resData.error) throw new Error("Request failed: " + resData.error); + else if (!resData.IpfsHash) throw new Error("Could not pin the metadata"); + return "ipfs://" + resData.IpfsHash; } -async function fetchFromIPFS(ipfsUri: string): Promise { +export async function getContentCid(strMetadata: string) { + const bytes = raw.encode(toBytes(strMetadata)); + const hash = await sha256.digest(bytes); + const cid = CID.create(1, raw.code, hash); + return "ipfs://" + cid.toV1().toString(); +} + +// Internal helpers + +async function fetchRawIpfs(ipfsUri: string): Promise { if (!ipfsUri) throw new Error("Invalid IPFS URI"); else if (ipfsUri.startsWith("0x")) { // fallback @@ -21,22 +60,25 @@ async function fetchFromIPFS(ipfsUri: string): Promise { if (!ipfsUri) throw new Error("Invalid IPFS URI"); } - const path = resolvePath(ipfsUri); - const controller = new AbortController(); - const id = setTimeout(() => controller.abort(), 800); - const response = await fetch(`${PUB_IPFS_ENDPOINT}/cat?arg=${path}`, { - method: "POST", - headers: { - "X-API-KEY": PUB_PINATA_JWT, - Accept: "application/json", - }, - signal: controller.signal, - }); - clearTimeout(id); - if (!response.ok) { - throw new Error("Could not connect to the IPFS endpoint"); + const uriPrefixes = PUB_IPFS_ENDPOINTS.split(",").filter((uri) => !!uri.trim()); + if (!uriPrefixes.length) throw new Error("No available IPFS endpoints to fetch from"); + + const cid = resolvePath(ipfsUri); + + for (const uriPrefix of uriPrefixes) { + const controller = new AbortController(); + const abortId = setTimeout(() => controller.abort(), IPFS_FETCH_TIMEOUT); + const response = await fetch(`${uriPrefix}/${cid}`, { + method: "GET", + signal: controller.signal, + }); + clearTimeout(abortId); + if (!response.ok) continue; + + return response; // .json(), .text(), .blob(), etc. } - return response; // .json(), .text(), .blob(), etc. + + throw new Error("Could not connect to any of the IPFS endpoints"); } function resolvePath(uri: string) {