Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions scenarios/chainlinkOracle.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Chainlink Oracle Spammer Scenario
# Deploys simplified Chainlink-style price feed aggregator contracts and spams them with oracle updates
#
# This scenario simulates:
# 1. Deploying a Chainlink-compatible MockV3Aggregator price feed
# 2. Deploying an OracleReader that consumes the price feed
# 3. Spamming price updates to simulate oracle node activity
# 4. Spamming price reads to simulate DeFi protocol consumption
#
# Usage:
# contender setup ./scenarios/chainlinkOracle.toml -r $RPC_URL -p $PRIVATE_KEY
# contender spam ./scenarios/chainlinkOracle.toml -r $RPC_URL --tps 20 -d 30 -p $PRIVATE_KEY

[env]
# Initial ETH price in 8 decimals ($2000.00 = 200000000000)
initialPrice = "200000000000"

### Contract Deployments

[[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 Transactions

# 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" }]
Loading