harb/onchain
johba 61ea25517c fix: Fix discovery position KRAIKEN amount calculation
The discovery position was incorrectly calculating ETH amount instead
of KRAIKEN amount when determining how much to subtract from outstanding
supply. This caused the floor position to be placed at extreme ticks
(141k+) instead of bordering the anchor position.

When token0isWeth=true:
- Before: discoveryAmount = getAmount0 (ETH amount)
- After: discoveryAmount = getAmount1 (KRAIKEN amount)

This ensures the outstanding supply calculation properly excludes all
KRAIKEN tokens locked in liquidity positions.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-18 17:05:32 +02:00
..
.github/workflows chore: forge init 2024-03-12 10:00:53 +01:00
analysis better visualizer 2025-08-17 15:09:41 +02:00
lib tests without fork 2024-04-16 06:58:41 +02:00
script Complete project rename from HARB/Harberg to KRAIKEN with KRK token symbol 2025-07-11 13:47:42 +02:00
src fix: Fix discovery position KRAIKEN amount calculation 2025-08-18 17:05:32 +02:00
test fix: Correct VWAP price calculation in floor position placement 2025-08-18 15:33:57 +02:00
.gitignore Fix token assignment issue in ThreePositionStrategy and improve analysis tools 2025-07-15 11:46:25 +02:00
CLAUDE.md better visualizer 2025-08-17 15:09:41 +02:00
foundry.toml wip 2025-08-09 18:03:31 +02:00
hAIrberger.md hAIrberger 2024-10-30 15:52:09 +01:00
README.md base deployment 2025-02-05 19:47:18 +01:00
remappings.txt basic shift implementation 2024-03-28 21:50:22 +01:00
testing_todos.md Clean up test suite organization and eliminate duplicate code 2025-07-19 19:58:41 +02:00
UNISWAP_V3_MATH.md more docs 2025-08-18 00:16:09 +02: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/BaseSepoliaDeploy.sol:BaseSepoliaDeploy --slow --broadcast --verify --rpc-url ${BASE_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 Base Sepolia

Multisig

address: 0xf6a3eef9088A255c32b6aD2025f83E57291D9011

Harberg

address: 0x22c264Ecf8D4E49D1E3CabD8DD39b7C4Ab51C1B8

Stake

address: 0xe28020BCdEeAf2779dd47c670A8eFC2973316EE2

LP

address: 0x3d6a8797693a0bC598210782B6a889E11A2340Cd

Deployment on Base

Harberg

address: 0x45caa5929f6ee038039984205bdecf968b954820

Stake

address: 0xed70707fab05d973ad41eae8d17e2bcd36192cfc

LP

address: 0x7fd4e645ce258dd3942eddbeb2f99137da8ba13b

References

open features:

  • reduce snatch collision

todos:

  • write unit test for capital exit function
  • would anchorLiquidityShare affect capitalInefficiency?
  • could the UBI pool run dry?
  • what happens if discovery runs out?

Simulation data:

{	"VWAP":0,
	"comEthBal":1234,
	"comHarbBal":0,
	"comStakeShare":0,
	"liquidity":[{
		"liquidity":1234,
		"tickLower":-123,
		"tickUpper":124			
		}],
	"startTime":1234,
	"txns":[{
		"action":5,"timeOffset":0,"x":0,"y":""},
		{"action":0,"ethAmount":1,"x":0,"y":""},
		{"action":5,"timeOffset":0,"x":0,"y":""},
		{"action":0,"ethAmount":2,"x":0,"y":""},
		{"action":5,"timeOffset":0,"x":0,"y":""},
		{"action":0,"ethAmount":4,"x":0,"y":""},
		{"action":2,"harbAmount":3000,"tax":10,"y":""},
		{"action":5,"timeOffset":0,"x":0,"y":""},
		{"action":4,"positionId":654321,"x":0,"y":""},
		{"action":2,"harbAmount":5000,"tax":20,"y":""},
		{"action":0,"ethAmount":8,"x":0,"y":""},
		{"action":5,"timeOffset":0,"x":0,"y":""},
		{"action":1,"harbAmount":20000,"x":0,"y":""},
		{"action":5,"timeOffset":0,"x":0,"y":""},
		{"action":4,"positionId":654321,"x":0,"y":""},
		{"action":2,"harbAmount":8000,"tax":29,"y":""}
	]
}