{ 跳至内容 }

{Solidity:​log}

全部解释器文章

深入了解 Via-IR

发布者:Solidity 团队 于 2024 年 7 月 12 日

解释器

在当前的默认设置下,Solidity 编译器不会将代码转换为任何中间表示(IR)以生成 EVM 字节码,而是直接进行。但是,有一个最近开发的 via-IR 编译管道,它使用 Yul 编程语言作为中间表示。从高层次来看,这两个管道的编译步骤如下所示:compilation-pipelines 在这篇博文中,我们将更深入地了解 via-IR 的细节,了解…

阅读更多

Solidity 0.8.24 中的瞬态存储操作码

发布者:Solidity 团队 于 2024 年 1 月 26 日

解释器

Solidity 0.8.24 支持即将推出的 Cancun 硬分叉中包含的操作码,特别是根据 EIP-1153 的瞬态存储操作码 TSTORE 和 TLOAD。瞬态存储是 EVM 层面上的一个期待已久的功能,它引入了除内存、存储、calldata(以及返回值和代码)之外的另一个数据位置。新的数据位置的行为类似于存储的键值存储,主要区别在于瞬态存储中的数据不是永久性的,而是仅限于当前事务,之后…

阅读更多

功能深度解析:用户定义运算符

发布者:Kamil Śliwak、Matheus Aguiar 于 2023 年 2 月 22 日

解释器

Solidity 0.8.19 版本的亮点是支持在用户定义值类型 (UDVT) 上定义运算符。如果您没有关注最近的功能,UDVT 是 Solidity 0.8.8 中引入的一类新类型。它们提供了一个基本值类型的抽象,从而产生一个全新的类型。这类似于创建别名,但新类型与底层值类型和从该底层类型派生的所有其他 UDVT 不同。使用运算符的能力…

阅读更多

Solidity 中的用户定义值类型

发布者:Solidity 团队 于 2021 年 9 月 27 日

解释器

Solidity v0.8.8 引入了用户定义值类型,作为一种在基本值类型上创建零成本抽象的方法,同时提高类型安全性并改进可读性。动机原始值类型的问题在于它们不够描述性:它们只指定了数据的存储方式,而不是如何解释数据。例如,人们可能希望使用 uint128 来存储某个对象的价钱以及可用的数量。拥有更严格的类型规则以避免…非常有用。

阅读更多

Solidity 相关域名发生了什么?

发布者:Franziska Heintel 于 2021 年 5 月 3 日

解释器

一段时间前,我们决定获取一个 Solidity 团队可以轻松访问的域名,以便简化之前托管在其他域名上的工作和计划。因此,soliditylang.org 诞生了!🎉 我们在 Twitter 上单独宣布了大多数这些域名更改,但我们想借此机会在博客上正式宣布它,并解释我们现在拥有的各种子域名,它们的用途以及将来可能弃用的旧域名。简而言之,…

阅读更多

Solidity 中的自定义错误

发布者:Solidity 团队 于 2021 年 4 月 21 日

解释器

从 Solidity v0.8.4 开始,有一种方便且节省 gas 的方法可以通过使用自定义错误来向用户解释操作失败的原因。到目前为止,您已经可以使用字符串来提供有关失败的更多信息(例如,revert("Insufficient funds.");),但它们相当昂贵,尤其是在部署成本方面,并且难以在其中使用动态信息。自定义错误是使用 error 语句定义的,该语句可以在合约内部和外部使用(包括接口和库)。示例以下合约…

阅读更多

通过简单的内联节省 Gas

发布者:Christian Reitwiessner 于 2021 年 3 月 2 日

解释器

Solidity v0.8.2 向 Solidity 的低级优化器添加了一个简单的内联器。在这篇文章中,我们将检查它的工作原理,并了解与优化器其他步骤的协同作用。低级内联器低级内联器是 Solidity 编译器低级优化器的一个组件。为了节省 gas,它可以内联不包含控制流分支或具有副作用的操作码的短函数。是否内联的决定是基于权衡参数“运行”:组合的代码存款成本和执行…

阅读更多

Solidity 贡献 101

发布者:Franziska Heintel 于 2021 年 2 月 15 日

解释器

Solidity 编程语言是一个由核心团队管理的开源项目。我们依靠社区的反馈、意见和贡献,使该语言尽可能有效、安全和有用。在这篇文章中,我们将引导您了解如何参与为 Solidity 做出贡献的各种不同方法!如果您在阅读完帖子后有任何不清楚的地方,请随时与我们联系。贡献机会概述您可以通过多种方式为…做出贡献。

阅读更多

Solidity 模糊测试方法简介

发布者:Bhargava Shastry 于 2021 年 2 月 10 日

解释器

安全漏洞和错误会降低软件质量。为了尽早发现它们,最好是在发布之前,我们采用了模糊测试:向 Solidity 编译器提供随机生成的程序,并观察生成的编译运行时和代码。自 2019 年第一季度以来,Solidity 编译器通过 Google 的开源软件模糊(oss-fuzz)框架进行模糊测试。在这篇文章中,我们简要介绍了在这方面已经完成的工作以及目前正在进行的工作。模糊器概述广义地说,我们开发了两个…

阅读更多

关于 Sourcify 的所有你需要知道的

发布者:Franziska Heintel 于 2020 年 6 月 25 日

解释器

欢迎阅读 Sourcify 的第一个简短 FAQ!如果您在阅读完这篇文章后,您对源代码验证的问题仍未得到解答,请随时访问 Sourcify Gitter 频道并向我们提出任何问题。敬请关注更多教程和面向开发人员的内容,这些内容将在此处和 Remix 博客上发布!源代码验证什么是源代码验证?Solidity 合约源代码可以通过检查链上部署的代码是否与已发布的源代码文件匹配来进行验证。为了允许源…

阅读更多

Solidity 0.6.x 特性:继承

发布者:Elena Gesheva 于 2020 年 6 月 18 日

解释器

类似于 Solidity 中的面向对象编程 - 一种面向合约的语言 - 继承和多态特性被广泛采用,对于语言发展至关重要。几乎每个 Solidity 开发人员都在他们的合约中使用过这些语言特性来解耦逻辑并提高代码重用率。在语言的 0.6 版本中,引入的主要改进是将现有规则明确化,此外还引入了接口继承并禁止危险的状态变量隐藏。编译器继续…

阅读更多

Solidity 0.6.x 特性:数组切片

发布者:Solidity 团队 于 2020 年 5 月 26 日

解释器

从 0.6.0 版本开始,Solidity 支持数组切片。当您想要引用数组的连续部分但不想执行该部分的完整副本时,数组切片非常方便。目前,数组切片仅支持 calldata 数组。如何使用数组切片表达式 x[start:end] 引用 calldata 数组 x 的一部分,从索引 start 开始,到索引 end 之前结束。start 和 end 都是可选的。如果未提供,start 默认为 0,end 默认为…

阅读更多

Solidity 0.6.x 特性:使用不变性节省存储成本

发布者:Daniel Kirchner 于 2020 年 5 月 13 日

解释器

在 0.6.5 版本中,Solidity 引入了 immutable 关键字用于状态变量。不变的状态变量只能在合约创建期间赋值,但在部署合约的整个生命周期内将保持不变。不变性的最大优势在于读取它们比读取常规状态变量便宜得多,因为不变性不会存储在存储中,而是它们的值将直接插入到运行时代码中。如何使用不变性可以使用 immutable 关键字声明不变的状态变量。它们不能被读取…

阅读更多

Solidity 0.6.x 特性:回退和接收函数

发布者:Elena Gesheva 于 2020 年 3 月 26 日

解释器

在 0.6.x 之前的 Solidity 版本中,开发人员通常使用回退函数来处理两种情况下的逻辑:合约收到以太坊且没有数据合约收到数据但没有函数与调用的函数匹配0.6.x 之前回退函数的主要用例是接收以太坊并对其做出反应,这是一种由令牌风格合约使用的典型模式,用于拒绝转账、发出事件或转发以太坊。当合约在没有任何数据的情况下被调用时,例如通过 .send() 或 .transfer() 函数,该函数就会执行。0.5.x 语法…

阅读更多

Solidity 0.6.x 特性:try/catch 语句

发布者:Elena Gesheva 于 2020 年 1 月 29 日

解释器

这篇文章最初发布在以太坊博客上。在 0.6.0 中引入的 try/catch 语法可以说是 Solidity 中错误处理能力的巨大飞跃,因为 revert 和 require 的原因字符串是在 v0.4.22 中发布的。try 和 catch 自 v0.5.9 起都是保留关键字,现在我们可以使用它们来处理外部函数调用中的故障,而无需回滚整个事务(被调用函数中的状态更改仍然会回滚,但…中的状态更改不会回滚)。

阅读更多

参与进来

GitHub

Twitter

Mastodon

Matrix

了解更多

博客文档使用案例贡献关于论坛

2024Solidity团队

安全策略

行为准则