链群公告协议
1. 关于协议
链群公告协议为链群生态提供公告能力,链群服务者可对自己持有的链群发布公告,公告一经发布不可修改,任何人可按页分页查询。
- 独立部署:GroupNotice 合约单独部署,其他合约无需依赖或存储其地址
- 只增不改:公告只支持新增,不支持编辑或删除
- 分页查询:支持按 offset、limit 分页获取
- 代理机制:链群 NFT 持有者可设置代理,代理仅对当前持有者有效;NFT 转移后,原持有者配置的代理不会对新持有者生效
2. 发布条件
链群服务者(链群 NFT 持有者)或其授权代理可对任意 (tokenAddress, actionId, groupId) 发布公告。合约校验 ownerOf(groupId) == msg.sender 或 delegate == msg.sender,不校验链群是否在该行动下激活。
3. 代理机制
链群 NFT 持有者可设置代理(delegate),允许代理地址代为发布公告。
3.1 设置代理
setDelegate(tokenAddress, actionId, groupId, delegate):
- 调用者必须是链群 NFT 的当前持有者
- 代理地址不能是调用者自己
- 代理权限仅对设置时的当前持有者有效
3.2 获取代理
delegate(tokenAddress, actionId, groupId):
- 返回当前链群 NFT 持有者设置的代理地址
- 如果未设置代理,返回 address(0)
3.3 自动失效
代理设置与链群 NFT 持有者绑定,当 NFT 持有者变更时:
- 原代理设置不会对新持有者生效
- 新持有者如需代理,需重新调用
setDelegate设置 - 如果原持有者之后重新持有该 NFT,其历史代理配置会再次生效;如不希望继续生效,需由该持有者显式重新设置或清空代理
4. 公告内容
- 格式:string
- 最大长度:8192 字节(MAX_CONTENT_LENGTH)
- 不可为空
5. 分页查询
getNotices(tokenAddress, actionId, groupId, offset, limit, reverse):
offset:起始索引(从 0 开始)limit:本次返回条数reverse:是否按最新公告优先返回;false表示从最早公告开始,true表示从最新公告开始- 返回:
(contents[], timestamps[], blockNumbers[], groupOwners[], senders[], totalCount) groupOwners[]:每条公告发布时对应的链群 NFT 持有者senders[]:每条公告实际调用publish()的地址totalCount为总条数,便于前端计算分页- 当
offset >= totalCount时返回空数组,不回退 - 建议 limit 不超过 50
6. 事件
SetDelegate(tokenAddress, actionId, groupId, groupOwner, delegate)
groupOwner:设置代理时的链群 NFT 当前持有者delegate:新设置的代理地址;设为address(0)表示清空代理
Publish(tokenAddress, actionId, groupId, groupOwner, sender, index, content)
groupOwner:发布时的链群 NFT 持有者sender:实际调用publish()的地址,即本次发布交易中的msg.sender