Skip to content

The Uint cannot be converted to StorageUint, leading to discrepancies with Solidity. #317

@Subway2023

Description

@Subway2023
pragma solidity ^0.8.0;

contract Events {
    uint256 public number;

    event Log(uint256 sender, uint256 message);

    function getNumber() public view returns (uint256) {
        return number;
    }

    function setAto1() public returns (uint256) {
        number = 1;
        return number;
    }
    function setAto2() public returns (uint256) {
        number = 2;
        return number;
    }

    function userMain() public {
        emit Log(setAto1(), setAto2());
    }
}
#![cfg_attr(not(any(test, feature = "export-abi")), no_main)]
#![cfg_attr(not(any(test, feature = "export-abi")), no_std)]

#[macro_use]
extern crate alloc;

use alloc::vec::Vec;
use alloy_sol_types::sol;
// use stylus_sdk::evm::log;
use alloy_sol_types::SolEvent;

/// Import items from the SDK. The prelude contains common traits and macros.
use stylus_sdk::{alloy_primitives::*, prelude::*,evm};

sol! {
    event Log(uint256 sender, uint256 message);
    event AnotherLog();
}

sol_storage! {
    #[entrypoint]
    pub struct Events {
        uint256 number;
    }
}

#[public]
impl Events {

    pub fn number(&self) -> U256 {
        self.number.get()
    }

    fn set_a_to_1(&mut self) -> U256 {
        self.number.set(U256::from(1));
        self.number
    }

    fn set_a_to_2(&mut self) -> U256 {
        self.number.set(U256::from(2));
        self.number
    }


    fn user_main(&mut self) {
        evm::log(Log {sender: self.set_a_to_1(), message: self.set_a_to_2()});
    }
}

The Solidity code can be compiled and executed normally, but the Rust code will fail to compile with an error.

error[E0308]: mismatched types
  --> src/lib.rs:41:9
   |
39 |     fn set_a_to_2(&mut self) -> U256 {
   |                                 ---- expected `alloy_primitives::Uint<256, 4>` because of return type
40 |         self.number.set(U256::from(2));
41 |         self.number
   |         ^^^^^^^^^^^ expected `Uint<256, 4>`, found `StorageUint<256, 4>`
   |

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions