Automated Market Maker (AMM) functionality is part of the proposed XLS-30d extension to the XRP Ledger protocol. You can use these functions on AMM test networks, but there isn't an official amendment and they aren't available on the production Mainnet. Until there is an amendment, the details documented on these pages are subject to change.

Create a new Automated Market Maker (AMM) instance for trading a pair of assets (fungible tokens or XRP).

Creates both an AMM object and a special AccountRoot object to represent the AMM. Also transfers ownership of the starting balance of both assets from the sender to the created AccountRoot and issues an initial balance of liquidity provider tokens (LP Tokens) from the AMM account to the sender.

Caution: When you create the AMM, you should fund it with (approximately) equal-value amounts of each asset. Otherwise, other users can profit at your expense by trading with this AMM (performing arbitrage ). The currency risk that liquidity providers take on increases with the volatility (potential for imbalance) of the asset pair. The higher the trading fee, the more it offsets this risk, so it's best to set the trading fee based on the volatility of the asset pair.

Example AMMCreate JSON

    "Account" : "rJVUeRqDFNs2xqA7ncVE6ZoAhPUoaJJSQm",
    "Amount" : {
        "currency" : "TST",
        "issuer" : "rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd",
        "value" : "25"
    "Amount2" : "250000000",
    "Fee" : "10",
    "Flags" : 2147483648,
    "Sequence" : 6,
    "TradingFee" : 500,
    "TransactionType" : "AMMCreate"

AMMCreate Fields

In addition to the common fields, AMMCreate transactions use the following fields:

Field JSON Type Internal Type Required? Description
Amount Currency Amount Amount Yes The first of the two assets to fund this AMM with. This must be a positive amount.
Amount2 Currency Amount Amount Yes The second of the two assets to fund this AMM with. This must be a positive amount.
TradingFee Number UInt16 Yes The fee to charge for trades against this AMM instance, in units of 1/100,000; a value of 1 is equivalent to 0.001%. The maximum value is 1000, indicating a 1% fee. The minimum value is 0.

One or both of Amount and Amount2 can be tokens; at most one of them can be XRP. They cannot both have the same currency code and issuer. An AMM's LP tokens can be used as one of the assets for another AMM.

Error Cases

Besides errors that can occur for all transactions, AMMCreate transactions can result in the following transaction result codes:

Error Code Description
temDISABLED The AMM feature is not enabled on this network.
temINVALID_FLAG The transaction specified an invalid Flags value. Since there are currently no flags defined for this transaction type, only Global Flags are allowed.
temBAD_AMM_TOKENS The values of Amount and Amount2 are not valid: for example, both refer to the same token.
temBAD_FEE The TradingFee value is invalid. It must be zero or a positive integer and cannot be over 1000.
terNO_ACCOUNT One of the accounts referenced in the request does not exist.
tecNO_AUTH The sender is not authorized to hold one of the deposit assets (Amount or Amount2).
tecNO_LINE The sender does not have a trust line for one of the deposit assets (Amount or Amount2).
tecFROZEN At least one of the deposit assets (Amount or Amount2) is currently frozen.
tecUNFUNDED_AMM The sender does not hold enough money to fund the AMM with the amounts specified in Amount and Amount2.
tecAMM_EXISTS There is already another AMM trading this currency pair.