Deployer & Partner Integration
Learn how to integrate and build custom apps with Printr's APIs
Welcome to Printr's Developer Docs!
To get access to our API documentation, please request it from us via Telegram @masterprintr
Contract Addresses
EVM:
0xb77726291b125515d0a7affeea2b04f2ff243172SVM:
T8HsGYv7sMk3kTnyaRqZrbRPuntYzdh12evXBkprint
TL;DR
Create single chain
❌
✅
Create cross-chain
❌
✅
Trade single chain
✅
✅
Trade cross-chain
❌
✅
Single chain trading
✅ EVM ABI v0 (active)
IPrintr.sol
Contract address 0xac137036dd432ea72585730af33a356919425208
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import { IPrintrCurve } from "./printr/IPrintrCurve.sol";
import { IPrintrStorage } from "./printr/IPrintrStorage.sol";
import { IPrintrTrading } from "./printr/IPrintrTrading.sol";
/**
 * @title IPrintr
 * @notice Comprehensive interface combining all Printr protocol functionality
 * @dev Aggregates specialized interfaces for storage, curves, trading, cross-chain, and admin features
 *
 * Components:
 * - IPrintrStorage: Core storage and state management
 * - IPrintrCurve: Bonding curve creation and management
 * - IPrintrTrading: Token trading and price calculations
 */
interface IPrintr is IPrintrStorage, IPrintrCurve, IPrintrTrading { }IPrintrTrading.sol
Contract address 0xac137036dd432ea72585730af33a356919425208
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import { IEIP712 } from "../IEIP712.sol";
import { IPrintrStorage } from "./IPrintrStorage.sol";
/**
 * @title Printr Trading Interface
 * @notice Interface for trading operations on tokens with linear bonding curves
 * @dev All price calculations use PRECISION_SCALAR (1e18) for accurate floating point math
 *      Handles buying, selling, and cross-chain trading operations
 */
interface IPrintrTrading is IPrintrStorage, IEIP712 {
    /**
     * @notice Parameters for remote token sales
     * @param token Address of the token being sold
     * @param amount Amount of tokens to sell. Pass type(uint256).max to sell all tokens
     * @param minPrice Minimum acceptable price per token
     */
    struct RemoteSell {
        address token;
        uint256 amount;
        uint256 minPrice;
    }
    /**
     * @notice Parameters for signed remote token sales
     * @param salt Unique identifier for the sale
     * @param owner Address of the token owner
     * @param recipient Address to receive the tokens on the remote chain
     * @param deadline Expiration time for the sale
     * @param remoteSellHashes Hashes of the remote sell operations
     */
    struct SignedRemoteSell {
        bytes32 salt;
        address owner;
        address recipient;
        uint256 deadline;
        bytes32[] remoteSellHashes;
    }
    /**
     * @notice Parameters for signed cancel sell operations
     * @param salt Unique identifier for the cancel
     * @param owner Address of the token owner
     */
    struct SignedCancelSell {
        bytes32 salt;
        address owner;
    }
    /**
     * @notice Parameters for token trading operations
     * @param account Account performing the trade
     * @param token Address of the token being traded
     * @param amount Amount of tokens in the trade
     * @param priceLimit Maximum/minimum price limit for slippage protection
     * @param tokenSupply Current token supply before the trade
     * @param tradingFee Fee percentage applied to the trade
     */
    struct TradeParams {
        address account;
        address recipient;
        address token;
        uint256 amount;
        uint256 priceLimit;
        uint16 tradingFee;
    }
    /**
     * @notice Emitted when tokens are traded through the bonding curve
     * @param token Address of the token contract
     * @param trader Address that performed the trade
     * @param isBuy True if tokens were bought, false if sold
     * @param amount Number of tokens traded
     * @param cost Amount of base currency involved in the trade
     * @param effectivePrice Price per token achieved in the trade
     * @param mintedSupply New total supply after the trade
     * @param reserve New reserve balance after the trade
     */
    event TokenTrade(
        address indexed token,
        address indexed trader,
        bool isBuy,
        uint256 amount,
        uint256 cost,
        uint256 effectivePrice,
        uint256 mintedSupply,
        uint256 reserve
    );
    /**
     * @notice Emitted when a token graduates from bonding curve to liquidity pool
     * @param token Address of the token that graduated
     * @param totalSupply Total supply at graduation
     */
    event TokenGraduated(address indexed token, uint256 totalSupply);
    /// @notice Typehash for remote sell params
    function REMOTE_SELL_TYPEHASH() external view returns (bytes32);
    /// @notice Typehash for signed remote sell operations
    function SIGNED_REMOTE_SELL_TYPEHASH() external view returns (bytes32);
    /// @notice Typehash for signed cancel sell operations
    function SIGNED_CANCEL_SELL_TYPEHASH() external view returns (bytes32);
    /**
     * @notice Estimates the cost of minting a specific amount of tokens
     * @dev Uses linear bonding curve. All calculations are scaled by PRECISION_SCALAR
     * @param token Address of the token
     * @param tokenAmount Number of tokens to mint
     * @return availableAmount Amount of tokens available for minting
     * @return cost Cost in base currency to mint the specified amount of tokens
     * @return fee Trading fee amount in base currency
     * @return effectivePrice Effective price per token in base currency
     * @return mintedSupply New total supply after the mint
     */
    function estimateTokenCost(
        address token,
        uint256 tokenAmount
    )
        external
        view
        returns (uint256 availableAmount, uint256 cost, uint256 fee, uint256 effectivePrice, uint256 mintedSupply);
    /**
     * @notice Quote the amount of tokens receivable for a specific amount of base currency
     * @dev Calculates tokens received including trading fees
     * @param token The token address
     * @param baseAmount The amount of base currency to spend
     * @return tokenAmount The amount of tokens receivable
     * @return cost The actual amount in base currency required for the purchase
     * @return fee The trading fee amount in base currency
     * @return effectivePrice The effective price per token
     * @return mintedSupply The new total supply after the purchase
     */
    function quoteTokenAmount(
        address token,
        uint256 baseAmount
    )
        external
        view
        returns (uint256 tokenAmount, uint256 cost, uint256 fee, uint256 effectivePrice, uint256 mintedSupply);
    /**
     * @notice Estimates the refund amount for burning a specific amount of tokens
     * @dev Uses the same linear bonding curve as mint, but in reverse
     * @param token Address of the token
     * @param tokenAmount Number of tokens to burn
     * @return refund Refund amount in base currency for burning the specified tokens
     * @return fee Trading fee amount in base currency
     * @return effectivePrice Effective price per token in base currency
     * @return mintedSupply New total supply after the burn
     */
    function estimateTokenRefund(
        address token,
        uint256 tokenAmount
    ) external view returns (uint256 refund, uint256 fee, uint256 effectivePrice, uint256 mintedSupply);
    /**
     * @notice Mints new tokens according to the bonding curve
     * @param token Address of the token to mint
     * @param recipient Address to receive the minted tokens
     * @param amount Amount of tokens to mint
     * @param maxPrice Maximum acceptable price per token for slippage protection
     */
    function buy(
        address token,
        address recipient,
        uint256 amount,
        uint256 maxPrice
    ) external payable returns (TradeParams memory params);
    /**
     * @notice Buys tokens with a specified amount of base currency
     * @param token Address of the token to buy
     * @param recipient Address to receive the tokens
     * @param baseAmount Amount of base currency to spend. Pass type(uint256).max to use
     *                   the maximum available amount (all approved tokens or all sent ETH)
     * @param maxPrice Maximum acceptable price per token for slippage protection
     */
    function spend(
        address token,
        address recipient,
        uint256 baseAmount,
        uint256 maxPrice
    ) external payable returns (TradeParams memory params);
    /**
     * @notice Burns tokens and returns base currency according to the bonding curve
     * @param token Address of the token to burn
     * @param recipient Address to receive the refunded base currency
     * @param amount Amount of tokens to burn. Pass type(uint256).max to sell all tokens
     * @param minPrice Minimum acceptable refund per token for slippage protection
     */
    function sell(
        address token,
        address recipient,
        uint256 amount,
        uint256 minPrice
    ) external returns (TradeParams memory params);
    /**
     * @notice Executes a cross-chain token sale with signature verification
     * @dev Burns tokens on the current chain and releases funds on the home chain
     * @param remoteSell Remote sell parameters
     * @param signed Signed authorization for the sale
     * @param signature Signature of the sale authorization
     */
    function sellRemotely(
        RemoteSell calldata remoteSell,
        SignedRemoteSell memory signed,
        bytes calldata signature
    ) external returns (TradeParams memory params);
    /**
     * @notice Cancels a pending remote sell operation
     * @param cancel Parameters for the cancel sell operation
     * @param signature Original signed authorization for the sale
     */
    function cancelRemoteSell(SignedCancelSell calldata cancel, bytes calldata signature) external;
⏳ EVM ABI v1 (coming soon)
IPrintrCore.sol
Contract address TBA
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import { IPrintrPrinting } from "./printr/IPrintrPrinting.sol";
import { IPrintrStorage } from "./printr/IPrintrStorage.sol";
import { IPrintrTrading } from "./printr/IPrintrTrading.sol";
/**
 * @title IPrintrCore
 * @notice Comprehensive interface combining all Printr protocol functionality
 * @dev Aggregates specialized interfaces for storage, printing, trading, cross-chain, and admin features
 *
 * Components:
 * - IPrintrStorage: Core storage and state management
 * - IPrintrPrinting: Token printing and curve management
 * - IPrintrTrading: Token trading and price calculations
 */
interface IPrintrCore is IPrintrStorage, IPrintrPrinting, IPrintrTrading { }IPrintrTrading.sol
Contract address TBA
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.27;
import { IEIP712 } from "../IEIP712.sol";
import { IPrintrStorage } from "./IPrintrStorage.sol";
/**
 * @title Printr Trading Interface
 * @notice Interface for trading operations on tokens with linear bonding curves
 * @dev All price calculations use PRECISION_SCALAR (1e18) for accurate floating point math
 *      Handles buying, selling, and cross-chain trading operations
 */
interface IPrintrTrading is IPrintrStorage, IEIP712 {
    /**
     * @notice Parameters for remote token sales
     * @param token Address of the token being sold
     * @param amount Amount of tokens to sell. Pass type(uint256).max to sell all tokens
     * @param minPrice Minimum acceptable price per token
     */
    struct RemoteSell {
        address token;
        uint256 amount;
        uint256 minPrice;
    }
    /**
     * @notice Parameters for signed remote token sales
     * @param salt Unique identifier for the sale
     * @param owner Address of the token owner
     * @param recipient Address to receive the tokens on the remote chain
     * @param deadline Expiration time for the sale
     * @param remoteSellHashes Hashes of the remote sell operations
     */
    struct SignedRemoteSell {
        bytes32 salt;
        address owner;
        address recipient;
        uint256 deadline;
        bytes32[] remoteSellHashes;
    }
    /**
     * @notice Parameters for signed cancel sell operations
     * @param salt Unique identifier for the cancel
     * @param owner Address of the token owner
     */
    struct SignedCancelSell {
        bytes32 salt;
        address owner;
    }
    /**
     * @notice Parameters for token trading operations
     * @param account Account performing the trade
     * @param token Address of the token being traded
     * @param amount Amount of tokens in the trade
     * @param priceLimit Maximum/minimum price limit for slippage protection
     * @param tokenSupply Current token supply before the trade
     * @param tradingFee Fee percentage applied to the trade
     */
    struct TradeParams {
        address account;
        address recipient;
        address token;
        uint256 amount;
        uint256 priceLimit;
        uint16 tradingFee;
    }
    /**
     * @notice Emitted when tokens are traded through the bonding curve
     * @param token Address of the token contract
     * @param trader Address that performed the trade
     * @param isBuy True if tokens were bought, false if sold
     * @param amount Number of tokens traded
     * @param cost Amount of base currency involved in the trade
     * @param effectivePrice Price per token achieved in the trade
     * @param mintedSupply New total supply after the trade
     * @param reserve New reserve balance after the trade
     */
    event TokenTrade(
        address indexed token,
        address indexed trader,
        bool isBuy,
        uint256 amount,
        uint256 cost,
        uint256 effectivePrice,
        uint256 mintedSupply,
        uint256 reserve
    );
    /**
     * @notice Emitted when a token graduates from bonding curve to liquidity pool
     * @param token Address of the token that graduated
     * @param totalSupply Total supply at graduation
     */
    event TokenGraduated(address indexed token, uint256 totalSupply);
    /// @notice Typehash for remote sell params
    function REMOTE_SELL_TYPEHASH() external view returns (bytes32);
    /// @notice Typehash for signed remote sell operations
    function SIGNED_REMOTE_SELL_TYPEHASH() external view returns (bytes32);
    /// @notice Typehash for signed cancel sell operations
    function SIGNED_CANCEL_SELL_TYPEHASH() external view returns (bytes32);
    /**
     * @notice Estimates the cost of minting a specific amount of tokens
     * @dev Uses linear bonding curve. All calculations are scaled by PRECISION_SCALAR
     * @param token Address of the token
     * @param tokenAmount Number of tokens to mint
     * @return availableAmount Amount of tokens available for minting
     * @return cost Cost in base currency to mint the specified amount of tokens
     * @return fee Trading fee amount in base currency
     * @return effectivePrice Effective price per token in base currency
     * @return mintedSupply New total supply after the mint
     */
    function estimateTokenCost(
        address token,
        uint256 tokenAmount
    )
        external
        view
        returns (uint256 availableAmount, uint256 cost, uint256 fee, uint256 effectivePrice, uint256 mintedSupply);
    /**
     * @notice Quote the amount of tokens receivable for a specific amount of base currency
     * @dev Calculates tokens received including trading fees
     * @param token The token address
     * @param baseAmount The amount of base currency to spend
     * @return tokenAmount The amount of tokens receivable
     * @return cost The actual amount in base currency required for the purchase
     * @return fee The trading fee amount in base currency
     * @return effectivePrice The effective price per token
     * @return mintedSupply The new total supply after the purchase
     */
    function quoteTokenAmount(
        address token,
        uint256 baseAmount
    )
        external
        view
        returns (uint256 tokenAmount, uint256 cost, uint256 fee, uint256 effectivePrice, uint256 mintedSupply);
    /**
     * @notice Estimates the refund amount for burning a specific amount of tokens
     * @dev Uses the same linear bonding curve as mint, but in reverse
     * @param token Address of the token
     * @param tokenAmount Number of tokens to burn
     * @return refund Refund amount in base currency for burning the specified tokens
     * @return fee Trading fee amount in base currency
     * @return effectivePrice Effective price per token in base currency
     * @return mintedSupply New total supply after the burn
     */
    function estimateTokenRefund(
        address token,
        uint256 tokenAmount
    ) external view returns (uint256 refund, uint256 fee, uint256 effectivePrice, uint256 mintedSupply);
    /**
     * @notice Mints new tokens according to the bonding curve
     * @param token Address of the token to mint
     * @param recipient Address to receive the minted tokens
     * @param amount Amount of tokens to mint
     * @param maxPrice Maximum acceptable price per token for slippage protection
     */
    function buy(
        address token,
        address recipient,
        uint256 amount,
        uint256 maxPrice
    ) external payable returns (TradeParams memory params);
    /**
     * @notice Buys tokens with a specified amount of base currency
     * @param token Address of the token to buy
     * @param recipient Address to receive the tokens
     * @param baseAmount Amount of base currency to spend. Pass type(uint256).max to use
     *                   the maximum available amount (all approved tokens or all sent ETH)
     * @param maxPrice Maximum acceptable price per token for slippage protection
     */
    function spend(
        address token,
        address recipient,
        uint256 baseAmount,
        uint256 maxPrice
    ) external payable returns (TradeParams memory params);
    /**
     * @notice Burns tokens and returns base currency according to the bonding curve
     * @param token Address of the token to burn
     * @param recipient Address to receive the refunded base currency
     * @param amount Amount of tokens to burn. Pass type(uint256).max to sell all tokens
     * @param minPrice Minimum acceptable refund per token for slippage protection
     */
    function sell(
        address token,
        address recipient,
        uint256 amount,
        uint256 minPrice
    ) external returns (TradeParams memory params);
    /**
     * @notice Executes a cross-chain token sale with signature verification
     * @dev Burns tokens on the current chain and releases funds on the home chain
     * @param remoteSell Remote sell parameters
     * @param signed Signed authorization for the sale
     * @param signature Signature of the sale authorization
     */
    function sellRemotely(
        RemoteSell calldata remoteSell,
        SignedRemoteSell memory signed,
        bytes calldata signature
    ) external returns (TradeParams memory params);
    /**
     * @notice Cancels a pending remote sell operation
     * @param cancel Parameters for the cancel sell operation
     * @param signature Original signed authorization for the sale
     */
    function cancelRemoteSell(SignedCancelSell calldata cancel, bytes calldata signature) external;
}Common FAQs
We need a copy of Printr’s IDL (Solana) / ABI (EVM)
Printr does not expose copies of our various IDLs for Solana or ABIs for EVM.
Calldata and IX construction are handled by Printr Xchain Engine.
Printr uses routing overlays to enable cross-chain interactions.
In theory, it is possible for an integrator to build transactions without our API, but you would need to build your own xchain engine.
To manage this complexity, Printr exposes an API that integrators can use to leverage the power of the Printr Xchain Engine.
Print (launch, create new tokens, single or cross chain)
Swap (trade single or cross chain)
Bridge (teleport)
Examples of Other Crypto Apps Using This Approach
How do I Print and trade new tokens?
Create
See our public API documentation. The endpoints use input amounts for initial buy as an anchor to derive quotes.
Trade (Buy / Sell)
Currently not exposed
Bridge
Currently not exposed
Where does the liquidity migrate after bonding?
The post-graduation stage involves migrating funds from the token's bonding curve to a DEX, which varies by blockchain. Currently, our EVM-based pools are moved to Uniswap, while Solana-based pools are transferred to Meteora. These destinations may change based on our technical roadmap and strategic partnerships.
For the latest info, please contact us via Telegram @masterprintr
Solana
Meteora damm-v2
Mantle
Merchant Moe
Ethereum, Arbitrum, Base, Avalanche, Arbitrum
Uniswap V3
BNB Chain, Monad
PancakeSwap V3
Is fund migration after graduation near-instantaneous, or is there a delay?
Both migrations on EVM and Solana are automatic, but they're using different mechanisms.
EVM (Printr DBC)
fund migration happens automatically and atomically in the same transaction
if a user’s swap causes the graduation threshold to be reached.
Solana (Meteora DBC)
migration is automatic but could be performed by:
Printr’s migrator,
meteora’s migrator, or
the user’s swap transaction, depending on market conditions.
Last updated