diff --git a/scenarios/chainlinkOracle.toml b/scenarios/chainlinkOracle.toml new file mode 100644 index 00000000..f2857751 --- /dev/null +++ b/scenarios/chainlinkOracle.toml @@ -0,0 +1,35 @@ +[env] +# Initial ETH price in 8 decimals ($2000.00 = 200000000000) +initialPrice = "200000000000" + + +[[create]] +name = "MockV3Aggregator" +signature = "(uint8 _decimals, int256 _initialAnswer)" +args = ["8", "{initialPrice}"] +# source: https://github.com/smartcontractkit/chainlink-evm/blob/develop/contracts/src/v0.8/shared/mocks/MockV3Aggregator.sol +# (modified to emit events; standard MockV3Aggregator does not) +bytecode = "0x608060405234801561000f575f5ffd5b506040516108f13803806108f183398181016040528101906100319190610178565b815f5f6101000a81548160ff021916908360ff1602179055506100598161006060201b60201c565b505061025b565b806001819055504260028190555060035f815480929190610080906101ec565b91905055508060045f60035481526020019081526020015f20819055504260055f60035481526020019081526020015f20819055504260065f60035481526020019081526020015f2081905550600354817f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f426040516101009190610242565b60405180910390a350565b5f5ffd5b5f60ff82169050919050565b6101248161010f565b811461012e575f5ffd5b50565b5f8151905061013f8161011b565b92915050565b5f819050919050565b61015781610145565b8114610161575f5ffd5b50565b5f815190506101728161014e565b92915050565b5f5f6040838503121561018e5761018d61010b565b5b5f61019b85828601610131565b92505060206101ac85828601610164565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f819050919050565b5f6101f6826101e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610228576102276101b6565b5b600182019050919050565b61023c816101e3565b82525050565b5f6020820190506102555f830184610233565b92915050565b610689806102685f395ff3fe608060405234801561000f575f5ffd5b506004361061009c575f3560e01c8063a87a20ce11610064578063a87a20ce1461014c578063ac0de66f14610168578063b5ab58dc14610198578063b633620c146101c8578063feaf968c146101f85761009c565b8063313ce567146100a057806350d25bcd146100be578063668a0f02146100dc5780638205bf6a146100fa5780639a6fc8f514610118575b5f5ffd5b6100a861021a565b6040516100b591906103ec565b60405180910390f35b6100c661022b565b6040516100d3919061041d565b60405180910390f35b6100e4610231565b6040516100f1919061044e565b60405180910390f35b610102610237565b60405161010f919061044e565b60405180910390f35b610132600480360381019061012d91906104aa565b61023d565b6040516101439594939291906104e4565b60405180910390f35b6101666004803603810190610161919061055f565b6102b1565b005b610182600480360381019061017d91906105b4565b61035c565b60405161018f919061044e565b60405180910390f35b6101b260048036038101906101ad91906105b4565b610371565b6040516101bf919061041d565b60405180910390f35b6101e260048036038101906101dd91906105b4565b610386565b6040516101ef919061044e565b60405180910390f35b61020061039b565b6040516102119594939291906104e4565b60405180910390f35b5f5f9054906101000a900460ff1681565b60015481565b60035481565b60025481565b5f5f5f5f5f8560045f8869ffffffffffffffffffff1681526020019081526020015f205460065f8969ffffffffffffffffffff1681526020019081526020015f205460055f8a69ffffffffffffffffffff1681526020019081526020015f2054899450945094509450945091939590929450565b806001819055504260028190555060035f8154809291906102d19061060c565b91905055508060045f60035481526020019081526020015f20819055504260055f60035481526020019081526020015f20819055504260065f60035481526020019081526020015f2081905550600354817f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f42604051610351919061044e565b60405180910390a350565b6006602052805f5260405f205f915090505481565b6004602052805f5260405f205f915090505481565b6005602052805f5260405f205f915090505481565b5f5f5f5f5f60035460015460065f60035481526020019081526020015f2054600254600354945094509450945094509091929394565b5f60ff82169050919050565b6103e6816103d1565b82525050565b5f6020820190506103ff5f8301846103dd565b92915050565b5f819050919050565b61041781610405565b82525050565b5f6020820190506104305f83018461040e565b92915050565b5f819050919050565b61044881610436565b82525050565b5f6020820190506104615f83018461043f565b92915050565b5f5ffd5b5f69ffffffffffffffffffff82169050919050565b6104898161046b565b8114610493575f5ffd5b50565b5f813590506104a481610480565b92915050565b5f602082840312156104bf576104be610467565b5b5f6104cc84828501610496565b91505092915050565b6104de8161046b565b82525050565b5f60a0820190506104f75f8301886104d5565b610504602083018761040e565b610511604083018661043f565b61051e606083018561043f565b61052b60808301846104d5565b9695505050505050565b61053e81610405565b8114610548575f5ffd5b50565b5f8135905061055981610535565b92915050565b5f6020828403121561057457610573610467565b5b5f6105818482850161054b565b91505092915050565b61059381610436565b811461059d575f5ffd5b50565b5f813590506105ae8161058a565b92915050565b5f602082840312156105c9576105c8610467565b5b5f6105d6848285016105a0565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61061682610436565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610648576106476105df565b5b60018201905091905056fea2646970667358221220c05cfd3b46e8b7c0d0e66dd29f3f7ec91dac8e0bee14de864caf9705587d457c64736f6c634300081e0033" + + +# Spam: Oracle price update - simulates oracle node pushing new ETH/USD price +# Price fluctuates around $2000 (+/- $10) via fuzzing +[[spam]] +[spam.tx] +kind = "oracle_price_update" +to = "{MockV3Aggregator}" +from_pool = "oracle_nodes" +signature = "function updateAnswer(int256 _answer)" +args = ["200000000000"] +fuzz = [{ param = "_answer", min = "199000000000", max = "201000000000" }] + +# Spam: High volatility price updates - simulates volatile market conditions +# Price swings between $1800 and $2200 +[[spam]] +[spam.tx] +kind = "oracle_volatile_update" +to = "{MockV3Aggregator}" +from_pool = "volatile_oracles" +signature = "function updateAnswer(int256 _answer)" +args = ["200000000000"] +fuzz = [{ param = "_answer", min = "180000000000", max = "220000000000" }]