{"record":{"id":"ddc6c1192252c63d","repo":"unionlabs/union","slug":"hash-not-found","errorCode":null,"errorMessage":"hash not found","messagePattern":"hash not found","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"typescript-sdk/src/aptos/transfer.ts","lineNumber":193,"sourceCode":"        }\n\n        console.info(`aptosTransferSimulate simulation succeeded: ${simulationResult.value.hash}`)\n      }\n\n      const pendingTransaction = await submitSimpleTransaction({\n        aptos: parameters.aptos,\n        transaction: transaction.value,\n        accountAuthenticator: parameters.aptos.transaction.sign({\n          signer,\n          transaction: transaction.value,\n        }),\n      })\n\n      if (!pendingTransaction.isOk()) {\n        throw pendingTransaction.error\n      }\n      if (!pendingTransaction.value.hash.startsWith(\"0x\")) {\n        throw new Error(\"hash not found\")\n      }\n\n      return pendingTransaction.value.hash\n    },\n    error => new Error(`Transfer failed: ${error}`, { cause: error }),\n  )\n\nexport const aptosSameChainTransfer: (args: AptosTransferBaseParams) => ResultAsync<string, Error> =\n  ResultAsync.fromThrowable(\n    async parameters => {\n      if (!parameters.signer) {\n        throw new Error(\"no `signer` passed\")\n      }\n\n      if (parameters.authAccess === \"wallet\") {\n        const signer = parameters.signer as AptosBrowserWallet\n        const transaction = await signer.signAndSubmitTransaction({\n          payload: {","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/unionlabs/union/blob/031785bb6dc6b957c624e62bc64c184409c97d7b/typescript-sdk/src/aptos/transfer.ts#L175-L211","documentation":"Thrown at the end of the key-signed path in transferAssetFromAptos: submitSimpleTransaction succeeded (the ResultAsync is Ok) but the returned pending transaction's hash does not start with \"0x\". Aptos transaction hashes are 0x-prefixed 64-hex strings, so a non-conforming value means the node returned a malformed or unexpected submission response.","triggerScenarios":"A fullnode/RPC gateway that answers submission with a nonstandard body (proxy stripping fields, wrong endpoint, error payload in place of the hash). The ResultAsync chain is otherwise successful, so this is purely a response-shape guard.","commonSituations":"Custom or third-party Aptos RPC providers behind proxies; pointing the transport at an indexer or REST route that does not accept transaction submission; version mismatch between the SDK's expected PendingTransactionResponse and the node's response.","solutions":["Point transport at a canonical fullnode (https://fullnode.mainnet.aptoslabs.com/v1 or https://fullnode.testnet.aptoslabs.com/v1) and retry","Log pendingTransaction.value to see what the node actually returned and adjust the endpoint accordingly","Upgrade @union/client and @aptos-labs/ts-sdk so response parsing matches the node version"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":"const isAptosHash = (h: unknown): h is `0x${string}` =>\n  typeof h === \"string\" && /^0x[0-9a-fA-F]{64}$/.test(h)","tryCatchPattern":"try {\n  hash = await transferAssetFromAptos(params).toPromise()\n} catch (error) {\n  if ((error as Error).message.includes(\"hash not found\")) {\n    // switch transport to a canonical fullnode and retry the transfer\n  }\n  throw error\n}","preventionTips":["Use canonical or reputable fullnode endpoints for submission","Validate the submit response hash shape before acting on it","Keep @aptos-labs/ts-sdk and @union/client versions aligned"],"tags":["aptos","rpc","transaction","typescript-sdk"],"backgroundTag":null,"analyzedSha":"031785bb6dc6b957c624e62bc64c184409c97d7b","analyzedAt":"2026-08-16T06:24:09.996Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}