mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 19:32:43 +00:00
- 16 cross-shell utilities converted to sh/bash chezmoi executables: ai c2p cp-appid extract_agents fab gdc gh-sonr-org-migrate ghg-clone ghn gho git-summary launch_omp_livediff_overlay lc-elir mdcp mdp pj (ghg-clone not named ghg: unrelated cargo binary owns that name) - cwd/history helpers stay per-shell: yy c cd clip-last + ghg/ghn/gho cd-wrappers in bash/functions/ and zsh/functions/, loaded by rc files - fish keeps only shell-state functions; converted ones now hit PATH - cp-appid ignore gating moved to .local/bin path - dot_agents/skills: 82 skills materialized from dotstate storage so dot_claude skill symlinks resolve on fresh bootstrap; dotstate profile/symlinks.json released .agents/skills .bashrc .zshrc
2.9 KiB
2.9 KiB
Foundry Cheatsheet
MCP Integration: Many Forge commands have equivalent MCP tools (
compile_contract,run_tests,gas_snapshot,dry_run_deploy). Use MCP tools for programmatic access within AI agent workflows.
Forge Commands
forge build: Compile the project.forge test: Run tests.forge snapshot: Generate gas snapshots.forge script: Run Solidity scripts.forge verify-contract: Verify contracts on Etherscan.forge fmt: Format Solidity files.forge inspect: Get contract metadata (bytecode, storage layout, etc.).forge create: Deploy a contract from the CLI.forge debug: Debug a single transaction.
Cast Commands
cast call: Perform a read-only call.cast send: Send a transaction.cast estimate: Estimate gas for a transaction.cast abi-encode: Encode arguments for a function.cast abi-decode: Decode return data.cast sig: Get the selector of a function signature.cast storage: Get the value of a storage slot.cast block: Get information about a block.cast tx: Get information about a transaction.cast wallet: Manage local wallets and keys.
Anvil Commands
anvil: Start a local Ethereum node.--fork-url <URL>: Fork a remote network.--fork-block-number <BLOCK>: Pin the fork to a block.--port <PORT>: Specify the port to listen on.anvil_setBalance: Set the balance of an account (via RPC).
Common Cheatcode Patterns
Identity & Funds
vm.prank(alice);
contract.call(); // msg.sender is alice
vm.deal(alice, 10 ether); // alice now has 10 ETH
hoax(alice, 10 ether); // prank + deal
contract.call();
Time & Blocks
vm.warp(1641006000); // set block.timestamp
vm.roll(14000000); // set block.number
State
uint256 slot = vm.load(address(contract), bytes32(0));
vm.store(address(contract), bytes32(0), bytes32(uint256(1)));
uint256 id = vm.snapshot();
// ... do things ...
vm.revertTo(id);
Assertions
vm.expectRevert("Error message");
contract.fail();
vm.expectEmit(true, true, false, true);
emit MyEvent(1, 2, 3);
contract.emitEvent();
vm.expectCall(address(target), abi.encodeWithSelector(Target.func.selector));
contract.callTarget();
Environment
uint256 key = vm.envUint("PRIVATE_KEY");
address addr = vm.envAddress("CONTRACT_ADDR");
string memory s = vm.envString("API_KEY");
Testing Patterns
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "forge-std/Test.sol";
import "../src/Counter.sol";
contract CounterTest is Test {
Counter public counter;
function setUp() public {
counter = new Counter();
counter.setNumber(0);
}
function test_Increment() public {
counter.increment();
assertEq(counter.number(), 1);
}
function testFuzz_SetNumber(uint256 x) public {
counter.setNumber(x);
assertEq(counter.number(), x);
}
}