市值: $2.2269T 1.08%
成交额(24h): $51.7314B 36.39%
恐惧与贪婪指数:

39 - 恐惧

  • 市值: $2.2269T 1.08%
  • 成交额(24h): $51.7314B 36.39%
  • 恐惧与贪婪指数:
  • 市值: $2.2269T 1.08%
加密货币
话题
百科
资讯
加密话题
视频
热门加密百科

选择语种

选择语种

选择货币

加密货币
话题
百科
资讯
加密话题
视频

Solidity 中的公共函数、私有函数、内部函数和外部函数有什么区别?

Solidity's function visibility specifiers—public, private, internal, and external—control access to functions, impacting security, inheritance, and gas costs in smart contracts.

2025/11/20 22:39

了解 Solidity 中的函数可见性

Solidity 是以太坊智能合约的主要编程语言,通过函数可见性说明符强制执行严格的访问控制。这些说明符决定谁可以调用函数——无论是来自合约内部、派生合约还是外部。四种类型——公共、私有、内部和外部——定义了可访问性的范围,并在保护合约逻辑方面发挥着至关重要的作用。

公共职能

1. 公共函数可以从任何地方访问——合约内部、派生合约以及通过交易或调用外部。

2. 当一个函数被标记为public时,如果它是一个状态变量或者允许通过合约接口直接调用,Solidity会自动生成一个getter函数。

3. 这些函数成为合约 ABI(应用程序二进制接口)的一部分,使其可由钱包、dApp 和其他智能合约调用。

4. 由于外部调用开销和数据编码要求,公共功能的 Gas 成本可能会更高。

5. 常见用例包括面向用户的功能,例如 ERC-20 合约中的代币转移或余额检查。

私人职能

1. 私有函数只能在同一个合约内调用,派生合约或外部实体完全无法访问。

2. 它们非常适合封装不应公开或覆盖的敏感逻辑。

3. 由于私有函数不是外部接口的一部分,因此不会出现在 ABI 中。

4. 开发人员经常将它们用于支持公共或内部操作的内部验证、散列或清理例程。

5. 尽管是私有的,但他们的代码在链上仍然可见;隐私仅指执行访问,而不是源隐藏。

内部功能

1. 内部函数可以在定义合约和继承它的任何合约中访问。

2. 它们不能被外部账户或不相关的合约直接调用,即使通过基于地址的交互也是如此。

3. 继承层次结构严重依赖内部函数来共享可重用逻辑,而无需将其公开。

4. 与私有函数一样,它们不会对合约的外部 ABI 做出贡献。

5. 示例包括 OpenZeppelin 的 SafeMath 库中的实用程序函数或跨多个方法强制执行前提条件的修饰符。

外部函数

1. 外部函数只能从合约外部调用——要么通过另一个合约,要么通过 EOA(外部拥有账户)。

2. 即使合约本身也必须使用this.functionName()语法来调用自己的外部函数,这会产生消息调用开销。

3. 当您想要确保函数永远不会在内部执行时,这种可见性非常有用,从而促进模块化并减少gas滥用。

4. 外部函数包含在 ABI 中,可以通过交易或合约到合约调用来调用。

5. 它们通常用于大数据输入,因为 calldata(由外部函数使用)避免了与内部调用相关的内存复制成本。

常见问题解答

可以在派生合约中重写私有函数吗?不可以,私有函数不能被派生合约访问或覆盖。使用 virtual 和 override 关键字只能覆盖内部和公共函数。

如果我不指定可见性修饰符会发生什么?如果未指定可见性,Solidity 默认为函数的公开。对于状态变量,默认为内部变量。出于安全性和清晰度的原因,不鼓励依赖默认值。

内部函数调用和外部函数调用之间是否存在性能差异?是的。内部调用在相同的合约上下文中执行并使用最少的gas。外部调用,即使是自引用,也需要消息调用,由于堆栈隔离和 ABI 编码而增加了 Gas 消耗。

外部函数可以修改状态变量吗?是的,外部函数可以修改状态变量,除非受到 view 或 pure 等其他修饰符的限制。他们改变存储的能力取决于逻辑,而不是可见性。

免责声明:info@kdj.com

所提供的信息并非交易建议。根据本文提供的信息进行的任何投资,kdj.com不承担任何责任。加密货币具有高波动性,强烈建议您深入研究后,谨慎投资!

如您认为本网站上使用的内容侵犯了您的版权,请立即联系我们(info@kdj.com),我们将及时删除。

相关百科

AVAX 期货保证金要求是如何计算的?

AVAX 期货保证金要求是如何计算的?

2026-07-23 15:40:03

AVAX 期货保证金结构1. AVAX期货保证金由两个不同的部分组成:初始保证金和维持保证金。这些是根据当前市场价格、波动性、未平仓合约和合约规模实时计算的。 2. 初始保证金作为履约保证金,以弥补短期(通常是一个交易时段)内潜在的不利价格变动。它以头寸名义价值的百分比表示。 3. 维持保证金设置为...

ADA合约保证金率为何会触发警告?

ADA合约保证金率为何会触发警告?

2026-07-22 09:00:26

ADA 合约保证金比率机制1. 各大交易所的ADA永续合约采用根据持仓规模、杠杆水平和当前标记价格实时计算的动态保证金比例。 2. 保证金比率等于(钱包余额+未实现盈亏)除以维持保证金要求,以百分比表示。 3. 当该比率低于交易所定义的维持阈值(通常为 5% 至 10%,具体取决于杠杆率)时,系统将...

ADAUSDT永续合约资金费率是多少?

ADAUSDT永续合约资金费率是多少?

2026-07-24 20:19:46

ADAUSDT永续合约资金费率定义及目的1. ADAUSDT永续合约资金费率是卡尔达诺(ADA)与主要加密货币交易所Tether(USDT)衍生品头寸之间采用的定期费用兑换机制。 2. 作为价格锚定工具,确保ADAUSDT永续合约价格与基础ADA/USDT现货指数价格保持紧密一致。 3、与传统期货不...

TON永续交易建议使用多少杠杆?

TON永续交易建议使用多少杠杆?

2026-07-27 17:20:10

TON 永续交易机制1. TON永续合约在去中心化和中心化交易所运行,保证金模式各异。 2. 资金费率按小时计算,取决于现货价格和永续价格之间的基础,影响多头/空头成本动态。 3. 当维持保证金低于交易所定义的阈值(通常以头寸价值的百分比表示)时,就会触发强平。 4. TON 区块链的原生速度可实现...

TON 期货强平价格公式是什么?

TON 期货强平价格公式是什么?

2026-07-23 09:19:45

TON 期货强平机制1. 当交易者的保证金余额低于交易所设定的维持保证金要求时,TON 期货就会被清算。 2、保证金比例低于或等于100%时,系统自动触发强制平仓,计算公式为(可用保证金/所需保证金)×100%。 3. 强平价格不是固定的,它会随着市场走势、头寸规模、杠杆水平和资金费率的调整而动态变...

TONUSDT永续合约资金费率是多少?

TONUSDT永续合约资金费率是多少?

2026-07-27 02:39:50

定义和核心机制1. TONUSDT永续合约资金费率是专门适用于各大交易所交易的TON/USDT永续合约的定期费用兑换机制。 2. 作为价格锚定工具,防止TONUSDT永续市场价格与基础TON/USDT现货指数价格持续背离。 3. 费率每 8 小时计算一次,采用综合平均保费指数和利息成分的公式计算,通...

AVAX 期货保证金要求是如何计算的?

AVAX 期货保证金要求是如何计算的?

2026-07-23 15:40:03

AVAX 期货保证金结构1. AVAX期货保证金由两个不同的部分组成:初始保证金和维持保证金。这些是根据当前市场价格、波动性、未平仓合约和合约规模实时计算的。 2. 初始保证金作为履约保证金,以弥补短期(通常是一个交易时段)内潜在的不利价格变动。它以头寸名义价值的百分比表示。 3. 维持保证金设置为...

ADA合约保证金率为何会触发警告?

ADA合约保证金率为何会触发警告?

2026-07-22 09:00:26

ADA 合约保证金比率机制1. 各大交易所的ADA永续合约采用根据持仓规模、杠杆水平和当前标记价格实时计算的动态保证金比例。 2. 保证金比率等于(钱包余额+未实现盈亏)除以维持保证金要求,以百分比表示。 3. 当该比率低于交易所定义的维持阈值(通常为 5% 至 10%,具体取决于杠杆率)时,系统将...

ADAUSDT永续合约资金费率是多少?

ADAUSDT永续合约资金费率是多少?

2026-07-24 20:19:46

ADAUSDT永续合约资金费率定义及目的1. ADAUSDT永续合约资金费率是卡尔达诺(ADA)与主要加密货币交易所Tether(USDT)衍生品头寸之间采用的定期费用兑换机制。 2. 作为价格锚定工具,确保ADAUSDT永续合约价格与基础ADA/USDT现货指数价格保持紧密一致。 3、与传统期货不...

TON永续交易建议使用多少杠杆?

TON永续交易建议使用多少杠杆?

2026-07-27 17:20:10

TON 永续交易机制1. TON永续合约在去中心化和中心化交易所运行,保证金模式各异。 2. 资金费率按小时计算,取决于现货价格和永续价格之间的基础,影响多头/空头成本动态。 3. 当维持保证金低于交易所定义的阈值(通常以头寸价值的百分比表示)时,就会触发强平。 4. TON 区块链的原生速度可实现...

TON 期货强平价格公式是什么?

TON 期货强平价格公式是什么?

2026-07-23 09:19:45

TON 期货强平机制1. 当交易者的保证金余额低于交易所设定的维持保证金要求时,TON 期货就会被清算。 2、保证金比例低于或等于100%时,系统自动触发强制平仓,计算公式为(可用保证金/所需保证金)×100%。 3. 强平价格不是固定的,它会随着市场走势、头寸规模、杠杆水平和资金费率的调整而动态变...

TONUSDT永续合约资金费率是多少?

TONUSDT永续合约资金费率是多少?

2026-07-27 02:39:50

定义和核心机制1. TONUSDT永续合约资金费率是专门适用于各大交易所交易的TON/USDT永续合约的定期费用兑换机制。 2. 作为价格锚定工具,防止TONUSDT永续市场价格与基础TON/USDT现货指数价格持续背离。 3. 费率每 8 小时计算一次,采用综合平均保费指数和利息成分的公式计算,通...

查看所有文章

User not found or password invalid

Your input is correct