UNPKG

@firefly-exchange/library-sui

Version:

Sui library housing helper methods, classes to interact with Bluefin protocol(s) deployed on Sui

111 lines (110 loc) 4.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Faucet = void 0; const DeploymentConfig_1 = require("../DeploymentConfig"); const constants_1 = require("../constants"); const library_1 = require("../library"); const Transaction_1 = require("./Transaction"); const types_1 = require("../types"); class Faucet { /** * Requests SUI token from faucet running on Sui Node * @param address address of the account that will get the SUI tokens * @param faucetURL (optional) url of sui faucet, by default reads from deployment config * @returns false if not successful else response from faucet */ static async requestSUI(address, faucetURL) { const url = faucetURL || DeploymentConfig_1.network.faucet; try { const data = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ FixedAmountRequest: { recipient: address } }) }); return data; } catch (e) { console.log("Error while requesting gas", e.message); } return false; } /** * Requests SUI coins from faucet account * @param address Account to be funded * @param faucet Account having enough SUI tokens to fund the reciever * @param SuiClient client to execute transaction * @param amount amount to be funded (must be in normal decimals) default is 1 */ static async requestSUIFromAccount(address, faucet, suiClient, amount = 1) { const txb = new types_1.TransactionBlock(); const [coin] = txb.splitCoins(txb.gas, [txb.pure.u64((0, library_1.toBigNumberStr)(amount, 9))]); txb.transferObjects([coin], txb.pure.address(address)); txb.setSenderIfNotSet(faucet.toSuiAddress()); const builtTxb = await txb.build({ client: suiClient }); const signature = await faucet.signTransaction(builtTxb); return suiClient.executeTransactionBlock({ transactionBlock: builtTxb, signature: signature.signature }); } /** * Requests USDC tokens from faucet * @param address address of the USDC receiver * @param onChain onChainCalls class instance. The signer must own the treasury cap * @param amount The amount of USDC requested (must be in base form) * @returns {status, error} of transaction */ static async requestUSDC(address, onChain, amount) { const tx = await onChain.mintUSDC({ amount: (0, library_1.toBigNumberStr)(amount || 10000, constants_1.USDC_BASE_DECIMALS), to: address, gasBudget: 500000 }); const status = Transaction_1.Transaction.getStatus(tx); const error = Transaction_1.Transaction.getError(tx); return { status, error }; } /** * Requests margin in margin bank of the provided address * @param address address of the margin receiver * @param onChain onChainCalls class instance. The signer must own the treasury cap * @param amount The amount of margin requested (must be in base form) * @returns */ static async requestMargin(address, onChain, amount) { const amt = Number(amount) || 10000; const ownerAddress = await onChain.signer.toSuiAddress(); let coin = undefined; // TODO figure out why `onChain.getUSDCCoins` calls returns no coin // until then use while while (coin == undefined) { // get USDC balance of owner const ownerBalance = await onChain.getUSDCBalance(); // mint coins for owner if (amt > ownerBalance) { await onChain.mintUSDC({ amount: (0, library_1.toBigNumberStr)(1000000000, constants_1.USDC_BASE_DECIMALS) }); } coin = await onChain.getUSDCoinHavingBalance({ amount: amt }); } // transferring from owners usdc coin to receiver const tx = (await onChain.depositToBank({ coinID: coin.coinObjectId, amount: (0, library_1.toBigNumberStr)(amt, constants_1.USDC_BASE_DECIMALS), accountAddress: address })); const status = Transaction_1.Transaction.getStatus(tx); const error = Transaction_1.Transaction.getError(tx); return { status, error }; } } exports.Faucet = Faucet;