object — Additional properties rejected
| Field | Required at this level | Type | Description and constraints |
|---|---|---|---|
record |
Yes | object |
Additional properties rejected |
record.schemaVersion |
Yes | Constant persisted-project-control-challenge-v1 |
— |
record.challenge |
Yes | object |
Additional properties rejected |
record.challenge.organizationId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
record.challenge.projectId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
record.challenge.projectResourceVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.challenge.chainId |
Yes | integer |
Maximum: 9007199254740991; Exclusive minimum: 0 |
record.challenge.genesisHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.challenge.token |
Yes | string |
Pattern: ^0x[0-9a-f]{40}$ |
record.challenge.schemaVersion |
Yes | Constant project-control-challenge-v1 |
— |
record.challenge.actorId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
record.challenge.controller |
Yes | string |
Pattern: ^0x[0-9a-f]{40}$ |
record.challenge.custodyAccount |
Yes | string |
Pattern: ^0x[0-9a-f]{40}$ |
record.challenge.attestationHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.challenge.nonce |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.challenge.audience |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
record.challenge.deployment |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
record.challenge.purpose |
Yes | Constant PROJECT_TREASURY_READ_ACCESS_ONLY |
— |
record.challenge.issuedAt |
Yes | integer |
Minimum: 0; Maximum: 9007199254740991 |
record.challenge.expiresAt |
Yes | integer |
Minimum: 0; Maximum: 9007199254740991 |
record.identity |
Yes | object |
Additional properties rejected |
record.identity.payload |
Yes | object |
Additional properties rejected |
record.identity.payload.organizationId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
record.identity.payload.projectId |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
record.identity.payload.projectResourceVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.identity.payload.chainId |
Yes | integer |
Maximum: 9007199254740991; Exclusive minimum: 0 |
record.identity.payload.genesisHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.identity.payload.token |
Yes | string |
Pattern: ^0x[0-9a-f]{40}$ |
record.identity.payload.schemaVersion |
Yes | Constant project-identity-attestation-v1 |
— |
record.identity.payload.publisher |
Yes | object |
Additional properties rejected |
record.identity.payload.publisher.id |
Yes | string |
Pattern: ^[a-zA-Z0-9][a-zA-Z0-9:_-]{2,159}$ |
record.identity.payload.publisher.resourceVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.identity.payload.controller |
Yes | string |
Pattern: ^0x[0-9a-f]{40}$ |
record.identity.payload.issuedAt |
Yes | integer |
Minimum: 0; Maximum: 9007199254740991 |
record.identity.payload.expiresAt |
Yes | integer |
Minimum: 0; Maximum: 9007199254740991 |
record.identity.payloadHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.identity.signature |
Yes | string |
Pattern: ^[A-Za-z0-9+/]{86}==$ |
record.anchor |
Yes | object |
Additional properties rejected |
record.anchor.chainId |
Yes | integer |
Maximum: 9007199254740991; Exclusive minimum: 0 |
record.anchor.genesisHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.anchor.blockNumber |
Yes | string |
Pattern: ^(0|[1-9][0-9]{0,77})$ |
record.anchor.blockHash |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.anchor.finality |
Yes | Constant FINALIZED |
— |
record.resourceVersion |
Yes | string |
Pattern: ^0x[0-9a-f]{64}$ |
record.recordedAt |
Yes | string |
Format: date-time; Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
replayed |
Yes | boolean |
— |
Nested required fields apply when their parent object or matching union branch is present. Named types link to their complete schema.
Exact definition: #/components/schemas/ProjectControlChallengeWrite in the OpenAPI contract.