UNPKG

@crestfi/crest-bnb-sdk

Version:

1. [StreamClient](#crestfistreamclient) 1. [Installation](#installation) 2. [Environment Setup](#environment-setup) 3. [Run tests](#run-tests) 4. [Contracts](#contracts) 5. [Usage](#usage) 1. [Getting Signer Address](#getting-si

458 lines 20.5 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CrestFiMultisigStream = void 0; const ethers_1 = require("ethers"); const contract_1 = require("../contract"); const utils_1 = require("../utils"); class CrestFiMultisigStream { constructor(signerOrProvider, contractAddress = utils_1.CORE_CONTRACT_ADDRESS) { this._contract = contract_1.Core__factory.connect(contractAddress, signerOrProvider); this.iCore = new ethers_1.ethers.utils.Interface(this._contract.interface.fragments); } /** * Deposit token to the contract * @param token token address * @param amount amount of token to deposit * @returns transaction receipt * @throws error if transaction fails */ depositToken(safeAddress, tokenAddress, amount) { return __awaiter(this, void 0, void 0, function* () { let parsedAmount = ethers_1.ethers.constants.Zero; let ApproveTokenData = ""; if (tokenAddress === ethers_1.ethers.constants.AddressZero) { parsedAmount = ethers_1.ethers.utils.parseEther(amount); } else { const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); const address = this._contract.address; ApproveTokenData = yield (0, utils_1.getApproveTokenData)(address, token, parsedAmount); } const depositTokenData = this.iCore.encodeFunctionData("depositTokens", [ safeAddress, parsedAmount, tokenAddress, ]); return [ApproveTokenData, depositTokenData]; }); } /** * Deposit token to the contract * @param token token address * @param amount amount of token to deposit * @returns transaction receipt * @throws error if transaction fails */ depositToSafe(tokenAddress, amount, safeAddress, overrides) { return __awaiter(this, void 0, void 0, function* () { let parsedAmount = ethers_1.ethers.constants.Zero; const _overrides = yield (0, utils_1.getOverrides)(overrides); if (tokenAddress === ethers_1.ethers.constants.AddressZero) { parsedAmount = ethers_1.ethers.utils.parseEther(amount); const receipt = (yield this._contract.signer.sendTransaction({ to: safeAddress, value: parsedAmount, })).wait(); return receipt; } else { const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); const receipt = yield (yield token.transfer(safeAddress, parsedAmount, _overrides)).wait(); return receipt; } }); } /** * Deposit token to the contract * @param token token address * @param amount amount of token to deposit * @param reciever receiver of the token * @returns transaction data * @throws error if transaction fails */ withdrawFromSafe(tokenAddress, amount, reciever) { return __awaiter(this, void 0, void 0, function* () { let parsedAmount = ethers_1.ethers.constants.Zero; if (tokenAddress === ethers_1.ethers.constants.AddressZero) { const data = "0x"; return data; } else { const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); const transferData = token.interface.encodeFunctionData("transfer", [ reciever, parsedAmount, ]); return transferData; } }); } /** * Withdraw token from the contract * @param token token address * @param amount amount of token to withdraw * @returns transaction data * @throws error if transaction fails * */ withdrawToken(tokenAddress, amount) { return __awaiter(this, void 0, void 0, function* () { let parsedAmount = ethers_1.ethers.constants.Zero; if (tokenAddress === ethers_1.ethers.constants.AddressZero) { parsedAmount = ethers_1.ethers.utils.parseEther(amount); } else { const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); } const data = this.iCore.encodeFunctionData("withdrawTokens", [ parsedAmount, tokenAddress, ]); return data; }); } /** * Initiate a stream * @param streamName Transaction Name * @param amount amount of token to stream * @param token token address * @param streamReceiver receiver of the stream * @param streamStartTime start time of the stream * @param streamEndTime end time of the stream * @param streamCancelable whether the stream is cancelable * @param streamPausable whether the stream is pausable * @returns transaction data * @throws error if transaction fails **/ initStream(streamName, amount, tokenAddress, receiver, startTime, endTime, canCancel, canPause) { return __awaiter(this, void 0, void 0, function* () { let parsedAmount = ethers_1.ethers.constants.Zero; const streamNameBytes = ethers_1.utils.formatBytes32String(streamName); if (tokenAddress === ethers_1.ethers.constants.AddressZero) { parsedAmount = ethers_1.ethers.utils.parseEther(amount); } else { const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); } const data = this.iCore.encodeFunctionData("createStream", [ streamNameBytes, parsedAmount, tokenAddress, receiver, startTime, endTime, canCancel, canPause, ]); return data; }); } /** * Pause a stream * @param streamBytes id of the stream * @returns transaction data * @throws error if transaction fails **/ pauseStream(streamBytes) { return __awaiter(this, void 0, void 0, function* () { const data = this.iCore.encodeFunctionData("pauseStream", [streamBytes]); return data; }); } /** * Resume a stream * @param streamBytes id of the stream * @returns transaction data * @throws error if transaction fails * */ resumeStream(streamBytes) { return __awaiter(this, void 0, void 0, function* () { const data = this.iCore.encodeFunctionData("resumeStream", [streamBytes]); return data; }); } /** * Cancel a stream * @param streamBytes id of the stream * @returns transaction data * @throws error if transaction fails **/ cancelStream(streamBytes) { return __awaiter(this, void 0, void 0, function* () { const data = this.iCore.encodeFunctionData("cancelStream", [streamBytes]); return data; }); } /** * Update a stream * @param streamName Transaction Name * @param streamBytes id of the stream * @param startTime start time of the stream * @param endTime end time of the stream * @param amount amount of token to stream * @returns transaction data * @throws error if transaction fails **/ updateStream(streamName, streamBytes, tokenAddress, startTime, endTime, amount) { return __awaiter(this, void 0, void 0, function* () { let parsedAmount = ethers_1.ethers.constants.Zero; const streamNameBytes = ethers_1.utils.formatBytes32String(streamName); if (tokenAddress === ethers_1.ethers.constants.AddressZero) { parsedAmount = ethers_1.ethers.utils.parseEther(amount); } else { const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); } const data = this.iCore.encodeFunctionData("updateStream", [ streamBytes, streamNameBytes, startTime, endTime, parsedAmount, ]); return data; }); } /** * Withdraw from a stream * @param streamBytes id of the stream * @param crestfiWalletWithdrawal whether the withdrawal is to crestfi wallet or user wallet * @returns transaction data * @throws error if transaction fails * */ withdrawStream(streamBytes, tokenAddress, amount, crestfiWalletWithdrawal) { return __awaiter(this, void 0, void 0, function* () { let parsedAmount = ethers_1.ethers.constants.Zero; if (tokenAddress === ethers_1.ethers.constants.AddressZero) { parsedAmount = ethers_1.ethers.utils.parseEther(amount); } else { const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); } const data = this.iCore.encodeFunctionData("withdrawStream", [ streamBytes, parsedAmount, crestfiWalletWithdrawal, ]); return data; }); } /** * Instant token transfer * @param tokenAddress token address * @param amount amount of token to transfer * @param receiver receiver of the token * @param crestfiWalletWithdrawal whether the withdrawal is to crestfi wallet or user wallet * @returns transaction data * @throws error if transaction fails **/ instantTokenTransfer(instantName, tokenAddress, amount, receiver, crestfiWalletWithdrawal) { return __awaiter(this, void 0, void 0, function* () { let parsedAmount = ethers_1.ethers.constants.Zero; const instantNameBytes = ethers_1.utils.formatBytes32String(instantName); if (tokenAddress === ethers_1.ethers.constants.AddressZero) { parsedAmount = ethers_1.ethers.utils.parseEther(amount); } else { const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); } const data = this.iCore.encodeFunctionData("instantTokenTransfer", [ instantNameBytes, tokenAddress, parsedAmount, receiver, crestfiWalletWithdrawal, ]); return data; }); } /** * initialize stream with TNS * @param streamName Transaction Name * @param amount amount of token to stream * @param tokenAddress token address * @param streamReceiver receiver of the stream * @param streamStartTime start time of the stream * @param streamEndTime end time of the stream * @param streamCancelable whether the stream is cancelable * @param streamPausable whether the stream is pausable * @returns transaction data * @throws error if transaction fails */ initStreamTNS(streamName, amount, tokenAddress, receiver, startTime, endTime, canCancel, canPause) { return __awaiter(this, void 0, void 0, function* () { let parsedAmount = ethers_1.ethers.constants.Zero; const streamNameBytes = ethers_1.utils.formatBytes32String(streamName); if (tokenAddress === ethers_1.ethers.constants.AddressZero) { parsedAmount = ethers_1.ethers.utils.parseEther(amount); } else { const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); } const data = this.iCore.encodeFunctionData("createStreamTNS", [ streamNameBytes, parsedAmount, tokenAddress, receiver, startTime, endTime, canCancel, canPause, ]); return data; }); } /** * Instant token transfer with TNS * @param name Transaction Name * @param receiverId receiver id * @param tokenAddress token address * @param amount amount of token to transfer * @param crestfiWalletWithdraw whether the withdrawal is to crestfi wallet or user wallet * @returns transaction data * @throws error if transaction fails * */ instantTokenTransferTNS(name, receiverId, tokenAddress, amount, crestfiWalletWithdraw = false) { return __awaiter(this, void 0, void 0, function* () { const parsedName = ethers_1.ethers.utils.formatBytes32String(name); const token = contract_1.Token__factory.connect(tokenAddress, this._contract.signer); const decimals = yield (0, utils_1.getDecimals)(token); const parsedAmount = ethers_1.ethers.utils.parseUnits(amount, decimals); const data = this.iCore.encodeFunctionData("instantTokenTransferTNS", [ parsedName, tokenAddress, parsedAmount, receiverId, crestfiWalletWithdraw, ]); return data; }); } /** * Transfers multiple tokens to the receiver at the same time * Can be used by gnosis safes multicall function * @param tokenAddresses token addresses * @param amounts amount of tokens to transfer * @param receiver receiver of the token * @returns */ drainAccountFromSafe(tokenAddresses, amounts, receiver) { return __awaiter(this, void 0, void 0, function* () { let datas = []; for (let i = 0; i < tokenAddresses.length; i++) { const data = this.withdrawFromSafe(tokenAddresses[i], amounts[i], receiver); datas.push(data); } return datas; }); } /** * Transfers multiple tokens from crestfi wallet to the receiver at the same time * Can be used by gnosis safes multicall function * @param tokenAddresses token addresses * @param amounts amount of tokens to transfer * @param receiver receiver of the token * @returns */ drainAccountFromCrestFiWallet(tokenAddresses, amounts, receiver) { return __awaiter(this, void 0, void 0, function* () { let datas = []; for (let i = 0; i < tokenAddresses.length; i++) { const data = this.instantTokenTransfer("drainAccount", tokenAddresses[i], amounts[i], receiver, false); datas.push(data); } return datas; }); } depositERC721(tokenId, tokenAddress, safeAddress) { return __awaiter(this, void 0, void 0, function* () { const contract = new ethers_1.ethers.Contract(tokenAddress, contract_1.ERC721__factory.abi, this._contract.signer); const sender = yield this._contract.signer.getAddress(); const safeTransferFrom = yield contract.signer.sendTransaction({ to: tokenAddress, data: contract.interface.encodeFunctionData("safeTransferFrom(address, address, uint256)", [sender, safeAddress, tokenId]), gasLimit: utils_1.DEFAULT_GAS_LIMIT, }); return [safeTransferFrom]; }); } depositERC1155(tokenId, tokenAddress, safeAddress, amount) { return __awaiter(this, void 0, void 0, function* () { const contract = new ethers_1.ethers.Contract(tokenAddress, contract_1.ERC1155__factory.abi, this._contract.signer); const sender = yield this._contract.signer.getAddress(); const safeTransferFrom = yield contract.signer.sendTransaction({ to: tokenAddress, data: contract.interface.encodeFunctionData("safeTransferFrom(address, address, uint256, uint256, bytes)", [sender, safeAddress, tokenId, amount, "0x"]), gasLimit: utils_1.DEFAULT_GAS_LIMIT, }); return [safeTransferFrom]; }); } /** * Transfer ERC-721 token to the contract * @param token token address * @param tokenId token id * @returns transaction data * @throws error if transaction fails */ transferERC721(tokenId, tokenAddress, to, safeAddress) { return __awaiter(this, void 0, void 0, function* () { const contract = new ethers_1.ethers.Contract(tokenAddress, contract_1.ERC721__factory.abi, this._contract.signer); const data = contract.interface.encodeFunctionData("safeTransferFrom(address, address, uint256)", [safeAddress, to, tokenId]); return data; }); } transferERC1155(tokenAddress, tokenIds, amounts, to, safeAddress) { return __awaiter(this, void 0, void 0, function* () { const contract = new ethers_1.ethers.Contract(tokenAddress, contract_1.ERC1155__factory.abi, this._contract.signer); let data = ""; if (tokenIds.length > 1) { data = contract.interface.encodeFunctionData("safeBatchTransferFrom", [ safeAddress, to, tokenIds, amounts, "0x", ]); } else { data = contract.interface.encodeFunctionData("safeTransferFrom", [ safeAddress, to, tokenIds[0], amounts[0], "0x", ]); } return data; }); } } exports.CrestFiMultisigStream = CrestFiMultisigStream; //# sourceMappingURL=multisig-data-factory.js.map