Forked from https://github.com/uclaacm/lactf-archive/tree/main/2023/pwn/eth-challenge-base
Makes use of anvil from the foundry toolchain to create blockchain nodes.
The docker image is configurable with the use of environment variables.
Here is the list of configuration available for the docker image
Name | Default | Description |
---|---|---|
FLAG |
grey{TEST_FLAG} |
Challenge flag to be given on solving the challenge |
PUBLIC_IP |
127.0.0.1 |
Public IP/Hostname to display in RPC_URL |
PORT |
5000 |
Port number to bind to (for the challenge deployer service) |
HTTP_PORT |
8545 |
Port number to bind to (to host the web3 interface) |
PER_SOURCE |
1 |
Maximum concurrent connections for each IP |
CPS_RATE |
200 |
Maximum connections per second |
CPS_DELAY |
5 |
Service timeout when CPS_RATE has been hit |
RLIMIT_CPU |
5 |
Maximum number of CPU seconds that the service may use |
CONTRACT_DEPLOY_ARGS |
"" |
Arguments that will be used in deploying the Setup contract |
CONTRACT_DEPLOY_VALUE |
0 |
Amount of Ether to deploy the Setup contract with |
PLAYER_VALUE |
10 |
Amount of Ether to grant to the player |
ETH_RPC_URL |
https://eth-pokt.nodies.app |
Ethereum chain that will be forked |
RPC_KILL_TIMEOUT |
600 |
Amount of seconds until Anvil node is terminated |
docker build ./eth_container -t grey.ctf/evm-infra
Using the built docker image, we can easily deploy on-demand blockchain challenges, with just the smart contract code.
FROM grey.ctf/evm-infra
# configuration
ENV FLAG="grey{i_am_the_flag!}"
# contracts
COPY contracts/ /tmp/contracts/
# additional configuration to build contract
# uncomment if necessary
#
# COPY ./foundry.toml /tmp/foundry.toml
# COPY ./remappings.txt /tmp/remappings.txt
The contracts/
folder MUST contain a file Setup.sol
, with a solidity contract called "Setup" that has the isSolved()
function.
This contract will be deployed on creation of the ethereum node, and will be responsible for:
isSolved()
function