0.2.0 • Published 7 months ago

aoffp v0.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

aoffp

简体中文 | English

Installation

npm install aoffp
# or
yarn add aoffp

Using Basic Agent Model

Get Settle Process ID

import { getSettleProcessId } from 'aoffp'
const settleProcessId = getSettleProcessId()
console.log('settleProcessId', settleProcessId)

Create Basic Agent Process

If you haven't created a basic agent process, you need to create one.

import { createBasicProcess } from 'aoffp'
import { createDataItemSigner } from '@permaweb/aoconnect'

const signer = createDataItemSigner(arJWK)
const settleProcessId = getSettleProcessId()
const agent = await createBasicProcess(signer)
const agentProcessId = agent.agentId
console.log('agentProcessId', agentProcessId)

Create Basic Agent Instance

import { Basic } from 'aoffp'
import { createDataItemSigner } from '@permaweb/aoconnect'

const signer = createDataItemSigner(arJWK)
const agentProcessId = 'your-agent-process-id'
const settleProcessId = getSettleProcessId()
const agent = new Basic(signer, agentProcessId, settleProcessId)

Deposit to Basic Agent Process

const depositMessageId = await agent.deposit(tokenProcessId, quantity)
console.log('depositMessageId', depositMessageId)

Withdraw from Basic Agent Process

const withdrawMessageId = await agent.withdraw(tokenProcessId, quantity)
console.log('withdrawMessageId', withdrawMessageId)

Get All Orders (Including Orders from Others)

  • tokenInProcessId: Process ID of the token to sell
  • tokenOutProcessId: Process ID of the token to buy
  • status: Order status, can be 'Open' | 'Settled' | 'Canceled', where 'Open' represents unfilled orders, 'Settled' represents filled orders, and 'Canceled' represents canceled orders
  • desc: Sort by order price in descending order, default is false
  • page: Page number, default is 1
  • pageSize: Number of items per page, default is 10
const allOrders = await orderbook.getOrders(tokenIn: string, tokenOut: string, status: 'Open' | 'Settled' | 'Canceled', desc: boolean, page: number = 1, pageSize: number = 10)
console.log('allOrders', allOrders)

/**
[
  {
    ID: 1,
    HolderAssetID: '4557tfvtAlS8WS0-KF0sGdfgy6An2dcVXQUGocrKV7U',
    HolderAmount: '3',
    NoteID: '2vlZ2ys40YTLbHC6z7dDt5O_ggv4Bn_gxQlzkq37zxA',
    Issuer: 'TwgBoDbHTBpkrruRxUTom4VFC5QhaiBwN9hlsUzHd3Q',
    Type: 'Orderbook',
    AssetID: '-v4cUCUcRiJH67jPMUt-Uhn-K4PHxrkoySM2uqAjAF0',
    IssueDate: 1726298572659,
    Status: 'Open',
    Amount: '1'
  },
  {
    ID: 2,
    HolderAssetID: '4557tfvtAlS8WS0-KF0sGdfgy6An2dcVXQUGocrKV7U',
    HolderAmount: '3',
    NoteID: 'Z-OBeKQX6CEvTcb013fJhU2H8Kxildc-p3OKXRvziBA',
    Issuer: 'TwgBoDbHTBpkrruRxUTom4VFC5QhaiBwN9hlsUzHd3Q',
    Type: 'Orderbook',
    AssetID: '-v4cUCUcRiJH67jPMUt-Uhn-K4PHxrkoySM2uqAjAF0',
    IssueDate: 1727248424967,
    Status: 'Open',
    Amount: '1'
  }
]
 */

Get My Orders in Basic Agent

  • tokenInProcessId: Process ID of the token to sell
  • tokenOutProcessId: Process ID of the token to buy
  • status: Order status, can be 'Open' | 'Settled' | 'Canceled', also accepts comma-separated values like 'Open,Settled', 'Open,Settled,Canceled', where 'Open' represents unfilled orders, 'Settled' represents filled orders, and 'Canceled' represents canceled orders
  • desc: Sort by IssueDate in descending order, default is false
  • page: Page number, default is 1
  • pageSize: Number of items per page, default is 10
const myOrders = await agent.getMyOrders(tokenInProcessId: string, tokenOutProcessId: string, status: 'Open' | 'Settled' | 'Canceled', desc: boolean, page: number = 1, pageSize: number = 10)
console.log('myOrders', myOrders)

/**
[
  {
    ID: 1,
    HolderAssetID: '4557tfvtAlS8WS0-KF0sGdfgy6An2dcVXQUGocrKV7U',
    HolderAmount: '3',
    NoteID: '2vlZ2ys40YTLbHC6z7dDt5O_ggv4Bn_gxQlzkq37zxA',
    Issuer: 'TwgBoDbHTBpkrruRxUTom4VFC5QhaiBwN9hlsUzHd3Q',
    Type: 'Orderbook',
    AssetID: '-v4cUCUcRiJH67jPMUt-Uhn-K4PHxrkoySM2uqAjAF0',
    IssueDate: 1726298572659,
    Status: 'Open',
    Amount: '1'
  },
  {
    ID: 2,
    HolderAssetID: '4557tfvtAlS8WS0-KF0sGdfgy6An2dcVXQUGocrKV7U',
    HolderAmount: '3',
    NoteID: 'Z-OBeKQX6CEvTcb013fJhU2H8Kxildc-p3OKXRvziBA',
    Issuer: 'TwgBoDbHTBpkrruRxUTom4VFC5QhaiBwN9hlsUzHd3Q',
    Type: 'Orderbook',
    AssetID: '-v4cUCUcRiJH67jPMUt-Uhn-K4PHxrkoySM2uqAjAF0',
    IssueDate: 1727248424967,
    Status: 'Open',
    Amount: '1'
  }
]
 */

Get Order Details

const order = await agent.getOrder(noteId)
console.log('order', order)

Take Order

const takeOrderMessageId = await agent.takeOrder([noteId1, noteId2, ...])
console.log('takeOrderMessageId', takeOrderMessageId)

Get Take Order Result

const takeOrderResult = await getProcessResult(takeOrderMessageId, agentProcessId)
console.log('takeOrderResult', JSON.stringify(takeOrderResult, null, 2))

Using Orderbook Model

Get Settle Process ID

import { getSettleProcessId } from 'aoffp'

const settleProcessId = getSettleProcessId()
console.log('settleProcessId', settleProcessId)

Create Orderbook Process

If you haven't created an orderbook process, you need to create one.

import { createOrderbookProcess } from 'aoffp'
import { createDataItemSigner } from '@permaweb/aoconnect'

const address = 'your-arweave-address'
const signer = createDataItemSigner(arJWK)
const settleProcessId = getSettleProcessId()
const orderbookAgent = await createOrderbookProcess(signer)
const orderbookProcessId = orderbookAgent.agentId
console.log('orderbookProcessId', orderbookProcessId)

Create Orderbook Instance

import { Orderbook } from 'aoffp'
import { createDataItemSigner } from '@permaweb/aoconnect'

const signer = createDataItemSigner(arJWK)
const orderbookProcessId = 'your-orderbook-process-id'
const settleProcessId = getSettleProcessId()
const orderbook = new Orderbook(signer, orderbookProcessId, settleProcessId)

Deposit to Orderbook Process

const depositMessageId = await orderbook.deposit(tokenProcessId, quantity)
console.log('depositMessageId', depositMessageId)

Withdraw from Orderbook Process

const withdrawMessageId = await orderbook.withdraw(tokenProcessId, quantity)
console.log('withdrawMessageId', withdrawMessageId)

Make Order

const order = await orderbook.makeOrder(tokenInProcessId, tokenOutProcessId, quantityIn, quantityOut)
console.log('order', order)

Get All Orders (Including Orders from Others)

  • tokenInProcessId: Process ID of the token to sell
  • tokenOutProcessId: Process ID of the token to buy
  • status: Order status, can be 'Open' | 'Settled' | 'Canceled', where 'Open' represents unfilled orders, 'Settled' represents filled orders, and 'Canceled' represents canceled orders
  • desc: Sort by order price in descending order, default is false
  • page: Page number, default is 1
  • pageSize: Number of items per page, default is 10
const allOrders = await orderbook.getOrders(tokenIn: string, tokenOut: string, status: 'Open' | 'Settled' | 'Canceled', desc: boolean, page: number = 1, pageSize: number = 10)
console.log('allOrders', allOrders)

/**
[
  {
    ID: 1,
    HolderAssetID: '4557tfvtAlS8WS0-KF0sGdfgy6An2dcVXQUGocrKV7U',
    HolderAmount: '3',
    NoteID: '2vlZ2ys40YTLbHC6z7dDt5O_ggv4Bn_gxQlzkq37zxA',
    Issuer: 'TwgBoDbHTBpkrruRxUTom4VFC5QhaiBwN9hlsUzHd3Q',
    Type: 'Orderbook',
    AssetID: '-v4cUCUcRiJH67jPMUt-Uhn-K4PHxrkoySM2uqAjAF0',
    IssueDate: 1726298572659,
    Status: 'Open',
    Amount: '1'
  },
  {
    ID: 2,
    HolderAssetID: '4557tfvtAlS8WS0-KF0sGdfgy6An2dcVXQUGocrKV7U',
    HolderAmount: '3',
    NoteID: 'Z-OBeKQX6CEvTcb013fJhU2H8Kxildc-p3OKXRvziBA',
    Issuer: 'TwgBoDbHTBpkrruRxUTom4VFC5QhaiBwN9hlsUzHd3Q',
    Type: 'Orderbook',
    AssetID: '-v4cUCUcRiJH67jPMUt-Uhn-K4PHxrkoySM2uqAjAF0',
    IssueDate: 1727248424967,
    Status: 'Open',
    Amount: '1'
  }
]
 */

Get My Orders in Orderbook

  • tokenInProcessId: Process ID of the token to sell
  • tokenOutProcessId: Process ID of the token to buy
  • status: Order status, can be 'Open' | 'Settled' | 'Canceled', also accepts comma-separated values like 'Open,Settled', 'Open,Settled,Canceled', where 'Open' represents unfilled orders, 'Settled' represents filled orders, and 'Canceled' represents canceled orders
  • desc: Sort by IssueDate in descending order, default is false
  • page: Page number, default is 1
  • pageSize: Number of items per page, default is 10
const myOrders = await orderbook.getMyOrders(tokenInProcessId: string, tokenOutProcessId: string, status: 'Open' | 'Settled' | 'Canceled', desc: boolean, page: number = 1, pageSize: number = 10)
console.log('myOrders', myOrders)

/**
[
  {
    ID: 1,
    HolderAssetID: '4557tfvtAlS8WS0-KF0sGdfgy6An2dcVXQUGocrKV7U',
    HolderAmount: '3',
    NoteID: '2vlZ2ys40YTLbHC6z7dDt5O_ggv4Bn_gxQlzkq37zxA',
    Issuer: 'TwgBoDbHTBpkrruRxUTom4VFC5QhaiBwN9hlsUzHd3Q',
    Type: 'Orderbook',
    AssetID: '-v4cUCUcRiJH67jPMUt-Uhn-K4PHxrkoySM2uqAjAF0',
    IssueDate: 1726298572659,
    Status: 'Open',
    Amount: '1'
  },
  {
    ID: 2,
    HolderAssetID: '4557tfvtAlS8WS0-KF0sGdfgy6An2dcVXQUGocrKV7U',
    HolderAmount: '3',
    NoteID: 'Z-OBeKQX6CEvTcb013fJhU2H8Kxildc-p3OKXRvziBA',
    Issuer: 'TwgBoDbHTBpkrruRxUTom4VFC5QhaiBwN9hlsUzHd3Q',
    Type: 'Orderbook',
    AssetID: '-v4cUCUcRiJH67jPMUt-Uhn-K4PHxrkoySM2uqAjAF0',
    IssueDate: 1727248424967,
    Status: 'Open',
    Amount: '1'
  }
]
 */

Get Order Details

const order = await orderbook.getOrder(noteId)
console.log('order', order)

Cancel Order

const cancelOrderMessageId = await orderbook.cancelOrder(noteId)
console.log('cancelOrderMessageId', cancelOrderMessageId)

Get Cancel Order Result

const cancelOrderResult = await getProcessResult(cancelOrderMessageId, orderbookProcessId)
console.log('cancelOrderResult', JSON.stringify(cancelOrderResult, null, 2))

Take Order

const takeOrderMessageId = await orderbook.takeOrder([noteId1, noteId2, ...])
console.log('takeOrderMessageId', takeOrderMessageId)

Get Take Order Result

const takeOrderResult = await getProcessResult(takeOrderMessageId, orderbookProcessId)
console.log('takeOrderResult', JSON.stringify(takeOrderResult, null, 2))

Using AMM Model

Create AMM Process

import { createAmmProcess } from 'aoffp'
import { createDataItemSigner } from '@permaweb/aoconnect'

const signer = createDataItemSigner(arJWK)
const ammAgent = await createAmmProcess(signer)
const ammProcessId = ammAgent.agentId
console.log('ammProcessId', ammProcessId)

Create AMM Instance

import { Amm } from 'aoffp'
import { createDataItemSigner } from '@permaweb/aoconnect'

const signer = createDataItemSigner(arJWK)
const orderbookProcessId = 'your-amm-process-id'
const amm = new Amm(signer, ammProcess)

Deposit to AMM Process

const depositMessageId = await amm.deposit(tokenProcessId, quantity)
console.log('depositMessageId', depositMessageId)

Withdraw from AMM Process

const withdrawMessageId = await amm.withdraw(tokenProcessId, quantity)
console.log('withdrawMessageId', withdrawMessageId)

Create Pool

Currently supports creating two types of pools: Uniswap v2 model and BigOrder model

Create Uniswap v2 Pool

await ammAgent.addUniswapV2Pool(xTokenProcess, yTokenProcess, px, py, feeOfTenThousandths)
const pools = await ammAgent.getPools()
console.log('pools', pools)

Create BigOrder Pool

await ammAgent.addBigOrderPool(tokenInProcess, amountIn, tokenOutProcess, amountOut)
const pools = await ammAgent.getPools()
console.log('pools', pools)

Update Pool Curve

Currently only supports Uniswap v2 Pool curve updates

Update Uniswap v2 Pool Curve

await ammAgent.updateUniswapV2PoolLiquidity(xTokenProcess, yTokenProcess, newPY, newPY)
const pools = await ammAgent.getPools()
console.log('pools', pools)

Get AMM Pools Information

const pools = await amm.getPools()
console.log('pools', pools)

/*
{
  '0fLIp-xxRnQ8Nk-ruq8SBY8icaIvZMujnqCGU79fnM0:AttsQGi4xgSOTeHM6CNgEVxlrdZi4Y86LQCF__p4HUM': {
    py: '14',
    algo: 'UniswapV2',
    fee: '30',
    px: '8',
    y: 'AttsQGi4xgSOTeHM6CNgEVxlrdZi4Y86LQCF__p4HUM',
    balances: {
      '0fLIp-xxRnQ8Nk-ruq8SBY8icaIvZMujnqCGU79fnM0': '8',
      AttsQGi4xgSOTeHM6CNgEVxlrdZi4Y86LQCF__p4HUM: '14'
    },
    x: '0fLIp-xxRnQ8Nk-ruq8SBY8icaIvZMujnqCGU79fnM0'
  },
  'AttsQGi4xgSOTeHM6CNgEVxlrdZi4Y86LQCF__p4HUM:J0B80MpR_koLQpdqOKA5VcaPayqQPSR5ERzdtBVnkP4': {
    amountOut: '10',
    algo: 'BigOrder',
    tokenIn: 'J0B80MpR_koLQpdqOKA5VcaPayqQPSR5ERzdtBVnkP4',
    amountIn: '10',
    y: 'J0B80MpR_koLQpdqOKA5VcaPayqQPSR5ERzdtBVnkP4',
    tokenOut: 'AttsQGi4xgSOTeHM6CNgEVxlrdZi4Y86LQCF__p4HUM',
    balances: {
      AttsQGi4xgSOTeHM6CNgEVxlrdZi4Y86LQCF__p4HUM: '8',
      J0B80MpR_koLQpdqOKA5VcaPayqQPSR5ERzdtBVnkP4: '2'
    },
    x: 'AttsQGi4xgSOTeHM6CNgEVxlrdZi4Y86LQCF__p4HUM'
  }
}
*/

Get AMM Order

const order = await ammRequest(signer, ammAgentId, tokenInProcess, tokenInAmount, tokenOut: string, amountOut?: string)

await new Promise((resolve) => {
  setTimeout(resolve, 5000)
})
console.log('order', JSON.stringify(order, null, 2))

/*
{
  ID: 2567,
  AssetID: 'AttsQGi4xgSOTeHM6CNgEVxlrdZi4Y86LQCF__p4HUM',
  MakeTx: 'wFVSJurGy3nObNeiFTHKciJruKGWMPEoW5q34OFzx-M',
  ExpireDate: 1733224050340,
  HolderAssetID: 'J0B80MpR_koLQpdqOKA5VcaPayqQPSR5ERzdtBVnkP4',
  NoteID: 'R05uXunK2XUMVIUz_DsBghbEqm7FOhqxiXFFmuwKJGg',
  IssueDate: 1733223960340,
  HolderAmount: '2',
  Amount: '2',
  Status: 'Open',
  Price: 1,
  Issuer: 'iksN-6mCCaG1nrAert49rfiA0ZBgtPKVE7YLTfhTzvE'
}
*/

Take AMM Order with Basic Agent

const takeOrderMessageId = await agent.takeOrder([order.NoteID])
console.log('takeOrderMessageId', takeOrderMessageId)

Arbitrage Between Orderbook and AMM

const takeOrderMessageId = await agent.takeOrder([orderbookOrder.NoteID, ammArbitrageOrder.NoteID])
console.log('takeOrderMessageId', takeOrderMessageId)

Demo

demo

0.2.0

7 months ago

0.0.16

8 months ago

0.0.14

8 months ago

0.0.15

8 months ago

0.0.10

8 months ago

0.0.11

8 months ago

0.0.12

8 months ago

0.0.13

8 months ago

0.0.9

8 months ago

0.0.8

8 months ago

0.0.7

9 months ago

0.0.3

9 months ago

0.0.5

9 months ago

0.0.4

9 months ago

0.0.6

9 months ago

0.0.2

10 months ago

0.0.1

10 months ago