发行说明

v0.3.10 (“Black Adder”)

发布日期:2023-10-04

v0.3.10 是一个以性能为中心的版本。它添加了一个 codesize 优化模式 (#3493),添加了新的 Vyper 特定 #pragma 指令 (#3493),使用 Cancun 的 MCOPY 操作码进行一些编译器生成的代码 (#3483),并且生成了现在具有 O(1) 性能的选择器表 (#3496)。

重大变更:

  • 将运行时代码布局添加到 initcode (#3584)

  • 通过 Istanbul 删除 EVM 版本 (#3470)

  • 从运行时删除 Vyper 签名 (#3471)

  • 仅允许有效的标识符作为不可重入键 (#3605)

非重大变更和改进:

重要修复:

  • 修复 ecrecover() 在签名无效时的行为 (GHSA-f5x6-7qgp-jhf3, #3586)

  • 修复:某些内置函数的求值顺序 (#3583, #3587)

  • 修复:某些使用 msize 的内置函数的内存分配 (#3610)

  • 修复:在某些复杂表达式中 _abi_decode() 输入验证 (#3626)

  • 修复:arm 构建的 pycryptodome (#3485)

  • 使内部函数的参数可变 (#3473)

  • 对内部折叠的内置函数进行类型检查 (#3490)

  • 根据最新的 1153 EIP 规范更新 tload/tstore 操作码 (#3484)

  • 修复:当设置 max_outsize=0 时 raw_call 类型 (#3572)

  • 修复:实现对索引事件参数的检查 (#3570)

  • 修复:_abi_decode() 参数的类型检查 (#3626)

其他文档更新、任务和修复:

  • 放宽对内部函数签名的限制 (#3573)

  • 在版本 0.2.150.2.160.3.0 的发行说明中添加有关安全公告的说明 (#3553)

  • 修复:发行说明中的已删除版本 (#3545)

  • 更新已删除版本的发行说明 (#3547)

  • 改进冲突方法 ID 的错误消息 (#3491)

  • 记录 epsilon 内置函数 (#3552)

  • 放宽版本 pragma 解析 (#3511)

  • 修复:在可编辑模式下查找已安装包的问题 (#3510)

  • 在文档中添加有关 ecrecover 的安全公告的说明 (#3539)

  • asm 选项添加到 cli 帮助 (#3585)

  • 为重复范围检查将消息添加到错误映射 (#3542)

  • 修复:公共常量数组 (#3536)

v0.3.9 (“Common Adder”)

发布日期:2023-05-29

这是一个针对 v0.3.8 的补丁版本修复。@bout3fiddy 发现了 v0.3.8 中蓝图合约的代码大小回归,该回归已在本版本中修复。@bout3fiddy 还发现了 v0.3.8 中默认函数的运行时性能(gas)回归,该回归已在本版本中修复。

修复

  • initcode 代码大小激增 (#3450)

  • 为具有默认函数的合约添加回全局 calldatasize 检查 (#3463)

v0.3.8

发布日期:2023-05-23

非重大变更和改进

  • transient 存储关键字 (#3373)

  • 三元运算符 (#3398)

  • raw_revert() 内置函数 (#3136)

  • 移位运算符 (#3019)

  • 使 send() 的 gas 津贴可配置 (#3158)

  • 使用新的 push0 操作码 (#3361)

  • Python 3.11 支持 (#3129)

  • 放弃对 Python 3.8 和 3.9 的支持 (#3325)

  • 针对 aarch64 构建 (#2687)

请注意,随着 push0 操作码的添加,shanghai 现在是 Vyper 的默认编译目标。当部署到不支持 shanghai 的链时,建议将 --evm-version 设置为 paris,否则可能会导致难以调试的错误。

主要的重构 PR

  • 重构前端类型系统 (#2974)

  • 合并前端和代码生成类型系统 (#3182)

  • 简化 GlobalContext (#3209)

  • 删除 FunctionSignature (#3390)

重要修复

其他文档更新、任务和修复

  • 调用图稳定性 (#3370)

  • 修复 vyper-serve 输出 (#3338)

  • 添加 custom: natspec 标签 (#3403)

  • 将缺少的 PC 映射添加到 vyper_json 输出 (#3333)

  • 修复内部函数的构造函数上下文 (#3388)

  • 添加 selfdestruct 使用的弃用警告 (#3372)

  • 将字节码元数据选项添加到 vyper-json (#3117)

  • 修复当 break 位于循环之外时的编译器恐慌 (#3177)

  • 修复内置函数的复杂参数 (#3167)

  • 添加对 ABI 导入中所有类型的支持 (#3154)

  • 禁用 uadd 运算符 (#3174)

  • 阻止十进制数上的按位运算 (#3219)

  • 引发 UNREACHABLE (#3194)

  • 允许枚举作为映射键 (#3256)

  • 阻止布尔型 not 运算符在数字类型上使用 (#3231)

  • 强制循环的迭代器为有效名称 (#3242)

  • 修复类型检查器热点 (#3318)

  • 重写类型检查器日志以处理嵌套提交 (#3375)

  • 修复空函数的缺少的 PC 映射 (#3202)

  • 防止在 for 循环中迭代空列表 (#3197)

  • 在常量折叠期间跳过枚举成员 (#3235)

  • 按位 not 常量折叠 (#3222)

  • 允许访问常量地址的成员 (#3261)

  • 防止接口中的装饰器 (#3266)

  • 修复某些内置函数中十进制数的边界 (#3283)

  • 文字空字节串的长度 (#3276)

  • 阻止 HashMap 的 empty() (#3303)

  • 修复空列表的类型推断 (#3377)

  • 禁止从 pureview 函数中进行日志记录 (#3424)

  • 改进比较运算符的优化器规则 (#3412)

  • 在推送时部署到 ghcr (#3435)

  • 添加关于接口中返回值边界的说明 (#3205)

  • ERC1155ownableURI 事件中索引 id 参数 (#3203)

  • 将缺少的 asset 函数添加到 ERC4626 内置接口 (#3295)

  • 澄清 skip_contract_check=True 可能导致未定义的行为 (#3386)

  • 添加 custom NatSpec 标签到文档 (#3404)

  • 修复 uint256_addmod 文档 (#3300)

  • 记录外部调用的可选关键字参数 (#3122)

  • 删除 slice() 长度文档注意事项 (#3152)

  • 修复 blockhash 的文档以反映回滚行为 (#3168)

  • 编译器错误消息的改进 (#3121, #3134, #3312, #3304, #3240, #3264, #3343, #3307, #3313#3215)

这些只是亮点,因为许多其他错误修复、文档更新和重构(超过 150 个 pull 请求!)都包含在这个版本中!有关完整列表,请参阅 变更日志。特别感谢 @tserg、@trocher、@z80dev、@emc415 和 @benber86 在本版本中的贡献!

新贡献者

  • @omahs 在 (#3128) 中做出了他们的第一次贡献

  • @ObiajuluM 在 (#3124) 中做出了他们的第一次贡献

  • @trocher 在 (#3134) 中做出了他们的第一次贡献

  • @ozmium22 在 (#3149) 中做出了他们的第一次贡献

  • @ToonVanHove 在 (#3168) 中做出了他们的第一次贡献

  • @emc415 在 (#3158) 中做出了他们的第一次贡献

  • @lgtm-com 在 (#3147) 中做出了他们的第一次贡献

  • @tdurieux 在 (#3224) 中做出了他们的第一次贡献

  • @victor-ego 在 (#3263) 中做出了他们的第一次贡献

  • @miohtama 在 (#3257) 中做出了他们的第一次贡献

  • @kelvinfan001 在 (#2687) 中做出了他们的第一次贡献

v0.3.7

发布日期:2022-09-26

重大变更

  • chore: 丢弃 Python 3.7 支持 (#3071)

  • fix: 放宽对静态大小 calldata 的检查 (#3090)

非重大变更和改进

  • fix: Crowdfund.finalize() 中的断言描述 (#3058)

  • fix: 更改示例 ERC721 接口的可变性 (#3076)

  • chore: 改善针对非校验和地址文字的错误消息 (#3065)

  • feat: isqrt() 内置函数 (#3074) (#3069)

  • feat: 添加 block.prevrandao 作为 block.difficulty 的别名 (#3085)

  • feat: epsilon() 内置函数 (#3057)

  • feat: 将 ecrecover 签名扩展为接受其他参数类型 (#3084)

  • feat: 允许将常量和不可变变量声明为 public (#3024)

  • feat: 允许在字节码中可选地禁用元数据 (#3107)

错误修复

  • fix: 空嵌套动态数组 (#3061)

  • fix: 可折叠内置默认参数在导入中的使用 (#3079) (#3077)

其他更改和改进

  • doc: 更新 SECURITY.md 中的损坏链接 (#3095)

  • chore: 更新文档中的 Discord 链接 (#3031)

  • fix: 修复各种 README 中的损坏链接 (#3072)

  • chore: 修复示例中的编译警告 (#3033)

  • feat: 将行号附加到错误消息中的文件名 (#3092)

  • chore: 迁移 lark 语法 (#3082)

  • chore: 放宽并升级语义版本 (#3106)

新贡献者

  • @emilianobonassi 在 #3107 中做出了他们的第一次贡献

  • @unparalleled-js 在 #3106 中做出了他们的第一次贡献

  • @pcaversaccio 在 #3085 中做出了他们的第一次贡献

  • @nfwsncked 在 #3058 中做出了他们的第一次贡献

  • @z80 在 #3057 中做出了他们的第一次贡献

  • @Benny 在 #3024 中做出了他们的第一次贡献

  • @cairo 在 #3072 中做出了他们的第一次贡献

  • @fiddy 在 #3069 中做出了他们的第一次贡献

特别感谢 @tserg、@pandadefi 和 @delaaxe 的回归贡献者。

v0.3.6

发布日期:2022-08-07

错误修复

  • 修复当列表成员为变量时的 in 表达式 (#3035)

v0.3.5

此版本已被撤回

发布日期:2022-08-05

非重大变更和改进

  • 添加蓝图部署器输出格式 (#3001)

  • 允许将任意数据传递给 create_from_blueprint (#2996)

  • 将 CBOR 长度添加到字节码以供解码器使用 (#3010)

  • 修复当通过 self 访问枚举存储变量时的编译器恐慌 (#2998)

  • 修复:允许在常量定义和默认参数位置中使用 empty() (#3008)

  • 修复:禁止在纯函数中使用 self 地址 (#3027)

v0.3.4

发布日期:2022-07-27

非重大变更和改进

  • 添加枚举类型(#2874#2915#2925#2977

  • 添加 _abi_decode 内置函数(#2882

  • 添加 create_from_blueprintcreate_copy_of 内置函数(#2895

  • 添加 default_return_value 关键字参数用于调用(#2839

  • 添加 min_valuemax_value 内置函数用于数字类型(#2935

  • 添加 uint2str 内置函数(#2879

  • 添加 vyper 签名到字节码(#2860

其他修复和改进

  • 从构造函数中调用内部函数(#2496

  • 新的整数类型算术运算(#2843

  • 允许 msg.dataraw_call 中不使用 slice#2902

  • 每个方法的 calldatasize 检查(#2911

  • 内置函数参数的类型推断和标注(#2817

  • 允许 print 的可变参数(#2833

  • 添加 error_map 输出格式以供工具使用(#2939

  • 在调用中多次评估合约地址(GHSA-4v9q-cgpw-cf38

  • 改进 ast 输出(#2824

  • 允许视图函数使用 @nonreentrant#2921

  • 添加对有符号整数的支持 shift()#2964

  • 启用字符串的动态数组(#2922

  • 修复某些 safepow 情况下出现的越界检查问题(#2983

  • 优化器改进(#2647#2868#2914#2843#2944

  • 反转报告异常的顺序(#2838

  • 修复大型合约的编译时膨胀问题(#2981

  • vyper-ir 二进制文件重命名为 fang#2936

许多其他小的错误修复、优化和重构也包含在这个版本中!特别感谢 @tserg 和 @pandadefi 为本版本贡献了几个重要的错误修复、重构和功能!

v0.3.3

发布日期:2022-04-22

这是一个错误修复版本。它修复了 @haltman-at 在 #2820 中报告的动态数组存储分配机制中的越界错误。

其他修复和改进

  • 添加一个 print 内置函数,允许在 hardhat 中打印调试消息。(#2818

  • 修复各种错误消息(#2798#2805

v0.3.2

发布日期:2022-04-17

重大变更

  • 增加 decimal 类型的边界(#2730

  • 概括和简化 convert 内置函数的语义(#2694

  • 限制十六进制和字节字面量(#2736#2872

非重大变更和改进

  • 实现动态数组(#2556#2606#2615

  • 支持所有 ABIv2 整数和字节类型(#2705

  • 添加存储布局覆盖机制(#2593

  • 支持 <address>.code 属性(#2583

  • 添加 tx.gasprice 内置函数(#2624

  • 允许结构体作为常量变量(#2617

  • 实现 skip_contract_check 关键字参数(#2551

  • 支持 EIP-2678 ethPM 清单文件(#2628

  • 添加 metadata 输出格式(#2597

  • 允许内部函数使用 msg.* 变量(#2632

  • 添加 unsafe_ 算术运算内置函数(#2629

  • 添加子例程到 Vyper IR(#2598

  • 添加 select 操作码到 Vyper IR(#2690

  • 允许将任何类型的列表作为循环变量(#2616

  • 改进错误消息中的建议(#2806

值得注意的修复

许多优化、重构和其他修复包含在这个版本中!有关完整的列表,请参阅 更改日志

特别感谢 @tserg 为类型检查器修复和新功能的大量测试!本版本的其他贡献者包括 @abdullathedruid、@hi-ogawa、@skellet0r、@fubuloubu、@onlymaresia、@SwapOperator、@hitsuzen-eth、@Sud0u53r、@davidhq。

v0.3.1

发布日期:2021-12-01

重大变更

  • 禁止在使用 decimal 作为库时更改精度(#2479

非重大变更和改进

  • 添加不可变变量(#2466

  • 添加 uint8 类型(#2477

  • 添加 gaslimit 和 basefee 环境变量(#2495

  • 启用可检查的 raw_call(#2482

  • 当外部调用失败时传播回滚数据(#2531

  • 改进 LLL 注释(#2486

  • 优化短路布尔运算(#2467#2493

  • 优化身份预编译的使用(#2488

  • 删除 int128 和 address 的加载限制(#2506

  • 添加机器可读的 ir_json 格式(#2510

  • 优化 raw_call,使其在输入位于内存中的常见情况下更加高效(#2481

  • 删除实验性的 OVM 翻译器(#2532

  • 添加 CLI 标志以禁用优化器(#2522

  • 添加 LLL 语法和语义的文档(#2494

修复

  • 允许使用非常量回滚原因字符串(#2509

  • 允许对复杂表达式进行切片操作(#2500

  • 从 LLL 代码生成中删除 seq_unchecked(#2485

  • 修复具有默认参数的外部调用(#2526

  • 启用结构体列表作为函数参数(#2515

  • 修复常量地址的 .balance(#2533

  • 允许使用变量对常量/字面量数组进行索引(#2534

  • 修复未使用存储槽的分配问题(#2439#2514

特别感谢 @skellet0r 为本版本贡献了一些重大功能!

v0.3.0

⚠️ 此版本中发现了一个严重的安全漏洞,我们强烈建议使用版本 0.3.1 或更高版本。有关更多信息,请参见安全公告 GHSA-5824-cm3x-3c38

发布日期:2021-10-04

重大变更

  • 将单个结构体返回值的 ABI 编码更改为与 Solidity 兼容(#2457

  • 删除 Python 3.6 支持(#2462

非重大变更和改进

  • 重写内部调用约定(#2447

  • 允许任何可编码的 ABI 类型作为函数参数和返回值类型(#2154#2190

  • 添加对使用 CREATE2 确定性部署最小代理的支持(#2460

  • 优化特定副本的代码 (#2468)

  • 添加 -o CLI 标志以将输出重定向到文件 (#2452)

  • 其他文档更新 (#2450)

修复

  • _abi_encode 内置函数多次评估参数 (#2459)

  • 嵌套元组的 ABI 长度太短 (#2458)

  • 对于某些数值类型,返回值数据未被钳制 (#2454)

  • __default__ 函数不尊重非重入键 (#2455)

  • initcode 中字节串的钳制已损坏 (#2456)

  • 外部函数中缺少小数参数的钳制 (GHSA-c7pr-343r-5c46)

  • 当在结构体中返回包含私有函数调用的字面量结构体时,内存损坏 (GHSA-xv8x-pr4h-73jv)

特别感谢 @skellet0r 和 @benjyz 对此版本的贡献!

v0.2.16

⚠️ 此版本中发现了一个严重的安全漏洞,我们强烈建议使用版本 0.3.1 或更高版本。有关更多信息,请参见安全公告 GHSA-5824-cm3x-3c38

发布日期:2021-08-27

非重大变更和改进

  • 将 _abi_encode 作为面向用户的内置函数公开 (#2401)

  • 将存储布局导出为编译器输出选项 (#2433)

  • 添加实验性的 OVM 后端 (#2416)

  • 允许任何可 ABI 编码的类型作为事件参数 (#2403)

  • 优化 int128 钳制 (#2411)

  • 其他文档更新 (#2405, #2422, #2425)

修复

  • 禁止在构造函数上使用非重入装饰器 (#2426)

  • 修复处理 msg.data 时的边界检查 (#2419)

  • 允许在列表、结构体和映射中使用接口 (#2397)

  • 修复尾部换行符解析错误 (#2412)

特别感谢 @skellet0r、@sambacha 和 @milancermak 对此版本的贡献!

v0.2.15

⚠️ 此版本中发现了一个严重的安全漏洞,我们强烈建议使用版本 0.3.1 或更高版本。有关更多信息,请参见安全公告 GHSA-5824-cm3x-3c38

发布日期:2021-07-23

非破坏性更改和改进 - 返回嵌套元组时的优化 (#2392)

修复: - 内置函数的带注释的关键字参数 (#2389) - 存储槽分配错误 (#2391)

v0.2.14

此版本已被撤回

发布日期:2021-07-20

非破坏性更改和改进: - 通过共享钳制代码来减少字节码 (#2387)

修复: - 来自重入锁的存储损坏 (#2379)

v0.2.13

此版本已被撤回

发布日期:2021-07-06

非重大变更和改进

  • 添加 abs 内置函数 (#2356)

  • 简化存储中数组的位置 (#2361)

v0.2.12

发布日期:2021-04-16

此版本修复了在 v0.2.x 系列中引入的内存损坏错误 (#2345),该错误未在 VVE-2020-0004 中修复。在 VVE-2021-0001 中进一步了解它。

非重大变更和改进

  • 优化 calldataload (#2352)

  • 添加 int256 有符号整数类型 (#2351)

  • EIP2929 操作码定价和柏林支持 (#2350)

  • 添加 msg.data 环境变量 #2343 (#2343)

  • 完全支持 Python 3.9 (#2233)

v0.2.11

发布日期:2021-02-27

这是一个快速补丁版本,用于修复 v0.2.9 (#2321) 中引入的内存损坏错误,该错误在释放内部变量时会过度释放内存。

v0.2.10

此版本已被撤回

发布日期:2021-02-17

这是一个快速补丁版本,用于修复 v0.2.9 (#2311) 中引入的错误的生成的 ABI,其中存储变量获取器被错误地标记为 nonpayable 而不是 view

v0.2.9

此版本已被撤回

发布日期:2021-02-16

非破坏性更改和改进: - 向 wheel 添加许可证,Anaconda 支持 (#2265) - 在使用 implements: 时考虑类型检查期间的事件 (#2283) - 重构 ABI 生成 (#2284) - 从解析器/签名中删除冗余检查 (#2288) - 简化元组返回类型的 ABI 编码逻辑 (#2302) - 优化字节码中的函数排序 (#2303) - 汇编级优化 (#2304) - 优化非支付断言 (#2307) - 优化非重入锁 (#2308)

修复: - 将转发器代理字节码更改为 ERC-1167 (#2281) - 保留关键字检查更新 (#2286) - 字面量列表中的不正确类型检查错误 (#2309)

感谢 (@iamdefinitelyahuman) 的大量重构工作!

v0.2.8

发布日期:2020-12-04

非重大变更和改进

  • AST 更新以提供对 Python 3.9 的初步支持 (#2225)

  • 支持 not in 比较器 (#2232)

  • 取消对 calldata 变量遮蔽存储变量的限制 (#2226)

  • 当第二个参数是字面量时,优化 shift 字节码 (#2201)

  • 当超过 EIP-170 大小限制时发出警告 (#2208)

修复

  • 允许对 calldata bytes32 使用 slice (#2227)

  • 明确禁止迭代结构体列表 (#2228)

  • 改进地址校验和的验证 (#2229)

  • 字节始终在 AST 中以十六进制表示 (#2231)

  • 允许在函数调用中使用 empty 作为参数 (#2234)

  • 允许在 log 语句中使用 empty 静态大小数组作为参数 (#2235)

  • 使用 Bytes 变量作为映射中的键的编译时问题 (#2239)

v0.2.7

发布日期:2020-10-14

这是一个快速补丁版本,用于修复 v0.2.6 (#2188) 中引入的运行时错误,该错误在某些情况下可能导致内存损坏。

非重大变更和改进

  • 围绕 assertraise 的优化 (#2198)

  • 简化内存变量的内部处理 (#2194)

修复

  • 确保内部变量始终按顺序放置在内存中 (#2196)

  • 围绕内存释放的错误修复 (#2197)

v0.2.6

此版本已被撤回

发布日期:2020-10-10

非重大变更和改进

  • 在同一个函数内释放和重用内存槽 (#2188)

  • 允许在基于范围的 for 循环中隐式使用 uint256 作为迭代器类型 (#2180)

  • 优化 int128 的钳制逻辑 (#2179)

  • 在可能的情况下在编译时计算数组索引偏移量 (#2187)

  • 改进对动态大小结构体的无效使用的异常 (#2189)

  • 改进对函数调用中参数数量错误的异常 (#2178)

  • 改进对无效下标的异常 (#2177)

修复

  • 在元组或其他函数调用中执行函数调用时发生的内存损坏问题 (#2186)

  • 使用多维数组时发生的函数输出错误 (#2184)

  • 减少 addressBytes[20] 之间的歧义 (#2191)

v0.2.5

发布日期:2020-09-30

非重大变更和改进

  • 改进对不正确接口的异常 (#2131)

  • 独立二进制准备 (#2134)

  • 改进 make freeze (#2135)

  • 删除局部变量的过度作用域规则 (#2166)

  • 针对不接受 ETH 的合约优化非 payable 检查 (#2172)

  • 针对除数为字面量的除零操作优化 safemath (#2173)

  • 优化多个连续的内存清零操作 (#2174)

  • 优化地址和布尔类型的大小限制检查 (#2175)

修复

  • 对赋值左侧进行常量折叠 (#2137)

  • 元组中 bytes 和 string 数组的 ABI 问题 (#2140)

  • 从外部函数返回结构体会导致错误 (#2143)

  • 包含结构体的错误消息显示所有成员 (#2160)

  • 从外部调用返回的结构体值未被正确存储 (#2164)

  • 改进对无效函数作用域赋值的异常处理 (#2176)

v0.2.4

发布日期: 2020-08-03

非重大变更和改进

  • 改进 EOF 异常 (#2115)

  • 改进类型不匹配的异常消息 (#2119)

  • 忽略尾随换行符标记 (#2120)

修复

  • 修复从函数返回的结构体的 ABI 转换 (#2114)

  • 在调用非类型项时引发异常 (#2118)

  • 确保十六进制和十进制 AST 节点可序列化 (#2123)

v0.2.3

发布日期: 2020-07-16

非重大变更和改进

  • 在引发的异常中显示合约名称 (#2103)

  • 调整函数偏移量,不包含装饰器 (#2102)

  • 在模块作用域类型检查期间立即引发某些异常类型 (#2101)

修复

  • 在返回之前从堆栈中弹出 for 循环值 (#2110)

  • 类型检查非字面量数组索引值 (#2108)

  • for 循环类型检查期间提供有意义的输出 (#2096)

v0.2.2

发布日期: 2020-07-04

修复

  • 不要将指数运算折叠为负幂 (#2089)

  • 为映射添加 repr (#2090)

  • 字面量仅验证一次 (#2093)

v0.2.1

发布日期: 2020-07-03

这是 Vyper 编译器和语言的重大版本更新。它也是我们版本控制方案后的第一个版本 (#1887).

重大变更

  • @public@private 函数装饰器已重命名为 @external@internal (VIP #2065)

  • @constant 装饰器已重命名为 @view (VIP #2040)

  • 类型单位已被移除 (VIP #1881)

  • 事件声明语法现在类似于结构体声明 (VIP #1864)

  • log 现在是一个语句 (VIP #1864)

  • 映射声明语法已更改为 HashMap[key_type, value_type] (VIP #1969)

  • 接口现在通过 interface 关键字声明,而不是 contract (VIP #1825)

  • bytesstring 类型现在写为 BytesString (#2080)

  • bytesstring 字面量现在必须分别为字节或普通字符串。它们不再是可互换的。(VIP #1876)

  • assert_modifiable 已被移除,您现在可以直接对调用执行断言 (#2050)

  • value 在函数输入中不再是允许的变量名 (VIP #1877)

  • 内置函数 slice 期待 uint256 作为 startlength 参数 (VIP #1986)

  • len 的返回类型现在是 uint256 (VIP #1979)

  • 外部函数调用的 valuegas 关键字参数必须以 uint256 格式提供 (VIP #1878)

  • raw_call 中的 outsize 关键字参数已重命名为 max_outsize (#1977)

  • extract32 中的 type 关键字参数已重命名为 output_type (#2036)

  • 公用数组 getter 现在使用 uint256 作为其输入参数(VIP #1983)

  • 公用结构体 getter 现在返回结构体的所有值 (#2064)

  • RLPList 已被移除 (VIP #1866)

以下非破坏性 VIP 和功能已实现

  • 实现布尔条件短路 (VIP #1817)

  • 添加 empty 内置函数用于将值清零 (#1676)

  • 编译器流程的重构,导致性能提升近 5 倍!(#1962)

  • 支持接口定义中的 ABI 状态可变性字段 (VIP #2042)

  • 支持 @pure 装饰器 (VIP #2041)

  • 指数运算的溢出检查 (#2072)

  • 通过 RETURNDATASIZE 验证返回数据长度 (#2076)

  • 改进的常量折叠 (#1949)

  • 允许在没有原因字符串的情况下引发异常 (VIP #1902)

  • 使 method_id 中的类型参数可选 (VIP #1980)

  • 在事件中将复杂类型用作索引值时哈希它们 (#2060)

  • 放宽对自调用限制 (#2059)

  • 移除合约模块范围内的排序限制 (#2057)

  • raw_call 现在可用于执行 STATICCALL (#1973)

  • 优化预编译以使用 STATICCALL (#1930)

一些错误和稳定性修复

  • 使用多维数组时的参数钳位问题 (#2071)

  • 支持 in 比较器中的 calldata 数组 (#2070)

  • 防止通过 for 循环在迭代期间修改存储数组 (#2028)

  • 修复回退字符串的内存长度问题 (#1982)

  • 从私有函数返回元组时的内存偏移问题 (#1968)

  • 数组作为默认函数参数的问题 (#2077)

  • 私有函数调用不再生成调用签名 (#2058)

重要的代码库重构,感谢 (@iamdefinitelyahuman)!

注意: v0.2.0 未被使用,因为与之前的版本在 PyPI 中存在冲突。标签 v0.2.0v0.2.1 是相同的。

v0.1.0-beta.17

发布日期: 2020-03-24

以下 VIP 和功能已在 Beta 17 中实现

  • raw_callslice 参数更新 (VIP #1879)

  • NatSpec 支持 (#1898)

一些错误和稳定性修复

  • ABI 接口修复 (#1842)

  • 对 ABI 数据类型表示方式的修改 (#1846)

  • 为结构体返回类型生成方法标识符 (#1843)

  • 使用固定数组返回元组无法编译 (#1838)

  • 还进行了大量的重构和文档更新!

此版本将是最后一个遵循我们当前发布流程的版本。所有未来的版本将由版本控制方案(#1887)管理。下一个版本将是 v0.2.0,并将包含许多重大更改。

v0.1.0-beta.16

发布日期:2020-01-09

Beta 16 是一个快速修补版本,用于修复一个问题: (#1829)

v0.1.0-beta.15

发布日期:2020-01-06

注意:我们已将许可证更改为 Apache 2.0 (#1772)

以下 VIP 已在 Beta 15 中实现

一些错误和稳定性修复

  • 删除代码库中所有 Javascript 痕迹 (#1770)

  • 确保预编译调用有足够的 gas 补贴 (#1771)

  • 允许导入包含 implements 语句的接口 (#1774)

  • 修复了使用 minmax 时某些值的比较方式 (#1790)

  • 删除了 addmodmulmod 上不必要的溢出检查 (#1786)

  • 检查使用元组时是否修改了状态 (#1785)

  • 修复了导入接口时 Windows 路径问题 (#1781)

  • 添加 Vyper 语法,目前用于模糊测试 (#1768)

  • 修改文字的模数计算,使其与 EVM 保持一致 (#1792)

  • 明确禁止对小数使用求幂运算 (#1792)

  • 添加对除零和模零的编译时检查 (#1792)

  • 修复了关于取反常数的一些问题 (#1791)

  • 允许超出父级一层级别的相对导入 (#1784)

  • 使用君士坦丁堡规则实现 SHL/SHR 用于位移操作 (#1796)

  • vyper-jsonsolc 设置的兼容性 (#1795)

  • 简化返回列表时的类型检查 (#1797)

  • 添加分支覆盖率报告 (#1743)

  • 修复结构赋值顺序 (#1728)

  • 将更多单词添加到保留关键字列表 (#1741)

  • 允许文字使用科学计数法 (#1721)

  • 避免对小数上限进行平方根运算时发生溢出 (#1679)

  • 重构 ABI 编码器 (#1723)

  • 根据 EIP-1884 更改操作码成本 (#1764)

特别感谢 (@iamdefinitelyahuman) 对此版本的大量更新!

v0.1.0-beta.14

发布日期:2019-11-13

一些错误和稳定性修复

  • 大量文档和示例清理!

  • Python 3.8 支持 (#1678)

  • 禁止文字使用科学计数法,因为以前解析不正确 (#1681)

  • 添加 bytes[32] -> bytes32 的隐式重写规则 (#1718)

  • raw_log 中支持 bytes32 (#1719)

  • 修复了 EOF 解析错误 (#1720)

  • 清理了算术表达式 (#1661)

  • 修复了检查同构列表元素类型时出现的越界问题 (#1673)

  • 修复了 if 和 for 语句中的堆栈价位问题 (#1665)

  • 在对某些数据类型使用 sqrt 时,防止发生溢出 (#1679)

  • 防止内部变量被遮蔽 (#1601)

  • 拒绝对无符号类型进行一元减法运算 (#1638)

  • for 循环中禁止使用 orelse 语法 (#1633)

  • 提高了零填充的清晰度和效率 (#1605)

v0.1.0-beta.13

发布日期:2019-09-27

以下 VIP 已在 Beta 13 中实现

  • 添加 vyper-json 编译模式 (VIP #1520)

  • 环境变量和常量现在可以作为默认参数使用 (VIP #1525)

  • 要求在创建时设置未初始化的内存 (VIP #1493)

一些错误和稳定性修复

  • 对默认参数和数组进行类型检查 (#1596)

  • 修复了在 for 循环中使用断言时的错误 (#1619)

  • 修复了 ABI 编码器的零填充错误 (#1611)

  • calldataload 之前检查 calldatasize 以获取函数选择器 (#1606)

v0.1.0-beta.12

发布日期:2019-08-27

以下 VIP 已在 Beta 12 中实现

  • 支持相对导入 (VIP #1367)

  • 限制在私有函数中使用环境变量 (VIP #1199)

一些错误和稳定性修复

  • @nonreentrant/@constant 逻辑不一致 (#1544)

  • 结构体直通问题 (#1551)

  • 私有下溢问题 (#1470)

  • 常量检查问题 (#1480)

  • 防止使用冲突的方法 ID (#1530)

  • 私有函数缺少参数检查 (#1579)

  • 零填充问题 (#1563)

  • vyper.cli 脚本的重新架构 (#1574)

  • AST 结束偏移量和与 Solidity 兼容的压缩源映射 (#1580)

特别感谢 (@iamdefinitelyahuman) 对此版本的大量更新!

v0.1.0-beta.11

发布日期:2019-07-23

Beta 11 带来了性能和稳定性修复。

  • 使用 calldata 代替内存参数。 (#1499)

  • 减少了大型参数函数的合约大小。 (#1486)

  • 为 Windows 用户改进 (#1486) (#1488)

  • 数组复制优化 (#1487)

  • 修复了 @nonreentrant 装饰器对 return 语句的修复 (#1532)

  • sha3 内置函数已删除 (#1328)

  • 禁止使用冲突的方法 ID (#1530)

  • 添加了对 convert() 的支持类型 (#1524) (#1500)

  • 字符串和字节的相等运算符 (#1507)

  • compile_codes 接口函数的更改 (#1504)

感谢所有贡献者!

v0.1.0-beta.10

发布日期:2019-05-24

  • 大量代码整理和重构!

  • 关于将数组作为参数传递给私有函数的错误修复 (#1418)。请检查您的合约,如果您使用此功能,请升级到最新版本。

  • init 生成的字节码略有缩减。 (#1399)

  • for .. range 表达式中增加了常量保护。 (#1397)

  • 改进的错误报告 (#1394)

  • 修复了从函数返回外部合约的问题 (#1376)

  • 接口单元修复 (#1303)

  • 不等于 (!=) 优化 (#1303) 1386

  • 新的 assert <condition>, UNREACHABLE 语句。 (#711)

特别感谢 (Charles Cooper) 为本次版本贡献了出色的代码。

v0.1.0-beta.9

发布日期:2019-03-12

  • 添加对列表常量的支持 (#1211)

  • 添加 sha256 函数 (#1327)

  • create_with_code_of 重命名为 create_forwarder_to (#1177)

  • @nonreentrant 装饰器 (#1204)

  • 在编译器中添加操作码和操作码运行时标志 (#1255)

  • 改进外部合约调用接口 (#885)

v0.1.0-beta.9 之前

在此版本之前,我们以不同的方式管理变更日志。以下为旧版变更日志

  • **2019.04.05**: 添加对不平衡返回语句的更严格检查。(#590)

  • **2019.03.04**: create_with_code_of 已重命名为 create_forwarder_to。(#1177)

  • **2019.02.14**: 只能使用 bar_contact = ERC20(<address>) 语法为持久性合约地址赋值。

  • **2019.02.12**: 必须使用 from vyper.interfaces import ERC20 导入 ERC20 接口才能使用。

  • **2019.01.30**: 字节数组字面量需要使用 b"" 进行注释,字符串表示为 “”

  • **2018.12.12**: 禁止使用 None,禁止使用 del,实现了 clear() 内置函数。

  • **2018.11.19**: 将映射语法更改为使用 map()。(VIP564)

  • **2018.10.02**: 将转换风格更改为使用类型而不是字符串。(VIP1026)

  • **2018.09.24**: 添加对自定义常量的支持。

  • **2018.08.09**: 添加对默认参数的支持。

  • **2018.06.08**: 首个 Beta 版本发布。

  • **2018.05.23**: 将 wei_value 更改为 uint256

  • **2018.04.03**: 将字节声明从 bytes <= n 更改为 bytes[n]

  • **2018.03.27**: 将 signed256 重命名为 int256

  • **2018.03.22**: 为外部合约调用添加可修改和静态关键字。

  • **2018.03.20**: 将 __log__ 重命名为 event

  • **2018.02.22**: 将 num 重命名为 int128,将 num256 重命名为 uint256。

  • **2018.02.13**: 禁止使用带有 payable 和 constant 装饰器的函数。

  • **2018.02.12**: 除以 num 返回十进制类型。

  • **2018.02.09**: 标准化类型转换。

  • **2018.02.01**: 函数不能与全局变量同名。

  • **2018.01.27**: 将 getter 从 get_var 更改为 var。

  • **2018.01.11**: 将版本从 0.0.2 更改为 0.0.3

  • **2018.01.04**: 赋值时需要指定类型 (VIP545).

  • **2017.01.02**: 将 as_wei_value 更改为使用引号表示单位。

  • **2017.12.25**: 将名称从 Viper 更改为 Vyper。

  • **2017.12.22**: 为循环添加 continue

  • **2017.11.29**: @internal 重命名为 @private

  • **2017.11.15**: 函数需要 @internal@public 装饰器。

  • **2017.07.25**: def foo() -> num(const): ... 语法不再有效;现在需要使用 def foo() -> num: ...,并在前一行添加 @constant 装饰器。

  • **2017.07.25**: 没有 @payable 装饰器的函数在使用非零 wei 调用时将失败。

  • **2017.07.25**: 函数只能调用在其上方声明的函数(也就是说,A 只能调用 B,前提是 B 在代码中比 A 出现得更早)。这是为了