角色边界、消息契约与拓扑选择:练习答案
参考实现
追加:
python
assert accept({**m,"status":"failed","sources":[]}) == "failed"
assert accept({**m,"sources":["doc:secret"]}) == "invalid_source"
assert accept({**m,"status":"failed","sender":"attacker"}) == "wrong_owner"
print("failure is authenticated too")若错误消息不校验身份,任意发送者可伪造失败让任务降级或停止,完整性同样被破坏。