{"_id":"@bananapus/referral-split-hook-v6","_rev":"9-43348c79b66ed46449daebdca9113ea9","name":"@bananapus/referral-split-hook-v6","dist-tags":{"latest":"0.0.11"},"versions":{"0.0.3":{"name":"@bananapus/referral-split-hook-v6","version":"0.0.3","license":"MIT","_id":"@bananapus/referral-split-hook-v6@0.0.3","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"dist":{"shasum":"2fb163560291ef44149dd8b9df4928919f5176fb","tarball":"https://registry.npmjs.org/@bananapus/referral-split-hook-v6/-/referral-split-hook-v6-0.0.3.tgz","fileCount":11,"integrity":"sha512-gkDisll6hFq1NEvLRu5t830boBxlZxa16vWwF+PkpavOnF3IYIIVXvJX5zkXcK2XbGHcqyavFaFI1VJ+K/pU2g==","signatures":[{"sig":"MEQCICKI8zmWAt7WT7ieLaLdL7zQCzKK6xdAZq7P3ME7BIcJAiAot+3uFxBhSZ0bfetKMskQf9/1DRf7tUacN5Hloqq+pQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60965},"engines":{"node":">=20.0.0"},"gitHead":"7bb322b497d88d6a30c4d1e78f88fea3982f0232","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","test:fork":"forge test --fork-url $RPC_ETHEREUM_MAINNET","deploy:mainnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets","deploy:testnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git","type":"git"},"_npmVersion":"11.12.1","description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@prb/math":"4.1.1","@bananapus/core-v6":"^0.0.59","@bananapus/suckers-v6":"^0.0.50","@openzeppelin/contracts":"5.6.1","@bananapus/distributor-v6":"^0.0.18","@bananapus/permission-ids-v6":"^0.0.25"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"0.33.3"},"_npmOperationalInternal":{"tmp":"tmp/referral-split-hook-v6_0.0.3_1779545864577_0.8096554817407187","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@bananapus/referral-split-hook-v6","version":"0.0.4","license":"MIT","_id":"@bananapus/referral-split-hook-v6@0.0.4","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"dist":{"shasum":"a7174874b38bc43ecea28b935554beddf2f4042b","tarball":"https://registry.npmjs.org/@bananapus/referral-split-hook-v6/-/referral-split-hook-v6-0.0.4.tgz","fileCount":10,"integrity":"sha512-vgZVYjCks74O75Z9WlBrhTEQzf8OHhLPGD6+UBA+ZN4qoPgLHuR3mlXObs7AMO0FPzv4Y2UQUwpR2R7Lp/iaCA==","signatures":[{"sig":"MEUCIQDzZLb0CQ43B/P10TsnU5S1+SnNshl795lNQY9XThwMKgIgA1FvefY81q8WQY9Utpavln+rGwaRSjrb7doefCe15N0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55690},"engines":{"node":">=20.0.0"},"gitHead":"081a73edf91d6b2a9dff023069022214d680dda1","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","test:fork":"forge test --fork-url $RPC_ETHEREUM_MAINNET","deploy:mainnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets","deploy:testnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git","type":"git"},"_npmVersion":"11.12.1","description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@prb/math":"4.1.1","@bananapus/core-v6":"^0.0.59","@bananapus/suckers-v6":"^0.0.50","@openzeppelin/contracts":"5.6.1","@bananapus/distributor-v6":"^0.0.18","@bananapus/permission-ids-v6":"^0.0.25"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"0.33.3"},"_npmOperationalInternal":{"tmp":"tmp/referral-split-hook-v6_0.0.4_1779552428730_0.2096600352974025","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@bananapus/referral-split-hook-v6","version":"0.0.5","license":"MIT","_id":"@bananapus/referral-split-hook-v6@0.0.5","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"dist":{"shasum":"219cae534e4243da9a887b3a7104927fe4748ee3","tarball":"https://registry.npmjs.org/@bananapus/referral-split-hook-v6/-/referral-split-hook-v6-0.0.5.tgz","fileCount":10,"integrity":"sha512-hjJUTzD7qW42wXxtnShpyEDwBNhET4f9JSFG1n/AYolszQFwybK3z3eamMwwbzA5WhARcm1YOEpfQhRyo/3Ufg==","signatures":[{"sig":"MEUCIQDUzqYUbnQxUTMCIw9VKju6CJP4qI8PU14a9JC+29qk4AIgGjelXf+Z26CjSBm7WtgLyXpdEOmpax2x8ZTYs6txPs4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68884},"engines":{"node":">=20.0.0"},"gitHead":"3b24ccde6958c5475202197245844f6c7a51b5d0","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","test:fork":"forge test --fork-url $RPC_ETHEREUM_MAINNET","deploy:mainnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets","deploy:testnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git","type":"git"},"_npmVersion":"11.12.1","description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume. Same-chain referrers are pushed to a local `JBTokenDistributor`; cross-cha","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@prb/math":"4.1.1","@bananapus/core-v6":"^0.0.60","@bananapus/suckers-v6":"^0.0.52","@openzeppelin/contracts":"5.6.1","@bananapus/distributor-v6":"^0.0.23","@bananapus/permission-ids-v6":"^0.0.27"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"0.33.3"},"_npmOperationalInternal":{"tmp":"tmp/referral-split-hook-v6_0.0.5_1779557077894_0.29528950956786226","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@bananapus/referral-split-hook-v6","version":"0.0.6","license":"MIT","_id":"@bananapus/referral-split-hook-v6@0.0.6","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"dist":{"shasum":"d96bcb20bb9511a3826272e2e60e0e2a3c0bb685","tarball":"https://registry.npmjs.org/@bananapus/referral-split-hook-v6/-/referral-split-hook-v6-0.0.6.tgz","fileCount":10,"integrity":"sha512-yeyDrdQXKoufzyV4eC4KAhc+qKtQrEqMdsFmdWU7KSPWUc3gLuEqJIknvv0/FcNoZej1/UE6ZENFNSnqDXM2Lw==","signatures":[{"sig":"MEUCIAl2YibQq8Bt0+8al6Pc+e/c2D2J/QhvJL1VyXWxyY3UAiEAq8Ucbc7TqCIBoXlFMzwaKSvKfCOvZjfWLdreqIeG06U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70318},"engines":{"node":">=20.0.0"},"gitHead":"22728d09b48128d5948eb152a6404607e42f040c","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","test:fork":"forge test --fork-url $RPC_ETHEREUM_MAINNET","deploy:mainnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets","deploy:testnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git","type":"git"},"_npmVersion":"11.12.1","description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume. Same-chain referrers are pushed to a local `JBTokenDistributor`; cross-cha","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@prb/math":"4.1.1","@bananapus/core-v6":"^0.0.60","@bananapus/suckers-v6":"^0.0.52","@openzeppelin/contracts":"5.6.1","@bananapus/distributor-v6":"^0.0.23","@bananapus/permission-ids-v6":"^0.0.27"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"0.33.3"},"_npmOperationalInternal":{"tmp":"tmp/referral-split-hook-v6_0.0.6_1779666157304_0.7985358519107448","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@bananapus/referral-split-hook-v6","version":"0.0.7","license":"MIT","_id":"@bananapus/referral-split-hook-v6@0.0.7","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"dist":{"shasum":"75b6e469b2feacabd560d3f2e3a9723241467aee","tarball":"https://registry.npmjs.org/@bananapus/referral-split-hook-v6/-/referral-split-hook-v6-0.0.7.tgz","fileCount":10,"integrity":"sha512-PeNTK0gU/NoxJClkoPa9fMsi3UR3o7KXXALgaprZzl1cH28CRxyXdKbICzm85MmVlMWMVv2zk9tzgpYoi3n/eg==","signatures":[{"sig":"MEQCIG5LvPcwGrIEC6vVdset8Y14Exv3MKjz9JZkvWN90cJZAiBYoSMff89xkp+saTKSHs/8NFS2GN1silh7CaVQH+SOAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90076},"engines":{"node":">=20.0.0"},"gitHead":"7e3ed43b3fe817f7470e4538840eea92515175df","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","test:fork":"forge test --fork-url $RPC_ETHEREUM_MAINNET","deploy:mainnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets","deploy:testnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git","type":"git"},"_npmVersion":"11.12.1","description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume. Same-chain referrers are pushed to a local `JBTokenDistributor`; cross-cha","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@prb/math":"4.1.1","@bananapus/core-v6":"^0.0.60","@bananapus/suckers-v6":"^0.0.59","@openzeppelin/contracts":"5.6.1","@bananapus/distributor-v6":"^0.0.23","@bananapus/permission-ids-v6":"^0.0.27"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"0.33.3"},"_npmOperationalInternal":{"tmp":"tmp/referral-split-hook-v6_0.0.7_1779848764650_0.938004850041791","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@bananapus/referral-split-hook-v6","version":"0.0.8","license":"MIT","_id":"@bananapus/referral-split-hook-v6@0.0.8","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"dist":{"shasum":"1483568884906af8488bd09e9d5acf447647a344","tarball":"https://registry.npmjs.org/@bananapus/referral-split-hook-v6/-/referral-split-hook-v6-0.0.8.tgz","fileCount":10,"integrity":"sha512-nSixvR6qXdui7rB6ARhkoqmRuwgz3Tt/uN2GWM6INqyZnUyKk5MWzFIdzSb8Qo9QWhYRul3wRiJsDXfi7MUk5g==","signatures":[{"sig":"MEUCIDk1ZdrqPUYuJHGPC7IRfagDqS/yCpWHZyIrxr9xeOaCAiEAhdN7wLL/Oxgt4EKyFxiieN/pbdIwGVlaKWxasat+2xU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90012},"engines":{"node":">=20.0.0"},"gitHead":"abff3f0477c3bbf0044989f384ea86a543c199e1","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","test:fork":"forge test --fork-url $RPC_ETHEREUM_MAINNET","deploy:mainnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets","deploy:testnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git","type":"git"},"_npmVersion":"11.12.1","description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume. Same-chain referrers are pushed to a local `JBTokenDistributor`; cross-cha","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@prb/math":"4.1.1","@bananapus/core-v6":"^0.0.72","@bananapus/suckers-v6":"^0.0.61","@openzeppelin/contracts":"5.6.1","@bananapus/distributor-v6":"^0.0.32","@bananapus/permission-ids-v6":"^0.0.27"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"0.33.3"},"_npmOperationalInternal":{"tmp":"tmp/referral-split-hook-v6_0.0.8_1779916682197_0.25100071177571537","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@bananapus/referral-split-hook-v6","version":"0.0.9","license":"MIT","_id":"@bananapus/referral-split-hook-v6@0.0.9","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"dist":{"shasum":"55f1344beca4843f797a844b1d551a80d89dc819","tarball":"https://registry.npmjs.org/@bananapus/referral-split-hook-v6/-/referral-split-hook-v6-0.0.9.tgz","fileCount":10,"integrity":"sha512-7PVnYmX6RrCnvNTxsn4PDCjA3G/t+VC4KcVW/bTv4ABNL5R1zq6LhpJ/R0yBeqj6zHPIW47UR0za+sF7Wg22bw==","signatures":[{"sig":"MEYCIQCenLPQBTJyTNOsG2xoRyWacqkT62Ze1vToQbWFGFLu/gIhAJZ6HSFFv59a1cum4Idtb/eu4VB1yExtXGHK1zyKSu4/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90389},"engines":{"node":">=20.0.0"},"gitHead":"8862432eefd18495069fba990c10a9dd72c84b00","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","test:fork":"forge test --fork-url $RPC_ETHEREUM_MAINNET","deploy:mainnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets","deploy:testnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git","type":"git"},"_npmVersion":"11.12.1","description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume. Same-chain referrers are pushed to a local `JBTokenDistributor`; cross-cha","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@prb/math":"4.1.1","@bananapus/core-v6":"^0.0.72","@bananapus/suckers-v6":"^0.0.61","@openzeppelin/contracts":"5.6.1","@bananapus/distributor-v6":"^0.0.35","@bananapus/permission-ids-v6":"^0.0.27"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"0.33.3"},"_npmOperationalInternal":{"tmp":"tmp/referral-split-hook-v6_0.0.9_1780248771546_0.7573434678618463","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@bananapus/referral-split-hook-v6","version":"0.0.10","license":"MIT","_id":"@bananapus/referral-split-hook-v6@0.0.10","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"dist":{"shasum":"bbbd90e21c3bff339273baf32411d230d5e7cc5c","tarball":"https://registry.npmjs.org/@bananapus/referral-split-hook-v6/-/referral-split-hook-v6-0.0.10.tgz","fileCount":10,"integrity":"sha512-s/gDC0ZEUV419KOba77Vj6bl5c3/0jlksZGld2w0Y75yGlpZFofYauVKPH3HtQpG8IW5Jd31UyX+R/BiiQvDwg==","signatures":[{"sig":"MEUCIBUdnrV2I6y7UACKqfGgDUdlC+Qy7u7Htq5QUoFpcskAAiEArjzTlxMPyNj9N123EDgYDw3XhckwuFa7KwvO3+9ks7Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97914},"engines":{"node":">=20.0.0"},"gitHead":"205549685a3c6fc81c98936faae4551245120819","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","test:fork":"forge test --fork-url $RPC_ETHEREUM_MAINNET","deploy:mainnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets","deploy:testnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git","type":"git"},"_npmVersion":"11.12.1","description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume. Same-chain referrers are pushed to a local `JBTokenDistributor`; cross-cha","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@prb/math":"4.1.1","@bananapus/core-v6":"^0.0.72","@bananapus/suckers-v6":"^0.0.61","@openzeppelin/contracts":"5.6.1","@bananapus/distributor-v6":"^0.0.35","@bananapus/permission-ids-v6":"^0.0.27"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"0.33.3"},"_npmOperationalInternal":{"tmp":"tmp/referral-split-hook-v6_0.0.10_1780324677224_0.22919816396830828","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@bananapus/referral-split-hook-v6","version":"0.0.11","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git"},"engines":{"node":">=20.0.0"},"scripts":{"test":"forge test","test:fork":"forge test --fork-url $RPC_ETHEREUM_MAINNET","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","deploy:mainnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks mainnets","deploy:testnets":"source ./.env && npx sphinx propose ./script/Deploy.s.sol --networks testnets"},"dependencies":{"@bananapus/core-v6":"^0.0.78","@bananapus/distributor-v6":"^0.0.36","@bananapus/permission-ids-v6":"^0.0.28","@bananapus/suckers-v6":"^0.0.67","@openzeppelin/contracts":"5.6.1","@prb/math":"4.1.1"},"devDependencies":{"@sphinx-labs/plugins":"0.33.3"},"gitHead":"96dfce27140dd1589ee9e783dfb0fb597e328e0a","_id":"@bananapus/referral-split-hook-v6@0.0.11","description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume. Same-chain referrers are pushed to a local `JBTokenDistributor`; cross-cha","bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-qAObTY89tOMNyahZ+ghvuV+3opLk8PEM7vjjRTeenlNLcvwPHXZof04eN0BQ8CXJ3UHe0H3aXNSj9bsnSLFn/A==","shasum":"1f6c319fa37aae688ffcec925a97741c098493a0","tarball":"https://registry.npmjs.org/@bananapus/referral-split-hook-v6/-/referral-split-hook-v6-0.0.11.tgz","fileCount":10,"unpackedSize":97914,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDItfHmbuKhUgicl8YU44slGrmZnZNKU5nz40Y37LsgfgIgQtv1CiEHB2H39A/Ni1XbEqGAB01n/AWzaQVkM5tqp68="}]},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"directories":{},"maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/referral-split-hook-v6_0.0.11_1780346720013_0.7880586199022666"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-23T14:17:44.430Z","modified":"2026-06-01T20:45:20.340Z","0.0.3":"2026-05-23T14:17:44.724Z","0.0.4":"2026-05-23T16:07:08.894Z","0.0.5":"2026-05-23T17:24:38.054Z","0.0.6":"2026-05-24T23:42:37.444Z","0.0.7":"2026-05-27T02:26:04.794Z","0.0.8":"2026-05-27T21:18:02.327Z","0.0.9":"2026-05-31T17:32:51.694Z","0.0.10":"2026-06-01T14:37:57.380Z","0.0.11":"2026-06-01T20:45:20.159Z"},"bugs":{"url":"https://github.com/Bananapus/nana-referral-split-hook-v6/issues"},"license":"MIT","homepage":"https://github.com/Bananapus/nana-referral-split-hook-v6#readme","repository":{"type":"git","url":"git+https://github.com/Bananapus/nana-referral-split-hook-v6.git"},"description":"`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume. Same-chain referrers are pushed to a local `JBTokenDistributor`; cross-cha","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"readme":"# Juicebox Referral Split Hook\n\n`@bananapus/referral-split-hook-v6` is a split hook that routes the fee project's reserved-token pool to referring projects' IVotes holders, in proportion to attributed fee volume. Same-chain referrers are pushed to a local `JBTokenDistributor`; cross-chain referrers are bridged through the fee project's sucker and settled atomically on their home chain. Credit on chains with no sucker pair is burned to the fee-project surplus rather than left to dilute existing holders.\n\n## Documentation\n\n- [ARCHITECTURE.md](./ARCHITECTURE.md) — module-level dataflow including the cross-chain path\n- [USER_JOURNEYS.md](./USER_JOURNEYS.md) — five end-to-end flows from real callers' perspectives\n- [INVARIANTS.md](./INVARIANTS.md) — operational invariants enumerated per-contract\n- [RISKS.md](./RISKS.md) — risk register and the burn-vs-defer-vs-revert design contract\n- [ADMINISTRATION.md](./ADMINISTRATION.md) — control posture, roles, recovery\n- [AUDIT_INSTRUCTIONS.md](./AUDIT_INSTRUCTIONS.md) — where to look, what must hold\n- [SKILLS.md](./SKILLS.md) — quick-reference facts for AI agents working in this repo\n- [STYLE_GUIDE.md](./STYLE_GUIDE.md) — repo-internal style ref\n- [CHANGELOG.md](./CHANGELOG.md) — version history\n\n## Overview\n\nWhen a project pays a protocol fee, the caller can attribute that fee to a **referral project** via `JBMultiTerminal.{cashOutTokensOf, sendPayoutsOf, useAllowanceOf}(..., referralProjectId)`. The `referralProjectId` parameter is encoded as `(referralChainId << 48) | bareProjectId` so cross-chain referrers can be credited from any source chain. `JBTerminalStore` records the per-terminal, per-(chainId, projectId) fee volume in `feeVolumeByReferralOf` and a denominator in `totalFeeVolumeOf`, normalizing all amounts to NATIVE_TOKEN 18-decimal units so multi-currency fee projects mix correctly.\n\nThis repo wires that volume ledger into the fee project's reserved-token split distribution:\n\n1. The fee project lists `JBReferralSplitHook` as one of its reserved-token splits.\n2. When the fee project calls `sendReservedTokensToSplitsOf`, the hook receives its allocation of project tokens and books them into `totalDeposited`.\n3. Routing depends on where the referrer lives:\n   - **Same-chain referrer**: anyone calls `pushTo(localChainId, refId)` to forward the entitled delta into `JBTokenDistributor.fund(refToken, feeToken, amount)`.\n   - **Cross-chain referrer with a sucker pair**: anyone calls `bridgeRemote(remoteChainId, refId, sucker, terminalToken)` to cash out the entitled fee-project tokens through the sucker. The destination-side hook (same CREATE2 address) settles via `claimAndPush(originChainId, refId, sucker, claimData)`, which mints fee-project tokens on the destination chain and forwards to the local distributor.\n   - **Cross-chain referrer with NO sucker pair**: anyone calls `burnUnbridgeableCreditFor(remoteChainId, refId)`. The first such call only arms a dwell window (records `noSettlementPathSince[remoteChainId]`) and burns nothing; a later call burns the entitled fee-project tokens once the chain has had no sucker pair for `BURN_DWELL_PERIOD` (3 days). This gives a settlement route mid-deployment time to register first — if a sucker for the chain appears within the window, the call reverts and the credit stays bridgeable. After the burn, the bridged terminal-token value (already in the fee project's balance from the original protocol-fee flow) accrues pro-rata to all existing fee-token holders.\n4. Holders of the referring project's token claim their pro-rata stream over the distributor's configured vesting rounds.\n\nThe hook never custodies value beyond the brief window between receipt and forwarding. It never decides who is a \"valid\" referrer — it just resolves the volume ratio published by `JBTerminalStore` and routes.\n\n## Mental Model\n\n1. Fees attribute to referrers as they happen — recorded in `JBTerminalStore` keyed by `(terminal, chainId, projectId)`, normalized to NATIVE units.\n2. Reserved tokens accumulate on the fee project and periodically distribute via splits.\n3. One of those splits is this hook — it pools the tokens into `totalDeposited`.\n4. A permissionless `pushTo` / `bridgeRemote` / `burnUnbridgeableCreditFor` call moves a referrer's pro-rata share to its destination — local distributor, remote sucker outbox, or burn.\n5. Cross-chain bridges settle on the destination chain via `claimAndPush`, which either forwards to the destination's local distributor or burns to the destination fee-project's surplus.\n6. The referring project's IVotes holders claim from the distributor on the next vesting round.\n\nUse this repo when the problem is \"distribute fee-project tokens to referrers' holders, including cross-chain\". Do not use it for the upstream volume attribution (that lives in `nana-core-v6`) or for the actual vesting/claim mechanics (that lives in `nana-distributor-v6`).\n\n## Key Contracts\n\n| Contract | Role |\n| --- | --- |\n| `JBReferralSplitHook` | `IJBSplitHook` receiver for the fee project's reserved-token splits. Pools deposits, then routes per-referrer shares to (a) the local distributor, (b) the fee project's sucker outbox, or (c) the burn path. |\n\n## Read These Files First\n\n1. `src/interfaces/IJBReferralSplitHook.sol` — every entrypoint with full NatSpec\n2. `src/JBReferralSplitHook.sol` — the contract\n3. `test/JBReferralSplitHook.t.sol` — unit tests\n4. `deploy-all-v6/test/fork/ReferralRewardCrossChainFork.t.sol` — full cross-chain E2E\n\n## Integration Traps\n\n- **`referralProjectId` is keyed to the referrer's HOME chain.** Across `pushTo`, `bridgeRemote`, `claimAndPush`, and `burnUnbridgeableCreditFor`, this field ALWAYS refers to the projectId on the referrer's home chain — never to a numerically-matching projectId on some other chain. Projectid spaces are per-chain; project `42` on Optimism is unrelated to project `42` on Base.\n- **Suckers need `MINT_TOKENS` permission.** The `JBSuckerRegistry.deploySuckersFor` flow grants `DEPLOY_SUCKERS` and `MAP_SUCKER_TOKEN` but NOT `MINT_TOKENS`. Without that grant, `claimAndPush` reverts inside `sucker.claim` → `mintTokensOf`. Grant explicitly via `JBPermissions.setPermissionsFor`.\n- **CREATE2 same-address-across-chains is load-bearing.** `claimAndPush` validates that `leaf.beneficiary == address(this)` on the destination side. If the hook lives at a different address on the destination chain, every cross-chain claim reverts.\n- **Multi-terminal deployments need multiple hooks.** `TERMINAL` is constructor-set immutable. Fee volume on any other terminal is invisible to this hook.\n- **Pro-rata is monotonic-but-not-snapshot-coherent.** A late-arriving referrer who drives a lot of volume can reduce an earlier referrer's `entitled` below their HWM. The hook clamps at zero; the residual stays in the pool. See `RISKS.md` § 2 and § 7.4.\n- **Burn-over-strand is the policy.** When a leaf can't reach a recipient, the hook burns rather than holds. Cross-chain credit on a chain with no sucker → use `burnUnbridgeableCreditFor`. `claimAndPush` to a chain whose local twin has no IVotes token → automatic burn inside the call. See [RISKS.md § 7](./RISKS.md) for the matrix.\n\n## Where State Lives\n\n- Per-referrer same-chain HWM: `pushedLocallyOf[refProjectId]`\n- Per-referrer cross-chain HWM (unified across bridge AND burn): `bridgedOutOf[chainId][refProjectId]`\n- Per-chain dwell-window start before an unbridgeable burn: `noSettlementPathSince[chainId]`\n- Cumulative deposits received: `totalDeposited`\n- Volume ledger: read-only, from `JBTerminalStore` in `nana-core-v6` (normalized to NATIVE 18-dec)\n- Vesting state: lives in `JBTokenDistributor` in `nana-distributor-v6` once `pushTo`/`claimAndPush` forwards\n- Sucker outboxes / inboxes: live in `nana-suckers-v6`\n\n## High-Signal Tests\n\n1. `test/JBReferralSplitHook.t.sol` — unit tests for every revert path and storage update\n2. `deploy-all-v6/test/fork/ReferralRewardCrossChainFork.t.sol` — 28 cross-chain E2E tests + 4 096-run fuzz on the pro-rata math, covering same-chain push, cross-chain bridge, cross-chain claim with different IDs, USDC fee flow, burn-on-strand, burn-unbridgeable, and shared-HWM invariants\n\n## Install\n\n```bash\nnpm install @bananapus/referral-split-hook-v6\n```\n\n## Development\n\n```bash\nnpm install\nforge build --deny notes\nforge test --deny notes\n```\n\nUseful scripts:\n\n- `npm run test:fork`\n- `npm run deploy:mainnets`\n- `npm run deploy:testnets`\n\n## Repository Layout\n\n```text\nsrc/\n  JBReferralSplitHook.sol\n  interfaces/\n    IJBReferralSplitHook.sol\ntest/\n  JBReferralSplitHook.t.sol\nscript/\n  Deploy.s.sol\n```\n\n## Risks And Notes\n\n- The hook trusts `JBTerminalStore` as a volume oracle. Any operational issue with the originating terminal's attribution flows through here.\n- `pushTo`, `bridgeRemote`, `claimAndPush`, and `burnUnbridgeableCreditFor` are all permissionless. Frontends and keepers are expected to call them regularly.\n- Burned credit is permanently irrecoverable for the would-be referrer. The policy chooses certainty over preserving every cent for an off-chain decision.\n\n## For AI Agents\n\n- This repo is a thin router. Volume attribution lives upstream in `nana-core-v6`; vesting + claim lives downstream in `nana-distributor-v6`; bridge plumbing lives in `nana-suckers-v6`.\n- If you find yourself adding accounting logic here, it likely belongs in one of those repos instead.\n- The deferral-vs-stranding decision matrix in [RISKS.md § 7](./RISKS.md) is the design contract. Every new entrypoint must match it.\n","readmeFilename":"README.md"}