-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathjustfile
More file actions
67 lines (47 loc) · 3.52 KB
/
justfile
File metadata and controls
67 lines (47 loc) · 3.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
set dotenv-load
import "lib/battlechain-lib/battlechain.just"
RPC := "battlechain"
ACCT := "battlechain"
# ── Protocol role ──────────────────────────────────────────────────────────────
# Step 1: Deploy MockToken + VulnerableVault, seed the vault
setup:
forge script script/Setup.s.sol --rpc-url {{RPC}} --broadcast -vvv --account {{ACCT}} --sender $SENDER_ADDRESS --legacy --gas-limit 90000000 --skip-simulation
# Step 2: Create Safe Harbor agreement (requires VAULT_ADDRESS in .env)
create-agreement:
forge script script/CreateAgreement.s.sol --rpc-url {{RPC}} --broadcast -vvv --account {{ACCT}} --sender $SENDER_ADDRESS --legacy --gas-limit 90000000 --skip-simulation
# Step 3: Request attack mode (requires AGREEMENT_ADDRESS in .env)
request-attack-mode:
forge script script/RequestAttackMode.s.sol --rpc-url {{RPC}} --broadcast -vvv --account {{ACCT}} --sender $SENDER_ADDRESS --legacy --gas-limit 90000000 --skip-simulation
# ── Whitehat role ──────────────────────────────────────────────────────────────
# Step 4: Execute the attack (requires DAO approval first)
attack:
forge script script/Attack.s.sol --rpc-url {{RPC}} --broadcast -vvv --account {{ACCT}} --sender $SENDER_ADDRESS --legacy --gas-limit 90000000 --skip-simulation
# ── Browser wallet (AI-initiated, user-approved) ─────────────────────────────
# Step 1: Deploy MockToken + VulnerableVault, seed the vault (browser wallet)
setup-browser:
forge script script/Setup.s.sol --rpc-url {{RPC}} --broadcast -vvv --browser --chain {{bc-chain-id}} --skip-simulation --verify {{bc-verify-flags}}
# Step 2: Create Safe Harbor agreement (browser wallet)
create-agreement-browser:
forge script script/CreateAgreement.s.sol --rpc-url {{RPC}} --broadcast -vvv --browser --chain {{bc-chain-id}} --skip-simulation --verify {{bc-verify-flags}}
# Step 3: Request attack mode (browser wallet)
request-attack-mode-browser:
forge script script/RequestAttackMode.s.sol --rpc-url {{RPC}} --broadcast -vvv --browser --chain {{bc-chain-id}} --skip-simulation --verify {{bc-verify-flags}}
# Step 4: Execute the attack (browser wallet)
attack-browser:
forge script script/Attack.s.sol --rpc-url {{RPC}} --broadcast -vvv --browser --chain {{bc-chain-id}} --skip-simulation --verify {{bc-verify-flags}}
# ── Verification ──────────────────────────────────────────────────────────────
# Verify all contracts from the Setup broadcast
verify-setup:
just bc-verify-broadcast script/Setup.s.sol
# ── Utilities ──────────────────────────────────────────────────────────────────
# Generate a random private key and import it as the 'battlechain' keystore account
generate-key:
cast wallet import battlechain --private-key 0x$(openssl rand -hex 32)
# Check agreement state (2=ATTACK_REQUESTED, 3=UNDER_ATTACK)
check-state:
cast call $ATTACK_REGISTRY "getAgreementState(address)(uint8)" $AGREEMENT_ADDRESS \
--rpc-url https://testnet.battlechain.com:3051
build:
forge build
test:
forge test -vvv