最近和一个波卡项目的核心开发聊天,惊闻他们的项目最近被黑客攻击了。这可是现在的市值过亿的项目,按照离岸人民币汇率(1 比 7.2)计算,幸好他们在 Runtime 中集成了安全模式这个 pallet,及时进入安全模式后,之后所有的攻击交易被拒绝。让我们从技术的角度来了解一下,这个价值过亿的 pallet。
Safe Mode Pallet 旨在为基于 Substrate 的区块链提供一种机制,用于临时限制除特定白名单外的所有交易(extrinsics)。这在网络需要保护免受潜在威胁或进行关键更新时尤为重要。进入安全模式可以通过特权帐号,或者存放一定数额的资产。退出可以是在锁定的区块之后自动执行,或者有特殊的帐号发起交易来退出。
主要功能
进入安全模式:
无权限进入:任何用户都可以通过存入押金进入安全模式。安全模式的持续时间由 EnterDuration 配置项定义。
特权进入:特定的特权帐号可以强制区块链进入安全模式,持续时间由配置项定义。
延长安全模式:
无权限延长:用户可以通过存入额外的押金来延长安全模式的持续时间。延长的持续时间由 ExtendDuration 配置项定义。
特权延长:特权帐号也可以延长安全模式的持续时间。
退出安全模式:
自动退出:当当前区块号超过 EnteredUntil 值时,安全模式将自动退出。
强制退出:特权帐号可以强制网络退出安全模式。
押金管理:
存入押金:用户在进入或延长安全模式时将其资金质押。
释放押金:押金可以在一定延迟后释放,或由特权帐号强制释放。
削减押金:特权来源可以在必要时对押金就写处罚。
事件通知:Pallet 会发出各种事件,通知网络进入、延长或退出安全模式,以及与押金相关的操作。
配置 Traits
该 Pallet 通过以下 Traits 进行高度配置:
-
RuntimeEvent:定义总体事件类型。
-
Currency:指定用于押金的货币类型。
-
RuntimeHoldReason:定义保留资金的原因。
-
WhitelistedCalls:包含在安全模式下仍可执行的所有运行时调用。
-
EnterDuration 和 ExtendDuration:定义进入和延长安全模式的持续时间。
-
EnterDepositAmount 和 ExtendDepositAmount:指定进入和延长安全模式的押金额。
-
ForceEnterOrigin、ForceExtendOrigin、ForceExitOrigin 和 ForceDepositOrigin:定义可以强制进入、延长、退出或管理押金的帐号。
-
Notify:在进入或退出安全模式时通知其他 Runtime 处理逻辑。
-
ReleaseDelay:定义押金在保留后最短的释放时间。
交易详细描述
enter:
描述:无权限进入安全模式,持续时间为 EnterDuration 配置项定义的区块数。这个交易将会调研 Currency 的 hold 方法,来把用户的资产锁定。
参数:origin(任何普通帐号)。
注意事项:需要确保调用者有足够的资产支付押金,参数是 EnterDepositAmount。
force_enter:
描述:特权进入安全模式,持续时间由特权帐号配置项定义,和普通帐号的可以不同。它来自由 ForceEnterOrigin 的一个参数。
参数:origin(特权帐号,由 ForceEnterOrigin 来定义)。
注意事项:仅特权帐号可以调用。
extend:
描述:无权限延长安全模式,持续时间为 ExtendDuration 配置项定义的区块数。
参数:origin(调用者的来源)。
注意事项:需要确保调用者有足够的押金。
force_extend:
描述:特权延长安全模式,持续时间由特权来源配置项定义。
参数:origin(特权来源)。
注意事项:仅特权来源可以调用。
force_exit:
描述:特权退出安全模式。
参数:origin(特权来源)。
注意事项:仅特权来源可以调用。
force_slash_deposit:
描述:削减指定账户在特定区块的押金。
参数:origin(特权来源)、account(账户)、block(区块号)。
注意事项:仅特权来源可以调用。
release_deposit:
描述:无权限释放指定账户在特定区块的押金。
参数:origin(调用者的来源)、account(账户)、block(区块号)。
注意事项:需要确保安全模式已退出且延迟时间已过。
force_release_deposit:
描述:特权释放指定账户在特定区块的押金。
参数:origin(特权来源)、account(账户)、block(区块号)。
注意事项:仅特权来源可以调用。
使用场景
假设区块链网络检测到潜在的安全威胁,拥有特权帐号的人员可以使用 Safe Mode Pallet 快速限制所有非白名单交易的执行,从而减轻风险。当然在网络的去中心化完成之后,这个帐号可能会被移除。那么也可以有一些拥有一定比例资产的帐号来发起,比如项目成立的基金帐号等。以下是使用步骤:
进入安全模式:
用户或管理员调用 enter 函数,通过存入押金激活安全模式,持续时间为预定义的区块数。或者,特权来源可以调用 force_enter 函数,立即激活安全模式,持续时间由配置项定义。
延长安全模式:
如果威胁持续存在,用户可以调用 extend 函数,通过存入额外押金延长安全模式的持续时间。特权来源可以使用 force_extend 函数延长持续时间,无需押金。
退出安全模式:
一旦威胁解除,特权来源可以调用 force_exit 函数退出安全模式。如果没有采取任何行动,安全模式将在预定义的持续时间后自动退出。
管理押金:
用户可以在安全模式退出且延迟时间过后调用 release_deposit 函数释放押金。特权来源可以在必要时强制释放或削减押金。
注意事项
-
配置:确保配置 traits 正确设置以匹配网络需求。配置错误可能导致意外行为。
-
押金管理:谨慎设置押金额和释放延迟,以避免不必要地锁定用户资金。
-
事件处理:监控 Pallet 发出的事件,及时了解安全模式状态并采取适当行动。
-
安全性:定期审计 Pallet 及其配置,确保其符合安全标准,不引入漏洞。
-
通过理解和正确配置 Safe Mode Pallet,网络管理员可以有效管理和减轻风险,确保区块链网络的稳定性和安全性。其他和项目关联方,如果拥有一定的资产,并发现了风险,也可以发起交易,保护网络不被攻击。
免责声明
由PaperMoon提供并包含在本文中的材料仅用于学习目的。它们不构成财务或投资建议,也不应被解读为任何商业决策的指导。我们建议读者在做出任何投资或商业相关的决定之前,进行独立研究并咨询专业人士。PaperMoon对根据本文内容采取的任何行动不承担任何责任。
Substrate 入门课第 16 期已经开课啦!
欢迎开发者积极报名
掌握 Substrate 不仅可以让你近距离感受 Web3 行业发展的技术力量,更能带你深入波卡生态创新前沿。由 OneBlock+ 和 Polkadot 联合打造的第 16 期《Substrate 开发入门与项目实战》课程开启报名,课程已于 11 月 29 日开课(课程性质免费,请大家尽快填写报名表)!
本期课程视频内容将在原有的六个课时基础上进行优化,增加项目分享部分,另外还安排了波卡生态优秀项目进行技术分享!课程将安排 Task 作业、Office Hour 答疑等板块,帮助大家巩固所学,作业评分第一的同学将获得行业大佬 1 对 1 咨询机会;在正式课程学习之外,课程讲师将会不定期输出技术文章帮助大家学习新知识,更有 1-2 场的 AMA 线上直播带领大家洞悉波卡生态以及 Substrate 技术。无论你是希望在区块链领域取得突破,还是渴望在这个新兴行业中脱颖而出,这门课程都将成为你迈向成功的坚实一步。