使用 Wake Printer 脚本自动化 Solidity 审计

加密货币 互联网
欧易

欧易OKX交易所

全球三大交易所之一,注册领取价值6,0000元数字货币盲盒

APP下载    官网注册
使用 Wake Printer 脚本自动化 Solidity 审计

前提条件和设置OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

在本教程中,我们将使用 workshop 仓库作为示例项目:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

wake upOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

BashOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

wake printOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

BashOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

按名称运行特定的打印机:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

教程 1:创建你的第一个打印机 – 列出合约OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

让我们从一个简单的打印机开始,它列出项目中的所有合约。此示例介绍了你将在更复杂的分析中使用的核心概念。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

创建打印机结构OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

运行以下命令来搭建你的第一个打印机:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

from __future__ import annotationsimport networkx as nximport rich_click as clickimport wake.ir as irimport wake.ir.types as typesfrom rich importprintfrom wake.cli import SolidityNamefrom wake.printers import Printer, printerclass ListContractsPrinter(Printer):def print(self) -> None:pass    @printer.command(name="list-contracts")def cli(self) -> None:passOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

PythonOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

以下是模板中每个部分的作用:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

  • print():显示分析结果的主要执行方法OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

  • cli():用于自定义参数的命令行界面处理程序OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

实现访问者模式OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

Wake 使用访问者模式来遍历合约的抽象语法树 (AST)。访问者模式允许 Wake 自动导航你的代码结构,使你能够对特定元素(例如合约或函数定义)做出反应。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

要列出合约,我们将覆盖 visit_contract_definition 方法,该方法会为代码库中的每个合约调用。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

将此方法添加到你的 ListContractsPrinter 类:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

wake print list-contractsOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

BashOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

此命令运行你的打印机并打印在你的项目中找到的所有合约名称。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

改进输出OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

基本实现显示所有合约,包括接口和继承的合约。让我们改进它以仅显示可部署的合约:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

def visit_contract_definition(self, node: ir.ContractDefinition) -> None:iflen(node.child_contracts) != 0:returnif node.kind != ir.enums.ContractKind.CONTRACT:returnprint(node.name)OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

PythonOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

ContractDefinition 类包含可用于过滤结果的属性。有关完整参考,请参见:https://ackee.xyz/wake/docs/latest/api-reference/ir/declarations/contract-definition/OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

完整实现OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

这是最终版本,具有适当的关注点分离——在遍历期间收集数据并在 print() 方法中显示它:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

教程 2:分析合约函数OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

了解哪些函数可从外部调用对于安全至关重要:公共 'withdraw' 或 'transfer' 函数通常定义了合约的攻击面。让我们创建一个打印机,通过列出所有公共和外部函数来绘制攻击面。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

设置函数打印机

创建一个新的打印机:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

class ListFunctionsPrinter(Printer):    contracts: list[ir.ContractDefinition] = []def visit_contract_definition(self, node: ir.ContractDefinition) -> None:        self.contracts.append(node)

PythonOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

处理继承层次结构

在 print() 方法中,我们遍历从基合约到派生合约的继承层次结构,显示每个级别的可调用函数:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

def get_callable_final_functions(self, contract: ir.ContractDefinition) -> list[ir.FunctionDefinition]:return [\            func for func in contract.functions\iflen(func.child_functions) == 0# 是最终实现\and func.visibility in [ir.enums.Visibility.PUBLIC, ir.enums.Visibility.EXTERNAL]\        ]

PythonOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

运行函数打印机

执行打印机以查看继承层次结构和可调用函数:OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

Contract: ContextContract: OwnableFunctions:  owner  renounceOwnership  transferOwnershipContract: SingleTokenVaultFunctions:  constructor  deposit  withdraw  emergencyWithdraw  balanceOf  setDepositLimits--------------------Contract: EIP712ExampleFunctions:  constructor  DOMAIN_SEPARATOR  castVoteBySignature  getVoteCounts--------------------Contract: ContextContract: IERC20Contract: IERC20MetadataContract: IERC20ErrorsContract: ERC20Functions:  name  symbol  decimals  totalSupply  balanceOf  transfer  allowance  approve  transferFromContract: IERC20PermitContract: IERC5267Contract: EIP712Functions:  eip712DomainContract: NoncesContract: ERC20PermitFunctions:  permit  nonces  DOMAIN_SEPARATORContract: PermitTokenFunctions:  constructor--------------------Contract: TokenFunctions:  constructor  mintTokens  transfer  transferWithBytes  getBalance--------------------Contract: ContextContract: IERC20Contract: IERC20MetadataContract: IERC20ErrorsContract: ERC20Functions:  name  symbol  decimals  totalSupply  balanceOf  transfer  allowance  approve  transferFromContract: MockERC20Functions:  constructor--------------------

BashOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

输出为你提供每个合约的继承和可调用入口点的快速可视化地图。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

@printer.command(name="list-functions")@click.option("--contract-name", type=str, required=False)def cli(self, contract_name: str | None) -> None:    self.contract_name = contract_name

PythonOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

条件过滤逻辑OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

print() 方法现在检查是否请求了特定的合约。如果没有提供合约名称,则打印机将列出所有可部署的合约。如果指定了名称,它将仅深入到该合约的层次结构中,即使它不是叶子合约也是如此。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

完整实现与 CLI 选项OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

这是带有可选合约过滤功能的最终打印机。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

## 分析所有可部署的合约wake print list-functions## 专注于特定的合约wake print list-functions --contract-name TokenOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

BashOcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

复制OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

后续步骤OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

打印机为你提供地图;检测器查找漏洞。它们共同将 Solidity 审计从手动苦力转变为结构化、有洞察力的过程。你编写的每个打印机都可以使复杂的代码更清晰——并增强你审查的智能合约的安全性。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

对于漏洞检测,Wake 提供了一个单独的检测器系统,该系统超越了可视化来识别实际的安全问题。打印机为你提供地图;检测器查找问题。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

考虑将你的打印机贡献回社区。分析工具在共享时最强大,你的自定义打印机可能会帮助其他审计员更有效地理解复杂的代码库。OcP比特币学堂 - 比特币加密货币圈新手入门基础知识学习教程

最新区块链知识
山寨币网络上发生令人担忧的事件:开发者发表声明

山寨币网络上发生令人担忧的事件:开发者发表声明

Injective发布声明,说明其生态系统内部分验证节点因网络加速更新而暂时停用。该项目表示,Injective区块链并未遭受攻击,用户资金安全无虞。根据 Injective 的声明,社区贡献者昨

0阅读
知名分析师:“那些声称比特币会在此日期前创下历史新高的人都是在撒谎”

知名分析师:“那些声称比特币会在此日期前创下历史新高的人都是在撒谎”

加密货币分析师 Sherlock 认为,根据比特币的历史价格周期,新的历史最高点 (ATH) 可能要到 2027 年 6 月才会出现。根据Sherlock的评估,比特币已经329天没有突破2025年10月6日创

0阅读
随着比特币(Btc)价格回调,恐慌与贪婪指数也开始下降!详情如下。

随着比特币(Btc)价格回调,恐慌与贪婪指数也开始下降!详情如下。

尽管市场情绪略有下滑,但 CoinMarketCap 的加密货币恐惧与贪婪指数仍维持在“贪婪”区域。该指数较昨日下跌 2 点至 73。该指数用于衡量加密货币市场的投资者情绪。数值越接

0阅读
美国证券交易委员会发布关于加密货币的积极官方公告!

美国证券交易委员会发布关于加密货币的积极官方公告!

美国证券交易委员会(SEC)宣布了一项新的规则变更提案,旨在更新沿用数十年的注册过户代理机构相关法规。该法规力求在现有规则框架内,更清晰地反映证券发行和股份转让过程中电子

0阅读
最近最热门的话题是 Robinhood Chain,哪些山寨币与之关联?

最近最热门的话题是 Robinhood Chain,哪些山寨币与之关联?

Robinhood 的生态系统围绕其自主开发的二层网络 Robinhood Chain 构建,正在加密货币市场开创新的局面。近期,Lighter (LIT)、Morpho (MORPHO)、Uni wap (UNI)、LayerZero (ZRO

0阅读
美联储高级成员巴尔发表了有关利率的声明,加密货币不会喜欢这种利率。

美联储高级成员巴尔发表了有关利率的声明,加密货币不会喜欢这种利率。

美联储理事迈克尔·巴尔表示,如果通胀没有充分下降,他准备支持加息。巴尔在华盛顿的一个银行业论坛上发表讲话时表示,通胀率连续近五年半高于美联储 2% 的目标,增加了经济中更广

0阅读
Strategy Ceo就牛市发表了声明,称他们没有出售比特币的计划!以下是详情。

Strategy Ceo就牛市发表了声明,称他们没有出售比特币的计划!以下是详情。

Strategy首席执行官Phong Le表示,比特币正进入强劲的牛市,公司没有出售其比特币持仓的计划。Le在接受彭博社采访时表示,Strategy将继续其比特币增持策略,即使价格上涨,也可能继续

0阅读
突发新闻:Coinbase 出人意料地决定上线山寨币!

突发新闻:Coinbase 出人意料地决定上线山寨币!

/* cu tom c */.tdb_ ingle_featured_image{ margin-bottom: 26px; }.tdb_ ingle_featured_image.tdb- fi- tretch{ o

0阅读
比特币在九月份表现如何?以下是您需要了解的信息。

比特币在九月份表现如何?以下是您需要了解的信息。

比特币(BTC)在历来表现疲软的9月伊始便出现下跌。9月1日,比特币价格跌破78,000美元,短期前景面临压力,这既受季节性因素影响,也受到美联储利率政策预期的影响。由于比特币在加密货

0阅读
币安创始人赵长鹏宣布,加密货币行业已经度过了历史上最严峻的“加密寒冬”!以下是详情。

币安创始人赵长鹏宣布,加密货币行业已经度过了历史上最严峻的“加密寒冬”!以下是详情。

/* cu tom c */.tdb_ ingle_featured_image{ margin-bottom: 26px; }.tdb_ ingle_featured_image.tdb- fi- tretch{ o

0阅读
猜你感兴趣
Bitget Ceo就黑客事件发表最新声明!提款重新开放日期公布。

Bitget Ceo就黑客事件发表最新声明!提款重新开放日期公布。

加密货币交易所Bitget在安全事件发生后上调了已确认的损失金额。Bitget首席执行官陈嘉琪表示,攻击已被完全控制,不会再发生未经授权的资产转移。据陈先生称,已确认转移至攻击者

99阅读
突发新闻:Bitget黑客事件仍在继续——最新进展!

突发新闻:Bitget黑客事件仍在继续——最新进展!

据称属于加密货币交易所 Bitget 的钱包出现异常活动,引发了人们对可能遭受黑客攻击的怀疑。链上数据显示,高价值资产正从该交易所的热钱包和冷钱包中转移,其中相当一部分资金被

98阅读
比特币价格怎么查询?BTC实时价格、涨跌幅和市值怎么看

比特币价格怎么查询?BTC实时价格、涨跌幅和市值怎么看

比特币价格可以通过提供BTC实时行情的数据平台、金融终端或合规交易服务查询。由于比特币在全球多个市场全天候交易,不同平台的价格可能存在小幅差异,因此查询时应同时核对计价货币、数据来源、更新时间和成交量。对于普通读者来说,只看

97阅读
突发新闻:Bitget 疑似遭遇重大黑客攻击!

突发新闻:Bitget 疑似遭遇重大黑客攻击!

有指控称,加密货币交易所Bitget的链上出现了异常活动。据称,事件规模超过1亿美元。虽然一些用户报告称提现被阻止,但高价值资产转移似乎已从标记为属于 Bitget 的热钱包和冷钱

96阅读
比特币的关键时期即将到来:Btc 即将进入牛市!历史会重演吗?以下是相关数据……

比特币的关键时期即将到来:Btc 即将进入牛市!历史会重演吗?以下是相关数据……

自7月以来,领先的加密货币比特币一直处于上涨趋势。目前,比特币在7月和8月均收涨,并有望在9月继续保持上涨势头。如果9月底比特币价格上涨,这将标志着比特币在7月至9月期间连续

94阅读
这波山寨币浪潮席卷市场!中国创始人将其与比特币相提并论,并宣布 Grayscale 已达到里程碑!详情如下……

这波山寨币浪潮席卷市场!中国创始人将其与比特币相提并论,并宣布 Grayscale 已达到里程碑!详情如下……

随着比特币和山寨币牛市持续,Zca h (ZEC) 凭借其强劲的表现,已成为加密货币市场中的佼佼者。Zca h 的上涨伴随着流入 Gray cale 旗下 Zca h ETF (ZCSH) 的资金增加,以及人们对

93阅读