如何通过安全帽调用采用 Enum 类型的合约方法?

Ben*_*yam 3 solidity hardhat

在你的合约中,如果你有接收枚举类型的方法,你将如何从安全帽脚本传递参数?

contract SomeContract {

enum WinStatus {
    PENDING,
    LOST,
    WON
}

WinStatus status;

function updateWinStatus(WinStatus _status) public {
   status = _status;
}
}
Run Code Online (Sandbox Code Playgroud)
// in your hardhat script
...
await someContract.updateWinStatus() // how should i call it. bare in mind hardhat is setup using  javascript not typescript in my case. 

Run Code Online (Sandbox Code Playgroud)

我尝试传递一个数字,希望它能按顺序(索引)获取它。但我收到“无效的 BigNumber 值”。另外,我尝试传递像“PENDING”或“WinType.PENDING”这样的字符串:思考:

Pet*_*jda 5

Javascript 本身不支持非常大的数字(最高uint256可达 Solidity 中支持的类型),因此 Ethers.js(包含在 Hardhat 中)接受BigNumber实例。

const myNumber = ethers.BigNumber.from("0") // pass the numeric value as a string
await someContract.updateWinStatus(myNumber) // pass the BigNumber instance
Run Code Online (Sandbox Code Playgroud)