Util for sending different types of txs for testing purposes
Go to file
2022-12-20 16:56:12 -06:00
.github/workflows Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
cmd Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
environments Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
keys Update for testing with Merge fixturenet. (#11) 2022-11-02 21:33:18 -05:00
pkg Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
sol Update for testing with Merge fixturenet. (#11) 2022-11-02 21:33:18 -05:00
.gitignore Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
Dockerfile Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
go.mod Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
go.sum Update for testing with Merge fixturenet. (#11) 2022-11-02 21:33:18 -05:00
LICENSE Initial commit 2020-10-14 08:22:23 -05:00
main.go Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
Makefile Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
README.md Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00
startup_script.sh Rebrand to cerc-io/tx-spammer 2022-12-20 16:56:12 -06:00

tx-spammer

Tools to enable the semi-reproducible growth of a large and complex chain over RPC, for testing and benchmarking purposes

Usage:

./tx-spammer autoSend --config=./environments/gen.toml

The autoSend command takes as input a .toml config of the below format, the fields can be overridden with the env variables in the comments. It uses the provided key pairs and configuraiton parameters to generate and deploy a number of contracts with a simple interface for Puting to a dynamic data structure. It can then spam these contracts with Put operations at deterministically generated storage locations in order to grow the storage tries indefinitely and in a reproducible manner. Additionally, it can be configured to send large numbers of eth value transfers to a set of manually designated or deterministically derived addresses, in order to grow the state trie.

This process is semi-reproducible, in that given the same input it will generate and send the same set of contract deployment, eth transfer, and contract calling transactions. The precise ordering of transactions is not guaranteed, and uncertainty is introduced by the miner processing the transactions.

[eth]
    keyDirPath = "" # path to the directory with all of the key pairs to use - env: $ETH_KEY_DIR_PATH
    addrFilePath = "" # path to a file with a newline seperated list of addresses we want to send value transfers to - env: $ETH_ADDR_DIR_PATH
    httpPath = "" # http url for the node we wish to send all our transactions to - env: $ETH_HTTP_PATH
    chainID = 421 # chain id - env: $ETH_CHAIN_ID
    type = "L2" # tx type (EIP1559, Standard, or L2) - env: $ETH_TX_TYPE

[deployment]
    number = 1 # number of contracts we will deploy for each key at keyPath - env: $ETH_DEPLOYMENT_NUMBER
    hexData = "" # hex data for the contracts we will deploy - env: $ETH_DEPLOYMENT_HEX_DATA
    gasLimit = 0 # gasLimit to use for the deployment txs - env: $ETH_DEPLOYMENT_GAS_LIMIT
    gasPrice = "0" # gasPrice to use for the deployment txs - env: $ETH_DEPLOYMENT_GAS_PRICE

[optimism]
    l1Sender = "" # l1 sender address hex to use for all txs - env: $ETH_OPTIMISM_L1_SENDER
    l1RollupTxId = 0 # rollup tx id to use for all txs - env: $ETH_OPTIMISM_ROLLUP_TX_ID
    sigHashType = 0 # sig hash type to use for all txs - env: $ETH_OPTIMISM_SIG_HASH_TYPE
    queueOrigin = 0 # queue origin id to use for all txs - env: $ETH_OPTIMISM_QUEUE_ORIGIN

[contractSpammer]
    frequency = 30 # how often to send a transaction (in seconds) - env: $ETH_CALL_FREQ
    totalNumber = 10000 # total number of transactions to send (across all senders) - env: $ETH_CALL_TOTAL_NUMBER
    abiPath = "" # path to the abi file for the contract we are calling - env: $ETH_CALL_ABI_PATH
    # NOTE: we expect to be calling a method such as Put(address addr, uint256 val) where the first argument is an
    # integer than we can increment to store values at new locations in the contract trie (to grow it) and
    # the second argument is an integer value that we store at these positions
    methodName = "Put" # the method name we are calling - env: $ETH_CALL_METHOD_NAME
    storageValue =  1337 # the value we store at each position - env: $ETH_CALL_STORAGE_VALUE
    gasLimit = 0 # gasLimit to use for the eth call txs - env: $ETH_CALL_GAS_LIMIT
    gasPrice = "0" # gasPrice to use for the eth call txs - env: $ETH_CALL_GAS_PRICE

[sendSpammer]
    frequency = 30 # how often to send a transaction (in seconds) - env: $ETH_SEND_FREQ
    totalNumber = 10000 # total number of transactions to send (across all senders) - env: $ETH_SEND_TOTAL_NUMBER
    amount = "1" # amount of wei (1x10^-18 ETH) to send in each tx (be mindful of the genesis allocations) - env: $ETH_SEND_AMOUNT
    gasLimit = 0 # gasLimit to use for the eth transfer txs - env: $ETH_SEND_GAS_LIMIT
    gasPrice = "0" # gasPrice to use for the eth transfer txs - env: $ETH_SEND_GAS_PRICE

TODO: better documentation and document the other commands