harb/onchain
2024-07-16 20:47:06 +02:00
..
.github/workflows chore: forge init 2024-03-12 10:00:53 +01:00
lib tests without fork 2024-04-16 06:58:41 +02:00
script make slide and shift one function 2024-07-16 20:47:06 +02:00
src make slide and shift one function 2024-07-16 20:47:06 +02:00
test make slide and shift one function 2024-07-16 20:47:06 +02:00
.gitignore first deployment 2024-03-12 20:22:10 +01:00
foundry.toml added csv serializer 2024-05-29 17:26:19 +02:00
README.md added gov params 2024-07-16 19:47:39 +02:00
remappings.txt basic shift implementation 2024-03-28 21:50:22 +01:00

Foundry

Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.

Foundry consists of:

  • Forge: Ethereum testing framework (like Truffle, Hardhat and DappTools).
  • Cast: Swiss army knife for interacting with EVM smart contracts, sending transactions and getting chain data.
  • Anvil: Local Ethereum node, akin to Ganache, Hardhat Network.
  • Chisel: Fast, utilitarian, and verbose solidity REPL.

Documentation

https://book.getfoundry.sh/

Usage

Install

$ git clone
$ git submodule init
$ git submodule update
$ cd lib/uni-v3-lib
$ yarn

Build

$ forge build

Test

$ forge test

Format

$ forge fmt

Gas Snapshots

$ forge snapshot

Anvil

$ anvil

Deploy

forge clean
forge cache clean
source .env
forge script script/Deploy.sol:SepoliaScript --slow --broadcast --verify --rpc-url ${SEPOLIA_RPC_URL}

if verification fails:

forge verify-contract --watch --chain sepolia --constructor-args $(cast abi-encode "constructor(string,string,address,address,address)" "Harberger Tax" "HARB" "0x0227628f3F023bb0B980b67D528571c95c6DaC1c" "0xb16F35c0Ae2912430DAc15764477E179D9B9EbEa" "0x64dda11815b883c589afed914666ef2d63c8c338") 0x7517db0f2b24223f2f0e3567149ca180e204da8a Harb

forge verify-contract --watch --chain sepolia --constructor-args $(cast abi-encode "constructor(address)" "0x7517db0f2b24223f2f0e3567149ca180e204da8a") 0x00b4d656b8182d0c2f4841b7a6f1429b94f73a66 Stake

Cast

$ cast <subcommand>

Help

$ forge --help
$ anvil --help
$ cast --help

Deployment on Sepolia

Harb

address: 0x087F256D11fe533b0c7d372e44Ee0F9e47C89dF9

abi

Stake

address: 0xCd21a41a137BCAf8743E47D048F57D92398f7Da9

abi

LP

address: 0xCc7467616bBDB574D04C7e9d2B0982c59F33D43c

abi

References

open features:

  • token minting limit / limit on discovery position growth

  • ERC721 & ERC4907, user/owner separation, influencer incentives

  • token contract not visible in uniswap sepolia

  • snatch collision

  • previousTotalSupply at beginning?

  • profit for staking position

  • tax paid for staking position

  • partially snatched

  • liquidation bot

  • shift/slide bot

  • ubi claim bot

  • deployment on L2

  • make minStake a gov param

  • prep for audit

    • clean up TODOs
    • clean up magic numbers
    • coverage
    • overflows
    • reentry
    • definition of severity and rewards
      • Minor: Results in some unexpected or undesired behavior or disrupts a system function, causing at least minor loss of funds for user or Liquidity Manager. - reward 0.5% share of fees
      • Major: Bug capable of creating a severe loss of funds for HARB holders or collapsing large parts of the system - reward: 2% share of fees
      • Critical: Bug capable of triggering severe loss of funds for LiquidityManager contract or complete shutdown in Harb/Stake/LiquidityManager contracts - reward: 5%
    • limitations: max 10% share of fees, no seat in multisig
    • HARB
      • mint - limit supply to 2^96?
    • Stake
      • sharesToAssets - should the average total supply be used for this calculation?
      • what if someone calls payTax and exitPosition in the same transaction?
    • LiquidityManager
      • add events
      • what to do with stuck funds if slide/shift become inoperable?
      • _isPriceStable - // Handle try catch, possibly by trying with a different time interval or providing a default response
  • find a way to account harb/eth for attacker

  • NFT support of etherscan https://etherscan.io/nft/0xe12edaab53023c75473a5a011bdb729ee73545e8/4218