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 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。