LogoLogo
  • Welcome
  • XRPL Basics
    • Getting Started
    • Payments
    • Reading and subscribing to Transactions
    • Writing and reading memos
    • Non Fungible Tokens
    • PathFinding
    • Escrow
    • Price Oracles
    • Tickets
    • Multi-Signature
  • Token Issuance and Liquidity
    • Creating Accounts
    • Issuing Tokens
    • Creating an AMM Pool
  • Cyphered Chat on XRPL
    • Set up
    • Set up Keys
    • Cypher the message
    • Set up the memo & send the tx
    • Get the message and decypher it
  • EVM Sidechain
    • Connecting Metamask
    • Bridging Assets
    • Remix
    • Banking App
    • Banking Contract Key Concepts
  • Tools
    • Xaman Setup
    • Metamask Setup
Powered by GitBook
On this page
  • Create an AMM Pool
  • Extra credits
Export as PDF
  1. Token Issuance and Liquidity

Creating an AMM Pool

Now we will create an AMM Pool to provide some liquidity for our new token.

Create an AMM Pool

Now that the receiver has tokens, we can use the receiver's account to create an AMM. Note that this is the usual architecture where the issuer account solely issues the token, and other proprietary accounts hold the token and can create liquidity.

For this example, we will use pools that have XRP as one side.

Here is the createAMM.ts file:

createAMM.ts
import { AMMCreate, AMMDeposit, AMMDepositFlags } from "xrpl";
import { OfferCreate, OfferCreateFlags } from "xrpl";

async function createAMM({ issuer, receiver, client, tokenCode }: any) {
  console.log("create AMM", { issuer, receiver, tokenCode });
  let createAmm: AMMCreate = {
    TransactionType: "AMMCreate",
    Account: receiver.address,
    TradingFee: 600,
    Amount: {
      currency: tokenCode,
      issuer: issuer.classicAddress,
      value: "2000000", // 2M tokens
    },
    Amount2: "50000000", // 50 XRP in drops
  };
  console.log(createAmm);

  const prepared = await client.autofill(createAmm);
  const signed = receiver.sign(prepared);
  const result = await client.submitAndWait(signed.tx_blob);

  console.log(result);
  console.log("Create amm tx: ", result.result.hash);

  return;
}

export default createAMM;

The final main function index.ts should now look like this:

index.ts
const main = async () => {
  console.log("lets get started...");
  await client.connect();

  // retrieve wallets
  const issuer = Wallet.fromSeed(issuerSeed);
  const receiver = Wallet.fromSeed(receiverSeed);

  // enable ripling
  await enableRippling({ wallet: issuer, client });

  // create Token
  await createToken({
    issuer,
    receiver,
    client,
    tokenCode: convertStringToHexPadded("LUC"),
  });

  // create AMM
  await createAMM({
    issuer,
    receiver,
    client,
    tokenCode: convertStringToHexPadded("LUC"),
  });

  await client.disconnect();

  console.log("all done!");
};

Don't forget to import enableRippling, createToken, createAMM and convertStringToHexPadded if needed.

You will need to set up Xaman with the receiver account you created above. You can use the family seed import route. If you are new to Xaman don't forget to enable developer mode in the advanced settings and then switch to testnet from the home page of the Xaman app.

Interact with your pool (swap)

Using the training app, connect and add your public address to the list. When you click "view tokens" next to an address you can see that account's available tokens.

You can create Trustlines for tokens you have not interacted with yet. You can swap XRP for other tokens where you have trustlines using the pool view's swap feature.

You may need to mint more XRP for your receiver account. That's where the print money function might come in handy.

Extra credits

Become a liquidity provider for other pools

Withdraw from pools

PreviousIssuing TokensNextCyphered Chat on XRPL

Last updated 10 months ago

You can now go to the training website at (password is training-april-2024) and interact with other pools.

ou can become a Liquidity Provider for other pools by using the AMMDeposit function: ()

You can also withdraw from pools using your LP tokens by utilizing the AMMWithdraw transaction. ()

https://trainings.xrpl.at/
https://xrpl.org/docs/references/protocol/transactions/types/ammdeposit/
https://xrpl.org/docs/references/protocol/transactions/types/ammwithdraw/