From 95c0425179c6d76ee21561a1d5275a6775017ec0 Mon Sep 17 00:00:00 2001 From: "Emmanuel .A" Date: Fri, 5 Jun 2026 14:16:52 +0100 Subject: [PATCH] chore: mesh-tx-builder upgrade for hardfork ready --- package.json | 8 +-- .../multisig/proxy/ProxyControl.tsx | 50 ++++++++++--------- .../governance/drep/id/delegateButton.tsx | 2 +- .../pages/wallet/governance/ballot/ballot.tsx | 4 +- .../wallet/governance/cCommitee/voteCC.tsx | 4 +- .../pages/wallet/governance/card-info.tsx | 2 +- .../wallet/governance/drep/registerDrep.tsx | 4 +- .../pages/wallet/governance/drep/retire.tsx | 4 +- .../wallet/governance/drep/updateDrep.tsx | 4 +- .../governance/proposal/voteButtton.tsx | 4 +- .../pages/wallet/governance/proposals.tsx | 2 +- .../info/migration/FundTransferStep.tsx | 2 +- .../wallet/new-transaction/deposit/index.tsx | 2 +- .../pages/wallet/new-transaction/index.tsx | 2 +- .../wallet/staking/StakingActions/stake.tsx | 4 +- .../wallet/transactions/all-transactions.tsx | 2 +- .../responsive-transactions-table.tsx | 2 +- .../pages/wallet/transactions/send-all.tsx | 2 +- src/lib/zustand/proxy.ts | 6 +-- src/utils/get-tx-builder.ts | 4 +- 20 files changed, 59 insertions(+), 55 deletions(-) diff --git a/package.json b/package.json index a378f711..5b1a55a8 100644 --- a/package.json +++ b/package.json @@ -28,10 +28,10 @@ }, "dependencies": { "@auth/prisma-adapter": "^2.11.1", - "@meshsdk/core": "^1.9.0-beta.104", - "@meshsdk/core-csl": "^1.9.0-beta.104", - "@meshsdk/core-cst": "^1.9.0-beta.87", - "@meshsdk/provider": "^1.9.0-beta.86", + "@meshsdk/core": "^1.9.0", + "@meshsdk/core-csl": "^1.9.0", + "@meshsdk/core-cst": "^1.9.0", + "@meshsdk/provider": "^1.9.0-beta.101", "@meshsdk/react": "^2.0.0-beta.2", "@octokit/core": "^6.1.2", "@prisma/client": "^7.8.0", diff --git a/src/components/multisig/proxy/ProxyControl.tsx b/src/components/multisig/proxy/ProxyControl.tsx index 220d831b..2234e2a4 100644 --- a/src/components/multisig/proxy/ProxyControl.tsx +++ b/src/components/multisig/proxy/ProxyControl.tsx @@ -170,27 +170,29 @@ export default function ProxyControl() { if (isWalletReady && activeWallet) { // Only initialize once if (!contractInitializedRef.current) { - try { - const txBuilder = getTxBuilder(network); - const contract = new MeshProxyContract( - { - mesh: txBuilder, - wallet: activeWallet, - networkId: network, - }, - {}, - appWallet?.scriptCbor ?? undefined, - ); - setProxyContract(contract); - contractInitializedRef.current = true; - } catch (error) { - console.error("[ProxyContract] Failed to initialize:", error); - toast({ - title: "Error", - description: "Failed to initialize proxy contract", - variant: "destructive", - }); - } + (async () => { + try { + const txBuilder = await getTxBuilder(network); + const contract = new MeshProxyContract( + { + mesh: txBuilder, + wallet: activeWallet, + networkId: network, + }, + {}, + appWallet?.scriptCbor ?? undefined, + ); + setProxyContract(contract); + contractInitializedRef.current = true; + } catch (error) { + console.error("[ProxyContract] Failed to initialize:", error); + toast({ + title: "Error", + description: "Failed to initialize proxy contract", + variant: "destructive", + }); + } + })(); } } else { // Clear contract if wallet is not ready @@ -432,7 +434,7 @@ export default function ProxyControl() { // Create a temporary contract instance for this proxy const tempContract = new MeshProxyContract( { - mesh: getTxBuilder(network), + mesh: await getTxBuilder(network), wallet: activeWallet, networkId: network, }, @@ -456,7 +458,7 @@ export default function ProxyControl() { // Create a temporary contract instance for this proxy const tempContract = new MeshProxyContract( { - mesh: getTxBuilder(network), + mesh: await getTxBuilder(network), wallet: activeWallet, networkId: network, }, @@ -605,7 +607,7 @@ export default function ProxyControl() { const selectedProxyContract = new MeshProxyContract( { - mesh: getTxBuilder(network), + mesh: await getTxBuilder(network), wallet: activeWallet, networkId: network, }, diff --git a/src/components/pages/homepage/governance/drep/id/delegateButton.tsx b/src/components/pages/homepage/governance/drep/id/delegateButton.tsx index 7afb9635..a51e96ff 100644 --- a/src/components/pages/homepage/governance/drep/id/delegateButton.tsx +++ b/src/components/pages/homepage/governance/drep/id/delegateButton.tsx @@ -49,7 +49,7 @@ export default function DelegateButton({ drepid }: { drepid: string }) { } // console.log("Building delegation transaction..."); - const txBuilder = getTxBuilder(await wallet.getNetworkId()); + const txBuilder = await getTxBuilder(await wallet.getNetworkId()); txBuilder .voteDelegationCertificate({ dRepId: drepid }, rewardAddress) .changeAddress(changeAddress) diff --git a/src/components/pages/wallet/governance/ballot/ballot.tsx b/src/components/pages/wallet/governance/ballot/ballot.tsx index 895699e1..4ce566e6 100644 --- a/src/components/pages/wallet/governance/ballot/ballot.tsx +++ b/src/components/pages/wallet/governance/ballot/ballot.tsx @@ -288,7 +288,7 @@ export default function BallotCard({ const proxy = proxies.find((p: any) => p.id === selectedProxyId); if (!proxy) throw new Error("Proxy not found"); - const meshTxBuilder = getTxBuilder(network); + const meshTxBuilder = await getTxBuilder(network); const proxyContract = new MeshProxyContract( { mesh: meshTxBuilder, @@ -436,7 +436,7 @@ export default function BallotCard({ setAlert("Change address not found"); return; } - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); // Ensure minimum ADA for fee and voting const assetMap = new Map(); diff --git a/src/components/pages/wallet/governance/cCommitee/voteCC.tsx b/src/components/pages/wallet/governance/cCommitee/voteCC.tsx index b69830f9..026f52f7 100644 --- a/src/components/pages/wallet/governance/cCommitee/voteCC.tsx +++ b/src/components/pages/wallet/governance/cCommitee/voteCC.tsx @@ -103,7 +103,7 @@ export default function VoteCC({ setLoading(true); try { - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const paymentScript = appWallet.scriptCbor; if (!paymentScript) return; @@ -145,7 +145,7 @@ export default function VoteCC({ }); // send discord message await sendDiscordMessage( - discordIds, + discordIds as [], `**NEW MULTISIG TRANSACTION:** A new CC Vote was created for your wallet: ${appWallet.name}. Review it here: ${window.location.origin}/wallets/${appWallet.id}/transactions`, ); router.push(`/wallets/${appWallet.id}/transactions`); diff --git a/src/components/pages/wallet/governance/card-info.tsx b/src/components/pages/wallet/governance/card-info.tsx index f371bb7e..9994232c 100644 --- a/src/components/pages/wallet/governance/card-info.tsx +++ b/src/components/pages/wallet/governance/card-info.tsx @@ -89,7 +89,7 @@ export default function CardInfo({ appWallet, manualUtxos }: { appWallet: Wallet }, 10000); // 10 second timeout try { - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const proxyContract = new MeshProxyContract( { mesh: txBuilder, diff --git a/src/components/pages/wallet/governance/drep/registerDrep.tsx b/src/components/pages/wallet/governance/drep/registerDrep.tsx index 0c789ac3..e2b0397f 100644 --- a/src/components/pages/wallet/governance/drep/registerDrep.tsx +++ b/src/components/pages/wallet/governance/drep/registerDrep.tsx @@ -132,7 +132,7 @@ export default function RegisterDRep({ onClose }: RegisterDRepProps = {}) { } setLoading(true); - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); // For legacy wallets (no multisigWallet), use appWallet values directly (preserves input order) // For SDK wallets, use multisigWallet to compute DRep ID and script @@ -281,7 +281,7 @@ export default function RegisterDRep({ onClose }: RegisterDRepProps = {}) { } // Create proxy contract instance with the selected proxy - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const proxyContract = new MeshProxyContract( { mesh: txBuilder, diff --git a/src/components/pages/wallet/governance/drep/retire.tsx b/src/components/pages/wallet/governance/drep/retire.tsx index d961d147..2677110f 100644 --- a/src/components/pages/wallet/governance/drep/retire.tsx +++ b/src/components/pages/wallet/governance/drep/retire.tsx @@ -92,7 +92,7 @@ export default function Retire({ appWallet, manualUtxos }: { appWallet: Wallet; } // Create proxy contract instance - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const proxyContract = new MeshProxyContract( { mesh: txBuilder, @@ -171,7 +171,7 @@ export default function Retire({ appWallet, manualUtxos }: { appWallet: Wallet; return; } - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); // For legacy wallets (no multisigWallet), use appWallet values directly (preserves input order) // For SDK wallets, use multisigWallet to compute DRep ID and script diff --git a/src/components/pages/wallet/governance/drep/updateDrep.tsx b/src/components/pages/wallet/governance/drep/updateDrep.tsx index b9365e8b..91fe6757 100644 --- a/src/components/pages/wallet/governance/drep/updateDrep.tsx +++ b/src/components/pages/wallet/governance/drep/updateDrep.tsx @@ -141,7 +141,7 @@ export default function UpdateDRep({ onClose }: UpdateDRepProps = {}) { const { utxos, walletAddress } = await getMsInputs(); // Create proxy contract instance - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const proxyContract = new MeshProxyContract( { mesh: txBuilder, @@ -182,7 +182,7 @@ export default function UpdateDRep({ onClose }: UpdateDRepProps = {}) { throw new Error("Wallet not connected"); setLoading(true); - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); // For legacy wallets (no multisigWallet), use appWallet values directly (preserves input order) // For SDK wallets, use multisigWallet to compute DRep ID and script diff --git a/src/components/pages/wallet/governance/proposal/voteButtton.tsx b/src/components/pages/wallet/governance/proposal/voteButtton.tsx index 34d43bfa..5b0be3b4 100644 --- a/src/components/pages/wallet/governance/proposal/voteButtton.tsx +++ b/src/components/pages/wallet/governance/proposal/voteButtton.tsx @@ -131,7 +131,7 @@ export default function VoteButton({ } // Create proxy contract instance - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const proxyContract = new MeshProxyContract( { mesh: txBuilder, @@ -265,7 +265,7 @@ export default function VoteButton({ setAlert("Change address not found"); return; } - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const assetMap = new Map(); assetMap.set("lovelace", "5000000"); diff --git a/src/components/pages/wallet/governance/proposals.tsx b/src/components/pages/wallet/governance/proposals.tsx index b1560f75..5a1631df 100644 --- a/src/components/pages/wallet/governance/proposals.tsx +++ b/src/components/pages/wallet/governance/proposals.tsx @@ -309,7 +309,7 @@ export default function AllProposals({ appWallet, utxos, selectedBallotId, onSel // Otherwise, calculate it from the proxy contract try { - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const proxyContract = new MeshProxyContract( { mesh: txBuilder, diff --git a/src/components/pages/wallet/info/migration/FundTransferStep.tsx b/src/components/pages/wallet/info/migration/FundTransferStep.tsx index 23787302..40f22caf 100644 --- a/src/components/pages/wallet/info/migration/FundTransferStep.tsx +++ b/src/components/pages/wallet/info/migration/FundTransferStep.tsx @@ -217,7 +217,7 @@ export default function FundTransferStep({ return; } - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); // Add all UTxOs as inputs for (const utxo of utxos) { diff --git a/src/components/pages/wallet/new-transaction/deposit/index.tsx b/src/components/pages/wallet/new-transaction/deposit/index.tsx index fec3d068..a37748bb 100644 --- a/src/components/pages/wallet/new-transaction/deposit/index.tsx +++ b/src/components/pages/wallet/new-transaction/deposit/index.tsx @@ -199,7 +199,7 @@ export default function PageNewTransaction() { return; } - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); for (const utxo of selectedUtxos) { txBuilder.txIn( diff --git a/src/components/pages/wallet/new-transaction/index.tsx b/src/components/pages/wallet/new-transaction/index.tsx index 4ad5e17a..081f34a5 100644 --- a/src/components/pages/wallet/new-transaction/index.tsx +++ b/src/components/pages/wallet/new-transaction/index.tsx @@ -423,7 +423,7 @@ export default function PageNewTransaction({ onSuccess }: { onSuccess?: () => vo return; } - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const paymentScript = appWallet.scriptCbor; if (!paymentScript) return; diff --git a/src/components/pages/wallet/staking/StakingActions/stake.tsx b/src/components/pages/wallet/staking/StakingActions/stake.tsx index 2c77d877..cfc7084f 100644 --- a/src/components/pages/wallet/staking/StakingActions/stake.tsx +++ b/src/components/pages/wallet/staking/StakingActions/stake.tsx @@ -26,7 +26,7 @@ function buildStakingActionConfigs({ poolHex, rewards, }: { - txBuilder: ReturnType; + txBuilder: Awaited>; rewardAddress: string; stakingScript: string; poolHex: string; @@ -103,7 +103,7 @@ export default function StakeButton({ const stakingScript = appWallet.stakeScriptCbor || mWallet.getStakingScript(); if (!stakingScript) throw new Error("Staking Script could not be built."); - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const selectedUtxos = utxos; for (const utxo of selectedUtxos) { diff --git a/src/components/pages/wallet/transactions/all-transactions.tsx b/src/components/pages/wallet/transactions/all-transactions.tsx index 0234fbc0..20a4f2c9 100644 --- a/src/components/pages/wallet/transactions/all-transactions.tsx +++ b/src/components/pages/wallet/transactions/all-transactions.tsx @@ -387,7 +387,7 @@ function RowAction({ ); if (allTxInputsFromSameAddress) { - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const _amount: { [unit: string]: number } = {}; diff --git a/src/components/pages/wallet/transactions/responsive-transactions-table.tsx b/src/components/pages/wallet/transactions/responsive-transactions-table.tsx index 9bd8bf85..ef316c94 100644 --- a/src/components/pages/wallet/transactions/responsive-transactions-table.tsx +++ b/src/components/pages/wallet/transactions/responsive-transactions-table.tsx @@ -289,7 +289,7 @@ function RowAction({ ); if (allTxInputsFromSameAddress) { - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); const _amount: { [unit: string]: number } = {}; diff --git a/src/components/pages/wallet/transactions/send-all.tsx b/src/components/pages/wallet/transactions/send-all.tsx index 564f7dc2..d60ba65f 100644 --- a/src/components/pages/wallet/transactions/send-all.tsx +++ b/src/components/pages/wallet/transactions/send-all.tsx @@ -59,7 +59,7 @@ export default function CardSendAll({ appWallet }: { appWallet: Wallet }) { appWallet.address, ); - const txBuilder = getTxBuilder(network); + const txBuilder = await getTxBuilder(network); for (const utxo of utxos) { txBuilder.txIn( diff --git a/src/lib/zustand/proxy.ts b/src/lib/zustand/proxy.ts index 6e834b0b..a0c70be0 100644 --- a/src/lib/zustand/proxy.ts +++ b/src/lib/zustand/proxy.ts @@ -169,7 +169,7 @@ export const useProxyStore = create()( get().setDrepLoading(proxyId, true); get().setDrepError(proxyId, null); - const txBuilder = getTxBuilder(parseInt(network)); + const txBuilder = await getTxBuilder(parseInt(network)); const proxyContract = new MeshProxyContract( { mesh: txBuilder, @@ -215,7 +215,7 @@ export const useProxyStore = create()( get().setDrepLoading(proxyId, true); get().setDrepError(proxyId, null); - const txBuilder = getTxBuilder(parseInt(network)); + const txBuilder = await getTxBuilder(parseInt(network)); const proxyContract = new MeshProxyContract( { mesh: txBuilder, @@ -303,7 +303,7 @@ export const useProxyStore = create()( get().setError(walletId, null); // Create a single txBuilder instance to reuse across all proxies - const txBuilder = getTxBuilder(parseInt(network)); + const txBuilder = await getTxBuilder(parseInt(network)); // Create all fetch promises in parallel const fetchPromises = proxies.map(async (proxy) => { diff --git a/src/utils/get-tx-builder.ts b/src/utils/get-tx-builder.ts index 7c956f25..147a6b59 100644 --- a/src/utils/get-tx-builder.ts +++ b/src/utils/get-tx-builder.ts @@ -2,7 +2,7 @@ import { MeshTxBuilder } from "@meshsdk/core"; import { getProvider } from "@/utils/get-provider"; // import { CSLSerializer } from "@meshsdk/core-csl"; -export function getTxBuilder(network: number) { +export async function getTxBuilder(network: number) { const blockchainProvider = getProvider(network); const txBuilder = new MeshTxBuilder({ fetcher: blockchainProvider, @@ -15,5 +15,7 @@ export function getTxBuilder(network: number) { } else { txBuilder.setNetwork("preprod"); } + const costModels = await blockchainProvider.fetchCostModels(); + txBuilder.setCostModels(costModels); return txBuilder; }