{"_id":"@bananapus/suckers","_rev":"34-666b188d38ae79b39e918264abade3c8","name":"@bananapus/suckers","dist-tags":{"latest":"1.0.2"},"versions":{"0.0.1":{"name":"@bananapus/suckers","version":"0.0.1","license":"MIT","_id":"@bananapus/suckers@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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"d8f0b31bc64f63f815a4c90b33b77e42735ce9c3","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.1.tgz","fileCount":23,"integrity":"sha512-Yonta4a/h8WF3uWnDccAX0ri9u1RGF3LIGZ2FuCx+w9GEu66sZ470FeYP8RYL9F+bGY6V7WLKGGZ4I+xpIiIpA==","signatures":[{"sig":"MEQCIC/axq6SlNIWK2q0YC1BUG513njJrvP4ZDxMqCB+Ri/lAiArd3mJCrDmuMP+zc+hLAZCt3MX3OwSKLbTRuFvM9QgYA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":150253},"gitHead":"00e050cc7f22b5a7e5d7a0465fc310bf9e7f8383","scripts":{"test":"forge test","coverage":"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-suckers.git","type":"git"},"_npmVersion":"10.2.3","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"18.19.0","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.3","@openzeppelin/contracts":"^5.0.1","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.1_1707943345092_0.8447532886446472","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@bananapus/suckers","version":"0.0.2","license":"MIT","_id":"@bananapus/suckers@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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"8861146168b1ce8f87966b30cb2f89327bdb9adb","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.2.tgz","fileCount":26,"integrity":"sha512-9gNcIQkzXMIUgyDDnwmPJEO3+gTNmMQqlvvw85BVSwqMOkbOArKoROwBarGptEylnP5JyTFxEtJ1VWijkM5O5w==","signatures":[{"sig":"MEYCIQCwgxAyAkW+ba0sRGAA6XfBvg+GvN/9fxPeu5ENvhevqgIhAOjcol3hexkuEnRpD44+MBE3T/ctYdCUtXzjB9Nwkot5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":154464},"gitHead":"adaa18166153da67fd2465a2b509cb6c088c6d67","scripts":{"test":"forge test","coverage":"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-suckers.git","type":"git"},"_npmVersion":"10.2.3","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"18.19.0","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.3","@openzeppelin/contracts":"^5.0.1","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.2_1708016058115_0.9122108480729407","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@bananapus/suckers","version":"0.0.3","license":"MIT","_id":"@bananapus/suckers@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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"4e2deb3330aed910a66876481657a60ef5bdb69b","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.3.tgz","fileCount":37,"integrity":"sha512-UKgL/Blyy1glVXxRCqiKvcTyVuzBD0cISjx3M80YwqLXhuxPJhGklAtIYYBut8avEz9ItiLNPdTcqVYCC2MMqw==","signatures":[{"sig":"MEUCIDxVP2FEXCZw+UzFnUkS9LWaOCTkW0MXXRGRnz20kv6EAiEA+acaTfEsnzJ/PIMBzSDtGrBc7N68lPuYgh62QCT/HoI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":163590},"gitHead":"851d7ebea754491ae209020133d86537e5f329c6","scripts":{"test":"forge test","coverage":"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-suckers.git","type":"git"},"_npmVersion":"10.2.4","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"18.19.1","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.6","@openzeppelin/contracts":"^5.0.1","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.3_1708727738392_0.015692347635573478","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@bananapus/suckers","version":"0.0.4","license":"MIT","_id":"@bananapus/suckers@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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"a6da90c5cec5350fa92fd05f99352c6c56c8b166","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.4.tgz","fileCount":41,"integrity":"sha512-NDeyyQrNwiexrezaOTTcbxEyPNZkXweJYg7Biom9YXeXOvMkwPyJtSJT7bzFSJmNPphmtAhMMyAHAJYuAEWdUg==","signatures":[{"sig":"MEUCIQCjwZoqmiY88IFyfAqYKrR3of8Bq6JDTJA3hpo29ccoUgIgKa1GMjpBbLf4RRTqoyxJpR+JmI+8WTLBThejdlVHkvg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":179360},"gitHead":"2ea699b3ae5c3130febadd0f4b989b23c03cf7d3","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","deploy:sucker:optimism":"source ./.env && CHAIN_A_RPC=$RPC_ETHEREUM_MAINNET CHAIN_B_RPC=$RPC_OPTIMISM_MAINNET forge script DeployOptimism --sender $SENDER --broadcast --verify --interactives 1 --etherscan-api-key $ETHERSCAN_API_KEY","deploy:sucker:optimism-sepolia":"source ./.env && CHAIN_A_RPC=$RPC_ETHEREUM_SEPOLIA CHAIN_B_RPC=$RPC_OPTIMISM_SEPOLIA forge script DeployOptimism --sender $SENDER --broadcast --verify --interactives 1 --etherscan-api-key $ETHERSCAN_API_KEY","deploy:registry:ethereum-mainnet":"source ./.env && forge script DeployRegistry --chain-id 1 --rpc-url $RPC_ETHEREUM_MAINNET --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $REGISTRY_SENDER -vvv","deploy:registry:ethereum-sepolia":"source ./.env && forge script DeployRegistry --chain-id 11155111 --rpc-url $RPC_ETHEREUM_SEPOLIA --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY --interactives 1 --sender $REGISTRY_SENDER -vvv","deploy:registry:optimism-mainnet":"source ./.env && forge script DeployRegistry --chain-id 420 --rpc-url $RPC_OPTIMISM_MAINNET --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $REGISTRY_SENDER -vvv","deploy:registry:optimism-sepolia":"source ./.env && forge script DeployRegistry --chain-id 11155420 --rpc-url $RPC_OPTIMISM_SEPOLIA --broadcast --verify --etherscan-api-key $OPTIMISTIC_ETHERSCAN_API_KEY --interactives 1 --sender $REGISTRY_SENDER -vvv"},"_npmUser":{"name":"me.jango","email":"me.jango@protonmail.com"},"repository":{"url":"git+https://github.com/Bananapus/nana-suckers.git","type":"git"},"_npmVersion":"10.2.4","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"21.6.2","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.6","@bananapus/ownable":"^0.0.4","@openzeppelin/contracts":"^5.0.1","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.4_1708996854929_0.9574645731544233","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"@bananapus/suckers","version":"0.0.5","license":"MIT","_id":"@bananapus/suckers@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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"bfc2f3af89213490180990ff6bc1ed691a9d6085","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.5.tgz","fileCount":48,"integrity":"sha512-ILwCI664SMsTd8NNHcooEHsHTxO1fQgxPABex4Bt0+bsP/y1/wiCdeJy0a4rWBGpYjqRD/J+3i5Zg/0s01naRA==","signatures":[{"sig":"MEQCICdPsX3K2DbLjLmRa+HqizOjCnCBlvzg3uFSgaOy2IL0AiBFX6vJXposI3kN5XAJvvlW66VxYdojHyQV345lSCRxrw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2144716},"gitHead":"0eb19f471e980c86a95e270bf248af057e08883a","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.5.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"21.7.1","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.7","@bananapus/ownable":"^0.0.4","@sphinx-labs/plugins":"^0.30.8","@openzeppelin/contracts":"^5.0.1","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.5_1710891871679_0.05468298466815469","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"@bananapus/suckers","version":"0.0.6","license":"MIT","_id":"@bananapus/suckers@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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"fe9d195c8e8e9df624d6b9d9efbd15a4bf3fb583","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.6.tgz","fileCount":52,"integrity":"sha512-fb7kwwWTMXTZPHmcCPVRYPgrO/4AJR9s2Id5P662Ncj8vUupBmnGuX69katgfIUXSAI5GHve3C9tipY7iIJOsw==","signatures":[{"sig":"MEUCIDDdAyqaWjpI2OUvN3F+J18gpSnZKsMYf7++xMKJdaxQAiEA70MTjqH/7vCQS0lje5wc0iAz3wXwubh2jSx8OubyWJg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2698413},"engines":{"node":">=20.0.0"},"gitHead":"6ee6e30ab35207f28d520e198360dba29fbc1500","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.5.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"21.7.1","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.9","@bananapus/ownable":"^0.0.5","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.30.12"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.6_1712113624446_0.984475867041031","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"@bananapus/suckers","version":"0.0.7","license":"MIT","_id":"@bananapus/suckers@0.0.7","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"00e372ac96d344cbc2c2189378b2c78514f8e8c6","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.7.tgz","fileCount":54,"integrity":"sha512-xBU+V7S43CaWbpRqePgC3eZb4Djsm5GIHlZp8yUOBlG1Z/iQQaowb44ifUbb4W3mCbp2//temUeT5VunwZ4dMA==","signatures":[{"sig":"MEYCIQC17heoXo1/WLAK4nptORc2af3PIxGvHopzK917X1rAJQIhAMcPP8TPV/6UH1dhwtbjDgTDqehj9SRaYBRaqPa5+H1E","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3132167},"engines":{"node":">=20.0.0"},"gitHead":"ba0e4053c63288e59926a91ca80f840e24e30dcc","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.5.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"21.7.3","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.12","@bananapus/ownable":"^0.0.5","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.31.6"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.7_1712841937418_0.7976869121024943","host":"s3://npm-registry-packages"}},"0.0.8":{"name":"@bananapus/suckers","version":"0.0.8","license":"MIT","_id":"@bananapus/suckers@0.0.8","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"314bc60affa1718bbff5ca11279699235d1ad1ab","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.8.tgz","fileCount":71,"integrity":"sha512-KF83+lL2UGdCfOqZTadwySUVvXQOgWDY3x9cjPK0FZAeIsK7931JnhkrwluhbJGOsbhlJCShP7Saxqb1LtZvjg==","signatures":[{"sig":"MEUCIFDSgAgR1IPTXcPHhO5VsFHKIY/4hXuc7/lJniPmid9kAiEA/kNreGajhUkgW6/wuPUYtFwCDBIoj4Z6oKQgBNRVPKk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5895017},"engines":{"node":">=20.0.0"},"gitHead":"7db7008e6e2054ae5a125561278510aa4693c90d","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.5.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"21.7.3","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.13","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.31.11"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.8_1713739053933_0.19206869444375285","host":"s3://npm-registry-packages"}},"0.0.9":{"name":"@bananapus/suckers","version":"0.0.9","license":"MIT","_id":"@bananapus/suckers@0.0.9","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"32ad311485ee755d0170abc07cfe4645b36972d5","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.9.tgz","fileCount":71,"integrity":"sha512-8UnB3xULq0KBmNECnJshr085OO5rgxeeZBkN2OA61FAsYOhOWRsH7ygRh2rD4qr6e+Dn+YuCiQiwiaV3BdBP9A==","signatures":[{"sig":"MEQCIBr1yIPCYCBOSblkzBfCVdTYBcsaJ5TKu2MFRFzfn5LnAiAMeaYlJG0T/KScjhSX8WXk8SFgARJL6YWGvcWbADGY8Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5895626},"engines":{"node":">=20.0.0"},"gitHead":"671648821957dc693ee89a224028dd500371383f","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.5.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"21.7.3","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.13","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.31.11"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.9_1713744523268_0.7097378457902088","host":"s3://npm-registry-packages"}},"0.0.10":{"name":"@bananapus/suckers","version":"0.0.10","license":"MIT","_id":"@bananapus/suckers@0.0.10","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"39c7389cc921479ef166c29b8e1bf160af60b1aa","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.10.tgz","fileCount":71,"integrity":"sha512-wkAGDP2jioxyZJJy8v9oOFi2otcDgGXb5ZaEXTUG+qFI11rJddTD50alT8zGTlrPd92ae98R5jDk804V3LMjRQ==","signatures":[{"sig":"MEQCIE3Ux9RXSUvP1lQz4eAP5Ihv6vx4wG7m0RIcmXjJZyXjAiBNEMaJbEghWvA2SPdbAtOmzB2SEFET+8r/p+8CTEMACQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5895631},"engines":{"node":">=20.0.0"},"gitHead":"1414529c3a6b325b966605f21d76b1b23dfdd71a","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.5.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"21.7.3","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.13","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.31.11"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.10_1713746454490_0.45932527149296276","host":"s3://npm-registry-packages"}},"0.0.11":{"name":"@bananapus/suckers","version":"0.0.11","license":"MIT","_id":"@bananapus/suckers@0.0.11","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"b9337d278b62f5c8df96acb3ab7497f100e33b47","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.11.tgz","fileCount":76,"integrity":"sha512-rMfecW/yVgK73oJH6OlkyJzU+C8+vxJ3yw+QqCLPfW/Fs9a6CBsCAf67kv+molXe9ndD22dOKIHxaeo2oWFFNQ==","signatures":[{"sig":"MEYCIQCdFcWc4+5mJCQ//+rYnbUuB82/85E6P+p/PafL3BYkcwIhAK1pstM+eWmrdOdQzPDVagHv0DrkbR3sZcV56FxYhCXJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7848641},"engines":{"node":">=20.0.0"},"gitHead":"bbac9c765a8dbe91c32d4eb3210de82e6cb6fdd4","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.5.1","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"22.0.0","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.13","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.31.11"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.11_1714081972867_0.07190584715568216","host":"s3://npm-registry-packages"}},"0.0.12":{"name":"@bananapus/suckers","version":"0.0.12","license":"MIT","_id":"@bananapus/suckers@0.0.12","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"53926df66d324051406f347de8e210133aace4a2","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.12.tgz","fileCount":81,"integrity":"sha512-SMeJpwnJFx/09vvaPxXUDXq3Op7M7Pek4MtsG2VZzv9DvVe57Ndj0vBJ4SN9h+WJMk6cJjZpg46gZUc3MiVUdw==","signatures":[{"sig":"MEUCIQD+kPr5ablotRpr13VMBP9wi6Qa+u4kRVXZjIqAuo/KwwIgD4OEtH8CCvsxPZ7mEAINbDbT8qyPuuCYkC/DJDldjnU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9800259},"engines":{"node":">=20.0.0"},"gitHead":"c68dd1b3a417fa660a3e3a74ba38708fdeda6a34","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.7.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"22.1.0","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.14","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.31.12"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.12_1714668260535_0.575594806221712","host":"s3://npm-registry-packages"}},"0.0.13":{"name":"@bananapus/suckers","version":"0.0.13","license":"MIT","_id":"@bananapus/suckers@0.0.13","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"92ff31416ca0d4fbd33781a36e2220336f0a4186","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.13.tgz","fileCount":88,"integrity":"sha512-H6z0iDsTqp1nqXwAMHiswYS7q3n0Pv3+M8hL5hOr6ApsxkNlhgPk/f/qR3anZfV//qcGuQC26QCl8QFWwu+IMQ==","signatures":[{"sig":"MEUCIHLCWNj9e1TwlR1gFfhYq57ajS/ljZ02qOd68s2KGyvnAiEAz+0IcnYBxJSx5mKsrI4tXAh9eGo9zbZqtYMxXFQKX1A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11772599},"engines":{"node":">=20.0.0"},"gitHead":"faa1172e00be95c5a1e101b789294367340d723e","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.7.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"22.2.0","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.15","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.8"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.32.2"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.13_1717452094221_0.5248228132412351","host":"s3://npm-registry-packages"}},"0.0.14":{"name":"@bananapus/suckers","version":"0.0.14","license":"MIT","_id":"@bananapus/suckers@0.0.14","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"0a8cc017dbd7aaacf8a146ffa56cebee7ddeb7ab","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.14.tgz","fileCount":103,"integrity":"sha512-d7Y0MhDcXJAkepQWJnpXV0yXxfaaNDwfOvvjnxXQOcL+y7c6ArEWOj802HH4eLcgUJrECwQ1NZZDTjd4+63mRQ==","signatures":[{"sig":"MEQCIDzfl61xE5uOSrjeGSLgmU+WYuW9FUAeipYwO0Orj248AiAJo88WlVY9AtuUd83jXkJAyu3L8sQOedSrpk0Nms7XIg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13766888},"engines":{"node":">=20.0.0"},"gitHead":"49a945794479786f0688bc06e8a82e1455674955","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.7.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"22.2.0","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.18","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.9"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.32.2"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.14_1718057305129_0.49491493134974407","host":"s3://npm-registry-packages"}},"0.0.15":{"name":"@bananapus/suckers","version":"0.0.15","license":"MIT","_id":"@bananapus/suckers@0.0.15","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"5d68b78d6c5a9e791c7d60e599e5895bce7441d8","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.15.tgz","fileCount":103,"integrity":"sha512-3K3g7hZNmP65IZHhnSPmnEFAY4n6bynza22T8SkXEVZKEbBJdPmm9bFGsLOMrHeC/V3AA0c37Cd5sPxAiHpFPA==","signatures":[{"sig":"MEUCIGY8H/EZiKrbR9HNHJ442paCEWhvtt5MwIelNAF81ytlAiEAkNmddzW4nwnk9sNkwHHWD1w2mJjmENo7WaYa3xSD+nM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13766896},"engines":{"node":">=20.0.0"},"gitHead":"dda301e2964a9c93f0870a1d702a8b242bdb0386","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.7.0","description":"`BPSucker.sol` facilitates cross-chain token transfers between projects, using a messenger for communication and a redemption mechanism for token exchange. `BPSucker` only works with Optimism for now.","directories":{},"_nodeVersion":"22.2.0","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.18","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.9"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.32.2"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.15_1718059033982_0.9268399906889591","host":"s3://npm-registry-packages"}},"0.0.16":{"name":"@bananapus/suckers","version":"0.0.16","license":"MIT","_id":"@bananapus/suckers@0.0.16","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"b467f2a76842f5f9d0dfa4b716e3a849c996d6c7","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.16.tgz","fileCount":103,"integrity":"sha512-/FWsZXPHNQKOYJ8LS9KXlWoHRZquxjYUw06rYmOy2DleJYapljZrhxWwzrYMfmEdtsv9/DT9c4GL2ur0fZaosw==","signatures":[{"sig":"MEUCIQChFX1z7Z7Erqdc+EWwe6/xyEbOQ1Epipq1+ikNvBNAVAIgPIt6WmD9Dw4ETjjb50XwwHfUltm9QdX87dItA1liiyQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13787909},"engines":{"node":">=20.0.0"},"gitHead":"c5520c02c4bfc731c5e45c1b28c8853ae527db45","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.2","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.5.0","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.21","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.10"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.16_1721373906319_0.4340493186382657","host":"s3://npm-registry-packages"}},"0.0.17":{"name":"@bananapus/suckers","version":"0.0.17","license":"MIT","_id":"@bananapus/suckers@0.0.17","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"b924045c8ae5386289e28555c4093921d63b800b","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.17.tgz","fileCount":103,"integrity":"sha512-bVyIUuN7GSnwgLarV0r9O18gFW0BVgmRyLrXLE2mNkJR8iSRQXBQj4W0M5Kvinn999Ha1VmRr4nPGR6ekpVYNQ==","signatures":[{"sig":"MEUCIDjR9Phpyspo/AErR8LRyAbnhNxOHLBWFMY7tdBgtmsDAiEAzMfzdax3qx+/VpRB5Qtd3T1RzjVQn2Oyb4ox6iHKD8o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13787909},"engines":{"node":">=20.0.0"},"gitHead":"6661191b1e1f1e99c09dfb261a5dcd49a3bb2f67","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.2","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.5.0","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.22","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.11"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.17_1721391980999_0.6064078748108155","host":"s3://npm-registry-packages"}},"0.0.18":{"name":"@bananapus/suckers","version":"0.0.18","license":"MIT","_id":"@bananapus/suckers@0.0.18","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"a114d88c46b729df0e549628171e7eb88c95b091","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.18.tgz","fileCount":103,"integrity":"sha512-HsyC+muidbhLpXUZtNS2dkkXW0iev9wvgDDSxv4OkuOhynL5N1iv/nZMUAhyVPoH/sNZhxLp7cP9eYPZ9iMKgw==","signatures":[{"sig":"MEUCIEp0+P+TM20NyPWPFHEIUDNUcD4IYl4WeR0JNyo7o0PRAiEAwXNXUs8dwOJelh2BUaAyg4CXeovdTV4uwiDGiqFgzIQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13788034},"engines":{"node":">=20.0.0"},"gitHead":"59f2be6fa6bd339aacf9098e29671220bae7ab13","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'cltepuu9u0003j58rjtbd0hvu' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.2","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.5.1","dependencies":{"@prb/math":"^4.0.2","@bananapus/core":"^0.0.22","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.11"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.18_1721403308322_0.1522819107676967","host":"s3://npm-registry-packages"}},"0.0.19":{"name":"@bananapus/suckers","version":"0.0.19","license":"MIT","_id":"@bananapus/suckers@0.0.19","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"9a23ba86794518073dcf1e2bf9ad692faac8f2b6","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.19.tgz","fileCount":118,"integrity":"sha512-wywu+rnfODg9AKKpO/32dIkRdhsilN+mwCb6X72l6jk7z40plP9UQ2iIMeVSlFkDYN1e82cq9N5NYtSDo3acBg==","signatures":[{"sig":"MEYCIQCDmgeQtu2CtMUIpYtSbhdUQFBBVSNd7pQ3wVPfWwB1JwIhALT26YGw1xBgKQJfBA3MaeI47ggy07RQcYF8Z2fR3Lt0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":15847623},"engines":{"node":">=20.0.0"},"gitHead":"3beaba16d338363977ccfca224b518ea5b558dd8","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.2","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.5.1","dependencies":{"@prb/math":"^4.0.3","@bananapus/core":"^0.0.23","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.11"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.19_1721507117297_0.8826333496994541","host":"s3://npm-registry-packages"}},"0.0.20":{"name":"@bananapus/suckers","version":"0.0.20","license":"MIT","_id":"@bananapus/suckers@0.0.20","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"f1654cce74531404b3404881b784fc070c22782e","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.20.tgz","fileCount":123,"integrity":"sha512-DBDmZZbNAacA7v1K8QmbiAzLinJY5fzZPpf+cZD282ySTZmaFyTsOjQS3BZnEJEXd4lrnC2X8oqXb9V7ksg6Qw==","signatures":[{"sig":"MEQCIDkCjuKrByWNZdB2mFSLFzpNn5DYjeFyXdJ0V7BuAsqfAiAyfkvX0mDZfFIAV+uGCoyeeA7Odeser0ZFmGrmYCBfBQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16829804},"engines":{"node":">=20.0.0"},"gitHead":"ed199d1d88c805bfde5e38658cb990938a305340","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.2","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.5.1","dependencies":{"@prb/math":"^4.0.3","@bananapus/core":"^0.0.25","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.11"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.20_1721589355757_0.8720467040767574","host":"s3://npm-registry-packages"}},"0.0.21":{"name":"@bananapus/suckers","version":"0.0.21","license":"MIT","_id":"@bananapus/suckers@0.0.21","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"300391a37dc9040b4066e249bf9f5aa03598dbf9","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.21.tgz","fileCount":124,"integrity":"sha512-x2WdeocGNd2/96EjD5i0glCLmk9OOZce8neoNjgQmHlS3PodgzDEK7hg22K4xmiwMwHxXU8TrCM1JCftjK4/gw==","signatures":[{"sig":"MEUCIGXwgWu7wTcwVg0jQszpB3qj1lEqp74coXHHQsrJR7LvAiEAsE5M1wIyEX3Ssv85akWFMwVeZz9WCS5ndXPYeDykm/Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16869045},"engines":{"node":">=20.0.0"},"gitHead":"882ad71883d4ce6ca700ec522a1ad3f0333057e6","scripts":{"test":"forge test","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.2","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@prb/math":"^4.0.3","@bananapus/core":"^0.0.25","@bananapus/ownable":"^0.0.6","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.11"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.21_1724165713116_0.6571753889162448","host":"s3://npm-registry-packages"}},"0.0.22":{"name":"@bananapus/suckers","version":"0.0.22","license":"MIT","_id":"@bananapus/suckers@0.0.22","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"e580c477d27506331ff5c5717059becc2bc9ade3","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.22.tgz","fileCount":133,"integrity":"sha512-M4/HHJfSOmUnS7JdMc3c8MB5r/Wp4+lfFbuSKx5P6cwL9b1Qk5Zwr2bDFZ6Z6poG32wmhrhy6gZSPR1eOWGryw==","signatures":[{"sig":"MEYCIQDniLEp274H9kBxz0uPm1WkJlIFp+dsDgU2EalsypPCiAIhAO89jSZOYVwF1THPSTcpUnE53TuM9oIb2SG7ehb5T65B","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":18206642},"engines":{"node":">=20.0.0"},"gitHead":"4eddc42ccfc8ea088b46265d2ab7ffbd422a9748","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.2","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.8.0","dependencies":{"@prb/math":"^4.0.3","@bananapus/core":"^0.0.32","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.12"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.22_1726524011690_0.8508997321225396","host":"s3://npm-registry-packages"}},"0.0.23":{"name":"@bananapus/suckers","version":"0.0.23","license":"MIT","_id":"@bananapus/suckers@0.0.23","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"b751228dad4c6b1ee17ec51c8195454e529c88ae","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.23.tgz","fileCount":138,"integrity":"sha512-JTtMjD+uR4TLy5i0FZ3PETCq+JpOOIRdICGI17gUwK3JO0ps07wgefdDvin6TcFKs+qUNpVfNYe4CeoPaPXyZw==","signatures":[{"sig":"MEUCIQDdsp2a8hN4NrAfvs0Bbv0THkWM4oaBsAVddlyT4TiHbQIgKdh6fmyDvIXniVOywzO8jt6XvwPa1vqKzzIAlGI9B4k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19190222},"engines":{"node":">=20.0.0"},"gitHead":"979ba7df86c72412295fe5eeaaef8c7230b682b8","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.3","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.9.0","dependencies":{"@prb/math":"^4.0.3","@bananapus/core":"^0.0.32","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.12"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.23_1726609184270_0.4368543901635986","host":"s3://npm-registry-packages"}},"0.0.24":{"name":"@bananapus/suckers","version":"0.0.24","license":"MIT","_id":"@bananapus/suckers@0.0.24","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"e5bb6fdc21ad63ba7d2ef571f2607b25e54157bb","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.24.tgz","fileCount":138,"integrity":"sha512-QaBVZm+7dex/PvUdd/cvtOX50UH5LqgP1Ml7amgevDi+XdTfVXaKVKekqNmYCC9KFZJtY7Ry5FLKGc6hvE01lQ==","signatures":[{"sig":"MEYCIQCPvDRjG1jXkUN7pwXZVZxUF6kkBFM0ZVi2jCb304w34QIhAKsZ0feV5nXWm9GLCmpFTvGSEb3QR0eW4wWT522rdUx5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19188578},"engines":{"node":">=20.0.0"},"gitHead":"c0288b56ca0e8a9074a66508cb74aef05d4d78bc","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"@prb/math":"^4.0.3","@bananapus/core":"^0.0.32","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.12"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.24_1729120324183_0.9831685632183393","host":"s3://npm-registry-packages"}},"0.0.25":{"name":"@bananapus/suckers","version":"0.0.25","license":"MIT","_id":"@bananapus/suckers@0.0.25","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"a641f5939c5a2f582f6c092e46c1986ca0296a68","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.25.tgz","fileCount":149,"integrity":"sha512-lcpdY3KHfrNpkaC7+HGsVa+2sgsuIgcPXrcLkFWF3ha3dPIrv3t3+q4RzDnqFi7adTFvTnZyeWG/3995yteWnw==","signatures":[{"sig":"MEYCIQC5tNyX1x11V/4WzgqO/TkLCAAC7TUgNZYfBEURnwW4CAIhAL/4PYQHtsjW5HwSgKh73khc1HvNpkaQSF02HkRCphDc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19266448},"engines":{"node":">=20.0.0"},"gitHead":"37137a09cd28123a56019a973c112df945bea83c","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.0.259","@prb/math":"^4.0.3","@bananapus/core":"^0.0.36","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.16","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.25_1733179711380_0.9145332651714373","host":"s3://npm-registry-packages"}},"0.0.26":{"name":"@bananapus/suckers","version":"0.0.26","license":"MIT","_id":"@bananapus/suckers@0.0.26","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"5c04b1902ff6544963b99146dfa5331de45d7fa7","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.26.tgz","fileCount":150,"integrity":"sha512-Th+p9Iwa1bPpHtLkd4VZHISZDA1kG4crZLLJjVJQ+tEqWi4RHDdeKJ1ZZ9AbPd8pXaVuG19YKN3Mwi8dipZcng==","signatures":[{"sig":"MEQCIFS3eTVdaQ3yLId9sG7b6iUSVENVz6THfehxkF2dvdHZAiA48MY/bKMMhIkk1OSExNMh4wp1AYcC0JudHR94lgA2Gg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19268249},"engines":{"node":">=20.0.0"},"gitHead":"43cb3aa7e73135d2b6691996edb43a40033a87d5","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.0.259","@prb/math":"^4.0.3","@bananapus/core":"^0.0.36","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.0.2","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.16","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.26_1733403648763_0.6529948675071922","host":"s3://npm-registry-packages"}},"0.0.27":{"name":"@bananapus/suckers","version":"0.0.27","license":"MIT","_id":"@bananapus/suckers@0.0.27","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"e2ac7c3140d890f59fb4e76382a22f1eb347fdf6","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.27.tgz","fileCount":174,"integrity":"sha512-G1/Mp6Upc6fHFVnTPLgXwHhuqlo67zd8WYadGRXKlVAx1UU1xkJCbZYkEetNndvX/b3500IhTP7k28+nlkZxtg==","signatures":[{"sig":"MEQCIFxeSqQEsvhpJhRTHIPdVc7i1WxR5jBbZFy1YhrxY6FUAiBM0aq9AatRDD9PKhdlEPfLmxLIsTFiynMxS35lvLAs9g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24536347},"engines":{"node":">=20.0.0"},"gitHead":"76eefbaca9d1c3abd0f89ad396707aa5e194d255","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.0.281","@prb/math":"^4.1.0","@bananapus/core":"^0.0.38","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.1.0","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.16","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.27_1733751576495_0.24746382994112115","host":"s3://npm-registry-packages-npm-production"}},"0.0.28":{"name":"@bananapus/suckers","version":"0.0.28","license":"MIT","_id":"@bananapus/suckers@0.0.28","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"7f19fba2d5ab1b0ddab580128e4053d0d9945984","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.28.tgz","fileCount":130,"integrity":"sha512-C6hTczsP110RPrRZVeQJqQVuiSPbwDWTjGH/T7dD2xNiHGsu3LetA6igIUuXYZCQTf6sKaFIZPUAb7YDNc+TyA==","signatures":[{"sig":"MEUCIQDhdKJd7Z4QqiwX10tCEzDGw9SXMOeFtCrsDqvM7un+VgIgECRcAOaED9J0NMTnPe659W6fWIR8eHFyTY8MvoZ3n4c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":14230310},"engines":{"node":">=20.0.0"},"gitHead":"18d009ba9772ad20ad4f662df5ba4121eff486cf","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'my-org-id' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.0.281","@prb/math":"^4.1.0","@bananapus/core":"^0.0.38","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.1.0","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.16","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.28_1737046574676_0.29335257938237436","host":"s3://npm-registry-packages-npm-production"}},"0.0.29":{"name":"@bananapus/suckers","version":"0.0.29","license":"MIT","_id":"@bananapus/suckers@0.0.29","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"a6ed34028c2356b3072018759bc891828b74c053","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.29.tgz","fileCount":142,"integrity":"sha512-4wdo44KT6d3flejR4PzmFDkR3ruB8lLIlvlvo2dab6I+FWlKdgoYAiNQCJIzwKJdNWehig36S1ImWOXXkvd7GQ==","signatures":[{"sig":"MEQCIAoizn6834mWx7+QWjtiTdyHptUuOdOSHgwzjX58kteeAiAFIbccVUgArgIrjdsLl2vkB377U1czlG2/u/mf9FBUGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14178352},"engines":{"node":">=20.0.0"},"gitHead":"46aced73393c9095e7b1755c69e1c19302c429bc","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'ea165b21-7cdc-4d7b-be59-ecdd4c26bee4' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.0.298","@prb/math":"^4.1.0","@bananapus/core":"^0.0.39","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.2.0","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.17","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.0"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.29_1737848974255_0.5532495218837268","host":"s3://npm-registry-packages-npm-production"}},"0.0.30":{"name":"@bananapus/suckers","version":"0.0.30","license":"MIT","_id":"@bananapus/suckers@0.0.30","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"c6916286bb3f95cba289924e3928c84f36a68c2b","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.30.tgz","fileCount":142,"integrity":"sha512-ouUqQiYTpBqHLco6j1yc2ltVmjKQnZTD9dJPGE5EeO0BRHbCETs0QmPXunvB44OTys6sCExyXcGIzLZxI4l+qA==","signatures":[{"sig":"MEUCIQDXirt33c7t4OdqD5qEogEUJ2YZNJLcaqnp8EJULJOxAwIgLj6+xTfne4Mhv6y6ID4IeMhCcnw1pSu0mY/3DvFrQr4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14182166},"engines":{"node":">=20.0.0"},"gitHead":"f6d98baee821c21ecbe1f713c263ea602c440995","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'ea165b21-7cdc-4d7b-be59-ecdd4c26bee4' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.1.1","@prb/math":"^4.1.0","@bananapus/core":"^0.0.40","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.2.0","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.17","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.1"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.30_1738014753410_0.07900681436878187","host":"s3://npm-registry-packages-npm-production"}},"0.0.31":{"name":"@bananapus/suckers","version":"0.0.31","license":"MIT","_id":"@bananapus/suckers@0.0.31","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"1dd639a6900907e631c97f8a424f161dee8ad681","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.31.tgz","fileCount":142,"integrity":"sha512-1JWxGzt8WtPJ02PCz3apS2hgs4NsMEWtnnEyCwoSGWU+ejlhvLbzLKHP2mI7qVO7O/wB6V50QEwh1ZpoVpIO5A==","signatures":[{"sig":"MEUCIQCF7ADrNgLM6XOsCEWE7R9i/YX5kBKBO/pypQqZZqqS+AIgIveKpIO+ynDn6IQUwFV3NwmG+Fna5Ln4aRpdh9WkLc4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14182166},"engines":{"node":">=20.0.0"},"gitHead":"8b72fc75b52b1686cf762f71a59e8e62cf72a556","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'ea165b21-7cdc-4d7b-be59-ecdd4c26bee4' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.1.5","@prb/math":"^4.1.0","@bananapus/core":"^0.0.43","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.2.0","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.17","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.1"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.31_1738706955655_0.07537282820027591","host":"s3://npm-registry-packages-npm-production"}},"0.0.32":{"name":"@bananapus/suckers","version":"0.0.32","license":"MIT","_id":"@bananapus/suckers@0.0.32","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"aca62b72b684d42c685bb1f46ccb05bed1a2c5fc","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-0.0.32.tgz","fileCount":142,"integrity":"sha512-xIaEIYc4qCklw8JRpICGvP7u0aLsHzkcHysmPSDA+jsnLRQeciJNkU/gdL61IFZzbqVfI8sAzoeuxmV1gcVLSw==","signatures":[{"sig":"MEQCIHsQ6x/tzPUiKtLsz+OPk4lHwclgBDUL59tZF9ulgnOHAiAlTxEuPtvKgNb3gOIbX/UIibdJk/GAni0cvyRzgEagUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14182206},"engines":{"node":">=20.0.0"},"gitHead":"faba69dd26a284c037886fb39a0fe6a34055e8dd","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'ea165b21-7cdc-4d7b-be59-ecdd4c26bee4' --project-name 'nana-suckers-testnet'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.1.6","@prb/math":"^4.1.0","@bananapus/core":"^0.0.45","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.2.0","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.17","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.1"},"_npmOperationalInternal":{"tmp":"tmp/suckers_0.0.32_1738783185120_0.12065425693688225","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@bananapus/suckers","version":"1.0.0","license":"MIT","_id":"@bananapus/suckers@1.0.0","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"9b603fe7e4ff709a48a2988137ffe1e6b8409dac","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-1.0.0.tgz","fileCount":142,"integrity":"sha512-y2PcYt7UotX81YiniR9+qAp06OpRJ+eybshTVM4N924L9HNBTejAscUNtTykE1flk+e26XOmJbzqU9szpAhctA==","signatures":[{"sig":"MEYCIQCs0WU4ccWrqhIr2JU/6xbuNLv0DGbp2779D3AaC+1NsQIhALYML8ir2+FmtkLUfxLwCJhdNCv/8zupnLnwFDUR4IB+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9562546},"engines":{"node":">=20.0.0"},"gitHead":"23634e18fc6c2f5708df03a2191fc845654d08f9","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'ea165b21-7cdc-4d7b-be59-ecdd4c26bee4' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.1.8","@prb/math":"^4.1.0","@bananapus/core":"^1.0.0","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.2.0","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.17","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.1"},"_npmOperationalInternal":{"tmp":"tmp/suckers_1.0.0_1739766081658_0.1586329129802817","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bananapus/suckers","version":"1.0.1","license":"MIT","_id":"@bananapus/suckers@1.0.1","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-suckers#readme","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"dist":{"shasum":"b87555dbe51d33eb58846f777c321dce2e7dc002","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-1.0.1.tgz","fileCount":142,"integrity":"sha512-EhPeKedVGd1PCzzBUnXNCT9hO9bMyjyTk9MCG0mhhSKM/4FZbRSdUtS/LG5P/4HP1PmPfxzheBrJHt6k6MqT4g==","signatures":[{"sig":"MEUCIG1GL5Zqa2jtKoxxKy1slDTFCEZYz0y3u813FUrx3LDTAiEA/U4wmgHU+Li/GwNINd1vajZooYPhyUwrgH/7cKmLRnE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9562522},"engines":{"node":">=20.0.0"},"gitHead":"3164f7e6a41305e520560e2c23ef5c7e1999c4e8","scripts":{"test":"forge test","analyze":"slither . --config-file slither-ci.config.json","coverage":"forge coverage --match-path \"./src/*.sol\" --report lcov --report summary","artifacts":"source ./.env && npx sphinx artifacts --org-id 'ea165b21-7cdc-4d7b-be59-ecdd4c26bee4' --project-name 'nana-suckers'","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-suckers.git","type":"git"},"_npmVersion":"10.8.1","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","directories":{},"_nodeVersion":"22.4.1","dependencies":{"solady":"^0.1.8","@prb/math":"^4.1.0","@bananapus/core":"^1.0.0","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.2.0","@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/permission-ids":"^0.0.17","@chainlink/contracts-ccip":"^1.5.0"},"_hasShrinkwrap":false,"devDependencies":{"@sphinx-labs/plugins":"^0.33.1"},"_npmOperationalInternal":{"tmp":"tmp/suckers_1.0.1_1739776134455_0.9445689660417853","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bananapus/suckers","version":"1.0.2","license":"MIT","repository":{"type":"git","url":"git+https://github.com/Bananapus/nana-suckers.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 'nana-suckers'","analyze":"slither . --config-file slither-ci.config.json"},"dependencies":{"@arbitrum/nitro-contracts":"github:OffchainLabs/nitro-contracts","@bananapus/core":"^1.0.0","@bananapus/permission-ids":"^0.0.17","@chainlink/contracts-ccip":"^1.5.0","@chainlink/local":"github:smartcontractkit/chainlink-local","@openzeppelin/contracts":"^5.2.0","@prb/math":"^4.1.0","solady":"^0.1.8"},"devDependencies":{"@sphinx-labs/plugins":"^0.33.1"},"_id":"@bananapus/suckers@1.0.2","gitHead":"66610b12250800948c792e25c1e491ed14e20d2c","description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"homepage":"https://github.com/Bananapus/nana-suckers#readme","_nodeVersion":"22.4.1","_npmVersion":"10.8.1","dist":{"integrity":"sha512-BRAJY6aQ1viNWtRB/t6xq0yH12zOLeEzT0cWCzTdq1zDmgijUdgObDR1bJVThJFrC6RAB1dEgDFO+QmuAioD0w==","shasum":"d8cdb297cffd2a391d1293c097090577b748661a","tarball":"https://registry.npmjs.org/@bananapus/suckers/-/suckers-1.0.2.tgz","fileCount":142,"unpackedSize":9574893,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDNwf5LB0G/eTRUbqb5jGbNFPIqpuyxyCSh+T8zc3wfqAIhAJjCdU7vta+6zERQS2hn6qfmMO/1TXf4E1+I9gy53THy"}]},"_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/suckers_1.0.2_1739829746949_0.7499954202953014"},"_hasShrinkwrap":false}},"time":{"created":"2024-02-14T20:42:24.981Z","modified":"2025-02-17T22:02:27.429Z","0.0.1":"2024-02-14T20:42:25.272Z","0.0.2":"2024-02-15T16:54:18.307Z","0.0.3":"2024-02-23T22:35:38.579Z","0.0.4":"2024-02-27T01:20:55.109Z","0.0.5":"2024-03-19T23:44:31.903Z","0.0.6":"2024-04-03T03:07:04.821Z","0.0.7":"2024-04-11T13:25:37.673Z","0.0.8":"2024-04-21T22:37:34.246Z","0.0.9":"2024-04-22T00:08:43.551Z","0.0.10":"2024-04-22T00:40:54.758Z","0.0.11":"2024-04-25T21:52:53.147Z","0.0.12":"2024-05-02T16:44:20.746Z","0.0.13":"2024-06-03T22:01:34.459Z","0.0.14":"2024-06-10T22:08:25.484Z","0.0.15":"2024-06-10T22:37:14.236Z","0.0.16":"2024-07-19T07:25:06.601Z","0.0.17":"2024-07-19T12:26:21.264Z","0.0.18":"2024-07-19T15:35:08.599Z","0.0.19":"2024-07-20T20:25:17.629Z","0.0.20":"2024-07-21T19:15:56.028Z","0.0.21":"2024-08-20T14:55:13.383Z","0.0.22":"2024-09-16T22:00:11.966Z","0.0.23":"2024-09-17T21:39:44.662Z","0.0.24":"2024-10-16T23:12:04.564Z","0.0.25":"2024-12-02T22:48:31.695Z","0.0.26":"2024-12-05T13:00:49.113Z","0.0.27":"2024-12-09T13:39:36.744Z","0.0.28":"2025-01-16T16:56:15.028Z","0.0.29":"2025-01-25T23:49:34.564Z","0.0.30":"2025-01-27T21:52:33.745Z","0.0.31":"2025-02-04T22:09:15.870Z","0.0.32":"2025-02-05T19:19:45.461Z","1.0.0":"2025-02-17T04:21:21.840Z","1.0.1":"2025-02-17T07:08:54.767Z","1.0.2":"2025-02-17T22:02:27.210Z"},"bugs":{"url":"https://github.com/Bananapus/nana-suckers/issues"},"license":"MIT","homepage":"https://github.com/Bananapus/nana-suckers#readme","repository":{"type":"git","url":"git+https://github.com/Bananapus/nana-suckers.git"},"description":"If someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The ","maintainers":[{"name":"simplemachine","email":"justinpulley92@gmail.com"},{"name":"me.jango","email":"me.jango@protonmail.com"},{"name":"filipviz","email":"f@filip.world"}],"readme":"# Bananapus Sucker\n\nIf someone launches Juicebox projects on multiple chains, they can add suckers to them to allow anyone to burn the project's tokens on one chain (i.e. the local chain), and receive the same amount of tokens on the other chain (i.e. the remote chain). The sucker redeems the tokens on the local chain, and moves the funds it receives to the remote chain.\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    <ul>\n      <li><a href=\"#with-sphinx\">With Sphinx</a></li>\n      <li><a href=\"#without-sphinx\">Without Sphinx</a></li>\n      </ul>\n    <li><a href=\"#tips\">Tips</a></li>\n    </ul>\n    <li><a href=\"#repository-layout\">Repository Layout</a></li>\n    <li><a href=\"#architecture\">Architecture</a></li>\n    <li><a href=\"#description\">Description</a></li>\n  <ul>\n    <li><a href=\"#basics\">Basics</a></li>\n    <li><a href=\"#bridging-tokens\">Bridging Tokens</a></li>\n    <li><a href=\"#launching-suckers\">Launching Suckers</a></li>\n    <li><a href=\"#using-the-relayer\">Using the Relayer</a></li>\n    <li><a href=\"#resources\">Resources</a></li>\n    </ul>\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-suckers` in another project.\n\nFor projects using `npm` to manage dependencies (recommended):\n\n```bash\nnpm install @bananapus/suckers\n```\n\nFor projects using `forge` to manage dependencies (not recommended):\n\n```bash\nforge install Bananapus/nana-suckers\n```\n\nIf you're using `forge` to manage dependencies, add `@bananapus/suckers/=lib/nana-suckers/` to `remappings.txt`. You'll also need to install `nana-suckers`' dependencies and add similar remappings for them.\n\n### Develop\n\n`nana-suckers` 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 coverage`  | Generate an LCOV test coverage report.                  |\n| `npm run artifacts` | Fetch Sphinx artifacts and write them to `deployments/` |\n\n### Deployments\n\n#### With Sphinx\n\n`nana-suckers` manages deployments with [Sphinx](https://www.sphinx.dev). To run the deployment scripts, install the npm `devDependencies` with:\n\n```bash\n`npm ci --also=dev`\n```\n\nYou'll also 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:mainnets` | Propose mainnet deployments. |\n| `npm run deploy:testnets` | Propose testnet deployments. |\n\nYour teammates can review and approve the proposed deployments in the Sphinx UI. Once approved, the deployments will be executed.\n\n#### Without Sphinx\n\nYou can use the Sphinx CLI to run the deployment scripts without paying for Sphinx. First, install the npm `devDependencies` with:\n\n```bash\n`npm ci --also=dev`\n```\n\nYou can deploy the contracts like so:\n\n```bash\nPRIVATE_KEY=\"0x123…\" RPC_ETHEREUM_SEPOLIA=\"https://rpc.ankr.com/eth_sepolia\" npx sphinx deploy script/Deploy.s.sol --network ethereum_sepolia\n```\n\nThis example deploys `nana-suckers` to the Sepolia testnet using the specified private key. You can configure new networks in `foundry.toml`.\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. The important source directories are:\n\n```\nnana-suckers/\n├── script/\n│   ├── Deploy.s.sol - Deployment script.\n│   └── helpers/ - Internal helpers for the deployment script.\n├── src/\n│   ├── JBArbitrumSucker.sol - Arbitrum-specific JBSucker.\n│   ├── JBBaseSucker.sol - Base-specific JBSucker.\n│   ├── JBOptimismSucker.sol - Optimism-specific JBSucker.\n│   ├── JBSucker.sol - The basic sucker implementation.\n│   ├── JBSuckerRegistry.sol - Tracks suckers on each chain.\n│   ├── deployers/ - Deployers for each kind of sucker.\n│   ├── enums/ - Enums.\n│   ├── extensions/\n│   │   └── JBAllowanceSucker.sol - An extension which uses overflow allowance instead of redemptions.\n│   ├── interfaces/ - Contract interfaces.\n│   ├── libraries/ - Libraries.\n│   ├── structs/ - Structs.\n│   └── utils/\n│       └── MerkleLib.sol - The incremental merkle tree implementation suckers use to store claims.\n└── test/\n    ├── Fork.t.sol - Fork tests.\n    ├── mocks/ - Mock contracts for testing.\n    └── unit/\n        ├── merkle.t.sol - Merkle tree unit tests.\n        └── registry.t.sol - A registry unit test.\n```\n\nOther directories:\n\n```\nnana-suckers/\n├── .github/\n│   └── workflows/ - CI/CD workflows.\n└── deployments/ - Sphinx deployment logs.\n```\n\n## Architecture\n\nOn each network (Ethereum, Arbitrum, Optimism, and Base):\n\n```mermaid\ngraph TD;\n    A[JBSuckerRegistry] -->|exposes| B[\"deploySuckersFor(…)\"]\n    B -->|calls| C[IJBSuckerDeployer]\n    C -->|deploys| D[JBSucker]\n    A -->|tracks| D\n```\n\nFor an example project deployed on mainnet and Optimism with a `JBOptimismSucker` on each network:\n\n```mermaid\ngraph TD;\n    subgraph Mainnet\n    A[Project] -->|redeemed funds| B[JBOptimismSucker]\n    B -->|burns/mints tokens| A\n    end\n    subgraph Optimism\n    C[Project] -->|redeemed funds| D[JBOptimismSucker]\n    D -->|burns/mints tokens| C\n    end\n    B <-->|merkle roots/funds| D\n```\n\n## Description\n\n_This description is adapted from [Bridging in Juicebox v4](https://filip.world/post/suckers/)._\n\nJuicebox v4 introduces the [`JBSucker`](https://github.com/bananapus/nana-suckers) contracts for bridging project tokens and funds (terminal tokens) across EVM chains. Here's what you'll need to know if you're building a frontend or service which interacts with them.\n\n### Basics\n\n`JBSucker` contracts are deployed in pairs, with one on each network being bridged to or from – for now, suckers bridge between Ethereum mainnet and a specific L2. The [`JBSucker`](https://github.com/Bananapus/nana-suckers/blob/master/src/JBSucker.sol) contract implements core logic, and is extended by network-specific implementations adapted to each L2's bridging solution:\n\n| Sucker                                                                                               | Networks                      | Description                                                                                                                                                                                                                                |\n| ---------------------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| [`JBOptimismSucker`](https://github.com/Bananapus/nana-suckers/blob/master/src/JBOptimismSucker.sol) | Ethereum Mainnet and Optimism | Uses the [OP Standard Bridge](https://docs.optimism.io/builders/app-developers/bridging/standard-bridge) and the [OP Messenger](https://docs.optimism.io/builders/app-developers/bridging/messaging)                                       |\n| [`JBBaseSucker`](https://github.com/Bananapus/nana-suckers/blob/master/src/JBBaseSucker.sol)         | Ethereum Mainnet and Base     | A thin wrapper around `JBOptimismSucker`                                                                                                                                                                                                   |\n| [`JBArbitrumSucker`](https://github.com/Bananapus/nana-suckers/blob/master/src/JBArbitrumSucker.sol) | Ethereum Mainnet and Arbitrum | Uses the [Arbitrum Inbox](https://docs.arbitrum.io/build-decentralized-apps/cross-chain-messaging) and the [Arbitrum Gateway](https://docs.arbitrum.io/build-decentralized-apps/token-bridging/bridge-tokens-programmatically/get-started) |\n\nSuckers use two [merkle trees](https://en.wikipedia.org/wiki/Merkle_tree) to track project token claims associated with each terminal token it supports:\n\n- The _outbox tree_ tracks tokens on the local chain – the network that the sucker is on.\n- The _inbox tree_ tracks tokens which have been bridged from the peer chain – the network that the sucker's peer is on.\n\nFor example, a sucker which supports bridging ETH and USDC would have four trees – an inbox and outbox tree for each token. These trees are append-only, and when they're bridged over to the other chain, they aren't deleted – they only update the remote inbox tree with the latest root.\n\nTo insert project tokens into the outbox tree, users call `JBSucker.prepare(…)` with:\n\n1. The amount of project tokens to bridge, and\n2. the terminal token to bridge with them.\n\nThe sucker redeems those project tokens to reclaim the chosen terminal token from the project's primary terminal for it. Then the sucker inserts a claim with this information into the outbox tree.\n\nAnyone can bridge an outbox tree to the peer chain by calling `JBSucker.toRemote(…)`. The outbox tree then _becomes_ the peer sucker's inbox tree for that token. Users can claim their tokens on the peer chain by providing a merkle proof which shows that their claim is in the inbox tree.\n\n### Bridging Tokens\n\nImagine that the \"OhioDAO\" project is deployed on Ethereum mainnet and Optimism:\n\n- It has the $OHIO ERC-20 project token and a `JBOptimismSucker` deployed on each network.\n- Its suckers map\\* mainnet ETH to Optimism ETH, and vice versa.\n\n\\* Each sucker has mappings from terminal tokens on the local chain to associated terminal tokens on the remote chain.\n\n_Here's how Jimmy can bridge his $OHIO tokens (and the corresponding ETH) from mainnet to Optimism._\n\nFirst, Jimmy pays OhioDAO 1 ETH on Ethereum mainnet by calling [`JBMultiTerminal.pay(…)`](https://github.com/Bananapus/nana-core/blob/main/src/JBMultiTerminal.sol#L273):\n\n```solidity\nJBMultiTerminal.pay{value: 1 ether}({\n    projectId: 12,\n    token: 0x000000000000000000000000000000000000EEEe,\n    amount: 1 ether,\n    beneficiary: 0x1234…,\n    minReturnedTokens: 0,\n    memo: \"OhioDAO rules\",\n    metadata: 0x\n});\n```\n\n- `projectId` 12 is OhioDAO's project ID.\n- The (terminal) `token` is ETH, represented by [`JBConstants.NATIVE_TOKEN`](https://github.com/Bananapus/nana-core/blob/main/src/libraries/JBConstants.sol)\n- The `beneficiary` `0x1234…` is Jimmy's address.\n\nOhioDAO's ruleset has a `weight` of `1e18`, so Jimmy receives 1 $OHIO in return (`1e18` $OHIO). Before he can bridge his $OHIO to Optimism, Jimmy has to call the $OHIO contract's `ERC20.approve(…)` function to allow the `JBOptimismSucker` to use his balance:\n\n```solidity\nJBERC20.approve({\n    spender: 0x5678…,\n    value: 1e18\n});\n```\n\nThe `spender` `0x5678…` is the `JBOptimismSucker`'s Ethereum mainnet address, and the `value` is Jimmy's $OHIO balance. Jimmy can now prepare his $OHIO for bridging by calling `JBOptimismSucker.prepare(…)`:\n\n```solidity\nJBOptimismSucker.prepare({\n    projectTokenAmount: 1e18,\n    beneficiary: 0x1234…,\n    minTokensReclaimed: 0,\n    token: 0x000000000000000000000000000000000000EEEe\n});\n```\n\nOnce this is called, the sucker:\n\n- Transfers Jimmy's $OHIO to itself.\n- Redeems the $OHIO using OhioDAO's primary ETH terminal.\n- Adds a claim with this information to its ETH outbox tree.\n\nSpecifically, the `prepare(…)` function inserts a leaf into the ETH outbox tree – the leaf is a keccak256 hash of the beneficiary's address, the amount of $OHIO which was redeemed, and the amount of ETH reclaimed by that redemption.\n\nTo bridge the outbox tree over, Jimmy (or someone else) calls `JBOptimismSucker.toRemote(…)`, which takes one argument – the terminal token whose outbox tree should be bridged. Jimmy wants to bridge the ETH outbox tree, so he passes in `0x000000000000000000000000000000000000EEEe`. After a few minutes, the sucker will have bridged over the outbox tree and the ETH it got by redeeming Jimmy's $OHIO, which calls the peer sucker's `JBOptimismSucker.fromRemote(…)` function. The Optimism OhioDAO sucker's ETH inbox tree is updated with the new merkle root which contains Jimmy's claim.\n\nJimmy can claim his $OHIO on Optimism by calling `JBOptimismSucker.claim(…)`, which takes a single [`JBClaim`](https://github.com/Bananapus/nana-suckers/blob/master/src/structs/JBClaim.sol) as its argument. `JBClaim` looks like this:\n\n```solidity\nstruct JBClaim {\n    address token;\n    JBLeaf leaf;\n    // Must be `JBSucker.TREE_DEPTH` long.\n    bytes32[32] proof;\n}\n```\n\nHere's the [`JBLeaf`](https://github.com/Bananapus/nana-suckers/blob/master/src/structs/JBLeaf.sol) struct:\n\n```solidity\n/// @notice A leaf in the inbox or outbox tree of a `JBSucker`. Used to `claim` tokens from the inbox tree.\nstruct JBLeaf {\n    uint256 index;\n    address beneficiary;\n    uint256 projectTokenAmount;\n    uint256 terminalTokenAmount;\n}\n```\n\nThese claims can be difficult for integrators to put together – they would have to track every insertion and build merkle proofs for each one. To make this easier, I wrote the [`juicerkle`](https://github.com/Bananapus/juicerkle) service which returns all of the available claims for a specific beneficiary. To use it, `POST` a json request to `/claims`:\n\n| Field         | JS Type  | Description                                                               |\n| ------------- | -------- | ------------------------------------------------------------------------- |\n| `chainId`     | `int`    | The network ID for the sucker contract being claimed from.                |\n| `sucker`      | `string` | The address of the sucker being claimed from.                             |\n| `token`       | `string` | The address of the terminal token whose inbox tree is being claimed from. |\n| `beneficiary` | `string` | The address of the beneficiary we're getting the available claims for.    |\n\nJimmy's claims request looks like this:\n\n```js\n{\n    \"chainId\": 10,\n    \"sucker\": \"0x5678…\",\n    \"token\": \"0x000000000000000000000000000000000000EEEe\",\n    \"beneficiary\": \"0x1234…\" // jimmy.eth\n}\n```\n\nThe `chainId` is Optimism's network ID. Jimmy's getting his claims for the ETH inbox tree of the `JBOptimismSucker` at `0x5678…`. The `juicerkle` service will look through the entire inbox tree and return all of Jimmy's available claims as `JBClaim` structs. The response looks like this:\n\n```js\n[\n  {\n    Token: \"0x000000000000000000000000000000000000eeee\",\n    Leaf: {\n      Index: 0,\n      Beneficiary: \"0x1234…\", // jimmy.eth\n      ProjectTokenAmount: 1000000000000000000, // 1e18\n      TerminalTokenAmount: 1000000000000000000, // 1e18\n    },\n    Proof: [\n      [\n        229, 206, 51, 48, 16, 242, 169, 29, 47, 33, 39, 105, 34, 55, 172, 232,\n        217, 243, 168, 149, 38, 202, 133, 68, 191, 119, 165, 97, 59, 232, 212,\n        14,\n      ],\n      [\n        33, 40, 178, 36, 156, 7, 175, 252, 47, 196, 238, 239, 170, 52, 239, 153,\n        66, 111, 173, 24, 113, 164, 25, 185, 54, 47, 170, 32, 232, 56, 97, 254,\n      ],\n      // More 32-byte chunks…\n    ],\n  },\n  // More claims…\n];\n```\n\nJimmy calls `JBOptimismSucker.claim(…)` with this to claim his $OHIO on Optimism. If the sucker's `ADD_TO_BALANCE_MODE` is set to `ON_CLAIM`, the bridged ETH associated with Jimmy's $OHIO is immediately added to OhioDAO's balance. Otherwise, it will be added once someone calls `JBOptimismSucker.addOutstandingAmountToBalance(…)`.\n\n### Launching Suckers\n\nThere are a few requirements for launching a sucker pair:\n\n1. Projects must already be deployed on both chains. The project IDs don't have to match.\n2. Both projects must have a 100% redemption rate for the suckers to redeem project tokens for terminal tokens. That is, [`JBRulesetMetadata.redemptionRate`](https://github.com/Bananapus/nana-core/blob/main/src/structs/JBRulesetMetadata.sol) must be `10_000`, which is [`JBConstants.MAX_REDEMPTION_RATE`](https://github.com/Bananapus/nana-core/blob/main/src/libraries/JBConstants.sol).\n3. Both projects must allow owner minting for the suckers to mint bridged project tokens. That is, [`JBRulesetMetadata.allowOwnerMinting`](https://github.com/Bananapus/nana-core/blob/main/src/structs/JBRulesetMetadata.sol) must be `true`.\n4. Both projects must have an ERC-20 project token. If one doesn't, launch it with [`JBController.deployERC20For(…)`](https://github.com/Bananapus/nana-core/blob/main/src/JBController.sol#L620).\n\nSuckers are deployed through the [`JBSuckerRegistry`](https://github.com/Bananapus/nana-suckers/blob/master/src/JBSuckerRegistry.sol) on each chain. In the process of deploying the suckers, the sucker registry maps local tokens to remote tokens, so we'll have to give it permission:\n\n```solidity\nJBPermissionsData memory mapTokenPermission = JBPermissionsData({\n    operator: 0x9ABC…,\n    projectId: 12,\n    permissionIds: [28], // JBPermissionIds.MAP_SUCKER_TOKEN == 28\n});\n\nJBPermissions.setPermissionsFor({\n    account: 0x1234…,\n    permissionsData: mapTokenPermission\n});\n```\n\nIn this example, the project owner `0x1234…` gives the `JBSuckerRegistry` at `0x9ABC…` permission to map tokens for project 12's suckers. Now the owner can deploy the suckers:\n\n```solidity\nJBTokenMapping memory ethMapping = JBTokenMapping({\n    localToken: 0x000000000000000000000000000000000000EEEe,\n    minGas: 100_000, // 100k gas minimum\n    remoteToken: 0x000000000000000000000000000000000000EEEe,\n    minBridgeAmount: 25e15, // 0.025 ETH\n});\n\nJBSuckerDeployerConfig memory config = JBSuckerDeployerConfig({\n    deployer: 0xcdef…,\n    mappings: [ethMapping]\n});\n\nJBSuckerRegistry.deploySuckersFor({\n    projectId: 12,\n    salt: 0xfce167d38e3d9c2a0375c172d979c39c696f2450616565c1c3284e00f0fac074,\n    configurations: [config]\n});\n```\n\n- The [`JBTokenMapping`](https://github.com/Bananapus/nana-suckers/blob/master/src/structs/JBTokenMapping.sol) maps local mainnet ETH to remote Optimism ETH.\n  - To prevent spam, the mapping has a `minBridgeAmount` – ours blocks attempts to bridge less than 0.025 ETH.\n  - To prevent transactions from failing, our `minGas` requires a gas limit greater than 100,000 wei.\n  - These are good starting values, but you may need to adjust them – if your token has expensive transfer logic, you may need a higher `minGas`.\n- The [`JBSuckerDeployerConfig`](https://github.com/Bananapus/nana-suckers/blob/master/src/structs/JBSuckerDeployerConfig.sol) uses the [`JBOptimismSuckerDeployer`](https://github.com/Bananapus/nana-suckers/blob/master/src/deployers/JBOptimismSuckerDeployer.sol) at `0xcdef…` to deploy the sucker.\n  - You can only use approved sucker deployers through the registry. Check for `SuckerDeployerAllowed` events or contact the registry's owner to figure out which deployers are approved.\n- We call `JBSuckerRegistry.deploySuckersFor(…)` with the project's ID (12), a randomly generated 32-byte salt, and the configuration.\n  - **For the suckers to be peers, the `salt` has to match on both chains and the same address must call `deploySuckersFor(…)`.**\n\nThe suckers are deployed! We have to give the sucker permission to mint bridged project tokens:\n\n```solidity\nJBPermissionsData memory mintPermission = JBPermissionsData({\n    operator: 0x1357…,\n    projectId: 12,\n    permissionIds: [9], // JBPermissionIds.MINT_TOKENS == 9\n});\n\nJBPermissions.setPermissionsFor({\n    account: 0x1234…,\n    permissionsData: mintPermission\n});\n```\n\nIn this example, the project owner `0x1234…` gives their new `JBSucker` at `0x1357…` permission to mint project 12's tokens.\n\nRepeat this process on the other chain to deploy the peer sucker, and the project should be ready for bridging.\n\n### Using the Relayer\n\n_This tech is still under construction – expect this to change._\n\nBridging from L1 to L2 is straightforward. Bridging from L2 to L1 usually requires an extra step to finalize the withdrawal, which is different for each L2. For OP Stack networks like Optimism or Base, this is the [withdrawal flow](https://docs.optimism.io/stack/protocol/withdrawal-flow):\n\n> 1.  The **withdrawal initiating transaction**, which the user submits on L2.\n> 2.  The **withdrawal proving transaction**, which the user submits on L1 to prove that the withdrawal is legitimate (based on a merkle patricia trie root that commits to the state of the L2ToL1MessagePasser's storage on L2)\n> 3.  The **withdrawal finalizing transaction**, which the user submits on L1 after the fault challenge period has passed, to actually run the transaction on L1.\n\nUsers can do this manually, but it's a hassle. To simplify this process, 0xBA5ED wrote the [`bananapus-sucker-relayer`](https://github.com/Bananapus/bananapus-sucker-relayer), a tool which automatically proves and finalizes withdrawals from Optimism or Base to Ethereum mainnet. It listens for withdrawals and automatically completes the withdrawal process using [OpenZeppelin Defender](https://www.openzeppelin.com/defender).\n\nTo use the relayer, project creators have to create an OpenZeppelin Defender account, set up a relayer through their dashboard, and fund it with ETH (to pay gas fees). This relayer is still in development, so expect changes.\n\n### Resources\n\n1. The `nana-suckers` contracts use Nomad's [`MerkleLib`](https://github.com/nomad-xyz/nomad-monorepo/blob/main/solidity/nomad-core/libs/Merkle.sol) merkle tree implementation, which is based on the eth2 deposit contract. I couldn't find a comparable implementation in Golang, so I wrote one which you're welcome to use: the [`tree`](https://github.com/Bananapus/juicerkle/blob/master/tree/tree.go) package in the [`juicerkle`](https://github.com/Bananapus/juicerkle) project. It provides utilities for calculating roots, as well as building and verifying merkle proofs. I use this implementation in the `juicerkle` service to generate claims.\n2. To thoroughly test `juicerkle` in practice, I built the end-to-end [`juicerkle-tester`](https://github.com/Bananapus/juicerkle-tester). As well as testing the `juicerkle` service, it serves as a useful bridging process walkthrough – it deploys appropriately configured projects, tokens, and suckers, and bridges between them.\n\n### Managing suckers\n\nOnce configured suckers should manage themselves, however its important to stay up-to-date on changes to the bridge infrastructure that is used by the sucker of your choice. \nIn the case that a change is made that would cause suckers to no longer be functional/compatible with the underlying bridge infrastructure there are two options:\n(note, make sure to perform these actions on BOTH sides of the suckers)\n\n#### Disable a token\nIn the case that a change to the underlying bridge causes only a single (or few) tokens to no longer function you might want to disable just those tokens. Your first step should be to call `mapToken(...)` with the token you wish to disable and `remoteToken` set to `address(0)` to disable it.\nIf this does not work because the bridge will not let you perform a final transfer with the remaining funds then you can activate the `EmergencyHatch` for the tokens that are giving issues. \n\nEnabling the `EmergencyHatch` allows tokens to be withdrawn by their depositors on the chain where they were deposited. Only those whose funds have not been moved to the remote chain can withdraw using the `EmergencyHatch`.\nAn important side-note is that once an EmergencyHatch is opened for a token, the token will never be able to be bridged using this sucker. You can however deploy a new sucker for that token.\n\n#### Deprecate the suckers\nIn the case that the bridiging infrastructure will no longer work you should deprecate the sucker, this will make it so that the sucker will start its shutdown procedure. Depending on the sucker implementation this will have a minimum duration which is needed to ensure that no funds/roots get lost while in transit. After this duration all tokens will allow for exit through the `EmergencyHatch` and no new messages will be accepted.\n\nThis makes it so that even if at some point in the future the bridge starts sending fake/malicious transfers the sucker will reject all of these.\n\nWhen deprecating suckers make sure that your bridge infrastructure does not have pending messages that can/should be retried. Once the deprecation is complete these messages will no longer be accepted by the sucker.\n","readmeFilename":"README.md"}