Swap

Swap one asset (ASA or Algo) for another with the Pool.

Transaction Group

0. Pay - pay fees in Algo from Swapper to Pool

  • fees to cover Tx 1,2

  • Signed by Swapper

{
  "txn": {
    "type": "pay",
    "rcv": "{POOL_ADDRESS}",
    "snd": "{SWAPPER_ADDRESS",
    "amt": 2000,
    "fee": 1000,
    ...
  },
  "sig": "{SWAPPER_SIG}",
}
  1. App Call - NoOp call to Validator App with args ['swap', (fixed-input) or 'fo' (fixed-output)], with Swapper account

    • Signed by Pool LogicSig

    • Argument 1 'fi' specifies that the input (sell) is fixed but the output may vary with slippage

    • Argument 1 'fo' specifies that the output (buy) is fixed but the input may vary with slippage

2. (a) AssetTransfer - Transfer of sell asset from Swapper to Pool

  • If sell asset is an ASA

  • Signed by Swapper

2. (b) Pay - Transfer of Algo from Swapper to Pool

  • If sell asset is Algo

  • Signed by Swapper

3. (a) AssetTransfer - Transfer of buy asset from Pool to Swapper

  • If buy asset is an ASA

  • Signed by Pool LogicSig

3. (b) Pay - Transfer of buy asset from Pool to Swapper

  • If buy asset is Algo

  • Signed by Pool LogicSig

Validator App State Changes

Global State

None

Pool Account Local State

  • o{ASSET1_ID}: {int} // total outstanding unredeemed asset 1 amount

  • o{ASSET2_ID}: {int} // total outstanding unredeemed asset 2 amount

  • p: {int} // total unclaimed protocol fees amount

Swapper Account Local State

  • {POOL_ADDRESS}e{ASSET1_ID}: {int} // excess asset 1 amount available for redemption

  • {POOL_ADDRESS}e{ASSET2_ID}: {int} // excess asset 2 amount available for redemption

Last updated

Was this helpful?