feat: Add foundry environment and CI
This commit is contained in:
122
foundry/lib/forge-std/src/StdInvariant.sol
Normal file
122
foundry/lib/forge-std/src/StdInvariant.sol
Normal file
@@ -0,0 +1,122 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity >=0.6.2 <0.9.0;
|
||||
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
abstract contract StdInvariant {
|
||||
struct FuzzSelector {
|
||||
address addr;
|
||||
bytes4[] selectors;
|
||||
}
|
||||
|
||||
struct FuzzArtifactSelector {
|
||||
string artifact;
|
||||
bytes4[] selectors;
|
||||
}
|
||||
|
||||
struct FuzzInterface {
|
||||
address addr;
|
||||
string[] artifacts;
|
||||
}
|
||||
|
||||
address[] private _excludedContracts;
|
||||
address[] private _excludedSenders;
|
||||
address[] private _targetedContracts;
|
||||
address[] private _targetedSenders;
|
||||
|
||||
string[] private _excludedArtifacts;
|
||||
string[] private _targetedArtifacts;
|
||||
|
||||
FuzzArtifactSelector[] private _targetedArtifactSelectors;
|
||||
|
||||
FuzzSelector[] private _excludedSelectors;
|
||||
FuzzSelector[] private _targetedSelectors;
|
||||
|
||||
FuzzInterface[] private _targetedInterfaces;
|
||||
|
||||
// Functions for users:
|
||||
// These are intended to be called in tests.
|
||||
|
||||
function excludeContract(address newExcludedContract_) internal {
|
||||
_excludedContracts.push(newExcludedContract_);
|
||||
}
|
||||
|
||||
function excludeSelector(FuzzSelector memory newExcludedSelector_) internal {
|
||||
_excludedSelectors.push(newExcludedSelector_);
|
||||
}
|
||||
|
||||
function excludeSender(address newExcludedSender_) internal {
|
||||
_excludedSenders.push(newExcludedSender_);
|
||||
}
|
||||
|
||||
function excludeArtifact(string memory newExcludedArtifact_) internal {
|
||||
_excludedArtifacts.push(newExcludedArtifact_);
|
||||
}
|
||||
|
||||
function targetArtifact(string memory newTargetedArtifact_) internal {
|
||||
_targetedArtifacts.push(newTargetedArtifact_);
|
||||
}
|
||||
|
||||
function targetArtifactSelector(FuzzArtifactSelector memory newTargetedArtifactSelector_) internal {
|
||||
_targetedArtifactSelectors.push(newTargetedArtifactSelector_);
|
||||
}
|
||||
|
||||
function targetContract(address newTargetedContract_) internal {
|
||||
_targetedContracts.push(newTargetedContract_);
|
||||
}
|
||||
|
||||
function targetSelector(FuzzSelector memory newTargetedSelector_) internal {
|
||||
_targetedSelectors.push(newTargetedSelector_);
|
||||
}
|
||||
|
||||
function targetSender(address newTargetedSender_) internal {
|
||||
_targetedSenders.push(newTargetedSender_);
|
||||
}
|
||||
|
||||
function targetInterface(FuzzInterface memory newTargetedInterface_) internal {
|
||||
_targetedInterfaces.push(newTargetedInterface_);
|
||||
}
|
||||
|
||||
// Functions for forge:
|
||||
// These are called by forge to run invariant tests and don't need to be called in tests.
|
||||
|
||||
function excludeArtifacts() public view returns (string[] memory excludedArtifacts_) {
|
||||
excludedArtifacts_ = _excludedArtifacts;
|
||||
}
|
||||
|
||||
function excludeContracts() public view returns (address[] memory excludedContracts_) {
|
||||
excludedContracts_ = _excludedContracts;
|
||||
}
|
||||
|
||||
function excludeSelectors() public view returns (FuzzSelector[] memory excludedSelectors_) {
|
||||
excludedSelectors_ = _excludedSelectors;
|
||||
}
|
||||
|
||||
function excludeSenders() public view returns (address[] memory excludedSenders_) {
|
||||
excludedSenders_ = _excludedSenders;
|
||||
}
|
||||
|
||||
function targetArtifacts() public view returns (string[] memory targetedArtifacts_) {
|
||||
targetedArtifacts_ = _targetedArtifacts;
|
||||
}
|
||||
|
||||
function targetArtifactSelectors() public view returns (FuzzArtifactSelector[] memory targetedArtifactSelectors_) {
|
||||
targetedArtifactSelectors_ = _targetedArtifactSelectors;
|
||||
}
|
||||
|
||||
function targetContracts() public view returns (address[] memory targetedContracts_) {
|
||||
targetedContracts_ = _targetedContracts;
|
||||
}
|
||||
|
||||
function targetSelectors() public view returns (FuzzSelector[] memory targetedSelectors_) {
|
||||
targetedSelectors_ = _targetedSelectors;
|
||||
}
|
||||
|
||||
function targetSenders() public view returns (address[] memory targetedSenders_) {
|
||||
targetedSenders_ = _targetedSenders;
|
||||
}
|
||||
|
||||
function targetInterfaces() public view returns (FuzzInterface[] memory targetedInterfaces_) {
|
||||
targetedInterfaces_ = _targetedInterfaces;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user