@bananapus/swap-terminal

0.0.11 • Public • Published

Swap Terminal

The JBSwapTerminal accepts payments in any token. When the JBSwapTerminal is paid, it uses a Uniswap pool to exchange the tokens it received for tokens that another one of the project's terminals accepts. Then, it pays the project's primary terminal for the tokens it got from the pool, forwarding the specified beneficiary to receive any tokens or NFTs minted by that payment.

EXAMPLE: One of the "Clungle" project's terminals accepts ETH and mints $CLNG tokens. The Clungle project also has a swap terminal. If Jimmy pays the Clungle project with USDC and sets his address as the payment's beneficiary, the swap terminal will swap the USDC for ETH. Then it pays that ETH into the terminal which accepts ETH, minting $CLNG tokens for Jimmy.

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.

Install

How to install nana-swap-terminal in another project.

For projects using npm to manage dependencies (recommended):

npm install @bananapus/swap-terminal

For projects using forge to manage dependencies (not recommended):

forge install Bananapus/nana-swap-terminal

If you're using forge to manage dependencies, add @bananapus/swap-terminal/=lib/nana-swap-terminal/ to remappings.txt. You'll also need to install nana-swap-terminal's dependencies and add similar remappings for them.

Develop

nana-swap-terminal 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.

Scripts

For convenience, several utility commands are available in package.json.

Command Description
npm test Run local tests.
npm run test:fork Run fork tests (for use in CI).
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
npm run deploy:polygon-mainnet Deploy to Polygon mainnet
npm run deploy:polygon-mumbai Deploy to Polygon Mumbai testnet

Terminals

Juicebox projects can accept funds through one or more terminals, which can manage both inflows (via payments) and outflows (via redemptions). Terminals usually only accept one token for payments, but if a project has a swap terminal, the swap terminal can accept any token and swap it for tokens which the project can accept. After swapping, it redirects the payment to the primary terminal for the token it received.

A project can set its terminals (and primary terminals) in the JBDirectory contract.

Readme

Keywords

none

Package Sidebar

Install

npm i @bananapus/swap-terminal

Weekly Downloads

9

Version

0.0.11

License

MIT

Unpacked Size

5.4 MB

Total Files

45

Last publish

Collaborators

  • filipviz
  • simplemachine
  • me.jango