SCP 核心规范
版本:v1.0(草案) 状态:草案 权威性:是
目的
本文档定义 SCP 的规范性生命周期与状态语义。
它回答:
- 任务如何在协议中流转
- challenge 与 settlement 如何交互
- settlement candidate context 与 finalized context 的含义分别是什么
- 合规的 contract boundary 必须保留哪些内容
Task Lifecycle
canonical task lifecycle 为:
acceptedresolvingdispatchedverifyingawaiting_settlementcompletedchallengedrejectedtimed_out
这些状态定义的是协议语义,而不是某种固定进程布局。
Challenge Lifecycle
canonical challenge lifecycle 为:
openedreviewingconfirmednot_confirmedapprovedclosed_without_penaltypenalty_recordedreopened
challenge evidence 必须可 replay,并能关联到对应 task、verification 和 settlement context。
Settlement Lifecycle
canonical settlement lifecycle 为:
collectingverifying_inputscandidate_readyfinalizingfinalizedfailed
Settlement Candidate Context
candidate context 用于:
- 打开 challenge
- 表示 settlement readiness
- 建立 fraud evidence linkage
Finalized Settlement Context
finalized context 用于:
- reward finalization
- 协议审计
- payout preparation
- 不可逆的 accounting reference
Determinism 与 Replay
要保持确定性,需要:
- 固定的对象语义
- 固定的排序与哈希规则
- 稳定的 epoch mapping
- version-aware parameter resolution
- 可 replay 的 evidence 与 accounting artifact
parameter resolution 必须是以下输入的确定性函数:
epoch_idsemantic_versionpolicy_version
Epoch 模型
Epoch 是一个稳定的窗口标识,用来把协议事件分组到同一个可 replay 的控制上下文中。
它不是原始数据上传的前置条件,也不是任务存在本身的前置条件。
它主要治理:
- settlement window
- reward calculation window
- payout batching window
- local attribute candidate aggregation window
- 在需要批处理时的 replay partitioning
它不主要治理:
- 原始数据上传到 Vault
- 任务能否被创建
- semantic resolution 能否开始
- 单个授权执行能否启动
Epoch 核心字段
一个 epoch 定义至少应保留:
epoch_idopen_atclose_atstatussemantic_version_setpolicy_version_set- settlement scope metadata
- reward scope metadata
- candidate aggregation scope metadata
Epoch 状态
canonical 的 epoch 状态模型为:
openclosingclosed
在同一个受治理 scope 内,通常最多只应存在一个 open epoch。
开启条件
一个新的 epoch 在以下条件下开启:
- 上一个 epoch 已进入
closed - 系统正在创建初始 bootstrap epoch
open 状态的 epoch 是后续 settlement、reward 和 aggregation scope 的活动窗口。
关闭触发条件
当满足以下任一条件时,open epoch 应转入 closing:
- 达到配置的最大时间窗口
- task、verification、settlement 或 aggregation 的量达到配置阈值
- governance 或 policy 要求切换窗口,例如版本切换或受控维护
这是一种混合触发模型:
- 时间可以触发关闭
- 容量可以触发关闭
- 治理可以触发关闭
关闭完成条件
一个 epoch 从 closing 进入 closed,应至少满足:
- 该 epoch 的 settlement scope 已冻结
- 该 epoch 的 reward scope 已冻结
- 该 epoch 的 candidate aggregation scope 已冻结
- 未解决项要么已在本 epoch 内完成处理,要么已按 policy 明确延期
一旦 epoch 进入 closed:
- 新事件不得再被归属到该 epoch
- replay 必须能够重建相同的 epoch membership
- 下游的 reward、payout 和 candidate aggregation 才能基于这个稳定窗口继续推进
Layer-Level Norms
协议要求以下逻辑职责存在:
- Application 负责验证 client intent 并生成 protocol-valid task
- Coordination 负责编排任务流转与 settlement handoff
- Semantic 负责在
semantic_version下解析语义 - Data 负责保存 canonical 记录与
Commitmentreferences - Execution 负责执行授权计算
- Verification 负责在 settlement 前验证正确性与完整性
- Settlement 负责锚定 verified state 并发布 finalized accounting context
这些是协议角色,不要求每个角色一定映射成独立进程。
七层协议模型

这 7 层仍然是 SCP 的核心协议抽象。
它们定义的是职责语义边界,而不是强制性的部署拓扑。
1. Application Layer
目的:
- 校验 client intent
- 校验 caller identity 与 authorization context
- 生成 protocol-valid 的
TaskEnvelope
协议输入:
- caller context
- authorization context
- query intent
- 请求的 policy scope
协议输出:
TaskEnvelope- 面向客户端的 accepted 或 rejected 状态
- 协议可见的校验错误
协议不变量:
- 对非法输入必须 deterministic rejection
- intake response 不得泄露私有明文
- 缺少必要 replay tuple context 时不得接纳任务
2. Coordination Layer
目的:
- 编排任务流转
- 管理 semantic、execution、verification 与 settlement 之间的 handoff
- 跟踪 canonical 协议状态迁移
协议输入:
- admitted task
- semantic context
- execution result
- verification decision
- challenge event
协议输出:
- execution assignment
- 被跟踪的 task state
- settlement submission
- challenge opening 或状态迁移
协议不变量:
- settlement finalization 之前不得绕过 verification
- 不允许 out-of-order 的状态迁移
- 不允许出现逃逸协议审计的隐藏状态迁移
3. Semantic Layer
目的:
- 在
semantic_version下解析 canonical meaning - 将任务绑定到 registry-compatible semantic reference
- 在 execution 之前给出 compatibility 结论
协议输入:
- canonicalized semantic candidate
- registry state
semantic_version
协议输出:
SemanticResolutionResult- compatibility decision
- registry-compatible reference
协议不变量:
- semantic interpretation 必须 deterministic
Scope必须保持 monotonic- unresolved 或 incompatible 的 semantic context 不得进入 execution
4. Data Layer
目的:
- 保存 canonical 私有记录
- 为 execution 暴露授权后的 record material
- 通过
Commitmentreference 保持密码学关联
协议输入:
- canonical record
- authorization context
- execution-bound access request
- 必要时包含 key context
协议输出:
- encrypted storage object
Commitmentreference- 授权后的 record material
协议不变量:
Commitment = SHA256(Serialize(CR))- 明文不得逃逸授权 Vault 或 TEE 边界
- task、authorization 与 record usage 之间必须具备可审计的访问关联
5. Execution Layer
目的:
- 执行授权计算
- 生成确定性的、与 proof 相关联的执行输出
- 保留可审计的数据访问上下文
协议输入:
ExecutionAssignment- semantic context
- epoch context
- 授权后的 record material
协议输出:
ExecutionResultBundle- transcript reference
- 在需要时包含 proof reference
协议不变量:
- 相同输入与 replay tuple 下执行必须 deterministic
- 不得发生未授权的跨 Vault 访问
- 缺少可审计 execution context 的结果不得被接纳
6. Verification Layer
目的:
- 在 settlement 之前验证正确性与完整性
- 对 execution output 作出 accept、reject 或 challenge
- 保留可 replay 的 evidence
协议输入:
- result bundle
- proof reference
- replay context
- evidence input
协议输出:
VerificationDecision- evidence reference
- accepted、challenged 或 rejected verdict
协议不变量:
- 没有 accepted verification 就不能进入 settlement finalization
- challenge evidence 必须可 replay
- verification 不得改写 execution history
7. Settlement Layer
目的:
- 锚定 verified state
- 组装 root context
- 发布 candidate 与 finalized accounting context
协议输入:
- accepted verification output
- root input
- settlement metadata
- 与 finalization 相关的 challenge state
协议输出:
- settlement candidate context
- finalized settlement context
- settlement event
SettlementRoot
协议不变量:
- root composition 必须 deterministic
- finalized history 必须 append-only
- candidate context 可用于 challenge opening,而 finalized context 是不可逆 accounting reference 的前提
域模型

Domain 是协议中的语义命名空间,也是语义治理边界。
它存在的目的是:
- 为 semantic interpretation 提供稳定命名空间
- 为 canonical attribute 提供明确的归属边界
- 在声明的语义范围内治理兼容性、弃用与演进
Domain 的分层
协议认可如下语义分层:
global domain:协议范围共享的语义治理边界domain family:聚合相关 domain 的上层命名空间concrete domain:canonical attribute 被注册和解析的直接命名空间- 可选
sub-domain:在 policy 明确允许时使用的更细粒度语义空间
实现可以用不同方式落地这些层级,但协议语义必须保持相同的层次关系。
Domain 的职责
一个 domain 负责:
- 定义 canonical attribute 所在的语义命名空间
- 在
semantic_version下约束兼容性与演进 - 决定跨 domain 引用是允许、拒绝还是需要中介解析
- 为 semantic resolution 和治理判断提供语义边界
Domain 核心字段
协议可见的 domain 定义至少应保留:
domain_id- 在适用时的
parent_domain_id domain_versionsemantic_versionstatus
Domain 状态
canonical 的 domain 状态模型为:
proposedregisteredactivedeprecatedretired
只有 active 的 domain,以及在兼容策略允许下的 deprecated domain,才能参与新的 semantic resolution。
Canonical Attribute 模型

CanonicalAttribute 是协议对象,表示某个声明 domain 内的标准化语义属性。
它不是悬空对象。每个 canonical attribute 都必须归属于某个 domain。
Canonical Attribute 标识
协议标识至少应保留:
attribute_iddomain_idsemantic_version
当生命周期或兼容性相关时,还应保留:
scopestatuseffective_from- 在适用时的
deprecated_from - 在适用时的
retired_from - 在适用时的
supersedes或 replacement reference
Canonical Attribute 规则
协议要求:
- 每个 canonical attribute 在给定语义时点只能归属于一个声明 domain
- attribute 的兼容性必须相对于 domain 和
semantic_version解释 - 当 attribute 被 supersede 时,替代关系必须显式声明,不能隐式漂移
- semantic resolution 必须先确定 domain,再确定 canonical attribute 的语义
Canonical Attribute 生命周期
canonical 生命周期为:
proposedregisteredactivedeprecatedretiredsuperseded
生命周期含义
proposed:被治理流程识别,但尚不能作为协议可用对象registered:已记录到命名空间中,但尚未在目标 semantic window 生效active:可参与 semantic resolution,并可用于新任务deprecated:在兼容层面仍可见,但不应作为新语义编写的首选retired:不能再参与新任务解析superseded:在受治理的兼容规则下,被显式 successor attribute 替代
生命周期规则
协议要求:
- 只有
active,以及 policy 允许的deprecatedattribute,才能参与新任务解析 retiredattribute 不得用于新任务解析- 生命周期迁移必须绑定到已声明的语义治理和
semantic_version supersededattribute 必须显式指向替代路径- 相同 task input 和相同
semantic_version必须得到相同的 attribute resolution 结果
Canonical Attribute 解析流程
从协议视角看,canonical attribute 的解析遵循以下逻辑流程:
- 根据 task scope、semantic reference 和 policy context 确定目标 domain
- 校验该 domain 在请求的
semantic_version下是否可用 - 在该 domain 内识别候选 canonical attribute
- 拒绝所有生命周期状态不允许参与解析的候选项
- 应用兼容性和替代规则
- 在
SemanticResolutionResult中产出确定性的 semantic reference
解析后果
协议要求:
- 无法解析的 domain 或 attribute 状态必须阻止任务进入 execution
- 对于存在歧义的 domain 或 attribute 映射,必须 reject,不能猜测
- domain retirement 或 attribute retirement 只影响对应版本规则所治理的语义窗口
- 在相同 semantic 输入下 replay 同一任务时,必须重建出相同的 domain 与 canonical attribute 选择
语义属性分层
从协议设计角度看,语义对象可以出现在三个相关但不同的层级中:
CanonicalAttribute,用于定义协议认可的语义真相QueryAttribute,用于定义面向 audience selection、检索和相关查询工作的受治理 query projectionLocalAttribute,用于表示仍留在 Vault 或本地语义边界内、尚未进一步投影或晋升的本地语义
这些层级彼此相关,但用途并不相同。
各层职责
协议要求这几个层级保持区分:
- canonical attribute 用于回答一条记录在协议语义下“到底是什么”
- 查询属性用于回答哪些受治理的查询信号可以被投影出来,用于跨 Vault 检索、人群筛选或其他受治理查询工作流
- local attribute 用于回答哪些未解析或本地专属语义可以继续保留私有,同时支持后续演化
层级顺序
正常的语义顺序是:
- 本地或原始语义材料首先出现在 Vault 内
- canonical resolution 为任务确定稳定的协议语义
- query projection 在策略允许的前提下,从 canonical 或本地材料中导出受治理的检索信号
这意味着,一个字段即使可以被查询,也仍然可能首先是 canonical-first 的语义对象。
Query Attribute 模型
QueryAttribute 是一种受治理的语义对象,用来表示从受保护记录中派生出来、可用于 audience selection、资格过滤、检索或其他受治理查询工作的 query-safe projection。
它不是 CanonicalAttribute 的替代物,也不负责重新定义协议真相。
Query Attribute 标识
协议标识至少应保留:
query_attribute_iddomain_idsemantic_version
在治理、隐私或兼容性相关时,对象还应保留:
statusderivation_rule_refquery_granularityprivacy_classallowed_usage_scope
Query Attribute 规则
协议要求:
- 每个查询属性都必须归属于某个声明 domain 或受治理的 query namespace
- query projection 必须在显式 policy 下导出,而不是静默推断
- 查询属性必须始终与 canonical semantic truth 区分开
- query projection 的兼容性必须在
semantic_version下保持可版本化解释 - 不得因为存在 query projection 就直接输出可重建的原始私有值
Query Attribute 生命周期
其标准生命周期为:
proposedregisteredactiverestricteddeprecatedretired
生命周期含义:
proposed:进入治理评审,但尚不可用于查询registered:已记入命名空间,但尚未对目标查询窗口生效active:可用于受治理的 query projection 与检索流程restricted:只能在更窄的 policy 或 actor scope 下被使用deprecated:仍然对兼容性可见,但不推荐用于新的查询设计retired:不再允许用于新的投影或查询
Query Projection 约束
协议要求:
- projection 必须位于 Vault 隐私边界的下游
- query-safe projection 必须能通过 source commitment 或 protected record 保持可审计关联
- query index 只能承载检索所需的最小受治理信号
- audience selection 或 campaign eligibility 不能依赖静默变化的 query semantics
- 在相同 semantic 与 policy 输入下 replay 时,必须重建出相同的 query interpretation
本地属性池
LocalAttribute 是一种本地语义工件,尚未被承认为协议认可的 canonical attribute。
它可以存在于 Vault 内部或本地语义边界中,但它本身不是跨协议共享的 semantic truth。
本地池的目的
本地属性池存在的目的是让实现能够:
- 累积尚未解析或仅在本地有意义的 attribute
- 随时间测量其频次、稳定性和映射置信度
- 产出可用于后续晋升的隐私安全候选信号
本地池规则
协议要求:
- 在晋升前提满足之前,local attribute 必须保持为本地对象
- 不得直接将原始私有值或可重建敏感语义的信息用于跨 Vault 聚合
- 本地池记录必须保留足够的元数据,以支持后续审计和晋升评估
最小本地信号
本地池条目至少应保留:
- local attribute 标识
- 候选 domain 提示
- 本地出现频次
- 跨 epoch 的本地稳定性指标
- 在适用时相对于现有 canonical attribute 的映射置信度
- 隐私安全的特征摘要或证据摘要
跨 Vault 候选聚合
协议允许本地池通过隐私安全的候选摘要参与跨 Vault 候选池,但不能直接上传原始本地语义对象。
聚合窗口
默认的晋升聚合窗口为:
- 每
10个 epoch 进行一次常规候选形成
policy 可允许:
- 在高活跃 domain 中每
5个 epoch 聚合一次 - 在特殊治理触发下绕过常规窗口发起例外提案
允许逐 epoch 进行本地累积,但不以逐 epoch 的全局晋升作为默认协议路径。
聚合输出
跨 Vault 聚合必须产出:
LocalAttributeCandidate摘要- candidate 的 domain 绑定
- 覆盖度、频次与稳定性指标
- 相对于现有 canonical attribute 的兼容、冲突或别名信号
它不能直接产出 active 状态的 canonical attribute。
聚合约束
协议要求:
- 跨 Vault 聚合交换的是候选摘要,而不是原始私有 local attribute
- candidate 形成过程必须在证据摘要层面可审计
- 聚合流程必须始终位于 Vault 隐私边界的下游
晋升为 Canonical Attribute
canonical 晋升路径为:
local attributelocal attribute poolLocalAttributeCandidateproposed canonical attributeregisteredactive
晋升前提
只有在 protocol policy 至少确认以下条件时,候选项才能晋升:
- 足够的跨 Vault 覆盖度,或有正当治理例外
- 在要求的 epoch 窗口内表现出稳定性
- 具备清晰的 domain 归属
- 不与现有 canonical attribute 存在未解决冲突,或已显式声明 alias/replacement 关系
- 具备支持晋升决策的可 replay 证据摘要
晋升后果
协议要求:
- 未满足晋升阈值的 local attribute 必须继续保持本地属性
- candidate 聚合是提案机制,而不是自动生成 semantic truth 的机制
- 新 canonical attribute 必须进入标准生命周期
proposed -> registered -> active - 冲突解决必须显式治理,不能静默推断
Contract Boundary
合规实现至少必须覆盖:
- task 与 semantic messages
- execution 与 verification messages
- settlement messages
- reward records
- payout instructions 与 events
当前 canonical source of truth 仍然是 Markdown 规范集。machine-readable schema artifact 属于由 SCS 定义的实现交付物。
Canonical Error Families
协议可见错误族包括:
SCHEMA_*VERSION_*AUTH_*POLICY_*EXECUTION_*PROOF_*VERIFY_*SETTLEMENT_*REWARD_*PAYOUT_*GOVERNANCE_*INTERNAL_*