智能合约安全

2024年07月08日更新 456 人订阅
专栏简介 DeFi安全之杠杆挖矿 SharkTeam系列课程—NFT&GameFi开发与安全 NFT和GameFi概念介绍 ERC20/ERC721/ERC1155概念与协议 闪电贷和重入攻击:Grim Finance被黑事件分析 重入攻击:Uniswap V3流动性协议Visor Finance被黑事件分析 领航Web3安全,让数字生活更安全更美好:SharkTeam线上AMA实录 闪电贷攻击:Sashimi Swap被黑事件分析 ERC20相关业务的合约开发与合约安全 权限问题:Crosswise 被黑事件分析 细节决定成败:QBridge被黑事件分析 损失3.26亿,跨链协议再暴雷:Wormhole被黑事件分析 参数校验不严谨:Superfluid被黑事件分析 ERC721/ERC1155合约开发与合约安全 闪电贷+提案攻击-Beanstalk Farms攻击原理及资金流向分析 监守自盗?Titano.Finance被黑事件分析 AscendEX黑客攻击事件资金流向分析 NFT交易平台安全风险频发--OpenSea & X2Y2安全事件分析 SharkTeam系列课程—NFT 应用场景分析 SharkTeam发布2022年Q1智能合约安全态势感知季报 ChainAegis链上分析:以太坊合并后的中心化风险 大意失荆州-Akutar合约漏洞导致34M美元资金永久被锁 SharkTeam:十大智能合约安全威胁之回退攻击 闪电贷&重入攻击:Hundred与Agave被黑事件分析 从APE空投漏洞谈起,NFT安全情况究竟如何? 千里之堤,溃于蚁穴—跨链协议Nomad被黑事件分析 SharkTeam服务全线升级,重磅推出ChainAegis链上风险分析平台,全面保障Web3生态安全 ChainAegis:从链上数据看,FTX会崩盘吗? NFT合约同样也有重入风险:Revest Finance被黑事件分析 操纵预言机+提案攻击—Fortress Loans被黑事件分析 去年519,今年510—从链上分析的角度看,LUNA会不会真的陷入死亡螺旋? 算法稳定币UST崩盘—是完美风暴还是金融围猎? 6.2亿,再破记录:Ronin Bridge攻击事件技术分析与资金流向分析 周天王的愚人节-NFT精准钓鱼事件技术分析与资金流向分析 【深度】从链上分析和金融安全角度,看stETH的囚徒困境和Celsius挤兑事件 NFT流动性协议的安全困局—NFT借贷协议XCarnival被黑事件分析 NFT流动性市场安全问题频发—NFT交易平台Quixotic被黑事件分析 【深度】OpenSea 新协议 Seaport源码解析 重入攻击+闪电贷—NFT金融协议Omni被黑事件分析 SharkTeam发布2022年第二季度Web3安全态势感知报告 DeFi安全之DEX与AMMs SharkTeam完成Flow生态NFT市场MatrixMarket的安全审计 闪电贷技术详解-Part 1 闪电贷技术详解-Part 2 闪电贷技术详解-Part 3 SharkTeam系列课程:什么是DeFi借贷 DeFi安全之抵押借贷 从链上分析角度看Tornado Cash被制裁事件 Defi安全之借贷杠杆 链上数据角度,看DeFi隐私赛道的现状和未来 火眼金睛,教你如何识别Rug Pull项目 SharkTeam:十大智能合约安全威胁之重入攻击 SharkTeam:十大智能合约安全威胁之操纵预言机 SharkTeam:十大智能合约安全威胁之逻辑校验漏洞 SharkTeam:十大智能合约安全威胁之权限漏洞 SharkTeam:8月Web3安全报告 SharkTeam:十大智能合约安全威胁之合约升级漏洞 警惕以太坊合并后的重放攻击:Omni跨链桥被攻击事件分析 SharkTeam:十大智能合约安全威胁之函数恶意初始化 波卡“以太坊"Moonbeam的技术创新之路 左手以太坊、右手跨链-Moonbeam的创新与突破 批准+校验漏洞-TransitSwap安全事件分析 ChainAegis:BTC和ETH第三季度链上数据解读 默克尔树漏洞成因和链上资金追踪-BNBChain跨链桥攻击事件分析 SharkTeam:Move合约开发与合约安全 Moonbeam的多链架构 高保真还原BNBChain跨链攻击实现原理-攻击者选择高度为110217401的区块到底有什么讲究? SharkTeam:十大智能合约安全威胁之三明治攻击 香港要成为国际虚拟资产中心,链上安全是关键 SharkTeam:十大智能合约安全威胁之提案攻击 ChainAegis:FTX资金流向最新分析,风险大,请尽快提款 SharkTeam:十大智能合约安全威胁之重放攻击 Move语言安全性分析及合约审计要点 之权限漏洞、重入攻击 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 1 区块链安全 Move语言安全性分析及合约审计要点 之逻辑校验漏洞 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 2 ChainAegis:Top20 中心化交易所资金储备链上分析-Part 3 Move语言安全性分析及合约审计要点 之函数恶意初始化 链上数据分析:CeFi频繁暴雷后,DEX会成为主流吗? Move语言安全性分析及合约审计要点之回退攻击 SharkTeam:11月Web3安全报告 SharkTeam与NFMS达成合作,提供Move合约审计服务 Move语言安全性分析及合约审计要点之提案攻击 ChainAegis分析报告:Dogecoin排名前10的市值从何而来? SharkTeam完成APTOS生态项目NFMS的合约审计 ArWiki调研报告 Move语言安全性分析及合约审计要点之合约升级漏洞 Verto调研报告 在深熊中艰难前行,DeFi & CeFi 2022年度分析报告 SharkTeam:2022年度Web3安全报告 ChainAegis:2022年度NFT&GameFi分析报告 Move语言安全性分析及合约审计要点之操纵预言机 加密货币反洗钱(AML)分析 SharkTeam:Move语言安全性分析及合约审计要点 之三明治攻击 ChainAegis:BUSD链上数据分析报告 闪电贷攻击+业务逻辑漏洞:Platypus Finance事件分析 SharkTeam:Move语言安全性分析及合约审计要点之重放攻击 加密货币钓鱼团伙Monkey Drainer链上行为分析 权限漏洞+价格操纵:SwapX被攻击事件分析 ChainAegis:Blur链上数据分析报告 ChainAegis:数读Silvergate & SVB崩盘事件 业务逻辑漏洞+闪电贷攻击:Euler Finance被攻击事件分析 ChainAegis:稳定币协议Liquity链上分析报告 ChainAegis:GMX链上分析报告 SharkTeam与GoPlus Security达成战略合作,共同守护Web3世界安全 香港之夜,Dao的盛会 SharkTeam:2023年第一季度Web3安全报告 Talk with us,公链、DeFi等Web3时代的创新发展机遇有哪些? 香港Web3嘉年华“Web3与安全”主题论坛议程揭秘 2023香港Web3嘉年华,SharkTeam展台指引 权限校验漏洞:SushiSwap被攻击事件分析 香港会议期间,SharkTeam发布“链上安全分析研究报告” 安全是发展Web3的必要条件-SharkTeam受邀香港Web3嘉年华 ChainAegis:LSD赛道链上分析报告 Sui 与 Aptos 技术实现对比 ChainAegis:去中心化保险赛道及风险分析 ChainAegis:Pancakeswap V2V3链上数据分析 ChainAegis:AAVE V2/V3链上数据分析 ChainAegis:Gains Network链上数据分析 逻辑漏洞:DEUS被攻击事件分析 ChainAegis:BRC-20链上数据分析 ChainAegis:Blend链上数据分析 SharkTeam:Tornado.Cash提案攻击原理分析 SharkTeam:Sui主网链上数据分析 SharkTeam:Jimbos protocol闪电贷攻击原理分析 SharkTeam:RWA赛道链上数据分析 SharkTeam:Zksync Era链上数据分析 SharkTeam:Atomic Wallet攻击原理和洗钱模式分析 链安全 Sui主网上线满月,链上持币者数据分析 SharkTeam:Atlantis提案攻击原理分析 SharkTeam:HashFlow攻击事件原理分析 SharkTeam:2023年第二季度Web3安全报告 SharkTeam与Move Accelerator达成合作,Let’s Move! SharkTeam:Themis protocol闪电贷价格操纵攻击分析 SharkTeam:4月28日攻击者就已实施攻击-PolyNetwork攻击原理和资产转移分析 SharkTeam:AzukiDAO攻击事件分析 SharkTeam:BNO攻击事件原理分析 SharkTeam:Vyper漏洞导致Curve和JPEG'd等项目被攻击原理分析 SharkTeam:UniswapV4 Hook最佳安全实践 SharkTeam:UniswapX 源码分析 SharkTeam:Worldcoin运营数据及业务安全分析 SharkTeam与TOKEN2049正式达成合作伙伴关系 SharkTeam:Exactly Protocol攻击事件原理分析 SharkTeam:Rugpull工厂黑色产业链分析 SharkTeam开启9月双城记 SharkTeam上海区块链全球峰会展台指引 SharkTeam:Web3安全实践与创新 KYT/AML:Web3合规展业的必要条件 SharkTeam:典型钓鱼攻击链上资产转移分析 SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式 SharkTeam:2023年第三季度Web3安全报告 SharkTeam:BH闪电贷攻击原理分析 SharkTeam:Platypus Finance攻击事件原理分析 SharkTeam:Onyx Protocol攻击事件原理分析 SharkTeam:Raft攻击事件原理分析 从链上分析角度看FTX破产清算过程,美国加密货币监管与风险处置能力究竟如何 SharkTeam:KyberSwap攻击事件原理分析 SharkTeam:ERC2771\&Multicall任意地址欺骗漏洞原理分析 SharkTeam:OKX DEX攻击事件分析及链上资产追踪 SharkTeam:从链上数据看稳定币的安全与监管 SharkTeam:2023年加密货币犯罪分析报告 SharkTeam:MIM_SPELL被攻击事件原理分析 SharkTeam:合约精度计算漏洞与安全建议 SharkTeam:Woo Finance被攻击事件分析 SharkTeam:Prisma Finance被攻击事件分析 SharkTeam:2024年第一季度Web3安全报告 SharkTeam:Hedgey Finance被攻击事件分析 SharkTeam:Sonne Finance攻击事件分析 SharkTeam:Web3常见钓鱼方式分析与安全防范建议 SharkTeam:UwU Lend攻击事件分析 SharkTeam:美国众议院FIT21法案解读 SharkTeam:2024年上半年度Web3安全报告

Sui 与 Aptos 技术实现对比

  • SharkTeam
  • 发布于 2023-04-23 17:37
  • 阅读 5996

近期,随着Sui主网即将上线,围绕Aptos和Sui的讨论也逐渐增加,社区也非常活跃,大家都在讨论Aptos和Sui的异同。其实公链技术并没有绝对的优势和劣势,主要还是看与业务的适用程度以及基础性能、安全性等。SharkTeam之前对Aptos、Sui、StarCoin等Move语言公链进行

近期,随着Sui主网即将上线,围绕 Aptos 和 Sui的讨论也逐渐增加,社区也非常活跃,大家都在讨论Aptos和Sui的异同。其实公链技术并没有绝对的优势和劣势,主要还是看与业务的适用程度以及基础性能、安全性等。

SharkTeam之前对Aptos、Sui、StarCoin等Move语言公链进行了深入研究,我们将进行一些对比和分享,这是第一期,希望对Move开发者选择适合自己业务的公链有帮助。

1.共识机制

Aptos 和 Sui 都是 PoS 共识模型,但是两者细节实现有些不同。

Aptos 采用基于 BFT 的 HotStuff,在此基础上,Aptos 开发了 Block-STM执行引擎。Block-STM 执行引擎提高了吞吐量降低了延迟。

Sui 采用了 Narwhal 和 Tusk。Narwhal 是基于 DAG 的内存池模块(mempool),主要负责交易数据的可用性。Tusk 是共识模块,主要是对负责交易进行排序。

2.账户模型

在以太坊中有两个账户:EOA 和 合约账户。账户的本质是地址,在 Aptos 和 Sui 中,地址有所不同。

类型 大小
Aptos(Core Move) 32字节
Sui 20字节

在Aptos中,每个账户是由资源和模块组成,每个账户可以拥有多个资源和模块。资源是存储数据,模块是存储代码。

在Sui中,没有账户这一说法。Sui的最小单位是对象(Object),所有创建的对象都会在0x0地址上。该0x0地址,一般是创建的包。比如,我用sui move new learn创建的一个项目,在Move.toml中

1682241881_6444f959ef56fe37bec1d.png!small?1682241882630

1682241890_6444f962451595de1971e.png!small?1682241890901

3.能力

Core Move 提供了四种能力: Copy、Drop、Store、Key。

  • Copy :允许此类型的值被复制
  • Drop :允许此类型的值被弹出/丢弃
  • Store :允许此类型的值存在于全局存储的某个结构体中
  • Key :允许此类型作为全局存储中的键(具有 key 能力的类型才能保存到全局存储中)

在 struct 中,Copy和Drop可以用于创建类似Solidity中 event,来获取日志信息。拥有Store 和 Key,可以被认为资源对象。

Aptos 和 Core Move 能力特性一样。

Aptos 使用Core Move中的全局存储操作符(move_to,move_from等)。使用全局存储操作符必须具有相应的acquires关键字去注释全局资源。

Sui 有 Sui 对象,没有 Aptos 的acquires关键字。Sui 对象要存储在链上必须要有 Key 并且 struct 中要有一个特殊的成员字段id,它的类型是 sui::object::UID。对象 UID具有唯一性,它通过 object::new(\&mut TxContext) 创建,并通过 object::delete(UID) 销毁。

Sui 和 Aptos(Core Move)不同,拥有 Key 能力,并不意味着能够全局存储。

在Aptos(Core Move)中,任意 struct 被 Key 修饰后都可以作为资源储存在账户中。合约在执行的时候,无论是不是被访问账户,都可以通过borrow_global等一些全局资源操作符去访问。

在 Sui 中,对象是sui -> move中直接传递,不能借助全局操作符。比如,在 Sui 中存储对象必须通过函数transfer::transfer(object, address)进行存储。但是,该函数智能在entry函数中使用。因为 entry 函数是用来对象资源交易入口函数。

4.所有权

4.1 Owned 所有权

Aptos(Core Move) Sui
Move module public/public(friend)/public(script) public/public(friend)
Ability Copy、Drop、Store、Key Copy、Drop、Store、Key
Resource(Object) 组装和拆包只能在当前module执行 组装和拆包只能在当前module执行,默认Object是Owned(0x0)

4.2 Shared 所有权

在Aptos(Core Move)中 Shared 的所有权主要通过创建资源账户,并且绑定资源账户,合约之间间接共享。

在 Sui 中的某些对象不能被任何人修改,这些对象可以被读取。比如 Sui 中所有已发布的包和模块都是不可变对象。

transfer::freeze_object(obj)

在 Sui 中还有一种共享对象可以被任何人读取或修改,并且该共享对象交易需要通过共识协议进行全局排序。

transfer::share_object(obj)

5.Signer 和 TxContext

在Aptos中,一个交易的签名者(signer)被直接作为一个参数传递到从Move外部调用的函数中。

签名者(signer)是 Move 内置的资源类型。签名者(signer)是一种允许持有者代表特定地址(address)行使权力的能力(capability)。你可以将原生实现(native implementation)视为:

struct signer has drop { a: address }

std::signer 标准库模块为 signer 提供了两个实用函数:

函数 描述
signer::address_of(\&signer): address 返回由 \&signer 包装的地址值。
signer::borrow_address(\&signer): \&address 返回由 \&signer 包装的地址的引用。

signer 有点像 Unix UID,因为它表示一个通过 Move 之外的代码(例如,通过检查加密签名或密码)进行身份验证的用户。

在 Sui中,TxContext类型可以像对待 signer 一样被声明为一个函数的参数,并且可以使用一个库函数从TxContext中获得签名者(signer)。此外,TxContext 还用于在Sui Move中创建 UID 。

1682241915_6444f97b68a920d2c359d.png!small?1682241917848

6.初始化

6.1 Aptos 初始化函数

Aptos 在module部署时,采用signer传入init_module。

init_module(account: &signer)

6.2 Sui 初始化函数

Aptos 支持在具有类似签名的module部署时调用的初始化函数。 Sui 将在module部署时调用使用类似签名声明的 init函数。

init(&mut TxContext)

7. 安全性

7.1 Overflow

整数溢出问题,出现在Solidity 0.8之前版本中。Solidity 0.8之前采用的是SafeMath安全库去处理溢出问题,Solidity 0.8之后溢出问题在语言层面不在出现,Solidity自带溢出处理。如果发生溢出,将会revert。

那么,在Move中是否纯在溢出问题。我们简单写了一个测试例子。

1682241923_6444f983e92691d73150b.png!small?1682241925547

1682241929_6444f9898560533ad0372.png!small?1682241930115

从测试结果中可以得知,Move在语言层面处理了溢出问题。如果发生溢出,Move 会出现 arithmetic error。

在Solidity 0.8之后,位运算不精确使用也会发生数值问题。

1682242007_6444f9d72034a98d205f5.png!small?1682242008040

1682242011_6444f9dbcf3ea4457800f.png!small?1682242012601

Move 中的位运算也同样存在相同问题。

1682241999_6444f9cfbba5c89b430c7.png!small?1682242001042

1682241995_6444f9cb0d00fb51b201b.png!small?1682241995803

适当的使用位运算可以节省gas,但是同时要保证精确计算,否则会发生数值问题。

7.2 访问控制

在Solidity中,对于基本的访问控制,Openzepplin提供了一个合约安全模板Ownable。在该合约中,账户的所有者可以被赋予特定的独占访问权限。

在Move中提供了一些ability(key/store),通过ability对资源对象进行授权操作。同时,Move中也有常用的设计模式,它允许以资源对象为中心来进行适当的访问控制。这种设计模式类似于有一个相应权限的"帽子"(Cap),我将一个struct赋予key能力但是不赋予store。如下所示:

struct AdminCap has key{}

在Aptos(Core Move)中,Cap的设计如下:

1682241989_6444f9c589105733faf5f.png!small?1682241990683

在Sui中,Cap的设计如下:

1682241980_6444f9bc17b8c5662eec9.png!small?1682241980763

在AdminCap struct 中,Sui 和 Aptos 相比,Sui 多了UID类型的id。Sui是没有账户地址的概念,只能使用id进行索引对象。

在init函数中,我们创建了一个AdminCap的一个副本,将其发送到发布者的地址,让发布者拥有Cap。

在create_and_send函数中,传入AdminCap并且立即采用_未使用变量符号对它使用。由于是引用对象,所以原来对象未变化。这时候,只有AdminCap拥有者才能进行调用执行该函数。

About Us

SharkTeam的愿景是全面保护Web3世界的安全。团队由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约的底层理论,提供包括智能合约审计、链上分析、应急响应等服务。已与区块链生态系统各个领域的关键参与者,如Polkadot、Moonbeam、polygon、OKC、Huobi Global、imToken、ChainIDE等建立长期合作关系。

Twitter:<https://twitter.com/sharkteamorg>

Discord:<https://discord.gg/jGH9xXCjDZ>

Telegram:<https://t.me/sharkteamorg>

点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论