Beosin 已推出针对 Nibiru 生态的审计方案
封面:Nibiru
Layer1 公链 Nibiru Chain 在 2024 年 1 月底推出空投激励,在经过一个月的空投活动后,其社区增长超过 3 倍,推特关注人数超过 50 万。作为融资超 2000 万美元的新公链,Nibiru Chain 专注于解决 DeFi 应用的安全性与速度,将成为 dYdX 的潜在竞争对手。
目前,Nibiru Chain 计划在本周启动其主网。作为增长快速的 Layer1,Nibiru Chain 有何技术特点与竞争优势?其生态项目的开发需要注意哪些安全问题。今天 Beosin 将为大家一一解析。
Nibiru Chain 协议解析
Nibiru Chain 主要以 DeFi 交易为核心业务。其核心组件有以下 4 个:
1. Nibi-Perps
链上永续合约交易,允许用户对 BTC、ETH 和 ATOM 等热门加密资产进行最高 10 倍的杠杆交易。$NIBI 的质押者将拥有 Nibi-Perps 的治理权和交易手续费折扣。
2. Nibi-Swap
Nibiru 的自动化做市商协议,计划支持 2 种 LP 池:稳定币兑换池和普通的恒定乘积池。
3. $NUSD
Nibiru 生态的足额抵押稳定币。Nibiru 计划首先支持用户使用 $USDC 和 $NIBI 来铸造 NUSD, 两者的具体比例由抵押品比率 (Collateral Ratio) 决定。如果 CR= 80%, 意味着铸造 100 $NUSD, 用户需要提供 80 $USDC 和等值 20NUSD 的 NIBI。
未来 Nibiru Chain 将支持更多类型的抵押物,目前 $NUSD 更像是 Cosmos 生态的 $FRAX。
4. Nibi-Oracles
Nibi-Oracles 是 Nibiru 的原生预言机解决方案,允许验证者运营商积极参与预言机共识投票,将链下数据高保真地集成到区块链上,提供来自外部 API 和智能合约的低延迟反馈。
在 2024 年,Nibiru Chain 将着眼于扩大生态系统,其主要发展包括多个计划,如与多条链的主要 DeFi 项目整合、在一流的中心化交易所上市、完成并行乐观执行,以及实现全面的 EVM 兼容性。
安全开发实践
若在 Nibiru Chain 上开发应用,其开发流程和所需语言与在其它 Cosmos 系公链几乎完全相同,遵循以下安全指南可以提高项目的合约安全性:
合约开发安全
1. 做好应对攻击的准备
与使用 Solidity 开发合约类似,开发者都需要考虑到如何面对攻击和修复漏洞。因此开发者需要构建可升级的智能合约,并制定好风险应对方案。
2. 注意地址的验证标准化
任何有效的 Cosmos SDK 地址都有两种有效的表示形式:全小写和全大写,如:cosmos1uzwqa88hcqe5gs7u7lgjxekz7xc6sm0f7xwp6a 与
COSMOS1UZWQA88HCQE5GS7U7LGJXEKZ7XC6SM0F7XWP6A 都是同一个地址,Nibiru 也是一样。在处理合约中地址时,我们需要考虑地址的这一特性。
pub fn valid_transfer (
deps: DepsMut,
info: MessageInfo,
amount: Uint128,
dest: String ,
) -> Result <Response, ContractError> {
// 检查地址是否在黑名单
if let Some (is_in_blacklist) = BLACKLIST. may_load (deps.storage, &dest.to_string ( )? {
if is_denied {
return Err (ContractError::DeniedRecipient);
}
} else if let Some (is_in_blacklist) = BLACKLIST.may_load ( deps.storage , &info.sender.clone ( ) )? {
if is_denied {
return Err (ContractError::DeniedSender);
}
......
};
如上面代码所示,由于 dest 没有经过标准化,通常使用的地址为小写地址,则任何人可以通过提供大写地址绕过 BLACKLIST 进行操作。
3. 注意运算与溢出
在 CosmWasm 合约中,开发者需注意整数溢出风险或被 0 除等情况。建议开发者使用 CosmWasm 的 Uint256 和 Uint512 类型,并使用不会溢出的数学函数 full_mul()。
4. 访问控制问题
访问控制是程序安全的主要问题之一,由于访问控制问题引起的安全事件数不胜数,在 Cosmwasm 合约中同样需要重视。以下是一个典型案例:
fn update_config(
deps: DepsMut,
msg: UpdateMsg
) -> Result<Response, ContractError> {
let config = CONFIG.load(deps.storage)?;
let new_config = Config {
rewards_vault_contract: msg.vault_address
.map(|human| deps.api.addr_validate(&human))
.transpose()?
.unwrap_or(config.rewards_vault_contract)
};
CONFIG.save(deps.storage, &new_config)?;
Ok(Response::new().add_attribute("action", "update_config"))
}
上述代码因为缺失对调用者地址的检查和限制,允许任何人都可以调用 update_config(),将自己的地址设置为金库地址,接收合约产生的所有奖励。
5. 小心无限循环
Cosmwasm 合约运行设置了很高的 gas limit,但使用不当会耗尽 gas。CosmWasm 合约可能通过在 ACK handler 中回调自身从而陷入无限循环。如果开发者在两个 CosmWasm 合约之间有传递数据包,需注意这可能导致无限循环并损耗大量 gas 费。
项目安全实践
1. 智能合约审计
智能合约审计是通过对智能合约代码进行系统的测试和审查,尽可能地发现潜在的安全漏洞,排除安全风险,确保代码没有业务逻辑漏洞,符合预期运行流程和结果。定期对于项目的智能合约进行安全审计至关重要,审计的时间点建议在合约开发完成后,主网部署之前进行。
2. 使用多签钱包
项目方需考虑使用多签钱包管理项目金库以及智能合约,多重签名帐户需由多个实体持有,尽量避免潜在的访问控制风险和内部作恶。目前 Nibiru Chain 已采用 Nomos 多签解决方案,项目方可以考虑使用 Nomos 进行资产管理。
总结
Nibiru Chain 作为一条全新的 Layer1 公链,为 DeFi、游戏、RWA 等领域提供了一个创新平台,旨在解决 Web3 应用的可访问性、安全性和性能问题,为开发者和普通用户提供全面且优秀的服务。
免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。