**Purpose: All price calculation formulas. Used to calculate the total amount of ETH required when creating a pool, the price and total price of each NFT when buying/selling NFTs.**

##### Installation

https://www.npmjs.com/package/ezswap_math

```
npm install ezswap_math
```

##### Import

```
import { mathLib } from 'ezswap_math'
```

##### Method call

```
mathLib[bondingCurve][action]
-- bondingCurve: Function type, can be Exponential or Linear
-- action: Pool type: can be buy, sell or trade (both buy and sell)
```

Parameter | Description | Required | Example |
---|---|---|---|

bondingCurve | linear: linear; exponential: exponential | true | linear |

type | buy: buy pool; sell: sell pool; trade: both buy and sell pool | true | trade |

startprice | When creating a pool: the price entered by the user on the page; When calculating the NFT price for buying and selling: the spotPrice returned by the interface. Unit: ETH, the unit returned by the interface is wei, which needs to be divided by 1e18, and the same as follows | true | 8.95024875621890700 |

delta | The price change of NFT after each buy/sell, unit: ETH | true | 0.1 |

tfee | Trade pool can charge handling fee, the other two types cannot, unit: wei | true | 0.1 |

pfee | The protocol fee charged by ezswap, unit: ETH | true | 0.1 |

gfee | Protocol fee charged by the project manager, unit: ETH | true | 0.1 |

n | Query the price of n-th NFT, the initial value is: 1 | true | 1 |

action | read: get NFT price; create: create a pool | true | read |

### Get the latest price of NFT

```
import { utils } from 'ethers';
const priceItem = mathLib?.[bondingCurve]?.[type](
Number(utils.formatEther(spotPrice)),
Number(utils.formatEther(delta)),
Number(utils.formatEther(tfee)),
Number(utils.formatEther(pfee)),
Number(utils.formatEther(gfee)),
n,
action
);
```

##### Return parameters

Note: When using the following parameters, please pay attention to the subject + action, otherwise it will be easily confused.

Parameter | Description |
---|---|

priceData | The total amount of ETH required for the transaction |

priceData.userSellPrice / priceData.userBuyPrice | The total price of NFT sold by the user / the total price of NFT bought by the user |

priceData.poolBuyPrice / priceData.poolSellPrice | The total price of NFT purchased by the pool / the total price of NFT sold by the pool |

priceData.poolBuyPriceFee / priceData.poolSellPriceFee | The total tax fee of NFT purchased by the pool / the total tax fee of NFT sold by the pool |

priceData.userSellPriceFee / priceData.userBuyPriceFee | The total tax fee of NFT sold by the user / the total tax fee of NFT purchased by the user |

priceData.delta | The price of NFT rise or fall after each buy/sell |

priceData.spotPrice | The starting price that is not deducted by taxes and fees |

currentPrice | The price summary of the N-th NFT |

currentPrice.userSellPrice | The price for the user to sell the N-th NFT |

currentPrice.userBuyPrice | The price for the user to buy the N-th NFT |

nextPrice | The price summary of the N+1-th NFT |

nextPrice.userSellPrice | The price for the user to sell the N+1-th NFT |

nextPrice.userBuyPrice | The price for the user to buy the N+1-th NFT |

For more details, please refer to Math library.