fvm 4.8.2

Filecoin Virtual Machine reference implementation
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
# Changelog

Changes to the reference FVM implementation.

## [Unreleased]

## 4.8.2 [2026-04-17]

- Bump `multihash-codetable` to get rid of `core2`
- Deprecate `nv28-dev` in favor of `nv29-dev`; `V28` support is now part of the default build.

## 4.8.0 [2026-04-16]

- feat(executor): expose return codec in ApplyRet [#2264]https://github.com/filecoin-project/ref-fvm/pull/2264
- feat: cacheless hamt iteration [#2216]https://github.com/filecoin-project/ref-fvm/pull/2216
- chore: update proofs dependency and rust toolchain [#2265]https://github.com/filecoin-project/ref-fvm/pull/2265

## 4.7.5 [2025-11-15]

- Update `wasmtime` to 36

## 4.7.4 [2025-10-06]

- feat: nv28 skeleton [#2220]https://github.com/filecoin-project/ref-fvm/pull/2220
- fix: propagate errors in Amt::for_each_cacheless [#2218]https://github.com/filecoin-project/ref-fvm/pull/2218
- chore(deps): bump serde_ipld_dagcbor from 0.6.3 to 0.6.4 [#2222]https://github.com/filecoin-project/ref-fvm/pull/2222
- chore(deps): bump serde_tuple from 0.5.0 to 1.1.2 [#2199]https://github.com/filecoin-project/ref-fvm/pull/2199
- chore(deps): bump criterion [#2217]https://github.com/filecoin-project/ref-fvm/pull/2217

## 4.7.3 [2025-08-22]

- chore(deps): update replace_with and slab transitive dependencies [#2197]https://github.com/filecoin-project/ref-fvm/pull/2197
- chore(deps): bump filecoin-proofs-api from 18.1.0 to 19.0.0 [#2200]https://github.com/filecoin-project/ref-fvm/pull/2200
- chore(deps): bump serde_ipld_dagcbor from 0.6.2 to 0.6.3 [#2201]https://github.com/filecoin-project/ref-fvm/pull/2201
- chore: remove the nv27-dev feature flag [#2202]https://github.com/filecoin-project/ref-fvm/pull/2202

## 4.7.2 [2025-05-01]

- feat: add nv27-skeleton [#2175]https://github.com/filecoin-project/ref-fvm/pull/2175
- chore: use workspace fields for license & repository url [#2172]https://github.com/filecoin-project/ref-fvm/pull/2172
- Update to 2024 edition everywhere else [#2170]https://github.com/filecoin-project/ref-fvm/pull/2170
- fix: correctly deserialize test vectors [#2168]https://github.com/filecoin-project/ref-fvm/pull/2168
- Switch to rust 2024 edition [#2162]https://github.com/filecoin-project/ref-fvm/pull/2162

## 4.7.1 [2025-04-15]

- Upgrade to fvm_shared@v4.7.1 to fix: accept malleable secp256k1 signatures (per EVM, etc.) [#2156]https://github.com/filecoin-project/ref-fvm/pull/2156

## 4.7.0 [2025-04-09]

_This is not a required upgrade for the Teep or Tock network versions._

- Update wasmtime to v31.0.0 [#2130]https://github.com/filecoin-project/ref-fvm/pull/2130
- Swap libsecp256k1 for k256 [#2135]https://github.com/filecoin-project/ref-fvm/pull/2135
- Update other dependencies [#2136]https://github.com/filecoin-project/ref-fvm/pull/2136, [#2145]https://github.com/filecoin-project/ref-fvm/pull/2145, [#2146]https://github.com/filecoin-project/ref-fvm/pull/2146, [#2146]https://github.com/filecoin-project/ref-fvm/pull/2146
- Update to Rust 1.86.0 [#2121]https://github.com/filecoin-project/ref-fvm/pull/2121
- Add `Ipld` to `ExecutionEvent` enum to record Get and Put operations during execution [#2113]https://github.com/filecoin-project/ref-fvm/pull/2113
- Add `flush_all_blocks` boolean to `MachineContext` to control whether all blocks created during execution are written to the blockstore or just those reachable from the final state root during `flush()` [#2101]https://github.com/filecoin-project/ref-fvm/pull/2101

## 4.6.1 [2025-04-04]

- Fix Teep pricing for NI-PoRep.

## 4.6.0 [2025-03-14]

- Update `ipld-core` and `serde_ipld_dagcbor` [#2104]https://github.com/filecoin-project/ref-fvm/pull/2104
- Add support for Teep/Tock
- Move the actor logs into the trace [#2098]https://github.com/filecoin-project/ref-fvm/pull/2098

## 4.5.3 [2024-12-04]

- chore: remove the nv25-dev feature flag [#2093]https://github.com/filecoin-project/ref-fvm/pull/2093

## 4.5.2 [2024-11-21]

- feat: add `nv25-dev` feature flag [#2076]https://github.com/filecoin-project/ref-fvm/pull/2076

## 4.5.1 [2024-11-08]

Remove unnecessary features from `multihash-codetable`.

## 4.5.0 [2024-10-31]

- Update `cid` to v0.11 and `multihash` to v0.19.
- Update to `fvm_ipld_blockstore` 0.3.0 and `fvm_ipld_encoding` 0.5.0.

You will have to update your multihash and cid crates to be compatible, see the [multihash release notes](https://github.com/multiformats/rust-multihash/blob/master/CHANGELOG.md#-2023-06-06) for details on the breaking changes.

## 4.4.3 [2024-10-21]

- Update wasmtime to 25.0.2.
- Fixes long wasm compile times with wasmtime 24.

## 4.4.2 [2024-10-09]

- Update wasmtime to 24.0.1.

## 4.4.1 [2024-10-04]

- chore: remove the `nv24-dev` feature flag [#2051]https://github.com/filecoin-project/ref-fvm/pull/2051

## 4.4.0 [2024-09-12]

- Update to wasmtime 24.
- Switch from mach ports to unix signal handlers on macos.
- Update misc dependencies.

## 4.3.2 [2024-08-16]

- feat: add `nv24-dev` feature flag [#2029]https://github.com/filecoin-project/ref-fvm/pull/2029

## 4.3.1 [2024-06-26]

- **BREAKING**: Simplify the verify-signtures feature and update ambassador. This is a minor-breaking change because the ambassador macros are now only exported from the prelude/kernel module, not the crate root as they previously were.
- chore: remove the `nv23-dev` feature flag [#2022]https://github.com/filecoin-project/ref-fvm/pull/2022
- chore: update wasmtime to 19.0.2

## 4.3.0 [2024-06-12]

- feat: FIP-0079: syscall for aggregated bls verification [#2003]https://github.com/filecoin-project/ref-fvm/pull/2003
- fix: install rust nightly toolchain for clusterfuzzlite [#2007]https://github.com/filecoin-project/ref-fvm/pull/2007
- chore: upgrade rust toolchain to 1.78.0 [#2006]https://github.com/filecoin-project/ref-fvm/pull/2006
- fix: remove the pairing feature from fvm_shared [#2009]https://github.com/filecoin-project/ref-fvm/pull/2009
- Small tidy-ups in CONTRIBUTING.md [#2012]https://github.com/filecoin-project/ref-fvm/pull/2012
- NI-PoRep support [#2010]https://github.com/filecoin-project/ref-fvm/pull/2010

## 4.2.0 [2024-04-29]

- chore: update to wasmtime 19.0.1 [#1993]https://github.com/filecoin-project/ref-fvm/pull/1993
- Enable nv23 support behind the `nv23-dev` feature flag [#2000]https://github.com/filecoin-project/ref-fvm/pull/2000
- feat: fvm: remove once_cell [#1989]https://github.com/filecoin-project/ref-fvm/pull/1989
- feat: shared: check bls zero address without lazy_static [#1984]https://github.com/filecoin-project/ref-fvm/pull/1984

## 4.1.2 [2024-01-31]

feat: allow CBOR events

## 4.1.1 [2024-01-25]

Enable nv22 support by default.

## 4.1.0 [2024-01-24]

- Default the concurrency of the `ThreadedExecutor` to the available parallelism instead of 8.
- Support custom syscalls (only needed for non-Filecoin users).
    - Filecoin now uses the `FilecoinKernel`, not the `DefaultKernel`. The `DefaultKernel` no longer implements Filecoin specific features.
    - The `Kernel` trait now inherits from the `SyscallHandler` trait, allowing kernels to decide how they want to expose themselves to actors via syscalls.
- Many internal architecture cleanups with respect to the Kernel and syscall bindings.
- Added the current actor state to the execution trace (in the `Invoke` event).
- Add a syscall (enabled with the "upgrade-actor" feature flag) that lets actors "swap-out" their code-CID.

## 4.0.0 [2023-10-31]

Final release, no changes.

## 4.0.0-alpha.4 [2023-09-28]

- Add back some proof types that were mistakenly removed, and fix some of the constants.

## 4.0.0-alpha.3 [2023-09-27]

- Remove support for v1 proofs.
- Make it possible to construct a GasDuration (and make it possible to refer to the GasDuration type).

## 4.0.0-alpha.2 [2023-09-21]

- Update to wasmtime 12.0.2 (bug fix release)
- Drop support for versions prior to nv21.
- Implement FIP-0071, FIP-0072, FIP-0073, FIP-0075

## 4.0.0-alpha.1 [2023-09-20]

Unreleased. This release simply marks the change-over to v4.

## 3.8.0 [2023-09-06]

- Upgrade wasmtime to v12. Unlike prior wasmtime upgrades, this shouldn't be a breaking change as it now mangles its symbols.
- BREAKING: Upgrade the proofs API to v16.
- BREAKING (linking): upgrade blstrs to v0.7 and
- BREAKING: update the minimum rust version to 1.70.0

## 3.7.0 [2023-08-28]

- BREAKING: Add fields to the trace API:
    - Add a `gas_limit` and `read_only` fields to `ExecutionEvent::Call`.
    - Add a new `ExecutionEvent::InvokeActor(code_cid)` event when an actor is invoked on any method number (including method 0).
- Remove the unused `crypto::verify_seal` syscall.

## 3.6.0 [2023-08-18]

Breaking Changes:
- Perform randomness hashing in the kernel
  - The FVM no longer supplies a DST and entropy to the client extern when requesting randomness
  - It expects the client to return the "digest", from which the kernel then draws the randomness
  - Clients integrating this change should:
    - no longer expect the DST and entropy parameters for the `get_chain_randomness` and `get_beacon_randomness` externs
    - omit the last step they currently perform when drawing randomness; that is, return the hashed digest after looking up the randomness source
- Drop deprecated `hyperspace` feature

Other Changes:
- Add support for nv21 behind the `nv21-dev` feature flag
  - Note: We do NOT expect to support nv21 on FVM3, this only facilitates the development of nv21 before FVM4 is ready
  - We use the Hygge pricelist as-is for nv21 if the `nv21-dev` feature flag is enabled
- Refactor: remove `with_transaction` and move the "return" gas charge
  - transaction logic is now entirely in `CallManager::send`
- Syscalls: fix: Do not assume return pointers are aligned
- Buffered Blockstore: fixup IPLD flush logic 
  - Make it less generic (performance).
  - Remove blocks from the write buffer as we write them to avoid
    duplicate writes.
  - Simplify some of the checks around what is allowed. For example, I'm
    now allowing CBOR + Identity hash which should have been allowed
    previously but wasn't (we don't use it but still, it should have been
    allowed).
  - Remove the explicit 100 byte CID length check. The `Cid` type already
    validates that the digest can be no longer than 64 bytes.
  - Be less strict on DagCBOR validation. Counter-intuitively, being
    overly strict here is dangerous as it gives us more points where
    implementations can disagree and fork. Instead, we enforce the
    following rules for DAG_CBOR:
    1. Blocks must have a valid CBOR structure, but _values_ aren't
       validated. E.g., no utf-8 validation, no float validation, no
       minimum encoding requirements, no canonical ordering requirements,
       etc.
    2. All CBOR values tagged with 42 must be valid CIDs. I.e., a CBOR
       byte string starting with a 0x0 byte followed by a valid CID with
       at most a 64 byte digest.

## 3.5.0 [2023-06-27]

Breaking Changes:

- Update cid/multihash. This is a breaking change as it affects the API.
- Make `Kernel::send` generic over the kernel that will be used by the called actor. This significantly simplifies testing.
- Upgrade wasmtime to v10.

Other Changes:

- This version allows over-subscription on the instance pool when executing multiple messages in parallel. This means the number of parallel execution lanes is no longer limited by the address space (or no longer _as_ limited).

## 3.4.0 [2023-05-04]

Update wasmtime to 8.0.1. This is a breaking change if you use any other wasmtime version.

## 3.3.1 [2023-04-26]

This release contains a small hack for calibrationnet and is optional for users who only want to
sync mainnet.

## 3.3.0 [2023-04-23]

- Fixes an issue with proof bindings.

## 3.2.0 [2023-04-04]

- Support nv19/nv20
- Remove unused dependencies.
- BREAKING: Upgrade proofs to version 14.0.0 (for nv19).
- Switch build to rust stable (finally).

## 3.1.0 [2023-03-09]

Update proofs. Unfortunately, this is a breaking change in a minor release but we need to do the same on the v2 release as well. The correct solution is to introduce two crates, fvm1 and fvm2, but that's a future project.

## 3.0.0 [2023-02-24]

- Final release for NV18.

## 3.0.0-rc.1 [2022-02-13]

- Removes an incorrect event size limit.

## 3.0.0-alpha.24 [2022-02-09]

- Add IPLD codecs to the gas trace. I.e., use `IpldBlock` instead of `RawBytes`.
- Finalize gas parameters.

## 3.0.0-alpha.23 [2022-02-06]

- Large update to gas charging:
    - Change send gas.
    - Add actor lookup/update gas.
    - Add address lookup/update gas.
    - Update IPLD gas fees.
    - Update event gas.
    - Add a tipset lookup gas fee.
- Tweaks to the event syscall parameters (it now takes a codec and accepts raw values).

## 3.0.0-alpha.22 [2022-02-01]

- Align events implementation with FIP-0049 (#1481)
- feat: explicitly reject placeholder creation (#1568)
- Integrate fvm-bench and the basics of a testkit (#1493)
- feat: simplify gas tracking stack (#1526)
- feat: `CarReader::read_into()` (#1524)
- feat: normalize transaction signatures (#1525)
- fix: expose the effective gas premium (#1512)

## 3.0.0-alpha.21 [2022-01-19]

- Machine: Put the Empty Array object in the blockstore on creation
- Kernel: Restrict `create_actor` to the InitActor
  - We make an exception for integration tests
- Deps: Update `derive_builder` to 0.12.0
- Use CBOR instead of DAG_CBOR for message params

## 3.0.0-alpha.20 [2022-01-17]

- Add `hyperspace` feature to loosen up network version restrictions.

## 3.0.0-alpha.19 [2022-01-13]

- Adjust memory retention gas fees.
- Add a basic block-size limit of 1MiB.
- Update wasmtime to v2.0.2

## 3.0.0-alpha.18 [2022-01-10]

- Remove the CBOR trait
  - the `read_cbor` syscall is implemented over `DeserializeOwned`
- Executor: Always transform embryo to eth_account if executing message
- Rename embryo -> placeholder
- Kernel: remove support for non-key addresses from `verify_signature`
- Gas: Make the block "read" charge more accurate 
- StateTree: Rewrite snapshotting to have O(1) lookups
  - Maintain an undo history instead of true state "layers"
- Kernel: fix: return `NotFound` from `balance_of`
- feat: refactor memory limits and apply to tables
  - Refactors memory limits to remove the per-instance limits from the limiter itself
  - Removes wasmtime interfaces from the limiter, instead implementing a wrapper\
- Gas: Finalize write costs
- Gas: Remove the explicit extern cost
- CallManager: Change the recursive call limit to 1024

## 3.0.0-alpha.17 [2022-12-19]

- feat: split the state-tree's "read" and "write" caches
- fix: use correct sender state for account abstraction
- refactor: update the gas schedule:
  - Remove the old gas schedules.
  - Use ScalingCost everywhere to make things simpler.
  - Try to clearly split up operations in a way that should be easier to measure.
  - Rename the "storage gas" field on gas charges to "other gas", and move all charges that aren't charging for immediate computation. This makes benchmarking easier. Includes:
    - Deferred operations (e.g., flush).
    - Memory retention
    - Storage
  - Signature Validation:
    - Secp256k1 signature verification has gained a new 10gas/byte cost to reflect the cost of hashing (blake2b).
    - BLS signature verification has gained a new 26gas/byte cost to reflect the cost of hashing.
  - Hashing no longer has a flat cost (was 31355) but has the following costs (per algorithm):
    - sha256: 7gas/byte
    - blake2b: 10gas/byte
    - keccak256: 33gas/byte
    - ripemd160: 35gas/byte
  - Memory:
    - Memory copy costs have been reduced from 0.5gas/byte to 0.4gas/byte.
    - The "memory retention" cost of 10gas/byte has been split into a 2gas/byte memory _allocation_ cost, and an 8gas/byte memory retention cost.
  - Storage:
    - Block storage costs have increased by 13.8gas/byte (from 1300gas/byte to 1313.8gas/byte, or 1%):
      - PLUS 2 * 2 = 4 gas for an expected 2 allocations (one on write, one on flush).
      - PLUS 10gas/byte for hashing.
      - MINUS 0.1 * 2 gas/byte for the reduction in memcpy costs.
  - Randomness now charges for hashing:
    - 1400 for the "extern" call. 
    - 10gas/byte of entropy plus 480 gas for hashing the randomness itself.
- Explicit gas charges for different instruction types
- feat: charge 0.4gas/byte for memory copy and initialization

## 3.0.0-alpha.16 [2022-12-17]

- fix: remove duplicate "create_actor" method
- chore: remove "singleton" check
  - The singletons now generally assert that they've been created by the "system" actor.
- feat: only store delegated addresses in the state-tree
  - Restore the logic for resolving key addresses when verifying signatures.
  - Mass rename of predictable -> delegated.
  - No longer store f1/f3 in the delegated_address field of an ActorState.
- CallManager: Restrict embryo creation to the EAM's namespace
- feat: Gas: Reprice syscalls for which we have models

## 3.0.0-alpha.15 [2022-12-14]

- Refactor: Extract the `Engine` from the `Machine` and make it a pool
  - The `Engine` is replaced by an "Engine Pool", with `concurrency * call_depth` instances
  - The Engine Pool lives in the `Executor`
  - The `Engine` itself lives in the `CallManager`
- Update instrumentation logic
- Add charging logic for all memory copy and init operations
- Refactor: Move `ChainID` out of FVM (and into shared)
- Compile with `m2-native`
- Fix: Missing `Engine` getter 
- Feat: Gas timing stats and visualization
  - Adds gas timing tracing to conformance tests 
  - Adds a gas calibration contract to run specific instructions
- Feat: Implement Ethereum Account Abstraction
  - Remove the f4-as-account feature/hack entirely
  - The executor checks if sender is an embryo actor
  - If so, and the delegated address is in the f410 namespace, an Ethereum Account is deployed there

## 3.0.0-alpha.14 [2022-12-08]

- In send, change 0 gas to mean 0 gas (not unlimited).

## 3.0.0-alpha.13 [2022-12-07]

- FIX: Only push backtrace frames on _error_.
- Remove the gas limit from the context.
- Disable `memory_init_cow` in wasmtime. This will use a bit more memory, but will be predictable.
- Add the chain ID to the network context (defaults to 0).
- Add the nonce to the message context.

## 3.0.0-alpha.12 [2022-11-29]
- Fix: make sure exit never fails, even on an invalid message
- Limit the size of backtrace messages to 1k
- Add interior mutability to the gas tracker
- Refactor: Use ActorIDs for internal methods instead of Addresses
  - The caller now has to handle any resolution errors, and can choose how to do so
  - Avoid marking failures in some state-tree modification functions as "fatal errors".
- Add a read-only mode to Sends
  - Adds the concept of "read-only" layers to both the event accumulator and the state tree.
- Raise the maximum memory limit from 512MiB to 2GiB
- Fix: charge for the first page of gas
- Send syscall: add an optional gas limit
  -If specified, this limit will restrict the Send, not the message's remaining gas limit
- Charge gas for more syscalls
  - See [#1139]https://github.com/filecoin-project/ref-fvm/pull/1139 for the complete list

## 3.0.0-alpha.11 [2022-11-18]

- Replace `new_actor_address` with `next_actor_address`. `next_actor_address` has no side effects (until the actor is actually created).
- Change `next_actor_address` to always use the origin address from the message, as specified. For abstract accounts, we _can't_ lookup a key address (they may only have an f0 and f2 address).
- Move account creation logic to the call manager.
  - The call manager owns the relevant state.
  - The call manager will eventually invoke the constructor directly when creating the actor.
- Change the `abort` syscall to `exit` to allow:
  - non-local exits.
  - returning values on aborts.
- Add a method to the externs to lookup tipset CIDs.
- Remove the NetworkContext from the FVM builder API because we no longer expect the user to pass us a list of tipset CIDs.
- Change kernel internals to merge all network/message "context" methods into single methods returning `*Context` structs.
- Avoid treating out of memory instantiation errors as fatal.

## 3.0.0-alpha.10 [2022-11-17]

- Refactor network/message contexts to reduce the number of syscalls.

## 3.0.0-alpha.9 [2022-11-16]

- fix: BufferedBlockstore#flush should not reset the write buffer.

## 3.0.0-alpha.8 [2022-11-15]

- Add support for actor events (FIP-0049).

## 3.0.0-alpha.7 [2022-11-14]

- MEM-851: Memory expansion gas (#1067)
- Split `InvokeContext` into two (#1070)
- Support EAM singleton in manifest (#1005)

## 3.0.0-alpha.6

- update the state-tree version to v5
- enable instrumentation of sign extension instructions (only relevant to anyone playing around with native actor support).

## 3.0.0-alpha.5

- fix compile issues with f4-as-account feature.

## 3.0.0-alpha.4

- Resolve key addresses from the state tree instead of reaching into the account actor state
- Temporary workaround: allow validating signatures from embryo f4 addresses

## 3.0.0-alpha.3

- Fix the address length checks in the `create_actor` syscall. The previous release was broken.

## 3.0.0-alpha.2

- Autoload wasm modules from the blockstore if they haven't been preloaded.
- Add a new `balance_of` syscall.
- Add a new `tipset_cid` syscall.
- Add a new `timestamp` syscall.
- Add syscalls to get the gas limit, premium, and available gas.
- Add support for f4 addresses and auto-creating "embryos" on first send to an f4 address.
- Update wasmtime to 1.0.
- Add support for network version 18.

## 3.0.0-alpha.1

- Add the origin to the `vm::context` syscall.
- Add an `m2-native` feature to enable native actor deployment.

## 2.0.0...

See `release/v2`

- Added `recover_secp_public_key` syscall
- API BREAKING: Change `TokenAmount` type from a newtype to a struct.
- Add support for additional hash functions in actors:
    - sha256
    - keccak256
    - ripemd160
    - blake2b512
- API BREAKING: add gas charges to the execution trace.

## 1.1.0 [2022-06-27]

- debug execution: implement actor redirects in engine

## 1.0.0 [2022-06-23]

- Fixup WASM sections after instrumenting for gas and stack accounting. Without this,
  instrumentation would produce incorrect wasm modules in some cases.
- Fix exec tracing when stack depth is exceeded.
- Fix logging syscall to skip logging when debugging is _not_ enabled (the check was flipped).
- Audit and cleanup TODOs.
- Remove unused imports, etc.
- Refactor the blockstore "flush" to behave more like lotus.
- Upgrade wasmtime to 0.37.
- Fix the read syscall to correctly compute the returned "offset". Previously, it would never return
  a negative value, even if the passed-in buffer was over-sized.
- Make `DefaultExecutor#flush` a method on the `Executor` trait.
- Catch additional inner panics at the kernel layer, lowering them to syscall errors.
- General refinement of error handling by returning more fitting error numbers.
- General upstream dependency upgrade, including Wasmtime to 0.36.0.
- Reinstate the MAX_CID_LEN of 100 bytes.

## 0.8.0 [2022-05-16]

This release includes several major features:

- Final nv16 gas numbers (including charges for memcopies, extern calls, syscalls, etc.).
- Significantly improved wasm gas accounting, and stack accounting, through wasm instrumentation.
- A `ThreadedExecutor` for executing messages on a new thread. This is necessary because we need at
  least 64MiB of stack.
- Panics are now caught at every sub-call and turned into fatal errors.
- When a fatal error is encountered, we now allow the network to continue by:
  - Consuming all message gas.
  - Failing the entire _message_, but not the block.
- A large syscall refactor. These syscall interfaces should be the _final_ interfaces for M1.

**Breaking TL;DR:**

- This release DROPS SUPPORT for nv14.
- This release REQUIRES builtin-actors v7.4.x. v7.3.x _will not work_ due to breaking syscall changes.
- Users _must_ wrap the `DefaultExecutor` in a `ThreadedExecutor` unless they can otherwise
  guarantee at least 64MiB of stack.
- The execution trace format has changed.

Additionally, this release includes:

- Strongly typed a `Gas` type to help statically catch and prevent bugs in gas math.
- Refactored syscalls as described in the `fvm_sdk` v0.7.0 changelog.
- An audited and cleaned up wasmtime config.
- A smaller recursive call limit (now 1024 recursive sub-calls and 2k wasm stack elements).
- Drops support for NV14.
- Requires builtin-actors v7.4.x

## 0.7.2 [2022-05-09]
 
- Add `testing` feature to change module visibility; concretely changed
  visibility of `account_actor`, `init_actor` and `system_actor` to `pub`
  to use them in the integration test framework.
- Propagate gas outputs in ApplyRet.
- Migrate CBOR serde to [cbor4ii]https://github.com/quininer/cbor4ii.
- Instrument Wasm bytecode with [filecoin-project/fvm-wasm-instrument]https://github.com/filecoin-project/fvm-wasm-instrument, 
  a fork of [paritytech/wasm-instrument]https://github.com/paritytech/wasm-instrument
  for more accurate stack accounting and execution units metering.
- Abort when aborting fails.
- Fix syscall binding docs. 
- Fix bugs in Wasm execution units gas accounting.
- Fix system actor state serialization.
- Remove unused dependencies from build graph.
- Optimize memory resolution so it only happens once.

## 0.7.1 [2022-04-18]

This release adds support for execution traces in the FVM which can be enabled using the new `enable_tracing` option in the `MachineContext`.
The change is backwards compatible.

## 0.7.0 [2022-04-15]

This release contains exactly one (breaking) change.

BREAKING: Updates the FVM to the latest syscall struct alignment
(https://github.com/filecoin-project/fvm-specs/issues/63).

## 0.6.0 [2022-04-13]

- WIP NV16 support.
- Implement [FIP0032][]: NV16 will now charge gas for more operations, including execution gas.
- BREAKING: Updates to fvm_shared 0.5.1
    - This refactors the exit code into a struct with constant values instead of an enum.
- BREAKING: Refactor the `Machine` constructor to take a `MachineContext` struct, reducing the
  number of parameters.
- BREAKING: Rename (internal) consume/take methods.
     - `BufferedBlockstore::consume` -> `BufferedBlockstore::into_inner`
     - `Executor::consume` -> `Executor::into_machine`
     - `Kernel::take` -> `Kernel::into_call_manager`
     - `Machine::consume` -> `Machine::into_store`
     - `Hamt::consume` -> `Hamt::into_store`
     - `StateTree::consume` -> `StateTree::into_store`
- BREAKING: remove unused (by the FVM) `verify_post_discount` from the FVM PriceList.

[FIP0032]: https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0032.md