Solidity-14-Conversions between Elementary Types
隐式转换 Implicit Conversions
在某些情况下,编译器会在赋值期间、将参数传递给函数以及应用运算符时自动应用隐式类型转换。
一般来说,如果在语义上有意义并且没有信息丢失,则值类型之间的隐式转换是可能的。
例如,uint8 可转换为 uint16,int128 可转换为 int256,但 int8 不可转换为 uint256,因为 uint256 不能保存 -1 等值。...
2022-05-22 01:22:02 |
Lang
Solidity-13-types Operators
Operators
即使两个操作数的类型不同,也可以应用算术和位运算符。
例如,您可以计算 y = x + z,其中 x 是 uint8,z 的类型为 int32。在这些情况下,将使用以下机制来确定计算运算的类型(这在溢出的情况下很重要)和运算符结果的类型:
如果右操作数的类型可以隐式转换为左操作数的类型,则使用左操作数的类型,
如果左操作数的类型可...
2022-05-22 01:22:02 |
Lang
Solidity-12-types Mapping Types
Mapping Types
映射类型使用语法映射(KeyType => ValueType),映射类型的变量使用语法映射(KeyType => ValueType)变量名声明。
KeyType 可以是任何内置值类型、字节、字符串或任何协定或枚举类型。不允许使用其他用户定义或复杂类型,例如映射、结构或数组类型。 ValueType 可以是任何类型,包括映射、数组和结构。
您可...
2022-05-22 01:22:02 |
Lang
Solidity-11-types Reference Types
Reference Types
引用类型的值可以通过多个不同的名称进行修改。
将此与值类型进行对比,只要使用值类型的变量,您就会获得一个独立的副本。
因此,必须比值类型更仔细地处理引用类型。
目前,引用类型包括结构、数组和映射。
如果使用引用类型,则始终必须显式提供存储类型的数据区域:内存(其生命周期仅限于外部函数调用),存储(存储状态变量的位置,生命周期所在的位置) 仅限于合约的...
2022-05-22 01:22:02 |
Lang
Solidity-10-types Value Types
Types
Solidity 是一种静态类型语言,这意味着需要指定每个变量(状态和本地)的类型。
Solidity 提供了几种基本类型,它们可以组合成复杂类型。
此外,类型可以在包含运算符的表达式中相互交互。
有关各种运算符的快速参考,请参阅运算符的优先顺序。
Solidity 中不存在“未定义”或“空”值的概念,但新声明的变量始终具有取决于其类型的默认值。
要处理任何意外值,您...
2022-05-22 01:22:02 |
Lang
Solidity-09-Structure of a Contract
Structure of a Contract
Solidity 中的契约类似于面向对象语言中的类。
每个合约都可以包含状态变量、函数、函数修饰符、事件、错误、结构类型和枚举类型的声明。
此外,合约可以继承自其他合约。
还有一些特殊类型的合约,称为库和接口。
关于合同的部分包含比本部分更多的详细信息,用于提供快速概述。
状态变量
状态变量是其值永久存储在合约存储中的变量。
/...
2022-05-22 01:22:02 |
Lang
Solidity-08-Layout of a Solidity Source File
Solidity 源文件的布局
源文件可以包含任意数量的合约定义、import、pragma 和 using for 指令和结构、枚举、函数、错误和常量变量定义。
SPDX 许可证标识符
如果智能合约的源代码可用,则可以更好地建立对智能合约的信任。由于提供源代码总是涉及版权方面的法律问题,Solidity 编译器鼓励使用机器可读的 SPDX 许可证标识符。
每个源文件都应以说明其许可...
2022-05-22 01:22:02 |
Lang
Solidity-07-Solidity by Example
投票
以下合约相当复杂,但展示了 Solidity 的许多功能。
它实现了一个投票合约。
当然,电子投票的主要问题是如何将投票权分配给正确的人以及如何防止操纵。
我们不会在这里解决所有问题,但至少我们将展示如何进行委托投票,以便同时自动计算投票并且完全透明。
这个想法是为每张选票创建一份合同,为每个选项提供一个短名称。
然后,担任主席的合约的创建者将分别授予每个地址的投票权。
...
2022-05-22 01:22:02 |
Lang