concordium-base
concordium-base copied to clipboard
Improve error message for using floats in contracts
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
- 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. } }
- 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
Indeed. Although this will be substantially easier to do after Concordium/concordium-base#203 since right now errors are not easy to match on.