diff --git a/examples/03-transfer-balance-threshold/src/task.ts b/examples/03-transfer-balance-threshold/src/task.ts index e6b9071..9f95aca 100644 --- a/examples/03-transfer-balance-threshold/src/task.ts +++ b/examples/03-transfer-balance-threshold/src/task.ts @@ -5,10 +5,7 @@ import { inputs } from './types' export default function main(): void { const tokenContract = new ERC20(inputs.token, inputs.chainId) - const balanceResult = tokenContract.balanceOf(inputs.recipient) - if (balanceResult.isError) throw new Error(balanceResult.error) - const balance = balanceResult.value - + const balance = tokenContract.balanceOf(inputs.recipient).unwrap() const token = ERC20Token.fromAddress(inputs.token, inputs.chainId) const threshold = BigInt.fromStringDecimal(inputs.threshold, token.decimals) diff --git a/examples/04-transfer-balance-threshold-with-oracles/src/task.ts b/examples/04-transfer-balance-threshold-with-oracles/src/task.ts index 803334c..131fe08 100644 --- a/examples/04-transfer-balance-threshold-with-oracles/src/task.ts +++ b/examples/04-transfer-balance-threshold-with-oracles/src/task.ts @@ -5,14 +5,10 @@ import { inputs } from './types' export default function main(): void { const tokenContract = new ERC20(inputs.token, inputs.chainId) - const balanceResult = tokenContract.balanceOf(inputs.recipient) - if (balanceResult.isError) throw new Error(balanceResult.error) - const balance = balanceResult.value + const balance = tokenContract.balanceOf(inputs.recipient).unwrap() const token = ERC20Token.fromAddress(inputs.token, inputs.chainId) - const balanceInUsdResult = TokenAmount.fromBigInt(token, balance).toUsd() - if (balanceInUsdResult.isError) throw new Error(balanceInUsdResult.error) - const balanceInUsd = balanceInUsdResult.value + const balanceInUsd = TokenAmount.fromBigInt(token, balance).toUsd().unwrap() const thresholdUsd = USD.fromStringDecimal(inputs.thresholdUsd) log.info(`Balance in USD: ${balanceInUsd}`) diff --git a/examples/05-invest-aave-idle-balance/src/task.ts b/examples/05-invest-aave-idle-balance/src/task.ts index 78d780b..f880e65 100644 --- a/examples/05-invest-aave-idle-balance/src/task.ts +++ b/examples/05-invest-aave-idle-balance/src/task.ts @@ -9,25 +9,17 @@ export default function main(): void { const aToken = ERC20Token.fromAddress(inputs.aToken, inputs.chainId) const aTokenContract = new AaveToken(aToken.address, aToken.chainId) - const underlyingTokenAddressResult = aTokenContract.UNDERLYING_ASSET_ADDRESS() - if (underlyingTokenAddressResult.isError) throw new Error(underlyingTokenAddressResult.error) - const underlyingTokenAddress = underlyingTokenAddressResult.value + const underlyingTokenAddress = aTokenContract.UNDERLYING_ASSET_ADDRESS().unwrap() const underlyingToken = ERC20Token.fromAddress(underlyingTokenAddress, aToken.chainId) - const aavePoolAddressResult = aTokenContract.POOL() - if (aavePoolAddressResult.isError) throw new Error(aavePoolAddressResult.error) - const aavePoolAddress = aavePoolAddressResult.value + const aavePoolAddress = aTokenContract.POOL().unwrap() const aavePool = new AavePool(aavePoolAddress, inputs.chainId) const underlyingTokenContract = new ERC20(underlyingToken.address, underlyingToken.chainId) - const underlyingTokenBalanceAmountResult = underlyingTokenContract.balanceOf(inputs.smartAccount) - if (underlyingTokenBalanceAmountResult.isError) throw new Error(underlyingTokenBalanceAmountResult.error) - const underlyingTokenBalanceAmount = underlyingTokenBalanceAmountResult.value + const underlyingTokenBalanceAmount = underlyingTokenContract.balanceOf(inputs.smartAccount).unwrap() const underlyingTokenBalance = TokenAmount.fromBigInt(underlyingToken, underlyingTokenBalanceAmount) - const underlyingTokenBalanceInUsdResult = underlyingTokenBalance.toUsd() - if (underlyingTokenBalanceInUsdResult.isError) throw new Error(underlyingTokenBalanceInUsdResult.error) - const underlyingTokenBalanceInUsd = underlyingTokenBalanceInUsdResult.value + const underlyingTokenBalanceInUsd = underlyingTokenBalance.toUsd().unwrap() const thresholdUsd = USD.fromStringDecimal(inputs.thresholdUsd) log.info(`Underlying balance in USD: ${underlyingTokenBalanceInUsd}`) diff --git a/examples/06-withdraw-from-aave-balance-threshold/src/task.ts b/examples/06-withdraw-from-aave-balance-threshold/src/task.ts index d41714a..8c5fd57 100644 --- a/examples/06-withdraw-from-aave-balance-threshold/src/task.ts +++ b/examples/06-withdraw-from-aave-balance-threshold/src/task.ts @@ -8,41 +8,30 @@ export default function main(): void { const aToken = ERC20Token.fromAddress(inputs.aToken, inputs.chainId) const aTokenContract = new AaveToken(aToken.address, aToken.chainId) - const underlyingTokenAddressResult = aTokenContract.UNDERLYING_ASSET_ADDRESS() - if (underlyingTokenAddressResult.isError) throw new Error(underlyingTokenAddressResult.error) - const underlyingTokenAddress = underlyingTokenAddressResult.value + const underlyingTokenAddress = aTokenContract.UNDERLYING_ASSET_ADDRESS().unwrap() const underlyingToken = ERC20Token.fromAddress(underlyingTokenAddress, aToken.chainId) const underlyingTokenContract = new ERC20(underlyingToken.address, underlyingToken.chainId) - const underlyingTokenBalanceAmountResult = underlyingTokenContract.balanceOf(inputs.recipient) - if (underlyingTokenBalanceAmountResult.isError) throw new Error(underlyingTokenBalanceAmountResult.error) - const underlyingTokenBalanceAmount = underlyingTokenBalanceAmountResult.value + const underlyingTokenBalanceAmount = underlyingTokenContract.balanceOf(inputs.recipient).unwrap() const underlyingTokenBalance = TokenAmount.fromBigInt(underlyingToken, underlyingTokenBalanceAmount) - const underlyingTokenBalanceInUsdResult = underlyingTokenBalance.toUsd() - if (underlyingTokenBalanceInUsdResult.isError) throw new Error(underlyingTokenBalanceInUsdResult.error) - const underlyingTokenBalanceInUsd = underlyingTokenBalanceInUsdResult.value + const underlyingTokenBalanceInUsd = underlyingTokenBalance.toUsd().unwrap() const thresholdUsd = USD.fromStringDecimal(inputs.thresholdUsd) log.info(`Recipient underlying balance in USD: ${underlyingTokenBalanceInUsd}`) if (underlyingTokenBalanceInUsd.gt(thresholdUsd)) log.info('Recipient threshold not met') else { const depositAmountUsd = thresholdUsd.times(BigInt.fromI32(2)).minus(underlyingTokenBalanceInUsd) - const aTokenDepositAmountResult = depositAmountUsd.toTokenAmount(aToken) - if (aTokenDepositAmountResult.isError) throw new Error(aTokenDepositAmountResult.error) - const aTokenDepositAmount = aTokenDepositAmountResult.value + const aTokenDepositAmount = depositAmountUsd.toTokenAmount(aToken).unwrap() const me = environment.getContext().user - const aTokenBalanceAmountResult = aTokenContract.balanceOf(me) - if (aTokenBalanceAmountResult.isError) throw new Error(aTokenBalanceAmountResult.error) - const aTokenBalanceAmount = aTokenBalanceAmountResult.value + const aTokenBalanceAmount = aTokenContract.balanceOf(me).unwrap() const aTokenBalance = TokenAmount.fromBigInt(aToken, aTokenBalanceAmount) if (aTokenBalance.lt(aTokenDepositAmount)) log.info('Sender balance not enough') else { - const expectedOutResult = aTokenDepositAmount.toTokenAmount(underlyingToken) - if (expectedOutResult.isError) throw new Error(expectedOutResult.error) - const minAmountOut = expectedOutResult.value.applySlippageBps(inputs.slippageBps as i32) + const expectedOut = aTokenDepositAmount.toTokenAmount(underlyingToken).unwrap() + const minAmountOut = expectedOut.applySlippageBps(inputs.slippageBps as i32) log.info(`Min amount out: ${minAmountOut}`) SwapBuilder.forChain(inputs.chainId) diff --git a/examples/07-withdraw-from-aave-swap-and-transfer/src/task.ts b/examples/07-withdraw-from-aave-swap-and-transfer/src/task.ts index 2ab93e4..33ddc1d 100644 --- a/examples/07-withdraw-from-aave-swap-and-transfer/src/task.ts +++ b/examples/07-withdraw-from-aave-swap-and-transfer/src/task.ts @@ -28,25 +28,13 @@ export default function main(): void { const context = environment.getContext() - const userTokensResult = environment.relevantTokensQuery( - context.user, - [chainId], - USD.zero(), - [USDC, aUSDC], - ListType.AllowList - ) - if (userTokensResult.isError) throw new Error(userTokensResult.error) - const userTokens = userTokensResult.value + const userTokens = environment + .relevantTokensQuery(context.user, [chainId], USD.zero(), [USDC, aUSDC], ListType.AllowList) + .unwrap() - const smartAccountTokensResult = environment.relevantTokensQuery( - inputs.smartAccount, - [chainId], - USD.zero(), - [aUSDC], - ListType.AllowList - ) - if (smartAccountTokensResult.isError) throw new Error(smartAccountTokensResult.error) - const smartAccountTokens = smartAccountTokensResult.value + const smartAccountTokens = environment + .relevantTokensQuery(inputs.smartAccount, [chainId], USD.zero(), [aUSDC], ListType.AllowList) + .unwrap() const aUsdcSmartAccount = findTokenAmount(smartAccountTokens, aUSDC) const usdcUser = findTokenAmount(userTokens, USDC) diff --git a/examples/08-relevant-tokens-query/src/task.ts b/examples/08-relevant-tokens-query/src/task.ts index 19c2f9c..7814165 100644 --- a/examples/08-relevant-tokens-query/src/task.ts +++ b/examples/08-relevant-tokens-query/src/task.ts @@ -4,15 +4,9 @@ import { inputs } from './types' export default function main(): void { const context = environment.getContext() - const tokensResult = environment.relevantTokensQuery( - context.user, - [inputs.chainId], - USD.zero(), - [], - ListType.DenyList - ) - if (tokensResult.isError) throw new Error(tokensResult.error) - const tokens = tokensResult.value + const tokens = environment + .relevantTokensQuery(context.user, [inputs.chainId], USD.zero(), [], ListType.DenyList) + .unwrap() const builder = TransferBuilder.forChain(inputs.chainId) for (let i = 0; i < tokens.length; i++) { diff --git a/examples/09-subgraph-query/src/task.ts b/examples/09-subgraph-query/src/task.ts index f35597c..8d843c4 100644 --- a/examples/09-subgraph-query/src/task.ts +++ b/examples/09-subgraph-query/src/task.ts @@ -25,9 +25,7 @@ export default function main(): void { if (BigInt.fromI32(inputs.slippageBps as i32) > BPS_DENOMINATOR) throw new Error('Slippage must be between 0 and 100') const me = environment.getContext().user - const amountInResult = new ERC20(inputs.tokenIn, inputs.chainId).balanceOf(me) - if (amountInResult.isError) throw new Error(amountInResult.error) - const amountIn = amountInResult.value + const amountIn = new ERC20(inputs.tokenIn, inputs.chainId).balanceOf(me).unwrap() if (amountIn.isZero()) throw new Error('No amount in to swap') const price = getTokenPrice(inputs.chainId, inputs.subgraphId, inputs.tokenIn, inputs.tokenOut) @@ -55,8 +53,7 @@ function getTokenPrice(chainId: i32, subgraphId: string, tokenIn: Address, token const query = `{pools(where: { token0: "${token0}", token1: "${token1}" }) {token0Price token1Price}}` const queryResult = environment.subgraphQuery(chainId, subgraphId, query, null) - if (queryResult.isError) throw new Error(queryResult.error) - const data = JSON.parse(queryResult.value.data) + const data = JSON.parse(queryResult.unwrap().data) if (tokenIn == token0 && tokenOut === token1) { return BigInt.fromStringDecimal(data.pools[0].token1Price, PRICE_PRECISION) diff --git a/examples/10-rebalancing-tokens/src/task.ts b/examples/10-rebalancing-tokens/src/task.ts index 5f87692..d52b607 100644 --- a/examples/10-rebalancing-tokens/src/task.ts +++ b/examples/10-rebalancing-tokens/src/task.ts @@ -17,9 +17,7 @@ function shareByBps(amountUSD: USD, bps: i32): USD { function getTokenAmount(chainId: u32, tokenAddress: Address): TokenAmount { const me = environment.getContext().user const contract = new ERC20(tokenAddress, chainId) - const balanceResult = contract.balanceOf(me) - if (balanceResult.isError) throw new Error(balanceResult.error) - const balance = balanceResult.value + const balance = contract.balanceOf(me).unwrap() const token = ERC20Token.fromAddress(tokenAddress, chainId) return TokenAmount.fromBigInt(token, balance) } @@ -51,9 +49,9 @@ export default function main(): void { ] const currentBalancesUsd = [ - tokenAmounts[0].toUsd().value, - tokenAmounts[1].toUsd().value, - tokenAmounts[2].toUsd().value, + tokenAmounts[0].toUsd().unwrap(), + tokenAmounts[1].toUsd().unwrap(), + tokenAmounts[2].toUsd().unwrap(), ] const totalPortfolioUSD = currentBalancesUsd[0].plus(currentBalancesUsd[1]).plus(currentBalancesUsd[2]) if (totalPortfolioUSD.le(USD.zero())) { @@ -90,12 +88,8 @@ export default function main(): void { const surplusTokenIndex = surpluses[surplusIndex].index const deficitTokenIndex = deficits[deficitIndex].index - const tokenInAmountResult = movedUSD.toTokenAmount(tokensMetadata[surplusTokenIndex]) - if (tokenInAmountResult.isError) throw new Error(tokenInAmountResult.error) - const tokenInAmount = tokenInAmountResult.value - const expectedTokenOutAmounResult = movedUSD.toTokenAmount(tokensMetadata[deficitTokenIndex]) - if (expectedTokenOutAmounResult.isError) throw new Error(expectedTokenOutAmounResult.error) - const expectedTokenOutAmount = expectedTokenOutAmounResult.value + const tokenInAmount = movedUSD.toTokenAmount(tokensMetadata[surplusTokenIndex]).unwrap() + const expectedTokenOutAmount = movedUSD.toTokenAmount(tokensMetadata[deficitTokenIndex]).unwrap() const slippageFactor = BPS_DENOMINATOR.minus(BigInt.fromI32(inputs.slippageBps as i32)) const minAmountOut = expectedTokenOutAmount.amount.times(slippageFactor).div(BPS_DENOMINATOR) diff --git a/examples/12-dollar-cost-averaging/src/task.ts b/examples/12-dollar-cost-averaging/src/task.ts index 53a1bab..2d08acd 100644 --- a/examples/12-dollar-cost-averaging/src/task.ts +++ b/examples/12-dollar-cost-averaging/src/task.ts @@ -14,10 +14,7 @@ export default function main(): void { // Create amount from decimal string and estimate amount out const amountIn = TokenAmount.fromStringDecimal(tokenIn, inputs.amount) - const expectedOutResult = amountIn.toTokenAmount(tokenOut) - if (expectedOutResult.isError) throw new Error(expectedOutResult.error) - const expectedOut = expectedOutResult.value - + const expectedOut = amountIn.toTokenAmount(tokenOut).unwrap() // Apply slippage to calculate the expected minimum amount out const minAmountOut = expectedOut.applySlippageBps(inputs.slippageBps as i32) log.info(`Calculated minOut: ${minAmountOut} (equivalent=${expectedOut}, slippageBps=${inputs.slippageBps})`) diff --git a/examples/13-bridge-and-invest-aave/package.json b/examples/13-bridge-and-invest-aave/package.json index f031201..7c5123c 100644 --- a/examples/13-bridge-and-invest-aave/package.json +++ b/examples/13-bridge-and-invest-aave/package.json @@ -14,7 +14,7 @@ "compile:invest": "mimic compile -t src/invest.ts -m manifest.invest.yaml -o ./build/invest", "deploy:bridge": "yarn codegen:bridge && yarn compile:bridge && mimic deploy --input ./build/bridge --output ./build/bridge --skip-compile", "deploy:invest": "yarn codegen:invest && yarn compile:invest && mimic deploy --input ./build/invest --output ./build/invest --skip-compile", - "test": "yarn build && mimic test --skipCompile", + "test": "yarn build && mimic test --skip-compile", "create-config:invest": "tsc -p tsconfig.create-config.json && tsx src/create-config.invest.ts", "lint": "eslint ." }, diff --git a/examples/14-fee-collection/src/task.ts b/examples/14-fee-collection/src/task.ts index a09b597..f880511 100644 --- a/examples/14-fee-collection/src/task.ts +++ b/examples/14-fee-collection/src/task.ts @@ -21,10 +21,7 @@ export default function main(): void { const context = environment.getContext() // Find tokens with user's balance > 0 - const amountsInResult = environment.relevantTokensQuery(context.user, [chainId], USD.zero(), [], ListType.DenyList) - if (amountsInResult.isError) throw new Error(amountsInResult.error) - const amountsIn = amountsInResult.value - + const amountsIn = environment.relevantTokensQuery(context.user, [chainId], USD.zero(), [], ListType.DenyList).unwrap() if (amountsIn.length == 0) { log.info(`No tokens found on chain ${chainId}`) return @@ -35,9 +32,7 @@ export default function main(): void { for (let i = 0; i < amountsIn.length; i++) { const amountIn = amountsIn[i] - const amountOutResult = amountIn.toTokenAmount(USDC) - if (amountOutResult.isError) throw new Error(amountOutResult.error) - const amountOut = amountOutResult.value + const amountOut = amountIn.toTokenAmount(USDC).unwrap() const minAmountOut = amountOut.times(slippageFactor).div(BPS_DENOMINATOR) // Note that the recipient will receive the USDC diff --git a/yarn.lock b/yarn.lock index e56a5e4..054420e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -391,9 +391,9 @@ integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw== "@mimicprotocol/cli@latest": - version "0.0.1-rc.29" - resolved "https://registry.yarnpkg.com/@mimicprotocol/cli/-/cli-0.0.1-rc.29.tgz#98d204fd9c3a9481a5fe0f7bf160003a70ce6c8c" - integrity sha512-AZTXZky8Xt5NMr0Calirz/126+ctW2TjJKHimzaLYzHbHunZHChhBhTW2XkN2FAidAIr0vKjIuil3L9c5vUkTw== + version "0.0.1-rc.32" + resolved "https://registry.yarnpkg.com/@mimicprotocol/cli/-/cli-0.0.1-rc.32.tgz#d02174d9d79ff783844a88b145348190eaefec93" + integrity sha512-DM76e5311CMzjBuUUCaAZLrNLP08xcZeqftr+4vZgRWNajQ6Gbu3KehG8Kxa1tPpBUwLI7F247PFPFJtvqayFQ== dependencies: "@inquirer/prompts" "^7.2.4" "@oclif/core" "^4.2.2" @@ -408,9 +408,9 @@ zod "^3.24.1" "@mimicprotocol/lib-ts@latest": - version "0.0.1-rc.29" - resolved "https://registry.yarnpkg.com/@mimicprotocol/lib-ts/-/lib-ts-0.0.1-rc.29.tgz#ba4e02763000d0c492bd7ff25b4a4a95a3f19038" - integrity sha512-KJaWwEfBRWOpR8b2w0ytlTJzLkg8eZ3iEKBNSvuMgIpNUK0eXAIlqa6Eo6Sq5VcdFu6O4JiNMmJbBrdTtRP1Rg== + version "0.0.1-rc.32" + resolved "https://registry.yarnpkg.com/@mimicprotocol/lib-ts/-/lib-ts-0.0.1-rc.32.tgz#735d9c71e02c63fdd1f5375ce2292bdff88f5561" + integrity sha512-0VhEvrDBFz+V12kuPSxjfDjF+rlCWcWb3QSphgzI8Gu6bGkf9jHtM24rcUFcGKg11r0lPp4Fw5qF4rs4iJ0gTg== dependencies: as-base58 "^0.1.1" eslint-config-mimic "^0.0.3"