把资产放在一个冷账户里,日常操作却必须有人签——这是所有托管结构的共同难题。Polkadot 官方文档给的答案是代理账户:由若干个各有分工的小账户代表主账户行事,从而既保护私钥,又不影响参与网络。文档也提醒了它的透明性代价:代理与被代理账户之间的关系是可以被外界看出来的。
权限按类型过滤,不是笼统地”能替你操作”
关键在于链会做过滤。代理账户发交易时,Polkadot 会检查这类操作是否在该代理被授予的类型范围内,例如质押代理只能做与质押相关的交易。设置代理时必须指定类型,文档列出的类型与边界如下:Any 允许任何交易、包括余额转账,而官方明确建议多数情况应避免它,理由是代理账户比冷账户使用更频繁、因此更不安全;Non-Transfer 允许除余额转账(含归属转账)之外的任何交易,因而它没有权限调用 Balances 与 XCM 两个模块的函数;Governance 只允许治理相关交易;Nomination pool 只针对提名池;Staking 允许全部质押相关交易,官方对这一类型的用法描述是——stash 账户留在冷存储里,质押代理负责设置会话密钥、决定提名哪些验证者这类日常事务;Identity Judgement 让注册官对账户身份做判断,只能访问 Identity 模块的 provide_judgement 调用加 Utility 模块的调用;Cancel 只允许访问 Proxy 模块的 reject_announcement,用来拒绝并移除延时代理的公告。另外还有 Spokesperson(只允许 remark 或 remark_with_event,Kusama 专用)和 Society(Kusama 专用的社会治理相关调用)。
这份清单本身就是排障依据:代理签不动某笔交易时,先对照类型边界,再判断是权限不覆盖还是别的环节出错。

押金为什么按”列表加成员”两段计
代理需要锁定原生币。文档给出的理由是存储:增加一份代理要占用链上空间,而这些空间必须复制到网络里每一个对等节点,成本不低,因此这类功能可能被用来发起拒绝服务攻击;押金在代理存续期间一直被冻结,代理被移除时存储空间释放,押金随之退回。金额公式是 ProxyDepositBase + ProxyDepositFactor * n:前者是账户建立代理列表所需的基准量(在存储里新建一个条目),后者按代理个数累加(文档注明每份代理在存储位置追加 33 字节)。
延时代理:先公告、等区块、期间可撤
给代理加一层时间延迟,是文档推荐的额外防线。延迟以区块数计,Polkadot 出块大约 6 秒,所以延迟值设 10 就是十个区块、约一分钟。行为模式随之改变:代理要先公告(announce)自己想做的事,等够延迟区块数才执行;在这个窗口内,控制该代理的账户可以取消这条意图。公告同样要押金,形式为 announcementDepositBase + announcementDepositFactor * n。把 Cancel 类型的代理与延时配置组合起来,就是”日常由热账户操作、发现不对能在窗口内撤回”的常见做法。
顺带分清另一件事:地址里的网络前缀
代理解决的是”谁替我签”,不解决”我贴的地址是不是这个网络的”。Polkadot 生态的账户地址带网络前缀,同一把密钥在主网与测试网会显示成不同的字符串,那是地址编码层的事,与代理类型无关,但两类问题经常被混在一起问,可参考 同一把公钥在不同链地址却不同:SS58 地址格式与前缀校验。把这两层分开,排查时才知道该去看权限还是去看网络。
迁移 Asset Hub 时容易被忽略的一项
文档写明:代理委托会随着质押迁移自动转到 Asset Hub,类型被相应转换;但代理公告不会迁移,会从中继链上删除,任何未完成的延时公告需要在 Asset Hub 上重新创建。对配置了延迟代理的用户来说,这意味着迁移前后要把”待执行的公告”当成一项需要单独核对的清单,不能假定它跟着账户走。具体数值(押金、延迟、出块间隔)都会随网络参数调整,动手前请对照当时的链上参数与官方文档。权限配置错误可能造成资产操作受阻或损失,本文只做机制与操作说明,不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。