Skip to content

Releases: FuelLabs/fuel-vm

v0.43.2

19 Dec 11:04
0d4fd45
Compare
Choose a tag to compare

Version v0.43.2

Changed

  • #645: Add wasm support for fuel-tx crate.

What's Changed

Full Changelog: v0.43.1...v0.43.2

v0.43.1

29 Nov 09:23
f5f301d
Compare
Choose a tag to compare

Version v0.43.1

Fixed

  • #643: Fixed json deserialization of array fuel types from the file.

What's Changed

New Contributors

Full Changelog: v0.43.0...v0.43.1

v0.43.0

22 Nov 10:32
b560a55
Compare
Choose a tag to compare

Version v0.43.0

Changed

Breaking

  • #640: Update VM initialization cost to dependent cost; this is required because the time it takes to initialize the VM depends on the size of the transaction.

What's Changed

Full Changelog: v0.42.1...v0.43.0

v0.42.3

22 Nov 09:58
Compare
Choose a tag to compare

Release v0.42.3

Reverted release v0.42.2 because of breaking changes. The release v0.42.3 is equivalent to v0.42.1.

Full Changelog: v0.42.2...v0.42.3

v0.42.2

21 Nov 22:05
c1a9af4
Compare
Choose a tag to compare

Version v0.42.2

Changed

Breaking

  • #640: Update VM initialization cost to dependent cost; this is required because the time it takes to initialize the VM depends on the size of the transaction.

What's Changed

Full Changelog: v0.42.1...v0.42.2

v0.42.1

20 Nov 17:52
42f039b
Compare
Choose a tag to compare

Version 0.42.1

Changed

Breaking

  • #637: Charge for the actual size of the contract in ccp opcode.

What's Changed

Full Changelog: v0.42.0...v0.42.1

v0.42.0

13 Nov 22:19
c125299
Compare
Choose a tag to compare

Version v0.42.0

Changed

Breaking

  • #629: Charge the user for VM initialization.

  • #628: Renamed transaction::CheckError to transaction::ValidityError.
    Created a new checked_transaction::CheckError that combines ValidityError
    and PredicateVerificationFailed errors into one. It allows the return of the
    PredicateVerificationFailed to the end user instead of losing the reason why predicate verification failed.

  • #625: Use ArithmeticError only for arithmetic operations, and introduce new errors like BalanceOverflow for others. Whenever an error is internally caused by a type conversion to usize, so that an overflowing value wouldn't map to a valid index anyway, return the missing item error instead.

  • #623:
    Added support for transaction policies. The Script and Create
    transactions received a new field, policies. Policies allow the addition
    of some limits to the transaction to protect the user or specify some details regarding execution.
    This change makes the GasPrice and Maturity fields optional, allowing to save space in the future.
    Also, this will enable us to support multidimensional prices later.
    GasLimit was renamed to ScriptGasLimit.

    Along with this change, we introduced two new policies:

    • WitnessLimit - allows the limitation of the maximum size of witnesses in bytes for the contract. Because of the changes in the gas calculation model(the blockchain also charges the user for the witness data), the user should protect himself from the block producer or third parties blowing up witness data and draining the user's funds.
    • MaxFee - allows the upper bound for the maximum fee that users agree to pay for the transaction.

    This change brings the following modification to the gas model:

    • The ScriptGasLimit only limits script execution. Previously, the ScriptGasLimit also limited the predicate execution time, instead predicate gas is now directly included into min_fee. So, it is not possible to use the ScriptGasLimit for transaction cost limitations. A new MaxFee policy is a way to do that. The GasLimit field was removed from the Create transaction because it only relates to the script execution (which the Create transaction doesn't have).
    • The blockchain charges the user for the size of witness data (before it was free). There is no separate price for the storage, so it uses gas to charge the user. This change affects min_gas and min_fee calculation.
    • A new policy called WitnessLimit also impacts the max_gas and max_fee calculation in addition to ScriptGasLimit(in the case of Create transaction only WitnessLimit affects the max_gas and max_fee).
    • The minimal gas also charges the user for transaction ID calculation.

    The change has the following modification to the transaction layout:

    • The Create transaction doesn't have the ScriptGasLimit field anymore. Because the Create transaction doesn't have any script to execute
    • The Create and Script transactions don't have explicit maturity and gas_price fields. Instead, these fields can be set via a new policies field.
    • The Create and Script transactions have a new policies field with a unique canonical serialization and deserialization for optimal space consumption.

    Other breaking changes caused by the change:

    • Each transaction requires setting the GasPrice policy.
    • Previously, ScriptGasLimit should be less than the MAX_GAS_PER_TX constant. After removing this field from the Create transaction, it is impossible to require it. Instead, it requires that max_gas <= MAX_GAS_PER_TX for any transaction. Consequently, any Script transaction that uses MAX_GAS_PER_TX as a ScriptGasLimit will always fail because of a new rule. Setting the estimated gas usage instead solves the problem.
    • If the max_fee > policies.max_fee, then transaction will be rejected.
    • If the witnessses_size > policies.witness_limit, then transaction will be rejected.
    • GTF opcode changed its hardcoded constants for fields. It should be updated according to the values from the specification on the Sway side.
  • #633: Limit receipt count to u16::MAX.

  • #634: Charge for storage per new byte written. Write opcodes now return the number of new storage slots created, instead of just a boolean on whether the value existed before.

Fixed

  • #627: Added removal of obsolete SMT nodes along the path during update and delete operations.

What's Changed

Full Changelog: v0.41.0...v0.42.0

v0.41.0

09 Nov 08:26
dcd5684
Compare
Choose a tag to compare

Version v0.41.0

Breaking

  • #622: Divide DependentCost into "light" and "heavy" operations: Light operations consume 0 < x < 1 gas per unit, while heavy operations consume x gas per unit. This distinction provides more precision when calculating dependent costs.

What's Changed

Full Changelog: v0.40.0...v0.41.0

v0.40.0

31 Oct 18:45
f77ef3e
Compare
Choose a tag to compare

Version 0.40.0

Added

  • #607: Added ECAL instruction support.

Changed

  • #612: Reduced the memory consumption in all places where we calculate BMT root.
  • #615: Made ReceiptsCtx of the VM modifiable with test-helpers feature.

Breaking

  • #618: Transaction fees for Create now include the cost of metadata calculations, including: contract root calculation, state root calculation, and contract id calculation.
  • #613: Transaction fees now include the cost of signature verification for each input. For signed inputs, the cost of an EC recovery is charged. For predicate inputs, the cost of a BMT root of bytecode is charged.
  • #607: The Interpreter expects the third generic argument during type definition that specifies the implementer of the EcalHandler trait for ecal opcode.
  • #609: Checked transactions (Create, Script, and Mint) now enforce a maximum size. The maximum size is specified by MAX_TRANSACTION_SIZE in the transaction parameters, under consensus parameters. Checking a transaction above this size raises CheckError::TransactionSizeLimitExceeded.
  • #617: Makes memory outside $is..$ssp range not executable. Separates ErrorFlag into InvalidFlags, MemoryNotExecutable and InvalidInstruction. Fixes related tests.
  • #619: Avoid possible truncation of higher bits. It may invalidate the code that truncated higher bits causing different behavior on 32-bit vs. 64-bit systems.

What's Changed

Full Changelog: v0.39.0...v0.40.0

v0.39.0

13 Oct 19:59
33aec0c
Compare
Choose a tag to compare

Version 0.39.0

Added

  • #603: Added MerkleRootCalculatorfor efficient in-memory Merkle root calculation.
  • #603: Added Serialization and Deserialization support to MerkleRootCalculator.

Changed

  • #595: Removed wee_alloc dependency from fuel-asm. It now uses the builtin allocator on web targets as well.

Breaking

  • #598: Update cost model for ldc opcode to take into account contract size.
  • #604: Removed ChainId from PredicateId calculation. It changes the generated address of the predicates and may break tests or logic that uses hard-coded predicate IDs.
  • #594: Add new predicate input validation tests. Also improves error propagation so that predicate error message better reflects the reason for invalidity.
  • #596: Remove core::ops::{Add, Sub} impls from BlockHeight. Use succ and pred to access adjacent blocks, or perform arithmetic directly on the wrapped integer instead.
  • #593: Reworked Mint transaction to work with Input::Contract and Output::Contract instead of Output::Coin. It allows account-based fee collection for the block producer.

What's Changed

  • Remove BlockHeight arithmetic by @Dentosal in #596
  • Remove wee_alloc dependency, use builtin allocator instead by @Dentosal in #595
  • Predicate input validation tests by @Dentosal in #594
  • Remove ChainId from PredicateId calculation by @xgreenx in #604
  • Rework Mint transaction to work with the contract by @xgreenx in #593
  • Improved Memory Efficiency in Merkle Root Calculation by @Salka1988 in #603
  • Include size lookup of contract for computing LDC opcode cost by @MitchTurner in #598
  • Add Serialization and Deserialization support to MerkleRootCalculator by @Salka1988 in #606
  • Release 0.39.0 by @xgreenx in #608

Full Changelog: v0.38.0...v0.39.0