壹 · Contract
合同双方签字才生效
# 双方对同一 revision 都签字才进 ACTIVE
# amend 会清空旧 approvals,不能跨版本背书
await alice.send_message(
to=arbiter.entity_card,
message=Message(
kind=MessageKind.CONTRACT_APPROVE,
payload=ContractActionPayload(
contract_id=cid,
revision=contract.draft_version,
terms_hash=contract.terms_hash,
).model_dump(),
),
)
委托不再是 chat log,是被双方签字、被仲裁者背书的协议对象。
→ test_contract_requires_both_parties_approval_before_activation
贰 · DeliveryEvidence
交付证据"做完了"必须可证伪
# 完成 = 提交带 artifact 与 cost 的结构化证据
# 仲裁者把它写入当前快照并签名
DeliveryEvidence(
delivery_id="delivery-v1",
version="v1.0.0",
summary="Vendor portal MVP v1",
artifacts=[
DeliveryArtifact(
kind="commit",
uri="git://repo/commit/abc123",
digest="sha256:abc123",
),
],
produced_by=vendor.address,
)
交付物有 digest,验收 ack 有签名,第三方可独立重放。
→ test_contract_snapshot_attestation_and_ack_flow
叁 · ArbiterAttestation
仲裁者签名快照每个 transition 都被见证
# 每次状态推进生成一个 ContractSnapshot
# 用 arbiter 私钥签名,链到前一个 snapshot
snapshot = contract.to_snapshot()
snapshot.attestation = sign_snapshot(
snapshot,
signer=arbiter.address,
private_key=arbiter.sign_private_key,
prev_snapshot_hash=contract.prev_hash,
)
assert verify_attestation(snapshot, pub_key)
ed25519-sha256:v1。任何第三方拿着公钥都能独立校验。
→ fp/trade/hashing.py · verify_attestation()
肆 · CarbonCopy
溯源owner 零配置看到一切
# 给 entity 挂 owner,自动获得全协议消息 CC
# 默认 order=800、kinds=set(MessageKind)
bot = host.register_entity(
name="BotA",
kind=EntityKind.AGENT,
owner=alice.address,
)
# 之后 BotA 收发的每一条都自动 CC 给 Alice
# 不必修改 BotA 一行代码
agent fleet 的行为对监督者天然可见,无需 SIEM 或 vendor APM。
→ fp/host.py · _setup_default_checkpoints · CarbonCopyCheckpoint
伍 · ReputationChain
信誉从签名合同链派生
# 输入是被签名的合同链,不是平台星星
# 任何持链者都可独立重算同一份分数
profiles = aggregate_vendor_reputation(contracts)
p = profiles[0]
print(p.overall_score) # 0..100
print(p.quality_score,
p.reliability_score,
p.integrity_score)
agent 把自己的工作履历带到下一个平台,无需平台同意。
→ fp/trade/reputation.py · test_trade_reputation.py
陆 · Bridge Invariant
跨协议 audit spinetrace 不在桥上断
# FP ↔ MCP / FP ↔ A2A 的每一次转换
# 必须保留 trace_id / policy_id / evidence_refs
call = fp_invoke_to_mcp_call(fp_msg)
# 服务端追加新 evidence,trace 块原样回传
fp_result = mcp_result_to_fp_message(resp)
assert extract_trace_context(
fp_result.metadata
).trace_id == original_trace_id
一条 trace_id 串起 A2A → FP → MCP,所有 evidence 在桥两侧不丢失。
→ fp/bridges/ · test_bridges_trace_preservation.py (12 tests)