diff --git a/ethers.nimble b/ethers.nimble index 5fcf347..a04b0d0 100644 --- a/ethers.nimble +++ b/ethers.nimble @@ -4,7 +4,7 @@ description = "library for interacting with Ethereum" license = "MIT" requires "chronos >= 3.0.0 & < 4.0.0" -requires "contractabi >= 0.4.4 & < 0.5.0" +requires "contractabi >= 0.4.5 & < 0.5.0" requires "questionable >= 0.10.2 & < 0.11.0" requires "upraises >= 0.1.0 & < 0.2.0" requires "json_rpc" diff --git a/testmodule/test.nim b/testmodule/test.nim index faeaf18..767867a 100644 --- a/testmodule/test.nim +++ b/testmodule/test.nim @@ -2,6 +2,7 @@ import ./testJsonRpcProvider import ./testJsonRpcSigner import ./testContracts import ./testReturns +import ./testEnums import ./testEvents {.warning[UnusedImport]:off.} diff --git a/testmodule/testEnums.nim b/testmodule/testEnums.nim new file mode 100644 index 0000000..8c7a6c6 --- /dev/null +++ b/testmodule/testEnums.nim @@ -0,0 +1,30 @@ +import pkg/asynctest +import pkg/ethers +import ./hardhat + +type + TestEnums = ref object of Contract + SomeEnum = enum + One + Two + +suite "Contract enum parameters and return values": + + var contract: TestEnums + var provider: JsonRpcProvider + var snapshot: JsonNode + + setup: + provider = JsonRpcProvider.new("ws://localhost:8545") + snapshot = await provider.send("evm_snapshot") + let deployment = readDeployment() + contract = TestEnums.new(!deployment.address(TestEnums), provider) + + teardown: + discard await provider.send("evm_revert", @[snapshot]) + + test "handles enum parameter and return value": + proc returnValue(contract: TestEnums, + value: SomeEnum): SomeEnum {.contract, pure.} + check (await contract.returnValue(SomeEnum.One)) == SomeEnum.One + check (await contract.returnValue(SomeEnum.Two)) == SomeEnum.Two diff --git a/testnode/contracts/TestEnums.sol b/testnode/contracts/TestEnums.sol new file mode 100644 index 0000000..49ae25e --- /dev/null +++ b/testnode/contracts/TestEnums.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract TestEnums { + enum SomeEnum { One, Two } + + function returnValue(SomeEnum value) external pure returns (SomeEnum) { + return value; + } +} diff --git a/testnode/deploy/testenums.js b/testnode/deploy/testenums.js new file mode 100644 index 0000000..810c346 --- /dev/null +++ b/testnode/deploy/testenums.js @@ -0,0 +1,6 @@ +module.exports = async ({ deployments, getNamedAccounts }) => { + const { deployer } = await getNamedAccounts(); + await deployments.deploy("TestEnums", { from: deployer }); +}; + +module.exports.tags = ["TestEnums"];