From 80590c15420465a8ab407ac930a6506e4e42f5df Mon Sep 17 00:00:00 2001 From: Luke Wickens Date: Tue, 9 Aug 2022 11:22:18 +0100 Subject: [PATCH 1/4] Added Stargate Protocol - Added new example for testing Stargate Protocol integration - Changed package.json version --- examples/src/19-stargate-cross-chain-quote.ts | 116 ++++++++++++++++++ package.json | 2 +- src/sdk/exchange/constants.ts | 1 + 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 examples/src/19-stargate-cross-chain-quote.ts diff --git a/examples/src/19-stargate-cross-chain-quote.ts b/examples/src/19-stargate-cross-chain-quote.ts new file mode 100644 index 00000000..470eca12 --- /dev/null +++ b/examples/src/19-stargate-cross-chain-quote.ts @@ -0,0 +1,116 @@ +import { BigNumberish, utils } from 'ethers'; +import { ContractNames, getContractAbi } from '@etherspot/contracts'; +import { + EnvNames, + NetworkNames, + Sdk, + NETWORK_NAME_TO_CHAIN_ID, + BridgingQuotes, + CrossChainServiceProvider, +} from '../../src'; +import { logger } from './common'; +import * as dotenv from 'dotenv'; +import { TransactionRequest } from '@ethersproject/abstract-provider'; +dotenv.config(); + +export interface ERC20Contract { + encodeApprove?(spender: string, value: BigNumberish): TransactionRequest; + callAllowance?(owner: string, spender: string): Promise; +} + +async function main(): Promise { + if (!process.env.MATIC_PRIVATE_KEY) { + console.log('private key missing'); + return null; + } + const privateKey = process.env.FANTOM_PRIVATE_KEY; + + const sdk = new Sdk({ privateKey: privateKey }, { env: EnvNames.MainNets, networkName: NetworkNames.Matic }); + + const { state } = sdk; + + logger.log('key account', state.account); + + logger.log( + 'contract account', + await sdk.computeContractAccount({ + sync: false, + }), + ); + + await sdk.syncAccount(); + + logger.log('synced contract account', state.account); + logger.log('synced contract account member', state.accountMember); + + const FantomUSDC = '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75'; // Fantom - USDC + const MaticUSDC = '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'; // Matic - USDC + + const fromChainId: number = NETWORK_NAME_TO_CHAIN_ID[NetworkNames.Matic]; + const toChainId: number = NETWORK_NAME_TO_CHAIN_ID[NetworkNames.Fantom]; + const fromTokenAddress: string = MaticUSDC; + const toTokenAddress: string = FantomUSDC; + + // MATIC USDC has 6 decimals + const fromAmount = utils.parseUnits('1', 6); // 10 USDC + + /* + * Optional parameter - serviceProvider + * Will return quotes from all services provided if not specified + */ + const quoteRequestPayload = { + fromChainId: fromChainId, + toChainId: toChainId, + fromTokenAddress: fromTokenAddress, + toTokenAddress: toTokenAddress, + fromAmount: fromAmount, + serviceProvider: CrossChainServiceProvider.Stargate, // Optional parameter + }; + console.log(quoteRequestPayload); + const quotes: BridgingQuotes = await sdk.getCrossChainQuotes(quoteRequestPayload); + + console.log('Quotes'); + logger.log('Quotes: ', quotes); + + if (quotes.items.length > 0) { + // Select the first quote + const quote = quotes.items[0]; + logger.log('Quote Selected: ', quote); + + const tokenAddress = quote.estimate.data.fromToken.address; + const approvalAddress = quote.approvalData.approvalAddress; + const amount = quote.approvalData.amount; + + // Build the approval transaction request + const abi = getContractAbi(ContractNames.ERC20Token); + const erc20Contract = sdk.registerContract('erc20Contract', abi, tokenAddress); + const approvalTransactionRequest: TransactionRequest = erc20Contract.encodeApprove(approvalAddress, amount); + logger.log('Approval transaction request', approvalTransactionRequest); + await sdk.clearGatewayBatch(); + // Batch the approval transaction + logger.log( + 'gateway batch approval transaction', + await sdk.batchExecuteAccountTransaction({ + to: approvalTransactionRequest.to, + data: approvalTransactionRequest.data, + value: approvalTransactionRequest.value, + }), + ); + + // Batch the cross chain transaction + const { to, value, data }: TransactionRequest = quote.transaction; + logger.log( + 'gateway batch transfer token transaction', + await sdk.batchExecuteAccountTransaction({ to, data: data, value }), + ); + + const estimatedGas = await sdk.estimateGatewayBatch(); + // Estimate and submit the transactions to the Gateway + logger.log('estimated batch', utils.formatEther(estimatedGas.estimation.feeAmount)); + logger.log('submitted batch', await sdk.submitGatewayBatch()); + } +} + +main() + .catch(logger.error) + .finally(() => process.exit()); diff --git a/package.json b/package.json index 31a6deb3..e738c905 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "etherspot", - "version": "1.35.2", + "version": "1.37.0", "description": "Etherspot SDK", "keywords": [ "ether", diff --git a/src/sdk/exchange/constants.ts b/src/sdk/exchange/constants.ts index 0d262e0f..e2d0ed8e 100644 --- a/src/sdk/exchange/constants.ts +++ b/src/sdk/exchange/constants.ts @@ -16,4 +16,5 @@ export enum CrossChainServiceProvider { SocketV2 = 'SocketV2', LiFi = 'LiFi', Connext = 'Connext', + Stargate = 'Stargate', } From d363d1f88d815978f18123aff569b76a896536f1 Mon Sep 17 00:00:00 2001 From: Luke Wickens Date: Tue, 9 Aug 2022 11:55:00 +0100 Subject: [PATCH 2/4] Update package-lock.json - Changed version --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index d50152ad..6f229e75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "etherspot", - "version": "1.35.2", + "version": "1.37.0", "lockfileVersion": 2, "requires": true, "packages": { From 9c02f2c7651d2b70cc9e33aae37287a000f9bfac Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Wed, 12 Jul 2023 16:07:10 +0100 Subject: [PATCH 3/4] Removed old example Removed old Stargate example. Can now used modified version of example 16. Added run command for example 19. --- examples/package.json | 13 +- examples/src/19-stargate-cross-chain-quote.ts | 116 ------------------ 2 files changed, 7 insertions(+), 122 deletions(-) delete mode 100644 examples/src/19-stargate-cross-chain-quote.ts diff --git a/examples/package.json b/examples/package.json index 8dd4d441..05d628a3 100644 --- a/examples/package.json +++ b/examples/package.json @@ -24,16 +24,17 @@ "16-cross-chain-quotes": "../node_modules/.bin/ts-node ./src/16-cross-chain-quotes.ts", "17-superFluids-createStream": "../node_modules/.bin/ts-node ./src/17-superFluids-createStream.ts", "18-cross-chain-stream": "../node_modules/.bin/ts-node ./src/18-cross-chain-stream.ts", + "19-exchange-using-fee-token": "../node_modules/.bin/ts-node ./src/19-exchange-using-fee-token.ts", "21-exchange-rates": "../node_modules/.bin/ts-node ./src/21-exchange-rates.ts", "22-name-resolution": "../node_modules/.bin/ts-node ./src/22-name-resolution.ts", "24-account-investments": "../node_modules/.bin/ts-node ./src/24-account-investments.ts", "25-token-details": "../node_modules/.bin/ts-node ./src/25-token-details.ts", - "26-historical-token-price" : "../node_modules/.bin/ts-node ./src/26-historical-token-price.ts", - "27-pools-activity" : "../node_modules/.bin/ts-node ./src/27-pools-activity.ts", - "28-number-of-transactions" : "../node_modules/.bin/ts-node ./src/28-number-of-transactions.ts", - "29-trading-history" : "../node_modules/.bin/ts-node ./src/29-trading-history.ts", - "30-market-details" : "../node_modules/.bin/ts-node ./src/30-market-details.ts", - "31-net-curve-balances" : "../node_modules/.bin/ts-node ./src/31-net-curve-balances.ts" + "26-historical-token-price": "../node_modules/.bin/ts-node ./src/26-historical-token-price.ts", + "27-pools-activity": "../node_modules/.bin/ts-node ./src/27-pools-activity.ts", + "28-number-of-transactions": "../node_modules/.bin/ts-node ./src/28-number-of-transactions.ts", + "29-trading-history": "../node_modules/.bin/ts-node ./src/29-trading-history.ts", + "30-market-details": "../node_modules/.bin/ts-node ./src/30-market-details.ts", + "31-net-curve-balances": "../node_modules/.bin/ts-node ./src/31-net-curve-balances.ts" }, "dependencies": { "dotenv": "16.0.1" diff --git a/examples/src/19-stargate-cross-chain-quote.ts b/examples/src/19-stargate-cross-chain-quote.ts deleted file mode 100644 index 470eca12..00000000 --- a/examples/src/19-stargate-cross-chain-quote.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { BigNumberish, utils } from 'ethers'; -import { ContractNames, getContractAbi } from '@etherspot/contracts'; -import { - EnvNames, - NetworkNames, - Sdk, - NETWORK_NAME_TO_CHAIN_ID, - BridgingQuotes, - CrossChainServiceProvider, -} from '../../src'; -import { logger } from './common'; -import * as dotenv from 'dotenv'; -import { TransactionRequest } from '@ethersproject/abstract-provider'; -dotenv.config(); - -export interface ERC20Contract { - encodeApprove?(spender: string, value: BigNumberish): TransactionRequest; - callAllowance?(owner: string, spender: string): Promise; -} - -async function main(): Promise { - if (!process.env.MATIC_PRIVATE_KEY) { - console.log('private key missing'); - return null; - } - const privateKey = process.env.FANTOM_PRIVATE_KEY; - - const sdk = new Sdk({ privateKey: privateKey }, { env: EnvNames.MainNets, networkName: NetworkNames.Matic }); - - const { state } = sdk; - - logger.log('key account', state.account); - - logger.log( - 'contract account', - await sdk.computeContractAccount({ - sync: false, - }), - ); - - await sdk.syncAccount(); - - logger.log('synced contract account', state.account); - logger.log('synced contract account member', state.accountMember); - - const FantomUSDC = '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75'; // Fantom - USDC - const MaticUSDC = '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'; // Matic - USDC - - const fromChainId: number = NETWORK_NAME_TO_CHAIN_ID[NetworkNames.Matic]; - const toChainId: number = NETWORK_NAME_TO_CHAIN_ID[NetworkNames.Fantom]; - const fromTokenAddress: string = MaticUSDC; - const toTokenAddress: string = FantomUSDC; - - // MATIC USDC has 6 decimals - const fromAmount = utils.parseUnits('1', 6); // 10 USDC - - /* - * Optional parameter - serviceProvider - * Will return quotes from all services provided if not specified - */ - const quoteRequestPayload = { - fromChainId: fromChainId, - toChainId: toChainId, - fromTokenAddress: fromTokenAddress, - toTokenAddress: toTokenAddress, - fromAmount: fromAmount, - serviceProvider: CrossChainServiceProvider.Stargate, // Optional parameter - }; - console.log(quoteRequestPayload); - const quotes: BridgingQuotes = await sdk.getCrossChainQuotes(quoteRequestPayload); - - console.log('Quotes'); - logger.log('Quotes: ', quotes); - - if (quotes.items.length > 0) { - // Select the first quote - const quote = quotes.items[0]; - logger.log('Quote Selected: ', quote); - - const tokenAddress = quote.estimate.data.fromToken.address; - const approvalAddress = quote.approvalData.approvalAddress; - const amount = quote.approvalData.amount; - - // Build the approval transaction request - const abi = getContractAbi(ContractNames.ERC20Token); - const erc20Contract = sdk.registerContract('erc20Contract', abi, tokenAddress); - const approvalTransactionRequest: TransactionRequest = erc20Contract.encodeApprove(approvalAddress, amount); - logger.log('Approval transaction request', approvalTransactionRequest); - await sdk.clearGatewayBatch(); - // Batch the approval transaction - logger.log( - 'gateway batch approval transaction', - await sdk.batchExecuteAccountTransaction({ - to: approvalTransactionRequest.to, - data: approvalTransactionRequest.data, - value: approvalTransactionRequest.value, - }), - ); - - // Batch the cross chain transaction - const { to, value, data }: TransactionRequest = quote.transaction; - logger.log( - 'gateway batch transfer token transaction', - await sdk.batchExecuteAccountTransaction({ to, data: data, value }), - ); - - const estimatedGas = await sdk.estimateGatewayBatch(); - // Estimate and submit the transactions to the Gateway - logger.log('estimated batch', utils.formatEther(estimatedGas.estimation.feeAmount)); - logger.log('submitted batch', await sdk.submitGatewayBatch()); - } -} - -main() - .catch(logger.error) - .finally(() => process.exit()); From 222bebacdffc45ef2a9b8a04a9323eb56402fa47 Mon Sep 17 00:00:00 2001 From: lbw33 <71776468+lbw33@users.noreply.github.com> Date: Wed, 12 Jul 2023 17:03:20 +0100 Subject: [PATCH 4/4] 1.44.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1cdbd657..56e1f7a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "etherspot", - "version": "1.43.8", + "version": "1.44.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "etherspot", - "version": "1.43.8", + "version": "1.44.0", "license": "MIT", "dependencies": { "@apollo/client": "3.4.0", diff --git a/package.json b/package.json index 5da9bc41..559338d5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "etherspot", - "version": "1.43.8", + "version": "1.44.0", "description": "Etherspot SDK", "keywords": [ "ether",