{"_id":"@bananapus/project-handles","_rev":"7-a6d4bd4aca971e91fd6d3ecbaf594aa2","name":"@bananapus/project-handles","dist-tags":{"latest":"0.0.8"},"versions":{"0.0.1":{"name":"@bananapus/project-handles","version":"0.0.1","license":"MIT","_id":"@bananapus/project-handles@0.0.1","maintainers":[{"name":"filipviz","email":"f@filip.world"},{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"}],"homepage":"https://github.com/Bananapus/nana-project-handles#readme","bugs":{"url":"https://github.com/Bananapus/nana-project-handles/issues"},"dist":{"shasum":"aad3cc6bcefc1522ff622cff3cc71caf8a2decbb","tarball":"https://registry.npmjs.org/@bananapus/project-handles/-/project-handles-0.0.1.tgz","fileCount":11,"integrity":"sha512-D4U9e0h/QthEHVLcRGwdNqboABjYfiTDMHuX7TM1mqNn9HtegkSLLtFJU/oE3doEoA5SEN4mqmBl5eSNIOjvyg==","signatures":[{"sig":"MEUCIHH/DcNExNFX8TV/FPQEJahVNHqY6OXluypkpmaGMRO6AiEAoOcabJNvWopUu0xDZrHb+Km7SQXvyO/M46Djs9BTFN4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59605},"gitHead":"7ee93465cab82a4592d163320aeed5d9540016ac","scripts":{"test":"forge test","test:fork":"FOUNDRY_PROFILE=CI forge test","coverage:integration":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","deploy:ethereum-mainnet":"source .env && forge script Deploy --chain-id 1 --rpc-url $RPC_ETHEREUM_MAINNET --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_MAINNET -vvv","deploy:ethereum-sepolia":"source .env && forge script Deploy --chain-id 11155111 --rpc-url $RPC_ETHEREUM_SEPOLIA --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_SEPOLIA -vvv","deploy:optimism-mainnet":"source .env && forge script Deploy --chain-id 420 --rpc-url $RPC_OPTIMISM_MAINNET --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_MAINNET -vvv","deploy:optimism-sepolia":"source .env && forge script Deploy --chain-id 11155420 --rpc-url $RPC_OPTIMISM_SEPOLIA --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_SEPOLIA -vvv"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-project-handles.git","type":"git"},"_npmVersion":"10.2.3","description":"Juicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must first set their `juicebox_project` ENS text record to their project's ID.","directories":{},"_nodeVersion":"18.19.0","dependencies":{"@bananapus/core":"^0.0.3","@openzeppelin/contracts":"^5.0.1","@ensdomains/ens-contracts":"^1.1.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-handles_0.0.1_1707929962500_0.5790620358150667","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@bananapus/project-handles","version":"0.0.2","license":"MIT","_id":"@bananapus/project-handles@0.0.2","maintainers":[{"name":"filipviz","email":"f@filip.world"},{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"}],"homepage":"https://github.com/Bananapus/nana-project-handles#readme","bugs":{"url":"https://github.com/Bananapus/nana-project-handles/issues"},"dist":{"shasum":"78437eff1944d1ac8620b4ed5abfe16a20b51c60","tarball":"https://registry.npmjs.org/@bananapus/project-handles/-/project-handles-0.0.2.tgz","fileCount":10,"integrity":"sha512-gbKrzt2i35jfSsYamWRxRmmCxTB+RchR/DNVQpnjno7WFMLzTrbJyHbJvxBzsb7qc5/Zq91+P7MmmOK26kJYeg==","signatures":[{"sig":"MEQCIGPyyuNoBv1EkOW+CuQlYKHy+fRqre/0mbTQgRsjgJxUAiAC+9Fy4LD5jRHUz2AgQ8Ot6pdcBH3Lp8QYJL/6WzWyLQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59492},"gitHead":"aff10493fa43299ee7fddd0d90bb67530e5cfab7","scripts":{"test":"forge test","test:fork":"FOUNDRY_PROFILE=CI forge test","coverage:integration":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","deploy:ethereum-mainnet":"source .env && forge script Deploy --chain-id 1 --rpc-url $RPC_ETHEREUM_MAINNET --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_MAINNET -vvv","deploy:ethereum-sepolia":"source .env && forge script Deploy --chain-id 11155111 --rpc-url $RPC_ETHEREUM_SEPOLIA --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_SEPOLIA -vvv","deploy:optimism-mainnet":"source .env && forge script Deploy --chain-id 420 --rpc-url $RPC_OPTIMISM_MAINNET --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_MAINNET -vvv","deploy:optimism-sepolia":"source .env && forge script Deploy --chain-id 11155420 --rpc-url $RPC_OPTIMISM_SEPOLIA --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_SEPOLIA -vvv"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-project-handles.git","type":"git"},"_npmVersion":"10.2.4","description":"Juicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must first set their `juicebox_project` ENS text record to their project's ID.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"@bananapus/core":"^0.0.4","@openzeppelin/contracts":"^5.0.1","@bananapus/permission-ids":"^0.0.2","@ensdomains/ens-contracts":"^1.1.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-handles_0.0.2_1708652914002_0.7468822582304757","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@bananapus/project-handles","version":"0.0.3","license":"MIT","_id":"@bananapus/project-handles@0.0.3","maintainers":[{"name":"filipviz","email":"f@filip.world"},{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"}],"homepage":"https://github.com/Bananapus/nana-project-handles#readme","bugs":{"url":"https://github.com/Bananapus/nana-project-handles/issues"},"dist":{"shasum":"edf9387a39d174518f3f273ec32e5d9ea9abe544","tarball":"https://registry.npmjs.org/@bananapus/project-handles/-/project-handles-0.0.3.tgz","fileCount":10,"integrity":"sha512-ZW+eU3m/0wpJjSmxcMwfDp8wntP/VPRAvOxNPpMklBUX5HF0Qd+m9z7kWWqtqtbyWqDACu9JTHi/iq1MPz2WJg==","signatures":[{"sig":"MEUCIQCrzGWmYwoEGQfrjC1GQG64JN7Ldr3Tt4qJgvYvb6kZKwIgQqwY4dF4qiCJiqVRJVYi5aB1oUgBQ6hL24SwTs8Xa4M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59529},"gitHead":"a3670c1d06ddf85402d441a24605f7c5c1f15a53","scripts":{"test":"forge test","test:fork":"FOUNDRY_PROFILE=CI forge test","coverage:integration":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","deploy:ethereum-mainnet":"source .env && forge script Deploy --chain-id 1 --rpc-url $RPC_ETHEREUM_MAINNET --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_MAINNET -vvv","deploy:ethereum-sepolia":"source .env && forge script Deploy --chain-id 11155111 --rpc-url $RPC_ETHEREUM_SEPOLIA --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_SEPOLIA -vvv","deploy:optimism-mainnet":"source .env && forge script Deploy --chain-id 420 --rpc-url $RPC_OPTIMISM_MAINNET --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_MAINNET -vvv","deploy:optimism-sepolia":"source .env && forge script Deploy --chain-id 11155420 --rpc-url $RPC_OPTIMISM_SEPOLIA --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_SEPOLIA -vvv"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-project-handles.git","type":"git"},"_npmVersion":"10.2.4","description":"Juicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must first set their `juicebox_project` ENS text record to their project's ID.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"@bananapus/core":"^0.0.6","@openzeppelin/contracts":"^5.0.1","@bananapus/permission-ids":"^0.0.2","@ensdomains/ens-contracts":"^1.1.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-handles_0.0.3_1708723460312_0.38489948054838696","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@bananapus/project-handles","version":"0.0.4","license":"MIT","_id":"@bananapus/project-handles@0.0.4","maintainers":[{"name":"filipviz","email":"f@filip.world"},{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"}],"homepage":"https://github.com/Bananapus/nana-project-handles#readme","bugs":{"url":"https://github.com/Bananapus/nana-project-handles/issues"},"dist":{"shasum":"cbbe522bbf7c1222e99028def772407a96f1819a","tarball":"https://registry.npmjs.org/@bananapus/project-handles/-/project-handles-0.0.4.tgz","fileCount":11,"integrity":"sha512-lxOT9Wl5cRYqKP3NFN3widzQUutMtHgrwDRsKOllGTrup/W3r4cZShtIXoV+jArNxEIDt5yFo6g2lMc4lJ+itA==","signatures":[{"sig":"MEMCIFnpC8mdOLJgkcQrAUj+lzi04koQdrfzRhfx8+ZBrmM7Ah9N9ptAdrQE6aCUgs8PD5ILSa6glAuUvobxB7aApmq6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59986},"engines":{"node":">=20.0.0"},"gitHead":"616764a1dea9ae9741480a7b3731dbf7f00960d5","scripts":{"test":"forge test","test:fork":"FOUNDRY_PROFILE=CI forge test","coverage:integration":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","deploy:ethereum-mainnet":"source .env && forge script Deploy --chain-id 1 --rpc-url $RPC_ETHEREUM_MAINNET --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_MAINNET -vvv","deploy:ethereum-sepolia":"source .env && forge script Deploy --chain-id 11155111 --rpc-url $RPC_ETHEREUM_SEPOLIA --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_SEPOLIA -vvv","deploy:optimism-mainnet":"source .env && forge script Deploy --chain-id 420 --rpc-url $RPC_OPTIMISM_MAINNET --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_MAINNET -vvv","deploy:optimism-sepolia":"source .env && forge script Deploy --chain-id 11155420 --rpc-url $RPC_OPTIMISM_SEPOLIA --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_SEPOLIA -vvv"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-project-handles.git","type":"git"},"_npmVersion":"10.5.0","description":"Juicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must first set their `juicebox_project` ENS text record to their project's ID.","directories":{},"_nodeVersion":"21.7.1","dependencies":{"@bananapus/core":"^0.0.6","@openzeppelin/contracts":"^5.0.1","@bananapus/permission-ids":"^0.0.5","@ensdomains/ens-contracts":"^1.1.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/project-handles_0.0.4_1712103993825_0.34768959676265254","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"@bananapus/project-handles","version":"0.0.5","license":"MIT","_id":"@bananapus/project-handles@0.0.5","maintainers":[{"name":"filipviz","email":"f@filip.world"},{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"}],"homepage":"https://github.com/Bananapus/nana-project-handles#readme","bugs":{"url":"https://github.com/Bananapus/nana-project-handles/issues"},"dist":{"shasum":"ecd55d05108490cbfa1fb4fbe9f94ef10a0a023c","tarball":"https://registry.npmjs.org/@bananapus/project-handles/-/project-handles-0.0.5.tgz","fileCount":13,"integrity":"sha512-ZTeeWc43OuQmlt9W0doifhbhrlhMCsLR65fXZ+zROEJgHEKcpiWku+6gBKKJPd2nsVLDYuhO9XiDdge6aVurfA==","signatures":[{"sig":"MEQCID725xK3821alBqHBv/04cJ2yjAmYAR5z14CVxjpyJuAAiAf5fFsw9cQF2uCBsDz2WL1PnFoEdujUDGD3ozcVhA78w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":68141},"engines":{"node":">=20.0.0"},"gitHead":"8908627bc7c813bed876bfb21675f38b6c5dfa08","scripts":{"test":"forge test","test:fork":"FOUNDRY_PROFILE=CI forge test","coverage:integration":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","deploy:ethereum-mainnet":"source .env && forge script Deploy --chain-id 1 --rpc-url $RPC_ETHEREUM_MAINNET --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_MAINNET -vvv","deploy:ethereum-sepolia":"source .env && forge script Deploy --chain-id 11155111 --rpc-url $RPC_ETHEREUM_SEPOLIA --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_SEPOLIA -vvv","deploy:optimism-mainnet":"source .env && forge script Deploy --chain-id 420 --rpc-url $RPC_OPTIMISM_MAINNET --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_MAINNET -vvv","deploy:optimism-sepolia":"source .env && forge script Deploy --chain-id 11155420 --rpc-url $RPC_OPTIMISM_SEPOLIA --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_SEPOLIA -vvv"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-project-handles.git","type":"git"},"_npmVersion":"10.8.1","description":"Juicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must set their `juicebox_project` ENS name's text record to their project's ID. The `JBP","directories":{},"_nodeVersion":"22.4.0","dependencies":{"@bananapus/core":"^0.0.19","@openzeppelin/contracts":"^5.0.1","@ensdomains/ens-contracts":"^1.1.4"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/project-handles_0.0.5_1720390452489_0.40555937791172747","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"@bananapus/project-handles","version":"0.0.6","license":"MIT","_id":"@bananapus/project-handles@0.0.6","maintainers":[{"name":"filipviz","email":"f@filip.world"},{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"}],"homepage":"https://github.com/Bananapus/nana-project-handles#readme","bugs":{"url":"https://github.com/Bananapus/nana-project-handles/issues"},"dist":{"shasum":"795c31a06e73f7c82108c2d898b7b85269b71e71","tarball":"https://registry.npmjs.org/@bananapus/project-handles/-/project-handles-0.0.6.tgz","fileCount":13,"integrity":"sha512-McHmnpUF5REdQJDCDToFC/tYj0OciDcVNboYX2C63I8HzZ8tnoqZGYcbXS9P+gx9YV0PyVQ3KfkB3gD3G++nEA==","signatures":[{"sig":"MEQCIEc5aSyw+wxeOxOdSQyasAnPvryMO8DzXUSMVcfEFS73AiBx/TIAVzT1dZ0F0XKDa9rlw2hcjEPiSI8V+kI7wZkzgw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":68650},"engines":{"node":">=20.0.0"},"gitHead":"297a9ad3835b7323104af5f96bab63feec474e85","scripts":{"test":"forge test","test:fork":"FOUNDRY_PROFILE=CI forge test","coverage:integration":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","deploy:ethereum-mainnet":"source .env && forge script Deploy --chain-id 1 --rpc-url $RPC_ETHEREUM_MAINNET --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_MAINNET -vvv","deploy:ethereum-sepolia":"source .env && forge script Deploy --chain-id 11155111 --rpc-url $RPC_ETHEREUM_SEPOLIA --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_SEPOLIA -vvv","deploy:optimism-mainnet":"source .env && forge script Deploy --chain-id 420 --rpc-url $RPC_OPTIMISM_MAINNET --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_MAINNET -vvv","deploy:optimism-sepolia":"source .env && forge script Deploy --chain-id 11155420 --rpc-url $RPC_OPTIMISM_SEPOLIA --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_SEPOLIA -vvv"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-project-handles.git","type":"git"},"_npmVersion":"10.8.2","description":"Juicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must set their `juicebox_project` ENS name's text record to their project's ID. The `JBP","directories":{},"_nodeVersion":"22.7.0","dependencies":{"@bananapus/core":"^0.0.29","@openzeppelin/contracts":"^5.0.2","@ensdomains/ens-contracts":"^1.1.4"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/project-handles_0.0.6_1724791607872_0.10808623774870507","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"@bananapus/project-handles","version":"0.0.7","license":"MIT","_id":"@bananapus/project-handles@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-project-handles#readme","bugs":{"url":"https://github.com/Bananapus/nana-project-handles/issues"},"dist":{"shasum":"e0d48e63a597c95e0be6bad995f6ba2036bc730c","tarball":"https://registry.npmjs.org/@bananapus/project-handles/-/project-handles-0.0.7.tgz","fileCount":13,"integrity":"sha512-0Q/g5tyOuFXRIliVUTFyRqE4nztfSvDnVjy9vkc9hOEmX0JHEGvDl7IPdq5wj09NPhC/fNR0hsPqThSFaXdKVA==","signatures":[{"sig":"MEQCIHus8//6p4XcQ036BLkd+lw0HfCVqw4DQq5dc+9BHTf8AiByDx2xrnksgFwYYLfO7LeOhDMDxOcPXRRozKQOJ4GS5A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":68188},"engines":{"node":">=20.0.0"},"gitHead":"4ec9d6b395c5b2b433e3e19d2becceea34633364","scripts":{"test":"forge test","test:fork":"FOUNDRY_PROFILE=CI forge test","coverage:integration":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","deploy:ethereum-mainnet":"source .env && forge script Deploy --chain-id 1 --rpc-url $RPC_ETHEREUM_MAINNET --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_MAINNET -vvv","deploy:ethereum-sepolia":"source .env && forge script Deploy --chain-id 11155111 --rpc-url $RPC_ETHEREUM_SEPOLIA --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_ETHEREUM_SEPOLIA -vvv","deploy:optimism-mainnet":"source .env && forge script Deploy --chain-id 420 --rpc-url $RPC_OPTIMISM_MAINNET --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_MAINNET -vvv","deploy:optimism-sepolia":"source .env && forge script Deploy --chain-id 11155420 --rpc-url $RPC_OPTIMISM_SEPOLIA --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $SENDER_OPTIMISM_SEPOLIA -vvv"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-project-handles.git","type":"git"},"_npmVersion":"10.9.0","description":"Juicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must set their `juicebox_project` ENS name's text record to their project's ID. The `JBP","directories":{},"_nodeVersion":"23.3.0","dependencies":{"@openzeppelin/contracts":"^5.0.2","@ensdomains/ens-contracts":"^1.1.4"},"_hasShrinkwrap":false,"devDependencies":{"@bananapus/core":"^0.0.29","@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/project-handles_0.0.7_1733281872022_0.5845079997026399","host":"s3://npm-registry-packages"}},"0.0.8":{"name":"@bananapus/project-handles","version":"0.0.8","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Bananapus/nana-project-handles.git"},"engines":{"node":">=20.0.0"},"scripts":{"test":"forge test","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","artifacts":"source ./.env && npx sphinx artifacts --org-id 'ea165b21-7cdc-4d7b-be59-ecdd4c26bee4' --project-name 'project-handles-testnet'","analyze":"slither . --config-file slither-ci.config.json"},"dependencies":{"@ensdomains/ens-contracts":"^1.2.5","@openzeppelin/contracts":"^5.2.0"},"devDependencies":{"@bananapus/core":"^0.0.45","@sphinx-labs/plugins":"^0.33.1"},"_id":"@bananapus/project-handles@0.0.8","gitHead":"53556219071dc0b4c7411da3160eeb155cfebf78","description":"Juicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must set their `juicebox_project` ENS name's text record to their project's ID. The `JBP","bugs":{"url":"https://github.com/Bananapus/nana-project-handles/issues"},"homepage":"https://github.com/Bananapus/nana-project-handles#readme","_nodeVersion":"23.7.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-RNCGrvjSS2ntrG88oNVH7Z4KsJi0p8xIYW/wYtPXzp5y7t2EoG0PoY28uQOMgZ+u14+qOADcrbNMnHS3vCyOcg==","shasum":"c73998b138639657164b49657eaf430eb293344d","tarball":"https://registry.npmjs.org/@bananapus/project-handles/-/project-handles-0.0.8.tgz","fileCount":18,"unpackedSize":187343,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICdhmpZR4PDG+h7a2k7VVmAW73P1+3RZClKeWOV4xWd7AiB/CnwZZ2ADAMe5KKuUq1YgLNJwg0KkCwGqxgAD8e0XUw=="}]},"_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/project-handles_0.0.8_1738798777342_0.14008020255360298"},"_hasShrinkwrap":false}},"time":{"created":"2024-02-14T16:59:22.344Z","modified":"2025-02-05T23:39:37.781Z","0.0.1":"2024-02-14T16:59:22.711Z","0.0.2":"2024-02-23T01:48:34.185Z","0.0.3":"2024-02-23T21:24:20.512Z","0.0.4":"2024-04-03T00:26:33.963Z","0.0.5":"2024-07-07T22:14:12.693Z","0.0.6":"2024-08-27T20:46:48.026Z","0.0.7":"2024-12-04T03:11:12.258Z","0.0.8":"2025-02-05T23:39:37.519Z"},"bugs":{"url":"https://github.com/Bananapus/nana-project-handles/issues"},"license":"MIT","homepage":"https://github.com/Bananapus/nana-project-handles#readme","repository":{"type":"git","url":"git+https://github.com/Bananapus/nana-project-handles.git"},"description":"Juicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must set their `juicebox_project` ENS name's text record to their project's ID. The `JBP","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"readme":"# Bananapus Project Handles\n\nJuicebox projects can use an ENS address as their project's \"handle\" in frontend clients like [juicebox.money](https://juicebox.money). To make this association, they must set their `juicebox_project` ENS name's text record to their project's ID. The `JBProjectHandles` contract manages reverse records that point from project IDs to ENS names. If the two records match, that ENS name is considered the project's handle, and is shown in frontend clients.\n\n<details>\n  <summary>Table of Contents</summary>\n  <ol>\n    <li><a href=\"#usage\">Usage</a></li>\n  <ul>\n    <li><a href=\"#install\">Install</a></li>\n    <li><a href=\"#develop\">Develop</a></li>\n    <li><a href=\"#scripts\">Scripts</a></li>\n    <li><a href=\"#deployments\">Deployments</a></li>\n    <li><a href=\"#tips\">Tips</a></li>\n    </ul>\n    <li><a href=\"#repository-layout\">Repository Layout</a></li>\n    <li><a href=\"#description\">Description</a></li>\n  <ul>\n    <li><a href=\"#motivation\">Motivation</a></li>\n    <li><a href=\"#reading-handles\">Reading Handles</a></li>\n    <li><a href=\"#text-record-and-multichain\">Text Record and Multichain</a></li>\n    </ul>\n    <li><a href=\"#example-usage\">Example Usage</a></li>\n  </ul>\n  </ol>\n</details>\n\n_If you're having trouble understanding this contract, take a look at the [core protocol contracts](https://github.com/Bananapus/nana-core) and the [documentation](https://docs.juicebox.money/) first. If you have questions, reach out on [Discord](https://discord.com/invite/ErQYmth4dS)._\n\n## Usage\n\n### Install\n\nHow to install `nana-project-handles` in another project.\n\nFor projects using `npm` to manage dependencies (recommended):\n\n```bash\nnpm install @bananapus/project-handles\n```\n\nFor projects using `forge` to manage dependencies (not recommended):\n\n```bash\nforge install Bananapus/nana-project-handles\n```\n\nIf you're using `forge` to manage dependencies, add `@bananapus/project-handles/=lib/nana-project-handles/` to `remappings.txt`. You'll also need to install `nana-project-handles`' dependencies and add similar remappings for them.\n\n### Develop\n\n`nana-project-handles` uses [npm](https://www.npmjs.com/) (version >=20.0.0) for package management and the [Foundry](https://github.com/foundry-rs/foundry) development toolchain for builds, tests, and deployments. To get set up, [install Node.js](https://nodejs.org/en/download) and install [Foundry](https://github.com/foundry-rs/foundry):\n\n```bash\ncurl -L https://foundry.paradigm.xyz | sh\n```\n\nYou can download and install dependencies with:\n\n```bash\nnpm ci && forge install\n```\n\nIf you run into trouble with `forge install`, try using `git submodule update --init --recursive` to ensure that nested submodules have been properly initialized.\n\nSome useful commands:\n\n| Command               | Description                                         |\n| --------------------- | --------------------------------------------------- |\n| `forge build`         | Compile the contracts and write artifacts to `out`. |\n| `forge fmt`           | Lint.                                               |\n| `forge test`          | Run the tests.                                      |\n| `forge build --sizes` | Get contract sizes.                                 |\n| `forge coverage`      | Generate a test coverage report.                    |\n| `foundryup`           | Update foundry. Run this periodically.              |\n| `forge clean`         | Remove the build artifacts and cache directories.   |\n\nTo learn more, visit the [Foundry Book](https://book.getfoundry.sh/) docs.\n\n### Scripts\n\nFor convenience, several utility commands are available in `package.json`.\n\n| Command             | Description                            |\n| ------------------- | -------------------------------------- |\n| `npm test`          | Run local tests.                       |\n| `npm run test:fork` | Run fork tests (for use in CI).        |\n| `npm run coverage`  | Generate an LCOV test coverage report. |\n\n### Deployments\n\nTo deploy, you'll need to set up a `.env` file based on `.example.env`. Then run one of the following commands:\n\n| Command                           | Description                        |\n| --------------------------------- | ---------------------------------- |\n| `npm run deploy:ethereum-mainnet` | Deploy to Ethereum mainnet         |\n| `npm run deploy:ethereum-sepolia` | Deploy to Ethereum Sepolia testnet |\n| `npm run deploy:optimism-mainnet` | Deploy to Optimism mainnet         |\n| `npm run deploy:optimism-sepolia` | Deploy to Optimism testnet         |\n\n### Tips\n\nTo view test coverage, run `npm run coverage` to generate an LCOV test report. You can use an extension like [Coverage Gutters](https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters) to view coverage in your editor.\n\nIf you're using Nomic Foundation's [Solidity](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) extension in VSCode, you may run into LSP errors because the extension cannot find dependencies outside of `lib`. You can often fix this by running:\n\n```bash\nforge remappings >> remappings.txt\n```\n\nThis makes the extension aware of default remappings.\n\n## Repository Layout\n\nThe root directory contains this README, an MIT license, and config files.\n\nThe important source directories are:\n\n```\nnana-project-handles/\n├── script/\n│   └── Deploy.sol - The deployment script.\n├── src/\n│   ├── JBProjectHandles.sol - The main JBProjectHandles contract.\n│   └── interfaces/\n│       └── IJBProjectHandles.sol - The project handles interface.\n└── test/\n    └── JBProjectHandles.t.sol - Unit tests.\n```\n\nOther directories:\n\n```\nnana-project-handles/\n├── .github/\n│   └── workflows/ - CI/CD workflows.\n└── broadcast/ - Deployment logs.\n```\n\n## Description\n\n### Motivation\n\nHandles are easier to remember than IDs, but leaving this to clients could get messy. ENS names are often used as handles in the Ethereum ecosystem, because they can have _text records_ – arbitrary key-value text pairs which can be accessed onchain. If Juicebox frontend clients were to trust ENS text records alone as a source of truth, anyone could associate their ENS handle with any Juicebox project, and could use this to mislead others. Therefore, we need a two-way association between Juicebox projects and ENS names. The `JBProjectHandles` contract is the \"reverse record\" – it allows a Juicebox project's owner to associate their project with an ENS name. If an ENS name has a text record pointing to a Juicebox project, and the project points to that ENS name through the `JBProjectHandles` contract, the ENS name is the project's handle.\n\n### Reading Handles\n\nClients can use [`JBProjectHandles.handleOf(…)`](https://github.com/Bananapus/nana-project-handles/blob/main/src/JBProjectHandles.sol#L61) to check a project's handle. The function only returns the handle if it is verified, and returns an empty string otherwise.\n\n`JBProjectHandles` is only deployed on Ethereum mainnet, but it manages handles for Juicebox projects on all EVM-compatible networks.\n\n### Text Record and Multichain\n\nThe canonical ENS registry and the `JBProjectHandles` contract are only available on Ethereum mainnet, but Juicebox projects can be deployed on several EVM-compatible networks. To allow project owners to set their handles on multiple chains, the text record specifies both the chain ID and the project ID.\n\nTo point an ENS name at a Juicebox project, use the name's `juicebox` text record, with the format `chainId:projectId`. For example, to point `jeff.eth` to project ID #5 on Optimism mainnet (which has chain ID 10), `jeff.eth` must have its `juicebox` text record set to `10:5`.\n\nTo point a Juicebox project at an ENS name, the project's owner must call [`JBProjectHandles.setEnsNamePartsFor(...)`](https://github.com/Bananapus/nana-project-handles/blob/main/src/JBProjectHandles.sol#L113):\n\n```solidity\n/// @notice Point from a Juicebox project to an ENS node.\n/// @dev The `parts` [\"jbx\", \"dao\", \"foo\"] represents foo.dao.jbx.eth.\n/// @dev The project's owner must call this function to set its ENS name parts.\n/// @param chainId The chain ID of the network the project is on.\n/// @param projectId The ID of the project to set an ENS handle for.\n/// @param parts The parts of the ENS domain to use as the project handle, excluding the trailing .eth.\nfunction setEnsNamePartsFor(uint256 chainId, uint256 projectId, string[] memory parts) external override { … }\n```\n\nTo point project #5 on Optimism mainnet back at his ENS, Jeff would have to call `JBProjectHandles.setEnsNamePartsFor(10, 5, [\"jeff\"])`. The same address which owns the project on Optimism must call `setEnsNamePartsFor(…)` on mainnet. If the project's owner changes, the new owner must call `setEnsNamePartsFor(…)` again.\n\n## Example Usage\n\n1. `jeff.eth` deploys project ID #5 on Optimism mainnet. He wants to set its handle as `project.jeff.eth`.\n2. To point his ENS at his Juicebox project, he calls `PublicResolver.setText(…)` on the [ENS website](https://app.ens.domains/). He sets the `juicebox` text record for `project.jeff.eth` to `10:5`.\n3. To point his project at his ENS, he calls `setEnsNamePartsFor(…)`:\n\n```solidity\nJBProjectHandles.setEnsNamePartsFor({\n  chainId: 10, // Optimism mainnet\n  projectId: 5,\n  parts: [\"project\", \"jeff\"]\n});\n```\n\nNow, frontend clients will associate his project with `project.jeff.eth`. To read the handle, a client can call `handleOf(…)`:\n\n```solidity\nJBProjectHandles.handleOf({\n  chainId: 10,\n  projectId: 5,\n  projectOwner: 0x123… // jeff.eth\n});\n```\n\nThis will return `project.jeff.eth` if the handle is verified, and an empty string otherwise.\n","readmeFilename":"README.md"}