-
bitcoin $99347.807739 USD
-2.86% -
ethereum $3203.978559 USD
-7.01% -
tether $0.999574 USD
-0.03% -
xrp $2.312891 USD
-3.91% -
bnb $923.603745 USD
-3.61% -
solana $144.300150 USD
-5.83% -
usd-coin $0.999777 USD
0.00% -
tron $0.291709 USD
-1.12% -
dogecoin $0.163944 USD
-4.47% -
cardano $0.527606 USD
-4.34% -
hyperliquid $37.902246 USD
-2.25% -
bitcoin-cash $510.873381 USD
-1.11% -
chainlink $14.463765 USD
-5.58% -
stellar $0.267764 USD
-4.73% -
unus-sed-leo $9.176303 USD
0.54%
合约中的后备和接收函数的目的是什么?
Ethereum's fallback and receive functions handle unexpected transactions and plain Ether transfers, ensuring contracts respond securely and efficiently to all incoming calls.
2025/11/11 03:59
回退和接收函数:以太坊智能合约的核心机制
以太坊区块链上的智能合约旨在通过函数调用与外部账户和其他合约进行交互。然而,在某些情况下,合约会在没有指定函数调用的情况下接收以太币。这就是后备和接收函数发挥作用的地方。这些特殊函数管理意外或简单的以太传输,确保即使没有调用目标函数,合约也能做出适当的响应。
处理意外的交互
当合约收到与其定义的任何函数都不匹配的交易时,回退函数将充当默认处理程序。它在各种条件下执行,特别是当有人发送以太币以及无效或没有呼叫数据时。该函数的行为随着 Solidity 版本的发展而演变,特别是在版本 0.6.0 中引入专用接收函数之后。
- 当合约收到对不存在函数的调用时,回退函数就会运行。
- 当使用空呼叫数据发送 Ether 并且不存在接收功能时,也会触发它。
- 如果回退函数和接收函数都存在,则接收函数处理普通的以太传输。
- 当数据包含在事务中但与任何函数签名不匹配时,回退保留控制权。
- 如果没有任何一个功能,将以太币发送到合约将会失败,除非它被标记为应付。
区分回退和接收
这两个功能之间的分离提高了合约设计的清晰度和安全性。开发人员现在拥有不同的工具来根据数据是否伴随交易来处理价值转移。
- 接收功能专门针对没有关联数据的以太网接收进行了优化。
- 它必须声明为外部且可支付,并且每个合约只能存在一个这样的函数。
- 回退函数可以执行更复杂的逻辑,包括解码传入的数据有效负载。
- 当事务包含数据时,即使数据很少,后备功能也优先于接收。
- 结构良好的合约使用接收来进行简单的存款,并使用回退来进行交互路由或日志记录。
安全和实际用例
这些功能不仅仅是技术形式——它们在现实世界的应用中发挥着至关重要的作用,从去中心化交易所到 NFT 铸造平台。配置错误可能会导致资金损失或可利用的切入点。
- 接受直接付款的合约通常会实施接收功能来简化存款。
- 代理模式使用后备函数将调用委托给实现合约。
- 恶意行为者可能会利用安全性较差的后备措施来迫使以太币进入合约,从而破坏依赖于平衡的逻辑。
- 开发人员必须确保回退逻辑消耗最少的 Gas,以避免在代币分发等事件期间交易失败。
- 这些函数中的可见性控制和访问限制有助于防止意外的执行路径。
常见问题解答
合约可以同时具有后备功能和接收功能吗?是的,合同可以定义两者。接收函数处理普通的以太传输(空调用数据),而后备函数则管理所有其他不匹配的调用,包括那些带有数据的调用。
如果合同缺少应付回退或接收功能会发生什么?任何将以太币直接发送到此类合约的尝试都将恢复。除非合约继承或实现接受价值的机制,否则交易将失败。
为什么Solidity 0.6.0中引入了接收函数?它被添加到单独的关注点:与通用函数调用不同地处理简单的以太传输。这减少了歧义,并防止开发人员意外地将复杂的逻辑放入本应简单的存款处理程序中。
可以使用后备功能来升级代理合约吗?在委托代理模式中,后备函数将低级调用转发给实现合约。这可以通过重定向执行来实现升级,同时保持相同的存储和地址。
免责声明:info@kdj.com
所提供的信息并非交易建议。根据本文提供的信息进行的任何投资,kdj.com不承担任何责任。加密货币具有高波动性,强烈建议您深入研究后,谨慎投资!
如您认为本网站上使用的内容侵犯了您的版权,请立即联系我们(info@kdj.com),我们将及时删除。
- Vitalik Buterin、零知识证明和白名单:不信任加密货币的新时代?
- 2025-11-14 09:00:01
- 聚光灯下的加密货币:零知识证明、狗狗币和潮流的转变
- 2025-11-14 08:45:01
- 质押平台和加密货币收入:$NNZ 硬币是下一个大事件吗?
- 2025-11-14 09:20:01
- Avalanche 的 SIERRA 代币:收益模型的新时代?
- 2025-11-14 09:05:01
- 比特币跌破 10 万美元:多头头寸清算,下一步是什么?
- 2025-11-14 09:40:01
- Dromos Labs 的 Aero:统一 L2 DEX 以统治 DeFi
- 2025-11-14 10:20:01
相关百科
什么是智能合约中的拒绝服务 (DoS) 攻击?其常见形式有哪些?
2025-11-10 05:20:08
了解智能合约中的拒绝服务1. 智能合约中的拒绝服务(DoS)攻击是指恶意行为者阻止合法用户访问或使用合约功能的情况。这通常是通过利用允许攻击者阻止关键操作的设计缺陷来实现的。与针对 Web 服务器的传统 DoS 攻击不同,基于区块链的 DoS 攻击利用了智能合约的不可变和透明特性。 2. 这些攻击的...
交易签名中使用的加密随机数是什么?
2025-11-11 05:59:39
了解区块链交易中的加密随机数1. 加密随机数是在区块链网络中的交易签名上下文中仅使用一次的随机数或伪随机数。其主要功能是确保每笔交易都是唯一的并且不会被恶意行为者重播。如果没有随机数,相同的交易可能会被多次提交,从而导致意外的转账或余额差异。 2. 在以太坊等系统中,随机数直接与发送者的帐户绑定,并...
Solidity 智能合约中的继承是如何工作的?
2025-11-11 22:40:12
Solidity 的继承:构建模块化智能合约1. Solidity 中的继承允许一个合约采用另一个合约的属性和功能,从而实现代码重用和结构化设计。派生合约可以从基础合约继承,获得对其状态变量、函数和修饰符的访问权限,前提是它们没有标记为私有。该机制支持逻辑的分层组织,减少多个合约之间的冗余。 2. ...
外部拥有账户 (EOA) 和合约账户有什么区别?
2025-11-13 04:00:32
了解外部拥有账户 (EOA) 1. 外部拥有的账户由私钥直接控制,这意味着只有该密钥的持有者才能从该账户发起交易。 EOA 没有任何关联代码;它们是用于在区块链上发送和接收交易的简单地址。这些帐户通常是在用户使用 MetaMask 或 Ledger 等工具生成钱包时创建的,从而产生公共地址和相应的私...
什么是 ERC-2981 NFT 版税标准以及它如何运作?
2025-11-13 05:39:54
了解 ERC-2981 NFT 版税标准1. ERC-2981 标准是一项拟议的以太坊征求意见稿,它引入了非同质代币 (NFT) 的版税机制。与 ERC-721 和 ERC-1155 等早期 NFT 标准缺乏对版税的内置支持不同,ERC-2981 使创作者每次 NFT 在二级市场转售时都能获得补偿。...
什么是最小代理合约 (EIP-1167) 以及它如何在部署时节省 Gas?
2025-11-12 11:39:42
什么是最小代理合同 (EIP-1167)? 1. 最小代理合约,根据以太坊改进提案 (EIP) 1167 进行标准化,是一种轻量级合约,旨在将调用委托给现有的实施合约。它充当代理,将所有函数调用和交易转发到主合约,而无需在其内部存储逻辑。 2. 核心机制依赖于低级SUCCESS、RETURNDATA...
什么是智能合约中的拒绝服务 (DoS) 攻击?其常见形式有哪些?
2025-11-10 05:20:08
了解智能合约中的拒绝服务1. 智能合约中的拒绝服务(DoS)攻击是指恶意行为者阻止合法用户访问或使用合约功能的情况。这通常是通过利用允许攻击者阻止关键操作的设计缺陷来实现的。与针对 Web 服务器的传统 DoS 攻击不同,基于区块链的 DoS 攻击利用了智能合约的不可变和透明特性。 2. 这些攻击的...
交易签名中使用的加密随机数是什么?
2025-11-11 05:59:39
了解区块链交易中的加密随机数1. 加密随机数是在区块链网络中的交易签名上下文中仅使用一次的随机数或伪随机数。其主要功能是确保每笔交易都是唯一的并且不会被恶意行为者重播。如果没有随机数,相同的交易可能会被多次提交,从而导致意外的转账或余额差异。 2. 在以太坊等系统中,随机数直接与发送者的帐户绑定,并...
Solidity 智能合约中的继承是如何工作的?
2025-11-11 22:40:12
Solidity 的继承:构建模块化智能合约1. Solidity 中的继承允许一个合约采用另一个合约的属性和功能,从而实现代码重用和结构化设计。派生合约可以从基础合约继承,获得对其状态变量、函数和修饰符的访问权限,前提是它们没有标记为私有。该机制支持逻辑的分层组织,减少多个合约之间的冗余。 2. ...
外部拥有账户 (EOA) 和合约账户有什么区别?
2025-11-13 04:00:32
了解外部拥有账户 (EOA) 1. 外部拥有的账户由私钥直接控制,这意味着只有该密钥的持有者才能从该账户发起交易。 EOA 没有任何关联代码;它们是用于在区块链上发送和接收交易的简单地址。这些帐户通常是在用户使用 MetaMask 或 Ledger 等工具生成钱包时创建的,从而产生公共地址和相应的私...
什么是 ERC-2981 NFT 版税标准以及它如何运作?
2025-11-13 05:39:54
了解 ERC-2981 NFT 版税标准1. ERC-2981 标准是一项拟议的以太坊征求意见稿,它引入了非同质代币 (NFT) 的版税机制。与 ERC-721 和 ERC-1155 等早期 NFT 标准缺乏对版税的内置支持不同,ERC-2981 使创作者每次 NFT 在二级市场转售时都能获得补偿。...
什么是最小代理合约 (EIP-1167) 以及它如何在部署时节省 Gas?
2025-11-12 11:39:42
什么是最小代理合同 (EIP-1167)? 1. 最小代理合约,根据以太坊改进提案 (EIP) 1167 进行标准化,是一种轻量级合约,旨在将调用委托给现有的实施合约。它充当代理,将所有函数调用和交易转发到主合约,而无需在其内部存储逻辑。 2. 核心机制依赖于低级SUCCESS、RETURNDATA...
查看所有文章














