From ccf7dc5f834919d8df813f2f332c4f0c074bf76b Mon Sep 17 00:00:00 2001 From: Nathan Richards Date: Fri, 24 May 2024 20:42:24 +0200 Subject: [PATCH] chore: modifications to scripts --- .../node/examples/klimaRetireExactCarbon.ts | 67 ++++++++++++------- .../examples/utils/executeCrossChainQuote.ts | 4 -- 2 files changed, 42 insertions(+), 29 deletions(-) diff --git a/examples/node/examples/klimaRetireExactCarbon.ts b/examples/node/examples/klimaRetireExactCarbon.ts index 14ce32b4..6a93724d 100644 --- a/examples/node/examples/klimaRetireExactCarbon.ts +++ b/examples/node/examples/klimaRetireExactCarbon.ts @@ -1,16 +1,25 @@ +import * as lifiDataTypes from '@lifi/data-types' import type { ContractCallsQuoteRequest, LiFiStep } from '@lifi/sdk' -import { ChainId, getContractCallsQuote } from '@lifi/sdk' +import { ChainId, CoinKey, getContractCallsQuote } from '@lifi/sdk' import type { Chain } from 'viem' -import { parseEther, parseAbi, getContract, encodeFunctionData } from 'viem' +import { + parseAbi, + encodeFunctionData, + parseUnits, + createPublicClient, + http, +} from 'viem' import { mainnet, arbitrum, optimism, polygon } from 'viem/chains' import { promptConfirm } from '../helpers/promptConfirm' import { executeCrossChainQuote } from './utils/executeCrossChainQuote' import { setUpSDK } from './utils/setUpSDK' import { WalletClientWithPublicActions } from './types' -import { AddressZero } from './constants' -const USDC_POL = '0x2791bca1f2de4661ed88a30c99a7a9449aa84174' -const BCT_POL = '0x2F800Db0fdb5223b3C3f354886d907A671414A7F' +const dataTypes = (lifiDataTypes as any).default + +const USDCe_POL = dataTypes.findDefaultToken(CoinKey.USDCe, ChainId.POL) + +const Base_Carbon_Tonne_POL = '0x2F800Db0fdb5223b3C3f354886d907A671414A7F' // https://docs.klimadao.finance/developers/contracts/retirement/v2-diamond/generalized-retirement const KLIMA_ETHEREUM_CONTRACT_POL = '0x8cE54d9625371fb2a068986d32C85De8E6e995f8' @@ -29,30 +38,35 @@ const getKlimaQuote = async ( ): Promise => { const abi = parseAbi(KLIMA_ABI) - const contract = getContract({ + const publicClient = createPublicClient({ + chain: polygon, + transport: http(), + }) + + const sourceAmountDefaultRetirement = await publicClient.readContract({ address: KLIMA_ETHEREUM_CONTRACT_POL, abi, - client: client as any, + functionName: 'getSourceAmountDefaultRetirement', + args: [ + USDCe_POL.address, // address sourceToken, + Base_Carbon_Tonne_POL, // address poolToken, + retireAmount, // uint256 retireAmount, + ], }) - console.info('>> got contract:', contract) - - const sourceAmountDefaultRetirement = await ( - contract as any - ).read.getSourceAmountDefaultRetirement([ - USDC_POL, // address sourceToken, - BCT_POL, // address poolToken, - retireAmount, // uint256 retireAmount, - ]) + const usdcAmount = parseUnits( + sourceAmountDefaultRetirement.toString(), + USDCe_POL.decimals + ).toString() - const usdcAmount = sourceAmountDefaultRetirement.toString() + console.log('>> usdcAmount', usdcAmount) const retireTxData = encodeFunctionData({ abi, functionName: 'retireExactCarbonDefault', args: [ - USDC_POL, // address sourceToken, - BCT_POL, // address poolToken, + USDCe_POL.address, // address sourceToken, + Base_Carbon_Tonne_POL, // address poolToken, usdcAmount, // uint256 maxAmountIn, retireAmount, // uint256 retireAmount, 'LI.FI', // string memory retiringEntityString, @@ -69,12 +83,12 @@ const getKlimaQuote = async ( fromToken, fromAddress: userAddress, toChain: ChainId.POL, - toToken: USDC_POL, + toToken: USDCe_POL.address, toAmount: usdcAmount, contractCalls: [ { - fromAmount: usdcAmount, // TODO: is this the right value? not sure what it should be - fromTokenAddress: fromToken, // TODO: is this the right value? not sure what it should be + fromAmount: usdcAmount, + fromTokenAddress: USDCe_POL.address, toContractAddress: KLIMA_ETHEREUM_CONTRACT_POL, toContractCallData: retireTxData, toContractGasLimit: KLIMA_GAS_LIMIT, @@ -92,15 +106,18 @@ const run = async () => { console.info('>> Initialize LiFi SDK') const { client, account } = setUpSDK({ - initialChain: polygon as Chain, + initialChain: optimism as Chain, switchChains: [mainnet, arbitrum, optimism, polygon] as Chain[], usePublicActions: true, }) // config const fromChain = ChainId.OPT - const fromToken = AddressZero - const retireAmount = parseEther('1').toString() + const fromToken = dataTypes.findDefaultToken( + CoinKey.USDC, + ChainId.OPT + ).address + const retireAmount = '100000' // 1 USDC try { // get quote diff --git a/examples/node/examples/utils/executeCrossChainQuote.ts b/examples/node/examples/utils/executeCrossChainQuote.ts index 2587971c..a7a80327 100644 --- a/examples/node/examples/utils/executeCrossChainQuote.ts +++ b/examples/node/examples/utils/executeCrossChainQuote.ts @@ -21,10 +21,6 @@ export const executeCrossChainQuote = async ( address, quote.estimate.approvalAddress ) - // check approval - if (!approval) { - throw 'Failed to load approval' - } // set approval if needed if (approval < BigInt(quote.action.fromAmount)) {