Skip to content

🎩🪄 Easily deal any amount of any ERC20 tokens to any account on any `setStorageAt`-compatible network, using viem!

License

Notifications You must be signed in to change notification settings

Rubilmax/viem-deal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

viem-deal

npm package Build Status Downloads Issues Commitizen Friendly Semantic Release

Easily deal arbitrary amounts of any ERC20 tokens to any account on any setStorageAt-compatible network, including in hardhat, tevm, or anvil-based forks!

NB: deal is the name of a cheat code introduced by foundry, which "mints" without actually minting ERC20 tokens - it's overriding the storage of the balance of the given recipient

The storage slot of the mapping balanceOf is brute-forced and the given user's balance is manipulated via setStorageAt.

Storage slots are cached at cache/viem-deal.json to avoid brute-forcing slots every time.

Installation

npm install viem-deal
yarn add viem-deal

Usage

Testing

import { createTestClient, http } from 'viem';
import { foundry } from 'viem/chains';
import { dealActions } from 'viem-deal';

const client = createTestClient({
  mode: 'anvil',
  chain: foundry,
  transport: http(),
}).extend(dealActions);

// Deal 100 USDC to test address.
await client.deal({
  erc20: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
  recipient: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
  amount: parseUnits("100", 6),
});

About

🎩🪄 Easily deal any amount of any ERC20 tokens to any account on any `setStorageAt`-compatible network, using viem!

Resources

License

Stars

Watchers

Forks

Packages

No packages published