查看原文
其他

盘古社区Fstswap中文版审计报告

点石资讯 2022-01-18

DAO+DEX,DeFi赛道又一强劲黑马Fstswap诞生!

去中心化兑换协议FSTSWAP 已经正式部署在BSC币安智能链!

FSTSWAP :https://app.fstswap.vip

FSTSWAP :https://fstswap.pro

FIST合约(BSC):

0xc9882def23bc42d53895b8361d0b1edc7570bc6a






















代码安全评估

金融服务交易

2022年1月16日


目录

概述概述

项目总结

审计摘要漏洞摘要审计范围

调查的结果

FFC-01:被零除

FFC-02:缺少输入验证FFC-03:集中化相关风险

FFC-04:不必要的数组作为计数器

FFC-05:正确使用“要求()”和“断言()”FRC-01:与通货紧缩标志不兼容FSC-01:数字太多

FSC-02:功能可见性优化

FSC-03:令牌铸造到集中地址

附录免责声明关于


摘要

本报告是为FST SWAP准备的,旨在发现FST SWAP项目源代码中的问题和漏洞,以及任何不属于官方认可库的合同依赖项。已经使用静态分析和手动审查技术进行了全面检查。

审核过程特别注意以下注意事项:


针对常见和不常见的攻击媒介测试智能合约。评估代码库以确保符合当前最佳实践和行业标准。

确保合同逻辑符合客户的规格和意图。

对照行业领导者制定的类似智能合同,交叉引用合同结构和实施。

由行业专家对整个代码库进行彻底的逐行人工审查。

安全评估的结果从关键到信息都有。我们建议解决这些发现,以确保高水平的安全标准和行业惯例。我们从安全角度提出了可以更好地为项目服务的建议:


增强通用编码实践,以获得更好的源代码结构;添加足够的单元测试来覆盖可能的用例;

为每个函数提供更多的注释,以提高可读性,尤其是公开验证的合同;

一旦协议生效,为特权活动提供更多的透明度。


概观

项目总结





平台平衡计分卡





语言的牢固性







代码库


https://bscscan.com/address/0xC9882dEF23bc42D53895b8361D0b1EDC7570Bc6Ahttps://bscscan.com/address/0x9A272d734c5a0d7d84E0a892e891a553e8066dcehttps://bscscan.com/address/0x1B6C9c20693afDE803B27F8782156c0f892ABC2d


犯罪






审计摘要





审核方法静态分析,手动审查






漏洞摘要


脆弱性水平

总数

悬而未决的

下降

承认

部分解决

断然的

批评的

0

0

0

0

0

0

重要的

2

0

0

0

中等

0

0

0

0

0

0

较小的

2

0

0

2

0

0

报告的

5

0

0

5

0

0

讨论

0

0

0

0

0

0


审计范围


身份

文件

SHA256校验和

(美)联邦科学委员会(Federal Science Council)

菲斯塔·索尔

92154 da 3d 4 bfbecd 487725 ca 34491 bed 3556 e 210 b 8686 e 9 a2 B3 FD 19 ee 817817d

固定性屈曲挛缩

fstswapffactory . sol

c 5788 a 11 c 532 fc 919 cc 935795 b 358172d 615 ccff 63 a 6 db 48 be 62d 7 a2 ff 4032 c 7

货物交与承运人价格(Free Carrier-Named Point)

FstswapRouter02.sol

a3b1db 17 fbf 769d 76 efead F9 E3 Abe 67503920408 DBF 8 f 56 E1 a9 CCF 5c 7854710


理解

概观

FSTSwap是一个自动化的流动性协议,由一个恒定的产品公式驱动。每个智能合约或合约对管理着一个由两个ERC-20代币储备组成的流动性池。任何人都可以成为某个池的流动性提供者(LP),方法是存入每个基础代币的等值来换取池代币。这些代币追踪总储备中按比例的LP份额,并且可以在任何时候赎回基础资产。

配对充当自动做市商,随时准备接受一个代币换取另一个代币,只要

配方得以保留。这个公式,最简单地表示为x * y = k(In

惯例,合同对交易收取0.30%的费用),规定交易不得改变产品(k)

一对的准备金余额(x和y)。添加或移除流动性时,如果流动性相当于sqrt(k)增长的1/4。

特权函数


开了,薄荷

合同包含以下特权函数,用于修改合同配置和地址属性。我们在下面列出了这些功能:

合同工厂:


setFeeTo(地址_feeTo) setFeeToSetter(地址_feeToSetter)


调查的结果



批评的

0 (0.00%)

重要的

2 (22.22%)

中等

0 (0.00%)

较小的

2 (22.22%)

报告的

5 (55.56%)

讨论

0 (0.00%)



身份

标题

种类

严重

状态

FFC-01

除以零

逻辑问题

较小的

承认

FFC-02

缺少输入验证

逻辑问题

报告的

承认


FFC-03      

特权


少校下定决心


FFC-04      






FFC-05


正确使用



编码风格信息认可



FRC-01       与通货紧缩标志不相容


承认的逻辑问题


FSC-01      





FSC-02       功能可见性优化气体优化信息认可






FSC-03      

特权


少校承认



FFC-01 |被零除





逻辑问题小fstswapffactory . sol:547承认






描述

对...的呼唤


函数将失败,如果


是0。


建议

我们建议客户端在函数burn()中添加以下验证:






缓和

客户已经确认。


FFC-02 |缺少输入验证





逻辑问题信息fstswapffactory . sol:762确认






描述

给定的输入缺少非零值检查。

建议

我们建议添加传入值检查,以防止意外错误,如下所示:






缓和

客户已经确认。


FFC-03 |集中化相关风险





中央集权/特权主要工厂解决方案:699,704 解决






描述

在合同FstswapFactory中,角色


有权行使以下职能:


函数setFeeTo()函数setFeeToSetter()


任何妥协

建议


帐户可能允许黑客利用此权限。

该风险描述了当前的项目设计,并可能进行迭代,以改善安全操作和权力下放的水平,在大多数情况下,这在现阶段无法完全解决。我们建议客户仔细管理特权帐户的私钥,以避免任何被黑客攻击的潜在风险。总的来说,我们强烈建议通过分散机制或基于智能合约的帐户来提高协议中的集中权限或角色,这些帐户具有增强的安全实践,例如多签名钱包。

这里有一些可行的建议,可以在短期、长期和长期的不同层面上降低潜在风险:

短期:

Timelock和Multi sign (⅔,⅗)组合通过延迟敏感操作和避免单点密钥管理故障来缓解问题。


具有合理延迟的时间锁定,例如48小时,用于了解特权操作;和

向多签名钱包分配特权角色,以防止因私钥泄露而导致单点故障;

一个媒体/博客链接,用于与公众分享时间锁定合同和多签名者地址信息。

长期:


Timelock和DAO的结合,通过应用权力下放和透明度来缓解。


具有合理延迟的时间锁定,例如48小时,用于了解特权操作;和

引入DAO/治理/投票模块,以提高透明度和用户参与度。

一个媒体/博客链接,用于与公众分享时间锁定合同、多签名者地址和DAO信息。

永久:

放弃所有权或删除功能可以被视为完全解决。


放弃所有权,永远不要收回特权角色。运筹学

删除有风险的功能。

缓和

客户已放弃对地址为(0)的合同的所有权。


合同,所有权


FFC-04 |不必要的数组作为计数器





气体优化信息fstswapffactory . sol:660认可






描述

的用法


数组作为计数器来维护创建的对的数量。


建议

我们建议客户更换创建的配对。

缓和

客户已经确认。


用一个简单的uint类型计数器来存储


FFC-05 |和的正确用法





编码方式信息承认






描述



函数应该只用于测试内部错误,并检查不变量。该函数应该用于确保有效的条件,如输入或合同状态

满足变量,或者验证对外部协定的调用的返回值。

建议

我们建议使用条件失败的客户,而不是

缓和

客户已经确认。


函数,以及当函数


FRC-01 |与通货紧缩代币不相容





承认






描述

当用户在路由器中添加或删除LP令牌时




运营是

表演过。当转移标准ERC20通货紧缩代币时,由于收取交易费,输入金额可能不等于收到的金额。因此,会出现金额不一致的情况,并且由于验证检查,交易可能会失败。

建议

我们建议客户规范所支持的LP代币集合,并添加必要的缓解机制,以便在需要支持通缩代币时跟踪准确的余额。

缓和

客户端响应:

拳头互换不会与通缩代币特别兼容。


FSC-01 |数字太多





编码风格信息标准:359 承认






描述

有许多数字的文字很难阅读和复习。

建议

我们建议客户使用科学符号来提高可读性。例如:






缓和

客户已经确认。


FSC-02 |功能可见性优化





气体优化信息标准:469,488 承认






描述

下列函数被声明为公共函数,包含数组函数参数,并且不会在项目范围内包含的任何协定中调用。从不在合同内部调用的函数应该具有外部可见性。

建议

我们建议将函数的可见性说明符设置为,并将基于数组的参数设置为

更改他们的数据位置

缓和

客户已经确认。


调用data,优化函数的气体成本。


FSC-03 |令牌铸造到集中地址





集权/特权主要标准:360 承认






描述

…的数量


铸造到集中地址的令牌


谁是

业主,可能会引起社区对集中化问题的关注。

建议

我们建议客户仔细管理帐户的私钥,避免任何潜在的

被黑的风险。在这种情况下,我们还建议客户在项目中采用Multisig、Timelock和/或DAO来管理该特定帐户。

缓和

客户已经确认。


附录

查找类别

集权/特权

集中化/特权发现指的是违背分散化本质的组件的功能逻辑或实现,例如明确的所有权或专门的访问角色以及重新分配资金的机制。

气体优化

气体优化结果不会影响代码的功能,但会生成不同的、更优化的EVM操作码,从而降低交易的总气体成本。

逻辑问题

逻辑问题调查结果详细说明了链接代码逻辑中的错误,例如关于block.timestamp如何工作的错误概念。

编程风格

编码风格的发现通常不影响生成的字节码,而是评论如何使代码库更易读,从而更容易维护。

校验和计算方法

“审核范围”部分中的“校验和”字段计算为指定提交下列出的源存储库中托管的每个文件内容的SHA-256(安全哈希算法2,摘要大小为256位)摘要。

结果是十六进制编码的,与针对目标文件的Linux“sha 256 sum”命令的输出相同。


放弃

本报告受服务协议中规定的条款和条件(包括但不限于服务描述、保密性、免责声明和责任限制)或服务范围以及向您(“客户”或“公司”)提供的与本协议相关的条款和条件的约束。本协议中规定的服务相关的报告只能由公司在协议中规定的条款和条件允许的范围内使用。未经CertiK事先书面同意,任何人不得出于任何目的传输、披露、参考或依赖本报告,也不得将副本交付给公司以外的任何其他人。

该报告不是,也不应该被认为是对任何特定项目或团队的“认可”或“不认可”。本报告不是,也不应被视为,任何与CertiK签约进行安全评估的团队或项目所创建的任何“产品”或“资产”的经济性或价值的指示。本报告不提供关于所分析技术的绝对无缺陷性质的任何担保或保证,也不提供技术所有者、业务、商业模式或法律合规性的任何指示。

本报告不应以任何方式用于围绕投资或参与任何特定项目做出决策。本报告绝不提供投资建议,也不应作为任何类型的投资建议。该报告代表了一个广泛的评估过程,旨在帮助我们的客户提高代码质量,同时降低加密令牌和区块链技术带来的高风险。

区块链技术和加密资产带来了高水平的持续风险。CertiK的立场是,每个公司和个人都对自己的尽职调查和持续安全负责。CertiK的目标是帮助减少与利用新的和不断变化的技术相关的攻击媒介和高水平的差异,绝不声称对我们同意分析的技术的安全性或功能性有任何保证。

CertiK提供的评估服务依赖于持续开发。您同意,您的访问和/或使用,包括但不限于任何服务、报告和材料,将由您自行承担按现状、在何处和可用的风险。

加密令牌是新兴技术,伴随着高水平的技术风险和不确定性。评估报告可能包括假阳性、假阴性和其他不可预测的结果。这些服务可以访问并依赖于多层第三方。


所有服务、标签、评估报告、工作产品或其他材料,或任何产品或其使用结果均按“原样”和“可用”提供,无任何形式的保证,无任何故障和缺陷。在适用法律允许的最大范围内,CERTIK特此放弃所有与服务、评估报告或其他材料相关的明示、暗示、法定或其他担保。在不限制前述内容的情况下,CERTIK明确否认对适销性、特定用途适用性、所有权和不侵权的所有暗示担保,以及因交易过程、使用或贸易实践而产生的所有担保。在不限制前述内容的情况下,CERTIK不对服务、标签、评估报告、工作产品或其他材料,或任何产品或其使用结果满足客户或任何其他人的要求,实现任何预期结果,与任何软件、系统或其他服务兼容或工作,或安全、准确、完整、无有害代码或无错误做出任何保证。在不限制前述内容的情况下,CERTIK不提供任何保证或承诺,也不作出任何形式的陈述,即服务将满足客户的要求、实现任何预期结果、与任何其他软件、应用程序、系统或服务兼容或工作、不间断运行、满足任何性能或可靠性标准、无错误或任何错误或缺陷能够或将要得到纠正。

在不限制前述内容的情况下,CERTIK或CERTIK的任何代理人均不对通过服务提供的任何信息或内容的准确性、可靠性或流通性做出任何明示或暗示的陈述或保证。CERTIK不对(I)内容和材料的任何错误、差错或不准确,或因使用任何内容而导致的任何损失或损害,或(II)因客户获得或使用服务、评估报告或其他材料而导致的任何性质的任何人身伤害或财产损害承担任何责任。

所有第三方材料均按“原样”提供,任何关于第三方材料的陈述或保证严格属于客户和第三方材料的第三方所有人或经销商之间。

本协议项下的服务、评估报告和任何其他材料仅提供给客户,任何其他人不得依赖,也不得用于本协议中未明确指明的任何目的,未经CERTIK事先书面同意,不得将副本交付给任何其他人。


任何第三方或代表任何第三方行事的任何人都不得成为此类服务、评估报告和任何随附材料的第三方或其他受益人,此类第三方也不得享有针对此类服务、评估报告和任何随附材料的证书的任何出资权利。

本协议中包含的证书陈述和保证完全是为了客户的利益。因此,任何第三方或代表任何第三方行事的任何人都不得成为此类陈述和保证的第三方或其他受益人,并且任何此类第三方都不得就此类陈述或保证或任何根据本协议或其他协议应获得或导致赔偿的事项享有任何针对CERTIK的出资权利。

为避免疑问,不得将服务(包括任何相关评估报告或材料)视为或依赖于任何形式的财务、税务、法律、监管或其他建议。


关于

CertiK由耶鲁大学和哥伦比亚大学计算机科学领域的顶尖学者于2017年创立,是一家领先的区块链安全公司,旨在验证智能合同和基于区块链的协议的安全性和正确性。通过利用我们世界一流的技术专业知识,以及我们专有的创新技术,我们能够以一流的安全性支持客户的成功,同时实现我们的总体愿景;对区块链所有方面的信任是可以证明的。




免责声明:本文仅为信息传播之用,不代表任何观点,不构成任何投资建议。部分文章及图片、视频来自网络,如有版权方面的疑问请和我们联系,我们将在24小时内删除!




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存