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.
BPSucker
maintains a mappingacceptFromRemote
that links local project IDs to their corresponding remote project IDs.BPSucker
's main external functions are:register
: This function registers a remote project ID as the peer of a local project ID. It requires the caller to have the appropriate permissions.toRemote
: Send tokens from a local project to a remote project. It first checks if the remote project is valid, then redeems the tokens at the local terminal, and finally sends a message to the peer contract on the remote chain with the redeemed ETH.fromRemote
: This function receives tokens from a remote project. It checks if the message came from the peer contract and if the remote project is valid, then adds the redeemed funds to the local terminal and mints tokens for the beneficiary.
If you're having trouble understanding this contract, take a look at the core protocol contracts and the documentation first. If you have questions, reach out on Discord.
How to install nana-suckers
in another project.
For projects using npm
to manage dependencies (recommended):
npm install @bananapus/suckers
For projects using forge
to manage dependencies (not recommended):
forge install Bananapus/nana-suckers
If 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.
nana-suckers
uses npm (version >=20.0.0) for package management and the Foundry development toolchain for builds, tests, and deployments. To get set up, install Node.js and install Foundry:
curl -L https://foundry.paradigm.xyz | sh
You can download and install dependencies with:
npm ci && forge install
If you run into trouble with forge install
, try using git submodule update --init --recursive
to ensure that nested submodules have been properly initialized.
Some useful commands:
Command | Description |
---|---|
forge build |
Compile the contracts and write artifacts to out . |
forge fmt |
Lint. |
forge test |
Run the tests. |
forge build --sizes |
Get contract sizes. |
forge coverage |
Generate a test coverage report. |
foundryup |
Update foundry. Run this periodically. |
forge clean |
Remove the build artifacts and cache directories. |
To learn more, visit the Foundry Book docs.
For convenience, several utility commands are available in package.json
.
Command | Description |
---|---|
npm test |
Run local tests. |
npm run coverage |
Generate an LCOV test coverage report. |
npm run deploy:ethereum-mainnet |
Deploy to Ethereum mainnet |
npm run deploy:ethereum-sepolia |
Deploy to Ethereum Sepolia testnet |
npm run deploy:optimism-mainnet |
Deploy to Optimism mainnet |
npm run deploy:optimism-testnet |
Deploy to Optimism testnet |