面试题手册

梳理高频技术问题,帮助你按主题复习和查漏补缺。

前端阅读 02月7日 00:05

Solidity中assert和require有什么区别?

在Solidity中,assert 和 require 用于处理错误和异常条件,但它们的用途和行为有明显差异:require: 通常用于输入验证或满足合约执行前的条件。如果 require 的条件失败,交易将被撤销,所有状态修改将被回滚,并退还剩余的gas。require 很适合用来检查外部条件(如函数参数值、合约状态等)。assert: 用于检查代码逻辑不应该发生的内部错误。通常,assert 用于检测合约内部状态的错误或不一致。如果 assert 的条件失败,同样会导致交易被撤销,所有状态修改被回滚。但与 require 不同的是,assert 失败将消耗所有提供的gas。简而言之,require 用于输入或条件检查,而 assert 用于确保代码逻辑在执行过程中的正确性。
前端阅读 02月7日 00:04

Solidity中的回退功能是什么?

在Solidity中,回退函数(Fallback Function)是一种特殊的函数,它没有名称、不接受任何参数也不返回任何值。这个函数会在合约接收到以太币(Ether)但没有匹配到其他任何函数时被调用,或者当调用的函数签名与合约中的任何已定义函数都不匹配时被触发。它通常用于直接接收以太币的转账或作为一个通用的异常处理器。在Solidity 0.6.x之后的版本,为了使合约代码更清晰和更安全,分成了两种类型的回退函数:接收函数(Receive function) - 专门用来处理纯ETH发送(不带任何数据的ETH转账)。这个函数必须用receive() external payable来声明。回退函数(Fallback function) - 如果没有匹配到接收函数,或者调用了不存在的函数,或者发送了ETH但调用包含数据,那么回退函数会被触发。这个函数是用fallback() external payable来声明的。这两个函数的存在提供了灵活性和安全性,使智能合约能够根据发送的是纯ETH还是带数据的ETH调用来适当地响应。
前端阅读 02月7日 00:03

Solidity中有多少种类型的库?

在Solidity中,库(Libraries)主要分为两类:函数库(Functional Libraries):这种类型的库包含了一系列的静态函数,可以在智能合约中被调用,但不能存储状态变量。函数库的目的是为了代码复用,例如常见的数学运算或数据结构操作。数据类型库(Data Type Libraries):这种类型的库对特定的数据类型提供扩展的功能,通常通过使用using for语法。这允许库中的函数作为目标类型的方法被调用,可以看作是向现有数据类型添加新的方法或属性。