Timeline Permissions
Timeline permissions control when timeline-based fields can be updated, such as collection metadata and badge metadata.
High-Level Logic
Basic Timeline Permissions
For each timeline update request:
Check if timeline time matches any timelineTimes criteria
→ If no match: ALLOW (neutral state)
→ If match: Check if current time is in permanentlyPermittedTimes
→ If yes: ALLOW
→ If no: Check if current time is in permanentlyForbiddenTimes
→ If yes: DENY
→ If no: ALLOW (neutral state)
Badge-Specific Timeline Permissions
For each badge timeline update request:
Check if timeline time AND badge ID match criteria
→ If no match: ALLOW (neutral state)
→ If match: Check if current time is in permanentlyPermittedTimes
→ If yes: ALLOW
→ If no: Check if current time is in permanentlyForbiddenTimes
→ If yes: DENY
→ If no: ALLOW (neutral state)
English:
Basic: "For these permission execution times, the (timelineTime -> timelineValue) pairs can be updated"
Badge-Specific: "For these permission execution times, the (badgeId, timelineTime -> timelineValue) pairs can be updated"
Timeline vs Execution Times
Timeline Times: Which timeline values can be updated?
Execution Times: When the permission can be executed?
These may not align. For example, you might forbid updating timeline values for Jan 2024 during 2023.
Overview
Timeline Update
↓
Timeline Time Match
↓
Time Permission Check
↓
Execute/Deny
Types
Basic Timeline Permissions
Control collection-level timeline updates:
interface TimedUpdatePermission {
timelineTimes: UintRange[];
permanentlyPermittedTimes: UintRange[];
permanentlyForbiddenTimes: UintRange[];
}
Available Actions:
canArchiveCollection
canUpdateOffChainBalancesMetadata
canUpdateStandards
canUpdateCustomData
canUpdateManager
canUpdateCollectionMetadata
Badge-Specific Timeline Permissions
Control badge metadata timeline updates:
interface TimedUpdateWithBadgeIdsPermission {
timelineTimes: UintRange[];
badgeIds: UintRange[];
permanentlyPermittedTimes: UintRange[];
permanentlyForbiddenTimes: UintRange[];
}
Available Actions:
canUpdateBadgeMetadata
Examples
Lock Collection Metadata Forever
{
"canUpdateCollectionMetadata": [
{
"timelineTimes": [{ "start": "1", "end": "18446744073709551615" }],
"permanentlyPermittedTimes": [],
"permanentlyForbiddenTimes": [
{ "start": "1", "end": "18446744073709551615" }
]
}
]
}
Lock Specific Timeline Period
{
"canUpdateCollectionMetadata": [
{
"timelineTimes": [{ "start": "1000", "end": "2000" }],
"permanentlyPermittedTimes": [],
"permanentlyForbiddenTimes": [
{ "start": "1", "end": "18446744073709551615" }
]
}
]
}
Lock Badge Metadata for Existing Badges
{
"canUpdateBadgeMetadata": [
{
"timelineTimes": [{ "start": "1", "end": "18446744073709551615" }],
"badgeIds": [{ "start": "1", "end": "100" }],
"permanentlyPermittedTimes": [],
"permanentlyForbiddenTimes": [
{ "start": "1", "end": "18446744073709551615" }
]
}
]
}
Allow Updates Only During Specific Period
{
"canUpdateCollectionMetadata": [
{
"timelineTimes": [{ "start": "1", "end": "18446744073709551615" }],
"permanentlyPermittedTimes": [
{ "start": "1704067200000", "end": "1735689600000" }
],
"permanentlyForbiddenTimes": []
}
]
}
Last updated