WeBankBlockchain / WeBASE

WeBank Blockchain Application Software Extension
Apache License 2.0
491 stars 113 forks source link

webase部署合约,发送交易时候报错“调用合约 constant 方法失败” #260

Open niqifan007 opened 1 year ago

niqifan007 commented 1 year ago

你好,看起来这段 Solidity 代码可能无法在 FISCO BCOS 3.1.0 和 WeBASE 3.0.1 环境中执行。

Issue 描述

复现步骤

  1. 使用 Webase IDE 在Solidity 0.8.11 的编译器编译上述合约代码。
  2. 在 FISCO BCOS 3.1.0 和 WeBASE 3.0.1 中部署该合约。
  3. 调用 getPriceD(string) 方法获取荷兰式拍卖订单价格,并传入正确的 _orderNumber 参数。

预期结果

合约方法能够正常返回订单价格。

实际结果

合约执行失败,报错信息为 "调用合约 constant 方法失败"。

复现环境

额外信息

function getPriceD(string memory _orderNumber)
        public
        view
        returns (uint256)
    {
        uint256 timeElapsed = block.timestamp - orders[_orderNumber].timestamp;
        uint256 discount = (1 * timeElapsed * 1e17) / 1e18; // 0.1
        return orders[_orderNumber].price - discount;
    }
CodingCattwo commented 1 year ago

此报错可能是合约函数的代码返回报错导致,可以把方法改为非constant方式并加上event打日志调试检查一下。

CodingCattwo commented 1 year ago

需要以WeBASE 合约IDE为准,与Remix的最新编译特性会稍有差异