UNPKG

@mstable/protocol

Version:
140 lines 11.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const config_1 = require("hardhat/config"); const generated_1 = require("types/generated"); const math_1 = require("@utils/math"); const utils_1 = require("ethers/lib/utils"); const constants_1 = require("@utils/constants"); const signerFactory_1 = require("./utils/signerFactory"); const deploy_utils_1 = require("./utils/deploy-utils"); const networkAddressFactory_1 = require("./utils/networkAddressFactory"); config_1.subtask("token-approve", "Approve address or contract to spend (transferFrom) an amount of tokens from the signer's account") .addParam("asset", "Symbol of the asset being approved. eg mUSD, imUSD, GUSD, alUSD, MTA", undefined, config_1.types.string) .addOptionalParam("tokenType", "Asset token type: address, savings, vault or feederPool.", "address", config_1.types.string) .addParam("spender", "Address or contract name that will send the transferFrom transaction.", undefined, config_1.types.string) .addOptionalParam("spenderTokenType", "If spender is a token, then either address, savings, vault or feederPool.", "address", config_1.types.string) .addOptionalParam("amount", "Amount to approve. Default is max unit128", undefined, config_1.types.float) .addOptionalParam("speed", "Defender Relayer speed param: 'safeLow' | 'average' | 'fast' | 'fastest'", "fast", config_1.types.string) .setAction(async (taskArgs, hre) => { const { asset, tokenType, spender, spenderTokenType, amount } = taskArgs; const chain = networkAddressFactory_1.getChain(hre); const signer = await signerFactory_1.getSigner(hre, taskArgs.speed); const signerAddress = await signer.getAddress(); const assetToken = networkAddressFactory_1.resolveToken(asset, chain, tokenType); const token = generated_1.ERC20__factory.connect(assetToken[tokenType], signer); const spenderAddress = networkAddressFactory_1.resolveAddress(spender, chain, spenderTokenType); const amountBN = Number.isInteger(amount) ? math_1.simpleToExactAmount(amount, assetToken.decimals) : constants_1.MAX_INT128; const tx = await token.approve(spenderAddress, amountBN); await deploy_utils_1.logTxDetails(tx, `${signerAddress} approves ${spenderAddress} to transfer ${utils_1.formatUnits(amountBN, assetToken.decimals)} ${asset}`); }); config_1.task("token-approve").setAction(async (_, __, runSuper) => { await runSuper(); }); config_1.subtask("token-transfer", "Transfer an amount of tokens from the signer to the recipient") .addParam("asset", "Symbol of the asset being approved. eg mUSD, imUSD, PmUSD, GUSD, alUSD, MTA", undefined, config_1.types.string) .addOptionalParam("tokenType", "Asset token type: address, savings, vault or feederPool.", "address", config_1.types.string) .addParam("recipient", "Address or contract name the tokens will be sent to.", undefined, config_1.types.string) .addOptionalParam("recipientTokenType", "If recipient is a token, then either address, savings, vault or feederPool.", "address", config_1.types.string) .addParam("amount", "Amount to of token to be sent without the token decimals.", undefined, config_1.types.float) .addOptionalParam("speed", "Defender Relayer speed param: 'safeLow' | 'average' | 'fast' | 'fastest'", "fast", config_1.types.string) .setAction(async (taskArgs, hre) => { const { speed, tokenType, recipient, recipientTokenType, amount } = taskArgs; const chain = networkAddressFactory_1.getChain(hre); const signer = await signerFactory_1.getSigner(hre, speed); const signerAddress = await signer.getAddress(); const assetToken = networkAddressFactory_1.resolveToken(taskArgs.asset, chain, tokenType); const token = generated_1.ERC20__factory.connect(assetToken[tokenType], signer); const recipientAddress = networkAddressFactory_1.resolveAddress(recipient, chain, recipientTokenType); const amountBN = math_1.simpleToExactAmount(amount, assetToken.decimals); const desc = `${signerAddress} transfers ${utils_1.formatUnits(amountBN, assetToken.decimals)} ${taskArgs.asset} to ${recipientAddress}`; console.log(`About to send tx ${desc}`); const tx = await token.transfer(recipientAddress, amountBN); await deploy_utils_1.logTxDetails(tx, desc); }); config_1.task("token-transfer").setAction(async (_, __, runSuper) => { await runSuper(); }); config_1.subtask("token-transfer-from", "Transfer an amount of tokens from the sender to the recipient") .addParam("asset", "Symbol of the asset being approved. eg mUSD, imUSD, GUSD, alUSD, MTA", undefined, config_1.types.string) .addOptionalParam("tokenType", "Asset token type: address, savings, vault or feederPool.", "address", config_1.types.string) .addParam("sender", "Address or contract name the tokens will be sent from.", undefined, config_1.types.string) .addOptionalParam("senderTokenType", "If sender is a token, then either address, savings, vault or feederPool.", "address", config_1.types.string) .addParam("recipient", "Address or contract name the tokens will be sent to.", undefined, config_1.types.string) .addOptionalParam("recipientTokenType", "If recipient is a token, then either address, savings, vault or feederPool.", "address", config_1.types.string) .addParam("amount", "Amount to of token to be sent without the token decimals.", undefined, config_1.types.float) .addOptionalParam("speed", "Defender Relayer speed param: 'safeLow' | 'average' | 'fast' | 'fastest'", "fast", config_1.types.string) .setAction(async (taskArgs, hre) => { const { speed, tokenType, sender, senderTokenType, recipient, recipientTokenType, amount } = taskArgs; const chain = networkAddressFactory_1.getChain(hre); const signer = await signerFactory_1.getSigner(hre, speed); const signerAddress = await signer.getAddress(); const assetToken = networkAddressFactory_1.resolveToken(taskArgs.asset, chain, tokenType); const token = generated_1.ERC20__factory.connect(assetToken[tokenType], signer); const senderAddress = networkAddressFactory_1.resolveAddress(sender, chain, senderTokenType); const recipientAddress = networkAddressFactory_1.resolveAddress(recipient, chain, recipientTokenType); const amountBN = math_1.simpleToExactAmount(amount, assetToken.decimals); const tx = await token.transferFrom(senderAddress, recipientAddress, amountBN); await deploy_utils_1.logTxDetails(tx, `${signerAddress} transfers ${utils_1.formatUnits(amountBN, assetToken.decimals)} ${taskArgs.asset} to ${recipientAddress}`); }); config_1.task("token-transfer-from").setAction(async (_, __, runSuper) => { await runSuper(); }); config_1.subtask("token-allowance", "Logs the amount of tokens a spender can transfer from an owner") .addParam("token", "Symbol of the token. eg mUSD, imUSD, GUSD, alUSD, MTA", undefined, config_1.types.string) .addOptionalParam("tokenType", "Token address, savings, vault or feederPool.", "address", config_1.types.string) .addParam("owner", "Address or contract name where the tokens are held.", undefined, config_1.types.string) .addOptionalParam("ownerTokenType", "If owner is a token, then either address, savings, vault or feederPool.", "address", config_1.types.string) .addParam("spender", "Address or contract name that can transferFrom.", undefined, config_1.types.string) .addOptionalParam("spenderTokenType", "If spender is a token, then either address, savings, vault or feederPool.", "address", config_1.types.string) .setAction(async (taskArgs, hre) => { const { tokenType, owner, ownerTokenType, spender, spenderTokenType } = taskArgs; const chain = networkAddressFactory_1.getChain(hre); const signer = await signerFactory_1.getSigner(hre); const assetSymbol = taskArgs.token; const assetToken = networkAddressFactory_1.resolveToken(taskArgs.token, chain, tokenType); const token = generated_1.ERC20__factory.connect(assetToken[tokenType], signer); const ownerAddress = networkAddressFactory_1.resolveAddress(owner, chain, ownerTokenType); const spenderAddress = networkAddressFactory_1.resolveAddress(spender, chain, spenderTokenType); const amount = await token.allowance(ownerAddress, spenderAddress); console.log(`Spender ${spenderAddress} can transfer ${utils_1.formatUnits(amount, assetToken.decimals)} ${assetSymbol} from ${spenderAddress}`); }); config_1.task("token-allowance").setAction(async (_, __, runSuper) => { await runSuper(); }); config_1.subtask("token-balance", "Logs the token balance of an owner") .addParam("token", "Symbol of the token. eg mUSD, imUSD, GUSD, alUSD, MTA", undefined, config_1.types.string) .addOptionalParam("tokenType", "Token address, savings, vault or feederPool.", "address", config_1.types.string) .addParam("owner", "Address or contract name where the tokens are held.", undefined, config_1.types.string) .addOptionalParam("ownerTokenType", "If owner is a token, then either address, savings, vault or feederPool.", "address", config_1.types.string) .setAction(async (taskArgs, hre) => { const { tokenType, owner, ownerTokenType } = taskArgs; const chain = networkAddressFactory_1.getChain(hre); const signer = await signerFactory_1.getSigner(hre); const assetToken = networkAddressFactory_1.resolveToken(taskArgs.token, chain, tokenType); const token = generated_1.ERC20__factory.connect(assetToken[tokenType], signer); const ownerAddress = networkAddressFactory_1.resolveAddress(owner, chain, ownerTokenType); const amount = await token.balanceOf(ownerAddress); console.log(`Balance of ${ownerAddress} is ${utils_1.formatUnits(amount, assetToken.decimals)} ${taskArgs.token}`); }); config_1.task("token-balance").setAction(async (_, __, runSuper) => { await runSuper(); }); config_1.subtask("token-deploy", "Deploys a new mock ERC20 token") .addParam("name", "Token name", undefined, config_1.types.string) .addParam("symbol", "Token symbol", undefined, config_1.types.string) .addOptionalParam("decimals", "Token decimal places", 18, config_1.types.int) .addOptionalParam("recipient", "Initial mint recipient", undefined, config_1.types.string) .addOptionalParam("supply", "Initial mint amount", 1000000, config_1.types.int) .addOptionalParam("speed", "Defender Relayer speed param: 'safeLow' | 'average' | 'fast' | 'fastest'", "fast", config_1.types.string) .setAction(async (taskArgs, hre) => { const { name, symbol, decimals, supply } = taskArgs; const signer = await signerFactory_1.getSigner(hre); const signerAddress = await signer.getAddress(); const recipient = taskArgs.recipient || signerAddress; await deploy_utils_1.deployContract(new generated_1.MockERC20__factory(signer), `Token ${name} (${symbol})`, [name, symbol, decimals, recipient, supply]); }); config_1.task("token-deploy").setAction(async (_, __, runSuper) => { await runSuper(); }); module.exports = {}; //# sourceMappingURL=token.js.map