Skip to content

v1.0.0

Compare
Choose a tag to compare
@turbolent turbolent released this 26 Sep 22:16
· 368 commits to master since this release
878f55e

We are excited to announce the release of Cadence v1.0! πŸŽ‰

Starting with this release, there will be no more planned breaking changes going forward! πŸš€

Reflecting two years of work since the last major milestone in 2022, v0.24 (Secure Cadence), and the culmination of five years of work since the inception of Cadence in 2019, Cadence 1.0 is a milestone marking several significant enhancements. This release introduces full forward compatibility, enhanced composability through Attachments, and significant performance improvements.

We would like to thank all contributors and community members for their great feedback and amazing contributions – this would have not been possible without you! πŸ™‡

To learn more, visit https://flow.com/upgrade/crescendo/cadence-1.

πŸ’« New features

Attachments

Attachments allow developers to extend a struct or resource type (even one that they did not declare) with new functionality and data, without requiring the original author of the type to plan or account for it.

This feature allows developers to easily build on and extend any existing application, significantly improving the composability story of Cadence.

Entitlements and Safe Downcasting

In Cadence 1.0, access control has improved significantly.

Previously, Cadence’s main access-control mechanism, restricted reference types, has been a source of confusion and mistakes for contract developers. Additionally, references could not be downcast, leading to ergonomic issues.

Access control is now handled using a new feature called Entitlements. A reference can now be β€œentitled” to certain facets of an object.

References can now always be down-casted, the standalone auth modifier is not necessary anymore, and got removed.

Entitled Account Access

Previously, access to accounts was granted wholesale: Users would sign a transaction, authorizing the code of the transaction to perform any kind of operation, for example, write to storage, but also add keys or contracts.

Users had to trust that a transaction would only perform supposed access, e.g. storage access to withdraw tokens, but still had to grant full access, which would allow the transaction to perform other operations.

Dapp developers who require users to sign transactions are now able to request the minimum amount of access to perform the intended operation, i.e. developers are able to follow the principle of least privilege (PoLA).

With the introduction of entitlements, this access is now expressed using entitlements and references.

Access to administrative account operations, such as writing to storage, adding keys, or adding contracts, is now gated by both coarse grained entitlements (e.g. Storage, which grants access to all storage related functions, and Keys, which grants access to all key management functions), as well as fine-grained entitlements (e.g. SaveValue to save a value to storage, or AddKey to add a new key to the account).

Transactions can now request the particular entitlements necessary to perform the operations in the transaction.

View Functions

View functions allow developers to improve the reliability and safety of their programs, and helps them to reason about the effects of their and the programs of others.

Developers can mark their functions as view, which disallows the function from performing state changes. That also makes the intent of functions clear to other programmers, as it allows them to distinguish between functions that change state and ones that do not.

Interface Inheritance

Previously, interfaces could not inherit from other interfaces, which required developers to repeat code. Interface inheritance allows code abstraction and code reuse.

Interfaces can now inherit from other interfaces of the same kind. This makes it easier for developers to structure their conformances and reduces a lot of redundant code.

Capability Controllers

Cadence encourages a capability-based security model. Capabilities are themselves a new concept that most Cadence programmers need to understand.

The existing linking-based capability API has been replaced by a more powerful and easier to use API based on the notion of Capability Controllers. The new API makes the creation of new and the revocation of existing capabilities simpler.

External Mutation Safety

External Mutation Safety prevents a common safety foot-gun, unintentionally granting mutable access to nested data.

The mutability of containers (updating a field of a composite value, key of a map, or index of an array) through references has changed: When a field/element is accessed through a reference, a reference to the accessed inner object is returned, instead of the actual object. These returned references are unauthorized by default, and the author of the object (struct/resource/etc.) can control what operations are permitted on these returned references by using entitlements and entitlement mappings.

Event Definition And Emission In Interfaces

Contract interfaces may now define event types, and these events can be emitted from function conditions and default implementations in those contract interfaces.

Force Destruction of Resources

All resources are now guaranteed to be destroyable.

It was previously possible to panic in the body of a resource or attachment’s destroy method, effectively preventing the destruction or removal of that resource from an account. This could be used as an attack vector by handing people undesirable resources or hydrating resources to make them extremely large or otherwise contain undesirable content.

Contracts may no longer define destroy functions on their resources, and are no longer required to explicitly handle the destruction of resource fields. These will instead be implicitly
destroyed whenever a resource is destroyed.

Additionally, developers may define a ResourceDestroyed event which will be emitted whenever a resource of that type is destroyed.

Inlined and Deduplicated Storage

Cadence uses the Atree library for storing objects. Cadence 1.0 integrates Atree v0.8.0, which inlines and deduplicates stored data, which significantly reduces the amount of data stored and memory need. On Flow Testnet, this reduced memory usage by ~1/2 without sacrificing speed.

For more information, visit the release page https://github.com/onflow/atree/releases/tag/v0.8.0

⚑ Breaking Improvements

Many of the improvements of Cadence 1.0 fundamentally change how Cadence works and how it is used. That also means it was necessary to break existing code to release this version, which guarantees stability (no more planned breaking changes) going forward.

As breaking changes are simply no longer acceptable after Cadence 1.0, we used this last chance to fix and improve Cadence, ensuring it delivers on its promise of being a language that provides security and safety, while also enabling composability and simplicity.

We appreciate that updating existing code can be challenging for developers. However, we believe these improvements are worthwhile, as they make Cadence development significantly more powerful and efficient, enabling developers to write and deploy immutable contracts.

The improvements were intentionally bundled into one release to avoid breaking Cadence programs multiple times.

References to Resource-Kinded Values Get Invalidated When the Referenced Values Are Moved

References are now invalidated if the referenced resource is moved after the reference was taken. The reference is invalidated upon the first move, regardless of the origin and the destination.

Previously, when a reference is taken to a resource, that reference remains valid even if the resource was moved, for example when created and moved into an account, or moved from one account into another.

In other words, references to resources stayed alive forever. This could be a potential safety foot-gun, where one could gain/give/retain unintended access to resources through references.

Conditions No Longer Allow State Changes

In the current version of Cadence, pre-conditions and post-conditions may perform state changes, e.g. by calling a function that performs a mutation. This may result in unexpected behavior, which might lead to bugs.

To make conditions predictable, they are no longer allowed to perform state changes.

Pre-conditions and post-conditions are now considered view contexts, meaning that any operations that would be prevented inside of a view function are also not permitted in a pre-condition or post-condition.

This is to prevent underhanded code wherein a user modifies global or contract state inside of a condition, where they are meant to simply be asserting properties of that state.

Semantics for Variables in For-Loop Statements Got Improved

The behavior of for-in loops improved, so that a new iteration variable is introduced for each iteration.

Previously, the iteration variable of for-in loops was re-assigned on each iteration.

Even though this is a common behavior in many programming languages, it is surprising behavior and a source of bugs.

The behavior was improved to the often assumed/expected behavior of a new iteration variable being introduced for each iteration, which reduces the likelihood for a bug.

Restricted Types Got Replaced with Intersection Types

With the improvements to access control enabled by entitlements and safe down-casting, the restricted type feature is redundant.

Restricted types have been removed. All types, including references, can now be down-casted, restricted types are no longer used for access control. At the same time intersection types got introduced.

Definite Return Analysis Got Improved

The definite return analysis got significantly improved.

Definite return analysis determines if a function always exits, in all possible execution paths, e.g. through a return statement, or by calling a function that never returns, like panic.

This analysis was incomplete and required developers to add workarounds to their code.

Syntax for Function Types Improved

Previously, function types were expressed using a different syntax from function declarations or expressions. The previous syntax was unintuitive for developers, making it hard to write and read code that used function types.

Function types are now expressed using the fun keyword, just like expressions and declarations. This improves readability and makes function types more obvious.

pub and priv Access Modifiers Got Removed

The pub, priv and pub(set) access modifiers got removed from the language, in favor of their more explicit access(all) and access(self) equivalents (for pub and priv, respectively).

This makes access modifiers more uniform and better match the new entitlements syntax.

Naming Rules Got Tightened

Previously, Cadence allowed language keywords (e.g. continue, for, etc.) to be used as names. This had the potential to confuse developers or readers of programs, and could potentially lead to bugs.

Most language keywords are no longer allowed to be used as names. Some keywords are still allowed to be used as names, as they have limited significance within the language.

Nested Type Requirements Got Removed

Nested Type Requirements were a fairly advanced concept of the language. The feature was uncommon in other programming languages and hard to understand.

Just like an interface could require a conforming type to provide a certain field or function, it could also have required the conforming type to provide a nested type.

Deprecated Key Management API Got Removed

Cadence provided two key management APIs:

  • The original, low-level API, which worked with RLP-encoded keys
  • The improved, high-level API, which works with convenient data types like PublicKey, HashAlgorithm, and SignatureAlgorithm

The original account key management API, got removed. The improved API was introduced, as the original API was difficult to use and error-prone. The original API was deprecated in early 2022.

Result of toBigEndianBytes() for U?Int(128|256) Fixed

Previously, the implementation of .toBigEndianBytes() was incorrect for the large integer types Int128, Int256, UInt128, and UInt256. This had the potential to confuse developers or readers of programs, and could potentially lead to bugs.

The result for toBigEndianBytes() on ****Int128 and UInt128 is now always an array of 16 bytes, and for Int256 and UInt256 32 bytes.

🐞 Bugfixes

Resource Tracking for Optional Bindings Improved

Resource tracking for optional bindings (”if-let statements”) was fixed.

Previously, resource tracking for optional bindings was implemented incorrectly, leading to errors for valid code. This required developers to add workarounds to their code.

Missing or Incorrect Argument Labels Get Reported

Function calls with missing argument labels and function calls with incorrect argument labels are now reported properly.

Previously, missing or incorrect argument labels of function calls were not reported.

This had the potential to confuse developers or readers of programs, and could potentially lead to bugs.

Incorrect Operators in Reference Expressions Get Reported

Previously, incorrect operators in reference expressions were not reported.

This had the potential to confuse developers or readers of programs, and could potentially lead to bugs.

All changes

πŸ’₯ Language Breaking Changes

πŸ’₯ Go API Breaking Chance

  • Update randomness runtime interface method by @tarakby in #2706
  • Add the NewEmulatorBackend method on TestFramework interface by @m-Peter in #2744
  • Add support for injecting types into the environment by @turbolent in #2811
  • Allow different base activations per location in checker and interpreter by @turbolent in #2887
  • Expose checker in analysis by @turbolent in #3042
  • Unexport fields to prevent access by index by @turbolent in #3290
  • Remove Value.ToGoValue and NewValue by @turbolent in #3291
  • Remove access to field slices from composite and interface types by @turbolent in #3432

⭐ Features

πŸ›  Improvements

🐞 Bug Fixes

πŸ§ͺ Testing

  • Add tests for entitlement inheritance between interfaces by @dsainati1 in #2564
  • Add cyclic imports tests by @SupunS in #2629
  • Add test for borrowing as inherited interface by @SupunS in #2722
  • Add test for attachment on built-in composite by @turbolent in #2732
  • Add test for inner container mutation while iterating outer by @SupunS in #2733
  • Add tests for invalidation of references created with index/field-access by @SupunS in #2758
  • Add test for container mutation while iterating by @SupunS in #2960
  • Test type order insignificance by @turbolent in #2967
  • Test usage of potentially broken types by @turbolent in #3030
  • Add tests for using keywords as field names by @SupunS in #3057
  • Minor improvement in a revertibleRandom test by @tarakby in #3060
  • Add tests for migrating reference to optional type by @SupunS in #3123
  • Add test for nested container value migration by @SupunS in #3142
  • Add a test case for non-public interface members by @turbolent in #3260
  • Add test for untyped optional nested-reference creation by @SupunS in #3317
  • Add reproducer as test for Cadence 1.0 migration issue #3288 by @fxamacker in #3314
  • Add back transaction execute tests by @SupunS in #3345
  • Add some more tests for string functions by @turbolent in #3453
  • Update Fungible token transfer benchmark by @SupunS in #3471
  • Add checker tests for nil-coalesce type inference by @SupunS in #3495
  • Add regression tests for nil-coalescing bug by @turbolent in #3553
  • Smoke test update of enum key in dictionary by @turbolent in #3556
  • Add contract-update test for removing a field from nested resource by @SupunS in #3559
  • Add test for modifying events during contract updates by @SupunS in #3561

πŸ“– Documentation

Other Changes

  • Merge master into Stable Cadence feature branch by @turbolent in #1922
  • Merge master to Stable Cadence feature branch by @turbolent in #1943
  • Sync Stable Cadence by @turbolent in #2014
  • Sync Stable Cadence feature branch by @turbolent in #2051
  • Sync Stable Cadence feature branch by @turbolent in #2089
  • Refactor reference tests by @SupunS in #2086
  • Sync Stable Cadence feature branch by @turbolent in #2098
  • Sync stable cadence branch with master by @SupunS in #2111
  • Sync Stable Cadence by @turbolent in #2124
  • Clean up function types and type annotations by @turbolent in #2126
  • Sync Stable Cadence branch by @turbolent in #2150
  • Update Stable Cadence feature branches in downstream dependencies by @turbolent in #2158
  • Merge master into Stable Cadence by @turbolent in #2189
  • Sync master to Stable Cadence by @turbolent in #2219
  • Sync Stable Cadence by @turbolent in #2230
  • Optimize keyword testing by @turbolent in #2295
  • Sync Stable Cadence by @turbolent in #2311
  • backport #2302 to stable cadence (fix docstring parsing after functions) by @dreamsmasher in #2329
  • Sync Stable Cadence by @turbolent in #2333
  • Sync Stable Cadence by @dsainati1 in #2367
  • Sync Stable Cadence by @turbolent in #2402
  • Sync stable-cadence branch with master by @SupunS in #2455
  • Sync stable-cadence branch with master by @SupunS in #2477
  • Merge master into Stable Cadence feature branch by @turbolent in #2513
  • Merge release/v0.39.12 to master by @github-actions in #2591
  • Merge Entitlements feature branch into Stable Cadence by @dsainati1 in #2594
  • Merge master to Stable Cadence feature branch by @turbolent in #2593
  • Sync mutability restrictions branch with stable-cadence by @SupunS in #2600
  • Add support for forks to compatibility check by @turbolent in #2612
  • Set permissions in backward compatibility check by @turbolent in #2613
  • Merge release/v0.39.13-stable-cadence to feature/stable-cadence by @github-actions in #2611
  • Don't skip benchmark for forks by @turbolent in #2616
  • Add mailmap by @turbolent in #2628
  • Use diff command to generate diff by @turbolent in #2636
  • Sync Stable Cadence by @turbolent in #2634
  • Bump version to v0.39.14 by @SupunS in #2660
  • Sync stable cadence branch with master by @SupunS in #2667
  • Rename mutability entitlements by @SupunS in #2690
  • Update to Go 1.20, improve random value generation by @turbolent in #2694
  • Merge release/v0.40.0 to master by @github-actions in #2695
  • Update storage iteration value check and related tests by @SupunS in #2702
  • Sync Stable Cadence branch with master by @turbolent in #2701
  • Update mutability restrictions feature branch by @turbolent in #2714
  • Add cadence-tools/test as a dependency to the language server by @SupunS in #2742
  • Sync feature/range-type branch with master by @SupunS in #2747
  • Sync Stable Cadence feature branch by @turbolent in #2755
  • Clean up intersection types by @turbolent in #2757
  • Merge master into Stable Cadence by @dsainati1 in #2770
  • Merge release/v0.41.0 to master by @github-actions in #2786
  • Merge release/v0.41.1 to master by @github-actions in #2795
  • Sync Stable Cadence by @turbolent in #2796
  • Assign issues to group by @turbolent in #2797
  • Remove unused composite type to interface type conversion function by @turbolent in #2804
  • Sync Stable Cadence by @turbolent in #2820
  • Merge release/v0.42.0 to master by @github-actions in #2852
  • Sync Stable Cadence by @turbolent in #2854
  • Add computation metering to the new stdlib functions by @SupunS in #2880
  • Use ComputationKindLoop for internal array-value iterations by @SupunS in #2891
  • Merge release/v0.42.1 to master by @github-actions in #2893
  • Add meeting notes for 2023-10-24 by @turbolent in #2897
  • Sync stable cadence branch with master by @SupunS in #2899
  • Merge release/v0.42.2 to v0.42 by @github-actions in #2905
  • [v0.42] Port adding new revertibleRandom function by @SupunS in #2910
  • Merge release/v0.42.3 to v0.42 by @github-actions in #2911
  • Update tests for Crypto contract to the latest testing framework API by @m-Peter in #2856
  • Remove StandardLibraryHandler method from TestFramework interface by @m-Peter in #2927
  • Merge release/v0.42.4 to v0.42 by @github-actions in #2934
  • Fix Semgrep by @turbolent in #2939
  • Merge v0.42 into master by @turbolent in #2940
  • Merge release/v0.42.5 to v0.42 by @github-actions in #2941
  • Sync stable-cadence branch with master by @SupunS in #2964
  • Remove unsafeRandom by @turbolent in #2966
  • Sync stable-cadence branch with master by @SupunS in #2968
  • Cleanup reference tracking by @SupunS in #2969
  • Make checkParameterizedTypeIsInstantiated recursive by @darkdrag00nv2 in #2915
  • Sync feature/range-type branch with master by @SupunS in #2995
  • Merge release/v1.0.0-preview.2 to master by @github-actions in #3024
  • Upgrade exp package version by @tarakby in #3027
  • Merge release/v1.0.0-M3 to master by @github-actions in #3041
  • Merge release/v1.0.0-M4 to master by @github-actions in #3049
  • Merge release/v1.0.0-M5 to master by @github-actions in #3067
  • Merge release/v1.0.0-M6 to master by @github-actions in #3100
  • Update configuration of downstream dependencies by @turbolent in #3095
  • Merge release/v1.0.0-M7 to master by @github-actions in #3106
  • Dependencies got updated to onflow/flowkit/v2 by @turbolent in #3109
  • Merge release/v1.0.0-M8 to master by @github-actions in #3129
  • Pass location-range to value-interface methods by @SupunS in #3140
  • Merge release/v1.0.0-M9 to master by @github-actions in #3148
  • Merge release/v1.0.0-M10 to master by @github-actions in #3159
  • Update version by @SupunS in #3161
  • Merge release/v1.0.0-preview.11 to master by @github-actions in #3165
  • Merge release/v1.0.0-preview.12 to master by @github-actions in #3167
  • Merge release/v1.0.0-preview.13 to master by @github-actions in #3171
  • Merge release/v1.0.0-preview.14 to master by @github-actions in #3174
  • Merge release/v1.0.0-preview.15 to master by @github-actions in #3180
  • Merge release/v1.0.0-preview.16 to master by @github-actions in #3185
  • Update CODEOWNERS by @turbolent in #3190
  • Merge release/v1.0.0-preview.17 to master by @github-actions in #3200
  • Merge release/v1.0.0-preview.18 to master by @github-actions in #3202
  • Bump atree version in Cadence v1.0 for new features (e.g. deduplication of Cadence dictionary type info) by @fxamacker in #3178
  • Merge release/v1.0.0-preview.19 to master by @github-actions in #3217
  • Sync atree inlining branch with master by @SupunS in #3179
  • Merge master into v1.0 atree register inlining feature branch by @turbolent in #3229
  • Bump onflow/atree to latest version in feature/atree-register-inlining-v1.0 by @fxamacker in #3223
  • Merge release/v1.0.0-preview.20 to master by @github-actions in #3239
  • Tool for converting staged contracts migration report from JSON to Markdown by @SupunS in #3249
  • Bump atree version in master branch by @fxamacker in #3254
  • Bump atree version in feature/atree-register-inlining-v1.0 by @fxamacker in #3256
  • Update atree register inlining 1.0 feature branch by @turbolent in #3259
  • Merge release/v1.0.0-preview.21 to master by @github-actions in #3269
  • Merge master into atree register inlining v1.0 branch by @turbolent in #3270
  • Adding migration result for staged contracts migration, testnet, Apri… by @j1010001 in #3263
  • Adding staged contracts migration output JSON from Apr 17 to migratio… by @j1010001 in #3273
  • Merge release/v1.0.0-preview.22 to master by @github-actions in #3279
  • Adjust branches of downstream dependency checks by @turbolent in #3280
  • Replace colons in staged contract reports by @jribbink in #3281
  • Adding migration result for Testnet state from Apr 24 by @j1010001 in #3285
  • Add basic stats and section on newly failing contracts by @j1010001 in #3286
  • Merge release/v1.0.0-preview.23 to master by @github-actions in #3289
  • Update update tool config by @turbolent in #3292
  • Bump atree version in master branch by @fxamacker in #3293
  • Bump atree version in feature/atree-register-inlining-v1.0 by @fxamacker in #3295
  • Merge release/v1.0.0-preview.24 to master by @github-actions in #3302
  • Update atree inlining v1.0 feature branch by @turbolent in #3301
  • Merge release/v1.0.0-preview.25 to master by @github-actions in #3305
  • Update atree inlining 1.0 branch by @turbolent in #3306
  • Adding migration report for TN state snapshot taken May 1st by @j1010001 in #3311
  • Update atree register inlining v1.0 by @turbolent in #3320
  • Merge release/v1.0.0-preview.26 to master by @github-actions in #3321
  • adding staged contracts migration report from TN state taken on May 8 by @j1010001 in #3330
  • Update flow-go related configuration by @turbolent in #3319
  • Bump atree version to v0.8.0-rc.2 in feature/atree-register-inlining-v1.0 by @fxamacker in #3346
  • Bump atree version to v0.7.0-rc.2 in master branch by @fxamacker in #3347
  • Merge release/v1.0.0-preview.27 to master by @github-actions in #3349
  • Sync feature/atree-register-inlining-v1.0 with master by @fxamacker in #3351
  • Merge release/v1.0.0-preview.28 to master by @github-actions in #3353
  • Merge release/v1.0.0-preview.29 to master by @github-actions in #3358
  • Update atree register inlining v1.0 by @turbolent in #3359
  • Uploading migration results for TN state snapshot taked May 13 by @j1010001 in #3360
  • move may15 staged contracts report to the correct directory by @j1010001 in #3361
  • Bump atree version to v0.8.0-rc.3 in feature/atree-register-inlining-v1.0 by @fxamacker in #3365
  • Adding migration report - TN May 22 by @j1010001 in #3367
  • Add migration environment endpoint to the report by @j1010001 in #3369
  • Merge release/v1.0.0-preview.30 to master by @github-actions in #3377
  • Update atree register inlining v1.0 by @turbolent in #3378
  • Merge release/v1.0.0-preview.31 to master by @github-actions in #3382
  • Add report from May 29 by @j1010001 in #3384
  • Update atree register inlining feature branch to v1.0.0-preview.30 by @turbolent in #3383
  • Merge release/v1.0.0-preview.32 to master by @github-actions in #3389
  • Update atree inlining branch by @turbolent in #3390
  • Update copyright notice by @turbolent in #3391
  • Update to Go 1.22 by @turbolent in #3393
  • Merge release/v1.0.0-preview.33 to master by @github-actions in #3399
  • adding report from June 5 TN state migration by @j1010001 in #3400
  • Update feature/atree-register-inlining-v1.0 to latest master by @fxamacker in #3414
  • Merge release/v1.0.0-preview.34 to master by @github-actions in #3415
  • Merge v1.0.0-preview.34 into feature/atree-register-inlining-v1.0 by @turbolent in #3416
  • adding report from June 12 TN state migration by @zhangchiqing in #3420
  • Update update tool config by @turbolent in #3427
  • adding report for Testnet migration on June 19 by @j1010001 in #3433
  • Update update tool config by @turbolent in #3435
  • Merge release/v1.0.0-preview.35 to master by @github-actions in #3437
  • Update atree inlining cadence v1.0 feature branch by @turbolent in #3438
  • add migrations data for 2024-06-26 by @zhangchiqing in #3439
  • add root block info for migration net by @zhangchiqing in #3443
  • Add root block info for migration 2024-07-03 by @zhangchiqing in #3451
  • Update atree register inlining v1.0 branch by @turbolent in #3454
  • Merge release/v1.0.0-preview.36 to master by @github-actions in #3452
  • Merge release/v1.0.0-preview.37 to master by @github-actions in #3466
  • Update atree inlining cadence v1.0 by @turbolent in #3467
  • Merge release/v1.0.0-preview.38 to master by @github-actions in #3470
  • Update atree inlining branch by @turbolent in #3472
  • Update feature/atree-register-inlining-v1.0 by @fxamacker in #3474
  • adding report for TN migration Jul 17 by @j1010001 in #3476
  • Cleanup ConvertSemaAccessToStaticAuthorization method by @SupunS in #3479
  • Merge release/v1.0.0-preview.39 to master by @github-actions in #3487
  • Update atree register inlining 1.0 branch by @turbolent in #3488
  • adding migration result from Jul 24, preview 34 by @j1010001 in #3489
  • Move migration report files for 2024-07-17 into correct directory by @turbolent in #3490
  • Merge release/v1.0.0-preview.40 to master by @github-actions in #3496
  • Update atree inlining v1.0 branch by @turbolent in #3501
  • Update feature/atree-register-inlining-v1.0 to use atree v0.8.0-rc.5 by @fxamacker in #3500
  • Merge release/v1.0.0-preview.42 to master by @github-actions in #3504
  • adding migration report from Testnet migration on 31st July by @j1010001 in #3506
  • Add migration report for aug 7 by @zhangchiqing in #3510
  • Update staged-contracts-report-2024-08-07T10-00-00Z-testnet.md by @j1010001 in #3513
  • Merge release/v1.0.0-preview.43 to master by @github-actions in #3512
  • Merge release/v1.0.0-preview.44 to master by @github-actions in #3515
  • Merge release/v1.0.0-preview.45 to master by @github-actions in #3518
  • Merge release/v1.0.0-preview.46 to master by @github-actions in #3521
  • Merge release/v1.0.0-preview.47 to master by @github-actions in #3523
  • add staged report for aug 12 by @zhangchiqing in #3525
  • Merge release/v1.0.0-preview.48 to master by @github-actions in #3526
  • Add staged contracts report for testnet spork on aug 14 by @zhangchiqing in #3531
  • Crescendo Mainnet migration report Aug 16 by @j1010001 in #3541
  • Merge release/v1.0.0-preview.49 to master by @github-actions in #3545
  • Merge release/v1.0.0-preview.50 to master by @github-actions in #3549
  • Merge release/v1.0.0-preview.51 to master by @github-actions in #3558

New Contributors

Full Changelog: v0.39.12...v1.0.0