0.2.0 • Published 8 months ago
aoffp v0.2.0
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 isfalse
- 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 isfalse
- 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
0.2.0
8 months ago
0.0.16
9 months ago
0.0.14
9 months ago
0.0.15
9 months ago
0.0.10
10 months ago
0.0.11
10 months ago
0.0.12
10 months ago
0.0.13
10 months ago
0.0.9
10 months ago
0.0.8
10 months ago
0.0.7
10 months ago
0.0.3
10 months ago
0.0.5
10 months ago
0.0.4
10 months ago
0.0.6
10 months ago
0.0.2
11 months ago
0.0.1
11 months ago