diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json new file mode 100644 index 00000000..88730513 --- /dev/null +++ b/cache/solidity-files-cache.json @@ -0,0 +1 @@ +{"_format":"","paths":{"artifacts":"out","build_infos":"out/build-info","sources":"src","tests":"test","scripts":"script","libraries":["lib"]},"files":{"lib/ds-test/src/test.sol":{"lastModificationDate":1774440319875,"contentHash":"cb8e20b4684c93b7","interfaceReprHash":null,"sourceName":"lib/ds-test/src/test.sol","imports":[],"versionRequirement":">=0.4.23","artifacts":{"DSTest":{"0.6.12":{"default":{"path":"test.sol/DSTest.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"lib/ds-token/lib/ds-auth/src/auth.sol":{"lastModificationDate":1774440323333,"contentHash":"7fe2066e6fbf4aea","interfaceReprHash":null,"sourceName":"lib/ds-token/lib/ds-auth/src/auth.sol","imports":[],"versionRequirement":">=0.4.23","artifacts":{"DSAuth":{"0.6.12":{"default":{"path":"auth.sol/DSAuth.json","build_id":"8cd5da0d96205dd1"}}},"DSAuthEvents":{"0.6.12":{"default":{"path":"auth.sol/DSAuthEvents.json","build_id":"8cd5da0d96205dd1"}}},"DSAuthority":{"0.6.12":{"default":{"path":"auth.sol/DSAuthority.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"lib/ds-token/lib/ds-math/src/math.sol":{"lastModificationDate":1774440324171,"contentHash":"f0e095828e50c407","interfaceReprHash":null,"sourceName":"lib/ds-token/lib/ds-math/src/math.sol","imports":[],"versionRequirement":">0.4.13","artifacts":{"DSMath":{"0.6.12":{"default":{"path":"math.sol/DSMath.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"lib/ds-token/src/token.sol":{"lastModificationDate":1774440319886,"contentHash":"6e5c58ccac0d275d","interfaceReprHash":null,"sourceName":"lib/ds-token/src/token.sol","imports":["lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol"],"versionRequirement":">=0.4.23","artifacts":{"DSToken":{"0.6.12":{"default":{"path":"token.sol/DSToken.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"lib/ds-value/lib/ds-thing/lib/ds-note/src/note.sol":{"lastModificationDate":1774440331735,"contentHash":"822301a365728da5","interfaceReprHash":null,"sourceName":"lib/ds-value/lib/ds-thing/lib/ds-note/src/note.sol","imports":[],"versionRequirement":">=0.4.23","artifacts":{"DSNote":{"0.6.12":{"default":{"path":"note.sol/DSNote.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"lib/ds-value/lib/ds-thing/src/thing.sol":{"lastModificationDate":1774440326513,"contentHash":"d8e35ec610f7d672","interfaceReprHash":null,"sourceName":"lib/ds-value/lib/ds-thing/src/thing.sol","imports":["lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol","lib/ds-value/lib/ds-thing/lib/ds-note/src/note.sol"],"versionRequirement":">=0.4.23","artifacts":{"DSThing":{"0.6.12":{"default":{"path":"thing.sol/DSThing.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"lib/ds-value/src/value.sol":{"lastModificationDate":1774440324974,"contentHash":"d2c9683ed6546a1e","interfaceReprHash":null,"sourceName":"lib/ds-value/src/value.sol","imports":["lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol","lib/ds-value/lib/ds-thing/lib/ds-note/src/note.sol","lib/ds-value/lib/ds-thing/src/thing.sol"],"versionRequirement":">=0.4.23","artifacts":{"DSValue":{"0.6.12":{"default":{"path":"value.sol/DSValue.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/abaci.sol":{"lastModificationDate":1774440220426,"contentHash":"d3e389d4b72d3c39","interfaceReprHash":null,"sourceName":"src/abaci.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"Abacus":{"0.6.12":{"default":{"path":"abaci.sol/Abacus.json","build_id":"8cd5da0d96205dd1"}}},"ExponentialDecrease":{"0.6.12":{"default":{"path":"abaci.sol/ExponentialDecrease.json","build_id":"8cd5da0d96205dd1"}}},"LinearDecrease":{"0.6.12":{"default":{"path":"abaci.sol/LinearDecrease.json","build_id":"8cd5da0d96205dd1"}}},"StairstepExponentialDecrease":{"0.6.12":{"default":{"path":"abaci.sol/StairstepExponentialDecrease.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/cat.sol":{"lastModificationDate":1774439925272,"contentHash":"95e7cd606ae6bf09","interfaceReprHash":null,"sourceName":"src/cat.sol","imports":[],"versionRequirement":">=0.5.12","artifacts":{"Cat":{"0.6.12":{"default":{"path":"cat.sol/Cat.json","build_id":"8cd5da0d96205dd1"}}},"Kicker":{"0.6.12":{"default":{"path":"cat.sol/Kicker.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"cat.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}},"VowLike":{"0.6.12":{"default":{"path":"cat.sol/VowLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/clip.sol":{"lastModificationDate":1774439925272,"contentHash":"03cb397891de3316","interfaceReprHash":null,"sourceName":"src/clip.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"AbacusLike":{"0.6.12":{"default":{"path":"clip.sol/AbacusLike.json","build_id":"8cd5da0d96205dd1"}}},"Clipper":{"0.6.12":{"default":{"path":"clip.sol/Clipper.json","build_id":"8cd5da0d96205dd1"}}},"ClipperCallee":{"0.6.12":{"default":{"path":"clip.sol/ClipperCallee.json","build_id":"8cd5da0d96205dd1"}}},"DogLike":{"0.6.12":{"default":{"path":"clip.sol/DogLike.json","build_id":"8cd5da0d96205dd1"}}},"PipLike":{"0.6.12":{"default":{"path":"clip.sol/PipLike.json","build_id":"8cd5da0d96205dd1"}}},"SpotterLike":{"0.6.12":{"default":{"path":"clip.sol/SpotterLike.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"clip.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/cure.sol":{"lastModificationDate":1774439925272,"contentHash":"c8d18b90ce431a0f","interfaceReprHash":null,"sourceName":"src/cure.sol","imports":[],"versionRequirement":">=0.6.12","artifacts":{"Cure":{"0.6.12":{"default":{"path":"cure.sol/Cure.json","build_id":"8cd5da0d96205dd1"}}},"SourceLike":{"0.6.12":{"default":{"path":"cure.sol/SourceLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/dai.sol":{"lastModificationDate":1774439925272,"contentHash":"827be07757d6b709","interfaceReprHash":null,"sourceName":"src/dai.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"Dai":{"0.6.12":{"default":{"path":"dai.sol/Dai.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/dog.sol":{"lastModificationDate":1774439925272,"contentHash":"2012016f08b00c47","interfaceReprHash":null,"sourceName":"src/dog.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"ClipperLike":{"0.6.12":{"default":{"path":"dog.sol/ClipperLike.json","build_id":"8cd5da0d96205dd1"}}},"Dog":{"0.6.12":{"default":{"path":"dog.sol/Dog.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"dog.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}},"VowLike":{"0.6.12":{"default":{"path":"dog.sol/VowLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/end.sol":{"lastModificationDate":1774439925272,"contentHash":"8622f413734250d6","interfaceReprHash":null,"sourceName":"src/end.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"CatLike":{"0.6.12":{"default":{"path":"end.sol/CatLike.json","build_id":"8cd5da0d96205dd1"}}},"ClipLike":{"0.6.12":{"default":{"path":"end.sol/ClipLike.json","build_id":"8cd5da0d96205dd1"}}},"CureLike":{"0.6.12":{"default":{"path":"end.sol/CureLike.json","build_id":"8cd5da0d96205dd1"}}},"DogLike":{"0.6.12":{"default":{"path":"end.sol/DogLike.json","build_id":"8cd5da0d96205dd1"}}},"End":{"0.6.12":{"default":{"path":"end.sol/End.json","build_id":"8cd5da0d96205dd1"}}},"FlipLike":{"0.6.12":{"default":{"path":"end.sol/FlipLike.json","build_id":"8cd5da0d96205dd1"}}},"PipLike":{"0.6.12":{"default":{"path":"end.sol/PipLike.json","build_id":"8cd5da0d96205dd1"}}},"PotLike":{"0.6.12":{"default":{"path":"end.sol/PotLike.json","build_id":"8cd5da0d96205dd1"}}},"SpotLike":{"0.6.12":{"default":{"path":"end.sol/SpotLike.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"end.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}},"VowLike":{"0.6.12":{"default":{"path":"end.sol/VowLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/flap.sol":{"lastModificationDate":1774439925272,"contentHash":"7815f9022c64b97a","interfaceReprHash":null,"sourceName":"src/flap.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"Flapper":{"0.6.12":{"default":{"path":"flap.sol/Flapper.json","build_id":"8cd5da0d96205dd1"}}},"GemLike":{"0.6.12":{"default":{"path":"flap.sol/GemLike.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"flap.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/flip.sol":{"lastModificationDate":1774439925272,"contentHash":"9724f5e528d8f3a1","interfaceReprHash":null,"sourceName":"src/flip.sol","imports":[],"versionRequirement":">=0.5.12","artifacts":{"CatLike":{"0.6.12":{"default":{"path":"flip.sol/CatLike.json","build_id":"8cd5da0d96205dd1"}}},"Flipper":{"0.6.12":{"default":{"path":"flip.sol/Flipper.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"flip.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/flop.sol":{"lastModificationDate":1774439925326,"contentHash":"9c646f5873185d7b","interfaceReprHash":null,"sourceName":"src/flop.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"Flopper":{"0.6.12":{"default":{"path":"flop.sol/Flopper.json","build_id":"8cd5da0d96205dd1"}}},"GemLike":{"0.6.12":{"default":{"path":"flop.sol/GemLike.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"flop.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}},"VowLike":{"0.6.12":{"default":{"path":"flop.sol/VowLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/join.sol":{"lastModificationDate":1774439925326,"contentHash":"54e5b474b7e37dd9","interfaceReprHash":null,"sourceName":"src/join.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"DSTokenLike":{"0.6.12":{"default":{"path":"join.sol/DSTokenLike.json","build_id":"8cd5da0d96205dd1"}}},"DaiJoin":{"0.6.12":{"default":{"path":"join.sol/DaiJoin.json","build_id":"8cd5da0d96205dd1"}}},"GemJoin":{"0.6.12":{"default":{"path":"join.sol/GemJoin.json","build_id":"8cd5da0d96205dd1"}}},"GemLike":{"0.6.12":{"default":{"path":"join.sol/GemLike.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"join.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/jug.sol":{"lastModificationDate":1774439925326,"contentHash":"97529f3fc7462979","interfaceReprHash":null,"sourceName":"src/jug.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"Jug":{"0.6.12":{"default":{"path":"jug.sol/Jug.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"jug.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/pot.sol":{"lastModificationDate":1774439925326,"contentHash":"bb6ed0690d215c02","interfaceReprHash":null,"sourceName":"src/pot.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"Pot":{"0.6.12":{"default":{"path":"pot.sol/Pot.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"pot.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/spot.sol":{"lastModificationDate":1774439925326,"contentHash":"778756b0b777b759","interfaceReprHash":null,"sourceName":"src/spot.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"PipLike":{"0.6.12":{"default":{"path":"spot.sol/PipLike.json","build_id":"8cd5da0d96205dd1"}}},"Spotter":{"0.6.12":{"default":{"path":"spot.sol/Spotter.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"spot.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/abaci.t.sol":{"lastModificationDate":1774440391844,"contentHash":"fe1f17fe79d55830","interfaceReprHash":null,"sourceName":"src/test/abaci.t.sol","imports":["lib/ds-test/src/test.sol","src/abaci.sol"],"versionRequirement":"^0.6.12","artifacts":{"ClipperTest":{"0.6.12":{"default":{"path":"abaci.t.sol/ClipperTest.json","build_id":"a9bc992a82049e5d"}}},"Hevm":{"0.6.12":{"default":{"path":"abaci.t.sol/Hevm.json","build_id":"a9bc992a82049e5d"}}},"Vm":{"0.6.12":{"default":{"path":"abaci.t.sol/Vm.json","build_id":"a9bc992a82049e5d"}}}},"seenByCompiler":true},"src/test/clip.t.sol":{"lastModificationDate":1774439925326,"contentHash":"4aaa0f7b05c1c239","interfaceReprHash":null,"sourceName":"src/test/clip.t.sol","imports":["lib/ds-test/src/test.sol","lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol","lib/ds-token/src/token.sol","lib/ds-value/lib/ds-thing/lib/ds-note/src/note.sol","lib/ds-value/lib/ds-thing/src/thing.sol","lib/ds-value/src/value.sol","src/abaci.sol","src/clip.sol","src/dog.sol","src/join.sol","src/spot.sol","src/vat.sol","src/vow.sol"],"versionRequirement":"^0.6.12","artifacts":{"BadGuy":{"0.6.12":{"default":{"path":"clip.t.sol/BadGuy.json","build_id":"8cd5da0d96205dd1"}}},"ClipperTest":{"0.6.12":{"default":{"path":"clip.t.sol/ClipperTest.json","build_id":"8cd5da0d96205dd1"}}},"Exchange":{"0.6.12":{"default":{"path":"clip.t.sol/Exchange.json","build_id":"8cd5da0d96205dd1"}}},"FileAddrGuy":{"0.6.12":{"default":{"path":"clip.t.sol/FileAddrGuy.json","build_id":"8cd5da0d96205dd1"}}},"FileUintGuy":{"0.6.12":{"default":{"path":"clip.t.sol/FileUintGuy.json","build_id":"8cd5da0d96205dd1"}}},"Guy":{"0.6.12":{"default":{"path":"clip.t.sol/Guy.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"clip.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}},"KickGuy":{"0.6.12":{"default":{"path":"clip.t.sol/KickGuy.json","build_id":"8cd5da0d96205dd1"}}},"PublicClip":{"0.6.12":{"default":{"path":"clip.t.sol/PublicClip.json","build_id":"8cd5da0d96205dd1"}}},"RedoGuy":{"0.6.12":{"default":{"path":"clip.t.sol/RedoGuy.json","build_id":"8cd5da0d96205dd1"}}},"Trader":{"0.6.12":{"default":{"path":"clip.t.sol/Trader.json","build_id":"8cd5da0d96205dd1"}}},"YankGuy":{"0.6.12":{"default":{"path":"clip.t.sol/YankGuy.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/cure.t.sol":{"lastModificationDate":1774439925326,"contentHash":"1b2ceb2e9298e8a2","interfaceReprHash":null,"sourceName":"src/test/cure.t.sol","imports":["lib/ds-test/src/test.sol","src/cure.sol"],"versionRequirement":">=0.6.12","artifacts":{"CureTest":{"0.6.12":{"default":{"path":"cure.t.sol/CureTest.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"cure.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}},"SourceMock":{"0.6.12":{"default":{"path":"cure.t.sol/SourceMock.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/dai.t.sol":{"lastModificationDate":1774439925327,"contentHash":"9a2fdcc41d5b2e2f","interfaceReprHash":null,"sourceName":"src/test/dai.t.sol","imports":["lib/ds-test/src/test.sol","src/dai.sol"],"versionRequirement":"^0.6.12","artifacts":{"DaiTest":{"0.6.12":{"default":{"path":"dai.t.sol/DaiTest.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"dai.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}},"TokenUser":{"0.6.12":{"default":{"path":"dai.t.sol/TokenUser.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/dog.t.sol":{"lastModificationDate":1774439925327,"contentHash":"e5ea6fc887998415","interfaceReprHash":null,"sourceName":"src/test/dog.t.sol","imports":["lib/ds-test/src/test.sol","src/dog.sol","src/vat.sol"],"versionRequirement":"^0.6.12","artifacts":{"ClipperMock":{"0.6.12":{"default":{"path":"dog.t.sol/ClipperMock.json","build_id":"8cd5da0d96205dd1"}}},"DogTest":{"0.6.12":{"default":{"path":"dog.t.sol/DogTest.json","build_id":"8cd5da0d96205dd1"}}},"VowMock":{"0.6.12":{"default":{"path":"dog.t.sol/VowMock.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/end.t.sol":{"lastModificationDate":1774439925327,"contentHash":"eefb1e9949531fbb","interfaceReprHash":null,"sourceName":"src/test/end.t.sol","imports":["lib/ds-test/src/test.sol","lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol","lib/ds-token/src/token.sol","lib/ds-value/lib/ds-thing/lib/ds-note/src/note.sol","lib/ds-value/lib/ds-thing/src/thing.sol","lib/ds-value/src/value.sol","src/cat.sol","src/clip.sol","src/cure.sol","src/dog.sol","src/end.sol","src/flap.sol","src/flip.sol","src/flop.sol","src/join.sol","src/pot.sol","src/spot.sol","src/vat.sol","src/vow.sol"],"versionRequirement":"^0.6.12","artifacts":{"EndTest":{"0.6.12":{"default":{"path":"end.t.sol/EndTest.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"end.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}},"Usr":{"0.6.12":{"default":{"path":"end.t.sol/Usr.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/flap.t.sol":{"lastModificationDate":1774439925327,"contentHash":"64fd4cdf2a3ef394","interfaceReprHash":null,"sourceName":"src/test/flap.t.sol","imports":["lib/ds-test/src/test.sol","lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol","lib/ds-token/src/token.sol","src/flap.sol","src/vat.sol"],"versionRequirement":"^0.6.12","artifacts":{"FlapTest":{"0.6.12":{"default":{"path":"flap.t.sol/FlapTest.json","build_id":"8cd5da0d96205dd1"}}},"Guy":{"0.6.12":{"default":{"path":"flap.t.sol/Guy.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"flap.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/flip.t.sol":{"lastModificationDate":1774439925327,"contentHash":"440d1e2f28307539","interfaceReprHash":null,"sourceName":"src/test/flip.t.sol","imports":["lib/ds-test/src/test.sol","src/cat.sol","src/flip.sol","src/vat.sol"],"versionRequirement":">=0.5.12","artifacts":{"Cat_":{"0.6.12":{"default":{"path":"flip.t.sol/Cat_.json","build_id":"8cd5da0d96205dd1"}}},"FlipTest":{"0.6.12":{"default":{"path":"flip.t.sol/FlipTest.json","build_id":"8cd5da0d96205dd1"}}},"Gal":{"0.6.12":{"default":{"path":"flip.t.sol/Gal.json","build_id":"8cd5da0d96205dd1"}}},"Guy":{"0.6.12":{"default":{"path":"flip.t.sol/Guy.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"flip.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}},"Vat_":{"0.6.12":{"default":{"path":"flip.t.sol/Vat_.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/flop.t.sol":{"lastModificationDate":1774439925327,"contentHash":"2fde38c8745739a5","interfaceReprHash":null,"sourceName":"src/test/flop.t.sol","imports":["lib/ds-test/src/test.sol","lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol","lib/ds-token/src/token.sol","src/flop.sol","src/vat.sol"],"versionRequirement":"^0.6.12","artifacts":{"FlopTest":{"0.6.12":{"default":{"path":"flop.t.sol/FlopTest.json","build_id":"8cd5da0d96205dd1"}}},"Gal":{"0.6.12":{"default":{"path":"flop.t.sol/Gal.json","build_id":"8cd5da0d96205dd1"}}},"Guy":{"0.6.12":{"default":{"path":"flop.t.sol/Guy.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"flop.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}},"Vatish":{"0.6.12":{"default":{"path":"flop.t.sol/Vatish.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/fork.t.sol":{"lastModificationDate":1774439925327,"contentHash":"3312b867532d5016","interfaceReprHash":null,"sourceName":"src/test/fork.t.sol","imports":["lib/ds-test/src/test.sol","lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol","lib/ds-token/src/token.sol","src/vat.sol"],"versionRequirement":"^0.6.12","artifacts":{"ForkTest":{"0.6.12":{"default":{"path":"fork.t.sol/ForkTest.json","build_id":"8cd5da0d96205dd1"}}},"Usr":{"0.6.12":{"default":{"path":"fork.t.sol/Usr.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/jug.t.sol":{"lastModificationDate":1774439925328,"contentHash":"16575a6980e22a63","interfaceReprHash":null,"sourceName":"src/test/jug.t.sol","imports":["lib/ds-test/src/test.sol","src/jug.sol","src/vat.sol"],"versionRequirement":"^0.6.12","artifacts":{"Hevm":{"0.6.12":{"default":{"path":"jug.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}},"JugTest":{"0.6.12":{"default":{"path":"jug.t.sol/JugTest.json","build_id":"8cd5da0d96205dd1"}}},"Rpow":{"0.6.12":{"default":{"path":"jug.t.sol/Rpow.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"jug.t.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/pot.t.sol":{"lastModificationDate":1774439925328,"contentHash":"95859eb0ba864ed3","interfaceReprHash":null,"sourceName":"src/test/pot.t.sol","imports":["lib/ds-test/src/test.sol","src/pot.sol","src/vat.sol"],"versionRequirement":"^0.6.12","artifacts":{"DSRTest":{"0.6.12":{"default":{"path":"pot.t.sol/DSRTest.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"pot.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/vat.t.sol":{"lastModificationDate":1774439925328,"contentHash":"9d2808ec3679cacc","interfaceReprHash":null,"sourceName":"src/test/vat.t.sol","imports":["lib/ds-test/src/test.sol","lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol","lib/ds-token/src/token.sol","src/cat.sol","src/flap.sol","src/flip.sol","src/flop.sol","src/join.sol","src/jug.sol","src/test/flap.t.sol","src/test/flip.t.sol","src/test/flop.t.sol","src/vat.sol","src/vow.sol"],"versionRequirement":"^0.6.12","artifacts":{"BiteTest":{"0.6.12":{"default":{"path":"vat.t.sol/BiteTest.json","build_id":"8cd5da0d96205dd1"}}},"FlipLike":{"0.6.12":{"default":{"path":"vat.t.sol/FlipLike.json","build_id":"8cd5da0d96205dd1"}}},"FoldTest":{"0.6.12":{"default":{"path":"vat.t.sol/FoldTest.json","build_id":"8cd5da0d96205dd1"}}},"FrobTest":{"0.6.12":{"default":{"path":"vat.t.sol/FrobTest.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"vat.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}},"JoinTest":{"0.6.12":{"default":{"path":"vat.t.sol/JoinTest.json","build_id":"8cd5da0d96205dd1"}}},"TestVat":{"0.6.12":{"default":{"path":"vat.t.sol/TestVat.json","build_id":"8cd5da0d96205dd1"}}},"TestVow":{"0.6.12":{"default":{"path":"vat.t.sol/TestVow.json","build_id":"8cd5da0d96205dd1"}}},"Usr":{"0.6.12":{"default":{"path":"vat.t.sol/Usr.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/test/vow.t.sol":{"lastModificationDate":1774439925328,"contentHash":"b97118bb7e7848a2","interfaceReprHash":null,"sourceName":"src/test/vow.t.sol","imports":["lib/ds-test/src/test.sol","lib/ds-token/lib/ds-auth/src/auth.sol","lib/ds-token/lib/ds-math/src/math.sol","lib/ds-token/src/token.sol","src/cat.sol","src/flap.sol","src/flip.sol","src/flop.sol","src/join.sol","src/jug.sol","src/test/flap.t.sol","src/test/flip.t.sol","src/test/flop.t.sol","src/test/vat.t.sol","src/vat.sol","src/vow.sol"],"versionRequirement":"^0.6.12","artifacts":{"Gem":{"0.6.12":{"default":{"path":"vow.t.sol/Gem.json","build_id":"8cd5da0d96205dd1"}}},"Hevm":{"0.6.12":{"default":{"path":"vow.t.sol/Hevm.json","build_id":"8cd5da0d96205dd1"}}},"VowTest":{"0.6.12":{"default":{"path":"vow.t.sol/VowTest.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/vat.sol":{"lastModificationDate":1774439925328,"contentHash":"23b2cd40bc623e3c","interfaceReprHash":null,"sourceName":"src/vat.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"Vat":{"0.6.12":{"default":{"path":"vat.sol/Vat.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true},"src/vow.sol":{"lastModificationDate":1774439925328,"contentHash":"1a015d16cd836e12","interfaceReprHash":null,"sourceName":"src/vow.sol","imports":[],"versionRequirement":"^0.6.12","artifacts":{"FlapLike":{"0.6.12":{"default":{"path":"vow.sol/FlapLike.json","build_id":"8cd5da0d96205dd1"}}},"FlopLike":{"0.6.12":{"default":{"path":"vow.sol/FlopLike.json","build_id":"8cd5da0d96205dd1"}}},"VatLike":{"0.6.12":{"default":{"path":"vow.sol/VatLike.json","build_id":"8cd5da0d96205dd1"}}},"Vow":{"0.6.12":{"default":{"path":"vow.sol/Vow.json","build_id":"8cd5da0d96205dd1"}}}},"seenByCompiler":true}},"builds":["8cd5da0d96205dd1","a9bc992a82049e5d"],"profiles":{"default":{"solc":{"optimizer":{"enabled":false,"runs":200},"metadata":{"useLiteralContent":false,"bytecodeHash":"ipfs","appendCBOR":true},"outputSelection":{"*":{"*":["abi","evm.bytecode.object","evm.bytecode.sourceMap","evm.bytecode.linkReferences","evm.deployedBytecode.object","evm.deployedBytecode.sourceMap","evm.deployedBytecode.linkReferences","evm.deployedBytecode.immutableReferences","evm.methodIdentifiers","metadata"]}},"evmVersion":"prague","viaIR":false,"libraries":{}},"vyper":{"evmVersion":"prague","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode"]}}}}},"preprocessed":false,"mocks":[]} \ No newline at end of file diff --git a/cache/test-failures b/cache/test-failures new file mode 100644 index 00000000..bd7668d1 --- /dev/null +++ b/cache/test-failures @@ -0,0 +1 @@ +testFail_linear_decrease_tau_zero_reverts|testFail_stairstep_step_zero_reverts \ No newline at end of file diff --git a/foundry.lock b/foundry.lock new file mode 100644 index 00000000..b38c5a03 --- /dev/null +++ b/foundry.lock @@ -0,0 +1,11 @@ +{ + "lib/ds-test": { + "rev": "0a5da56b0d65960e6a994d2ec8245e6edd38c248" + }, + "lib/ds-token": { + "rev": "a5e709b205383720a3d47c7b234771daf4b58766" + }, + "lib/ds-value": { + "rev": "4049ecd2652a39cbab464bb1c2c627985f720f97" + } +} \ No newline at end of file diff --git a/src/abaci.sol b/src/abaci.sol index 6cbd6662..8a099e82 100644 --- a/src/abaci.sol +++ b/src/abaci.sol @@ -54,7 +54,7 @@ contract LinearDecrease is Abacus { // --- Administration --- function file(bytes32 what, uint256 data) external auth { - if (what == "tau") tau = data; + if (what == "tau") require((tau = data) > 0, "LinearDecrease/tau-is-zero"); else revert("LinearDecrease/file-unrecognized-param"); emit File(what, data); } @@ -120,7 +120,7 @@ contract StairstepExponentialDecrease is Abacus { // --- Administration --- function file(bytes32 what, uint256 data) external auth { if (what == "cut") require((cut = data) <= RAY, "StairstepExponentialDecrease/cut-gt-RAY"); - else if (what == "step") step = data; + else if (what == "step") require((step = data) > 0, "StairstepExponentialDecrease/step-is-zero"); else revert("StairstepExponentialDecrease/file-unrecognized-param"); emit File(what, data); } diff --git a/src/test/abaci.t.sol b/src/test/abaci.t.sol index 08838464..e222509b 100644 --- a/src/test/abaci.t.sol +++ b/src/test/abaci.t.sol @@ -28,6 +28,10 @@ interface Hevm { function store(address,bytes32,bytes32) external; } +interface Vm { + function expectRevert(bytes calldata) external; +} + contract ClipperTest is DSTest { Hevm hevm; @@ -227,4 +231,20 @@ contract ClipperTest is DSTest { price = calc.price(top, now - tic); assertEq(price, 0); } + + // --- Revert tests for zero-value parameter validation --- + + // LinearDecrease must reject tau = 0 to prevent division-by-zero in price() + function test_linear_decrease_tau_zero_reverts() public { + LinearDecrease calc = new LinearDecrease(); + Vm(address(CHEAT_CODE)).expectRevert(bytes("LinearDecrease/tau-is-zero")); + calc.file(bytes32("tau"), 0); + } + + // StairstepExponentialDecrease must reject step = 0 to prevent division-by-zero in price() + function test_stairstep_step_zero_reverts() public { + StairstepExponentialDecrease calc = new StairstepExponentialDecrease(); + Vm(address(CHEAT_CODE)).expectRevert(bytes("StairstepExponentialDecrease/step-is-zero")); + calc.file(bytes32("step"), 0); + } }