I am building a Cardano dApp using MeshJS, Next.js, and an Aiken Plutus V3 smart contract.
Creating/locking a UTxO at the script address works successfully. However, when I try to spend the script UTxO, the wallet signs the transaction successfully, but transaction submission fails with PPViewHashesDontMatch.
BAD_REQUEST ({
"error": "Bad Request",
"message": "{\"contents\":{\"contents\":{\"contents\":{\"era\":\"ShelleyBasedEraConway\",\"error\":[\"ConwayUtxowFailure (PPViewHashesDontMatch Mismatch (RelEQ) {supplied: SJust (SafeHash \\\"f3a4844dcef65781ba74da2d26b2e83c41a95832fd91a5d0457b843e2ba94508\\\"), expected: SJust (SafeHash \\\"59cd8a77a0cc0925e3a2d4ddd81a0e310aa55c772e97fa0ae37da469993721867\\\")})\"],\"kind\":\"ShelleyTxValidationError\"},\"tag\":\"TxValidationErrorInCardanoMode\"},\"tag\":\"TxCmdTxSubmitValidationError\"},\"tag\":\"TxSubmitFail\"}",
"status_code": 400
})
Environment
{
"name": "ui",
"description": "A Mesh starter template for NextJS",
"author": "MeshJS",
"license": "Apache-2.0",
"version": "0.1.0",
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@meshsdk/core": "^1.9.0-beta.102",
"@meshsdk/react": "^2.0.0-beta.2",
"next": "16.2.6",
"react": "19.2.4",
"react-dom": "19.2.4",
"react-hot-toast": "^2.6.0"
},
"devDependencies": {
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
"eslint": "^8",
"eslint-config-next": "15.0.3",
"postcss": "^8",
"tailwindcss": "^3.4.1",
"typescript": "^5"
}
}
What works
Wallet connection works.
Creating a script UTxO works.
Inline datum is stored correctly.
Wallet signs the spending transaction successfully.
What fails
Spending the Plutus V3 script UTxO fails during submit with:
ConwayUtxowFailure (PPViewHashesDontMatch Mismatch)
const unsignedTx = await txBuilder
.spendingPlutusScriptV3()
.txIn(targetUtxo.input.txHash, targetUtxo.input.outputIndex)
.txInInlineDatumPresent()
.txInRedeemerValue(redeemer, "JSON")
.txInScript(scriptCbor)
.requiredSignerHash(senderPkh)
.txInCollateral(
collateral[0].input.txHash,
collateral[0].input.outputIndex,
collateral[0].output.amount,
collateral[0].output.address
)
.txOut(scriptAddress, targetUtxo.output.amount)
.txOutInlineDatumValue(newDatum, "JSON")
.changeAddress(changeAddress)
.selectUtxosFrom(walletUtxos)
.complete();
const signedTx = await walletInstance.signTx(unsignedTx, true);
const txHash = await walletInstance.submitTx(signedTx);
Question
Is this issue related to MeshJS transaction building for Conway-era Plutus V3 transactions, especially with Next.js 16/Turbopack?
What is the recommended way to avoid PPViewHashesDontMatch when spending a Plutus V3 script UTxO using MeshTxBuilder?
Issue
I am building a Cardano dApp using MeshJS, Next.js, and an Aiken Plutus V3 smart contract.
Creating/locking a UTxO at the script address works successfully. However, when I try to spend the script UTxO, the wallet signs the transaction successfully, but transaction submission fails with
PPViewHashesDontMatch.Error
BAD_REQUEST ({ "error": "Bad Request", "message": "{\"contents\":{\"contents\":{\"contents\":{\"era\":\"ShelleyBasedEraConway\",\"error\":[\"ConwayUtxowFailure (PPViewHashesDontMatch Mismatch (RelEQ) {supplied: SJust (SafeHash \\\"f3a4844dcef65781ba74da2d26b2e83c41a95832fd91a5d0457b843e2ba94508\\\"), expected: SJust (SafeHash \\\"59cd8a77a0cc0925e3a2d4ddd81a0e310aa55c772e97fa0ae37da469993721867\\\")})\"],\"kind\":\"ShelleyTxValidationError\"},\"tag\":\"TxValidationErrorInCardanoMode\"},\"tag\":\"TxCmdTxSubmitValidationError\"},\"tag\":\"TxSubmitFail\"}", "status_code": 400 }) Environment { "name": "ui", "description": "A Mesh starter template for NextJS", "author": "MeshJS", "license": "Apache-2.0", "version": "0.1.0", "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" }, "dependencies": { "@meshsdk/core": "^1.9.0-beta.102", "@meshsdk/react": "^2.0.0-beta.2", "next": "16.2.6", "react": "19.2.4", "react-dom": "19.2.4", "react-hot-toast": "^2.6.0" }, "devDependencies": { "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "15.0.3", "postcss": "^8", "tailwindcss": "^3.4.1", "typescript": "^5" } } What works Wallet connection works. Creating a script UTxO works. Inline datum is stored correctly. Wallet signs the spending transaction successfully. What fails Spending the Plutus V3 script UTxO fails during submit with: ConwayUtxowFailure (PPViewHashesDontMatch Mismatch) const unsignedTx = await txBuilder .spendingPlutusScriptV3() .txIn(targetUtxo.input.txHash, targetUtxo.input.outputIndex) .txInInlineDatumPresent() .txInRedeemerValue(redeemer, "JSON") .txInScript(scriptCbor) .requiredSignerHash(senderPkh) .txInCollateral( collateral[0].input.txHash, collateral[0].input.outputIndex, collateral[0].output.amount, collateral[0].output.address ) .txOut(scriptAddress, targetUtxo.output.amount) .txOutInlineDatumValue(newDatum, "JSON") .changeAddress(changeAddress) .selectUtxosFrom(walletUtxos) .complete(); const signedTx = await walletInstance.signTx(unsignedTx, true); const txHash = await walletInstance.submitTx(signedTx); Question Is this issue related to MeshJS transaction building for Conway-era Plutus V3 transactions, especially with Next.js 16/Turbopack? What is the recommended way to avoid PPViewHashesDontMatch when spending a Plutus V3 script UTxO using MeshTxBuilder?