Skip to content

Partially matching call arguments #14

@josojo

Description

@josojo

Background
The Gnosis MockContract is a smart contract enabling developers to quickly mock contract interactions for unit tests.
It enables developers to

  • Make dependent contracts return predefined values for different methods and arguments
  • Simulate exceptions such as revert and outOfGas
  • Assert on how often a dependency is called

The MockContract facilitates these features without requiring any separate test contracts.
Check out the repo: https://github.com/gnosis/mock-contract

Task
Extend the functionality of the MockContract to partially matching arguments.

Acceptance criteria

  • Develop a framework allowing developers to define partially matching calldata for specific methods. 
Defining partially matched call data should look similar to:
const particallyMatchedCalldata = contract.methods.methodName(
   accounts[0], ANY, ..., ANY
   ).encodeABI()

Here, ANY would be some sort of constant defined in the smart contract.

  • Write the logic for the MockContract to expose predefined returns to the partially matched calldata. 
It is expected that the following functions for partially matched calldata are provided:
	function givenPartialCalldataReturn(bytes calldata call, bytes calldata response) external;
	function givenPartialCalldataReturnBool(bytes calldata call, bool response) external;
	function givenPartialCalldataReturnUint(bytes calldata call, uint response) external;
	function givenPartialCalldataReturnAddress(bytes calldata call, address response) external;

	function givenPartialCalldataRevert(bytes calldata call) external;
	function givenPartialCalldataRevertWithMessage(bytes calldata call, string calldata message) external;
	function givenPartialCalldataRunOutOfGas(bytes calldata call) external;

They should enable the same functionality on partially matching calldata as the current respective functions with the same function names, but without the word "Partial".

  • Make sure the invocation count functions are still returning the expected numbers
:
       function invocationCount() external returns (uint);
       function invocationCountForMethod(bytes calldata method) external returns (uint);
       function invocationCountForCalldata(bytes calldata call) external returns (uint);
  • Current naming conventions need to be preseved
  • All functionality must have 100 % line and branch coverage
  • The solidity style guide must be considered and code must be linted

Payout:
0.5 ETH
Additional GNO can be tipped according to the level of technical implementation

Metadata

Metadata

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions