【问题标题】:Solidity calling payable function with arguments with hardhat ethers.jsSolidity 使用带安全帽 ethers.js 的参数调用支付函数
【发布时间】:2022-08-17 23:00:01
【问题描述】:

我正在测试这个功能:

function Deposit(uint256 StopLoss) public payable {//Deposita quantity i es registre 
        
        //Pay subscription
        if (msg.value == 0){
            revert Quantity_zero();
        }
        //Add wallet to the s_Wallets
        s_Wallets.push(payable(msg.sender));
        //Start subscription time
        Dades storage dades = s_Registre[msg.sender];
        dades.Quantity += msg.value;
        dades.Stop = StopLoss;
    } 

当发送价值和止损参数时,它总是给我一些错误。 这是 js 测试代码是 1850 参数 StopLoss 值并发送 5 ETH 值。

describe(\"Subscription\", async function () {//PriceConversion
            it(\"Subscribes the deployer\", async function () {

              await MarketOrder.Deposit(1850, {value: ethers.utils.parseEther(\"5\")})

              const Quantity = await MarketOrder.CallQuantity()
              console.log(`Q: ${Quantity}`)
              const Stop = await MarketOrder.CallStop()
              console.log(`S: ${Stop}`)
              assert.equal(Quantity.toString(), 1850)
              assert.equal(Stop.toString(), 5)
            }
            })

这是错误:

1) MarketOrder Unit Tests
       Subscription
         Subscribes the deployer:
     Error: invalid BigNumber value (argument=\"value\", value=[1850], code=INVALID_ARGUMENT, version=bignumber/5.6.2)
      at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:261:28)
      at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:273:20)
      at Logger.throwArgumentError (node_modules/@ethersproject/logger/src.ts/index.ts:277:21)
      at Function.BigNumber.from (node_modules/@ethersproject/bignumber/src.ts/bignumber.ts:289:23)
      at NumberCoder.encode (node_modules/@ethersproject/abi/src.ts/coders/number.ts:25:27)
      at /home/oriok/hh-ff/1.uniswapV3/node_modules/@ethersproject/abi/src.ts/coders/array.ts:71:19
      at Array.forEach (<anonymous>)
      at pack (node_modules/@ethersproject/abi/src.ts/coders/array.ts:54:12)
      at TupleCoder.encode (node_modules/@ethersproject/abi/src.ts/coders/tuple.ts:54:20)
      at AbiCoder.encode (node_modules/@ethersproject/abi/src.ts/abi-coder.ts:111:15)



error Command failed with exit code 1.

有谁知道如何正确发送参数+值?我尝试了很多代码,但没有工作。 伙计们!

    标签: solidity ethers.js hardhat


    【解决方案1】:

    ethers.utils.parseEther 返回带有 BigNumber 的对象。

    在测试中使用它之前,您必须将其转换为字符串。

    例如:

    ethers.utils.parseEther("5").toString()
    

    参考..https://docs.ethers.io/v5/api/utils/display-logic/#utils-parseEther

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-02
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 2019-03-28
      • 2021-07-11
      相关资源
      最近更新 更多