Rescript and Javascript library for Float
This library is used to interact with the Float smart contracts, which can also be accessed via the DApp: https://float.capital
Can view the contract addresses and other config here: https://github.com/Float-Capital/config Can read the docs here: https://docs.float.capital/
Getting started
All numeric parameters and return values are in BigNumber form (18 decimals) except for these params:
- marketIndex
- txOptions
Rescript
To install run yarn add @float-packages/rescript-client or npm install @float-packages/rescript-client and then add the following to your bsconfig.json:
"bs-dependencies": [
"@float-packages/rescript-client",
"@float-packages/config"
],
Here are some examples of how to use the library:
// readonly chain initialization let chain = Float.Chain.WithProvider.makeDefault(chainId) // or let chain = provider->Float.Chain.WithProvider.make let marketIndex = 1 // readonly market initialization let market = provider->Float.Market.WithProvider.make(marketIndex) // or let market = chain->Float.Market.makeUsingChain(marketIndex) // readonly function call market ->Float.Market.fundingRateMultiplier ->Promise.thenResolve(multiplier => j`Funding rate multiplier for market $marketIndex:` ->Js.log2(multiplier) ) ->ignore let isLong = true // writable market side initialization let side = wallet->Float.MarketSide.WithWallet.make(marketIndex, isLong) // this is manual for now let txOptions: Float.txOptions = { maxFeePerGas: 62, // gwei maxPriorityFeePerGas: 34, // gwei gasLimit: 1_000_000, // units } // write function call side ->Float.MarketSide.mint(1->convertToBigNumber, txOptions) ->Promise.thenResolve(tx => tx.hash->Js.log) ->ignore
Javascript
Since the JS is generated from the rescript it is not as idiomatic as one would like. This will be improved on in subsequent versions but for now this is how it works:
// initialization var Market = require("@float-packages/rescript-client/src/Float__Market.js"); var marketIndex = 1 var market = Market.WithProvider.make(provider, marketIndex); // read only function call Market.fundingRateMultiplier(market).then(function (multiplier) { console.log("Funding rate multiplier for market " + marketIndex + ":", multiplier); }); // write function call var Chain = require("@float-packages/rescript-client/src/Float__Chain.js"); Chain.WithWallet.make(wallet); var market = Market.WithWallet.makeUnwrapped(wallet, marketIndex); Market.settleOutstandingActions(market, undefined, txOptions).then(function (tx) { console.log(tx.hash); });
Full list of APIs
Float.Chain.contracts // read Float.Chain.updateSystemStateMulti // write // read Float.Market.contracts Float.Market.unsettledPositions Float.Market.stakedPositions Float.Market.positions Float.Market.fundingRateAprs Float.Market.unconfirmedExposures Float.Market.exposures Float.Market.leverage Float.Market.fundingRateMultiplier Float.Market.syntheticTokenPrices // write Float.Market.updateSystemState Float.Market.settleOutstandingActions Float.Market.claimFloatCustom // read Float.MarketSide.syntheticToken Float.MarketSide.name Float.MarketSide.poolValue Float.MarketSide.syntheticTokenPrice Float.MarketSide.exposure Float.MarketSide.unconfirmedExposure Float.MarketSide.fundingRateApr Float.MarketSide.positions Float.MarketSide.stakedPositions Float.MarketSide.unsettledPositions // write Float.MarketSide.mint Float.MarketSide.mintAndStake Float.MarketSide.stake Float.MarketSide.unstake Float.MarketSide.redeem Float.MarketSide.shift Float.MarketSide.shiftStake