Skip to content

Improve error message for using floats in contracts #198

@Bargsteen

Description

@Bargsteen

Description

Floating-point numbers are not supported in smart contracts, but if you don't know that and you try to use them (or you use a library that uses floats), the error message when building with cargo concordium is very cryptic.

Steps to Reproduce

  1. Use floating-point numbers in your contract.
    Make sure that the compiler doesn't optimize the floats away.
    Something like this worked for me with 1.53.0:
    fn g() {
        if f(f(1.)) < 2. {
            println!("hello");
        }
    }
    
    #[inline(never)]
    fn f(x: f64) -> f64 {
        if x < 1. {
            x + 1.
        } else {
            x + 2.
        }
    }
  2. Compile the contract with cargo concordium build

Expected Result

An error message saying: Floating point numbers are not allowed.

Actual Result

Error: Could not build smart contract.

Caused by:
    0: Could not validate resulting smart contract module as a V1 contract.
    1: Unknown value type byte 0x7c

(0x7c is the encoding of the f64 type in https://webassembly.github.io/spec/core/binary/types.html#number-types.)

Versions

  • Software Version: cargo concordium v. 2.0.0
  • OS: macOS

Metadata

Metadata

Assignees

No one assigned

    Labels

    [Type] Change RequestSome visible functionality should be change.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions