{"record":{"id":"38f93ad19bba3b28","repo":"FuelLabs/fuels-ts","slug":"transaction-failed","errorCode":"TRANSACTION_FAILED","errorMessage":"Failed to deploy predicate chunk","messagePattern":"Failed to deploy predicate chunk","errorType":"exception","errorClass":"FuelError","httpStatus":null,"severity":"error","filePath":"packages/account/src/utils/deployScriptOrPredicate.ts","lineNumber":88,"sourceCode":"    return {\n      waitForResult: () => Promise.resolve(loaderInstance),\n      blobId,\n    };\n  }\n\n  const fundedBlobRequest = await fundBlobTx(deployer, blobTxRequest);\n\n  // Transaction id is unset until we have funded the create tx, which is dependent on the blob tx\n  const waitForResult = async () => {\n    try {\n      const blobTx = await deployer.sendTransaction(fundedBlobRequest);\n      const result = await blobTx.waitForResult();\n\n      if (result.status !== TransactionStatus.success) {\n        throw new Error();\n      }\n    } catch (err: unknown) {\n      throw new FuelError(ErrorCode.TRANSACTION_FAILED, 'Failed to deploy predicate chunk');\n    }\n\n    return loaderInstance;\n  };\n\n  return {\n    waitForResult,\n    blobId,\n  };\n}\n","sourceCodeStart":70,"sourceCodeEnd":99,"githubUrl":"https://github.com/FuelLabs/fuels-ts/blob/b3f37c91aca4aa9d5e4c0d3967f66237190826ea/packages/account/src/utils/deployScriptOrPredicate.ts#L70-L99","documentation":"Thrown by deployScriptOrPredicate()'s waitForResult when the blob transaction (uploading a predicate/script chunk) either rejects during sendTransaction/waitForResult or completes with a status other than TransactionStatus.success. The original error is swallowed and re-thrown as a generic TRANSACTION_FAILED, so the underlying cause is not exposed.","triggerScenarios":"Calling waitForResult() on the object returned by deployScriptOrPredicate (used when deploying large predicates/scripts as blobs). Triggers include: network/provider errors, insufficient funds to pay the blob tx fee, the node rejecting the blob, or the transaction being committed with a non-success terminal status.","commonSituations":"Deployer account underfunded for blob gas; node connection drops mid-submission; deploying a malformed/oversized blob; chain_id or consensus parameter mismatch; the blob was already uploaded and a duplicate submission conflicts; gas price spike causing the funded tx to be underpriced.","solutions":["Ensure the deployer account has sufficient base-asset funds to cover the blob transaction fee.","Confirm the provider/node is reachable and synced before retrying.","Check the node's logs for the actual rejection reason (the SDK discards the original error message).","If the blob already exists, the code short-circuits before submission — verify getBlobs behavior if you suspect a stale state.","Retry with an updated gas price if the failure was due to underpricing."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"const balance = await deployer.getBalance(baseAssetId);\nif (balance.eq(0)) throw new Error('Deployer has no base asset for blob tx fee');","typeGuard":null,"tryCatchPattern":"let lastErr: unknown;\nfor (let attempt = 0; attempt < 3; attempt++) {\n  try { return await deployment.waitForResult(); }\n  catch (err) {\n    lastErr = err;\n    if (err instanceof FuelError && err.code === ErrorCode.TRANSACTION_FAILED) continue;\n    throw err;\n  }\n}\nthrow lastErr;","preventionTips":["Fund the deployer account adequately before deployment.","Inspect node logs since the SDK discards the underlying blob-tx error.","Use a stable gas-price strategy to avoid underpriced txs."],"tags":["deployment","blob","predicate","transaction","network"],"backgroundTag":null,"analyzedSha":"b3f37c91aca4aa9d5e4c0d3967f66237190826ea","analyzedAt":"2026-08-12T20:30:56.448Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}