From e5d4f5a2b179a7b3cc2d61beb65284b6d810342d Mon Sep 17 00:00:00 2001 From: Mikhail Gladchenko Date: Wed, 1 Nov 2023 15:08:34 +0000 Subject: [PATCH 01/11] feature: updated version to 0.20.14-rc0 --- package.json | 2 +- src/crypt/index.ts | 2 -- src/crypt/signCancelOrder.ts | 16 +++++--------- src/crypt/signCancelOrderPersonal.ts | 19 ----------------- src/crypt/signOrder.ts | 15 +++++--------- src/crypt/signOrderPersonal.ts | 31 ---------------------------- src/types.ts | 2 -- 7 files changed, 11 insertions(+), 76 deletions(-) delete mode 100644 src/crypt/signCancelOrderPersonal.ts delete mode 100644 src/crypt/signOrderPersonal.ts diff --git a/package.json b/package.json index b256294..fa10312 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.13", + "version": "0.20.14-rc0", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/crypt/index.ts b/src/crypt/index.ts index 8dbb278..d09530a 100644 --- a/src/crypt/index.ts +++ b/src/crypt/index.ts @@ -1,4 +1,2 @@ export { default as signCancelOrder } from './signCancelOrder.js'; -export { default as signCancelOrderPersonal } from './signCancelOrderPersonal.js'; export { default as signOrder } from './signOrder.js'; -export { default as signOrderPersonal } from './signOrderPersonal.js'; diff --git a/src/crypt/signCancelOrder.ts b/src/crypt/signCancelOrder.ts index ff49d22..f9bd329 100644 --- a/src/crypt/signCancelOrder.ts +++ b/src/crypt/signCancelOrder.ts @@ -3,33 +3,27 @@ import { ethers } from 'ethers'; import CANCEL_ORDER_TYPES from '../constants/cancelOrderTypes.js'; import type { CancelOrderRequest, SignedCancelOrderRequest, SupportedChainId } from '../types.js'; import getDomainData from './getDomainData.js'; -import signCancelOrderPersonal from './signCancelOrderPersonal.js'; type SignerWithTypedDataSign = ethers.Signer & TypedDataSigner; const signCancelOrder = async ( senderAddress: string, id: string, - usePersonalSign: boolean, signer: ethers.Signer, chainId: SupportedChainId, ) => { const cancelOrderRequest: CancelOrderRequest = { id, senderAddress, - isPersonalSign: usePersonalSign, }; // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const typedDataSigner = signer as SignerWithTypedDataSign; - const signature = usePersonalSign - ? await signCancelOrderPersonal(cancelOrderRequest, signer) - // https://docs.ethers.io/v5/api/signer/#Signer-signTypedData - : await typedDataSigner.signTypedData( - getDomainData(chainId), - CANCEL_ORDER_TYPES, - cancelOrderRequest, - ); + const signature = await typedDataSigner.signTypedData( + getDomainData(chainId), + CANCEL_ORDER_TYPES, + cancelOrderRequest, + ); // https://github.com/poap-xyz/poap-fun/pull/62#issue-928290265 // "Signature's v was always send as 27 or 28, but from Ledger was 0 or 1" diff --git a/src/crypt/signCancelOrderPersonal.ts b/src/crypt/signCancelOrderPersonal.ts deleted file mode 100644 index 2837c3b..0000000 --- a/src/crypt/signCancelOrderPersonal.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ethers } from 'ethers'; -import type { CancelOrderRequest } from '../types.js'; - -const signCancelOrderPersonal = async ( - cancelOrderRequest: CancelOrderRequest, - signer: ethers.Signer, -) => { - const types = ['string', 'string', 'address']; - const message = ethers.solidityPackedKeccak256( - types, - ['cancelOrder', cancelOrderRequest.id, cancelOrderRequest.senderAddress], - ); - const signature = await signer.signMessage(ethers.getBytes(message)); - - // NOTE: metamask broke sig.v value and we fix it in next line - return ethers.Signature.from(signature).serialized; -}; - -export default signCancelOrderPersonal; diff --git a/src/crypt/signOrder.ts b/src/crypt/signOrder.ts index 90e59df..fca41a7 100644 --- a/src/crypt/signOrder.ts +++ b/src/crypt/signOrder.ts @@ -7,7 +7,6 @@ import type { Order, SignedOrder, SupportedChainId } from '../types.js'; import normalizeNumber from '../utils/normalizeNumber.js'; import getDomainData from './getDomainData.js'; import hashOrder from './hashOrder.js'; -import signOrderPersonal from './signOrderPersonal.js'; const DEFAULT_EXPIRATION = 29 * 24 * 60 * 60 * 1000; // 29 days @@ -23,7 +22,6 @@ export const signOrder = async ( senderAddress: string, matcherAddress: string, serviceFeeAssetAddr: string, - usePersonalSign: boolean, signer: ethers.Signer, chainId: SupportedChainId, ) => { @@ -54,19 +52,16 @@ export const signOrder = async ( nonce, expiration, buySide: side === 'BUY' ? 1 : 0, - isPersonalSign: usePersonalSign, }; // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const typedDataSigner = signer as SignerWithTypedDataSign; - const signature = usePersonalSign - ? await signOrderPersonal(order, signer) - : await typedDataSigner.signTypedData( - getDomainData(chainId), - ORDER_TYPES, - order, - ); + const signature = await typedDataSigner.signTypedData( + getDomainData(chainId), + ORDER_TYPES, + order, + ); // https://github.com/poap-xyz/poap-fun/pull/62#issue-928290265 // "Signature's v was always send as 27 or 28, but from Ledger was 0 or 1" diff --git a/src/crypt/signOrderPersonal.ts b/src/crypt/signOrderPersonal.ts deleted file mode 100644 index 4573e96..0000000 --- a/src/crypt/signOrderPersonal.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ethers } from 'ethers'; -import type { Order } from '../types.js'; - -const signOrderPersonal = async (order: Order, signer: ethers.Signer) => { - const message = ethers.solidityPackedKeccak256( - [ - 'string', 'address', 'address', 'address', 'address', - 'address', 'uint64', 'uint64', 'uint64', 'uint64', 'uint64', 'uint8', - ], - [ - 'order', - order.senderAddress, - order.matcherAddress, - order.baseAsset, - order.quoteAsset, - order.matcherFeeAsset, - order.amount, - order.price, - order.matcherFee, - order.nonce, - order.expiration, - order.buySide, - ], - ); - const signature = await signer.signMessage(ethers.getBytes(message)); - - // NOTE: metamask broke sig.v value and we fix it in next line - return ethers.Signature.from(signature).serialized; -}; - -export default signOrderPersonal; diff --git a/src/types.ts b/src/types.ts index be08dd2..a528108 100644 --- a/src/types.ts +++ b/src/types.ts @@ -48,7 +48,6 @@ export type Order = { nonce: number // uint64 expiration: number // uint64 buySide: 0 | 1 // uint8, 1=buy, 0=sell - isPersonalSign: boolean // bool } export type SignedOrder = { @@ -60,7 +59,6 @@ export type SignedOrder = { export type CancelOrderRequest = { id: number | string senderAddress: string - isPersonalSign: boolean } export type SignedCancelOrderRequest = { From 47e68cc7fa3ca4cb841e17db9fa00cce9d245899 Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 13:16:16 +0400 Subject: [PATCH 02/11] fix denormolized wallet balance error --- package.json | 2 +- src/Unit/Exchange/callGenerators/utils.ts | 4 ++++ src/Unit/Exchange/generateSwapCalldata.ts | 9 +++------ src/utils/getBalance.ts | 19 +++++++++++++++++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index b256294..fa10312 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.13", + "version": "0.20.14-rc0", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/Unit/Exchange/callGenerators/utils.ts b/src/Unit/Exchange/callGenerators/utils.ts index e49217b..ad10f6b 100644 --- a/src/Unit/Exchange/callGenerators/utils.ts +++ b/src/Unit/Exchange/callGenerators/utils.ts @@ -87,6 +87,10 @@ export function generateCalls(calls: BytesLike[]) { } export async function exchangeToNativeDecimals(token: AddressLike, amount: BigNumberish, provider: ethers.JsonRpcProvider) { + return await toNativeDecimals(token, amount, provider) / (BigInt(10) ** 8n) +} + +export async function toNativeDecimals(token: AddressLike, amount: BigNumberish, provider: ethers.JsonRpcProvider) { token = await token if (typeof token !== "string") token = await token.getAddress() diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index e792a27..ffbddcb 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -18,7 +18,7 @@ import type { AddressLike } from "ethers"; import { addressLikeToString } from "../../utils/addressLikeToString.js"; import { generateUnwrapAndTransferCall, generateWrapAndTransferCall } from "./callGenerators/weth.js"; import { Exchange__factory } from "@orionprotocol/contracts/lib/ethers-v6/index.js"; -import getBalance from "../../utils/getBalance.js"; +import { getWalletBalance } from "../../utils/getBalance.js"; export type Factory = "UniswapV2" | "UniswapV3" | "Curve" | "OrionV2" | "OrionV3"; @@ -62,12 +62,9 @@ export async function generateSwapCalldataWithUnit({ )(); let path = SafeArray.from(arrayLikePath); - const { wallet } = await getBalance( - unit.aggregator, + const walletBalance = await getWalletBalance( path.first().assetIn, - safeGet(assetToAddress, path.first().assetIn), receiverAddress, - Exchange__factory.connect(exchangeContractAddress, unit.provider), unit.provider ); @@ -81,7 +78,7 @@ export async function generateSwapCalldataWithUnit({ amount, minReturnAmount, receiverAddress, - useContractBalance: BigInt(wallet.toString()) < BigInt(amount), + useContractBalance: walletBalance < BigInt(amount), path, wethAddress, curveRegistryAddress, diff --git a/src/utils/getBalance.ts b/src/utils/getBalance.ts index 35738ce..e7c84b2 100644 --- a/src/utils/getBalance.ts +++ b/src/utils/getBalance.ts @@ -41,3 +41,22 @@ export default async function getBalance( wallet: denormalizedAssetInWalletBalance, }; } + +export async function getWalletBalance( + assetAddress: string, + walletAddress: string, + provider: ethers.Provider, +) { + const assetIsNativeCryptocurrency = assetAddress === ethers.ZeroAddress; + + let assetWalletBalance: bigint | undefined; + + if (!assetIsNativeCryptocurrency) { + const assetContract = ERC20__factory.connect(assetAddress, provider); + assetWalletBalance = await assetContract.balanceOf(walletAddress); + } else { + assetWalletBalance = await provider.getBalance(walletAddress); + } + + return assetWalletBalance +} From fa0a9d09cef32fd0228097f702d127d0e7cfc4f6 Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 13:21:45 +0400 Subject: [PATCH 03/11] remove unused imports and variables --- src/Unit/Exchange/generateSwapCalldata.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index ffbddcb..a55d4a5 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -17,7 +17,6 @@ import type { SingleSwap } from "../../types.js"; import type { AddressLike } from "ethers"; import { addressLikeToString } from "../../utils/addressLikeToString.js"; import { generateUnwrapAndTransferCall, generateWrapAndTransferCall } from "./callGenerators/weth.js"; -import { Exchange__factory } from "@orionprotocol/contracts/lib/ethers-v6/index.js"; import { getWalletBalance } from "../../utils/getBalance.js"; export type Factory = "UniswapV2" | "UniswapV3" | "Curve" | "OrionV2" | "OrionV3"; @@ -57,7 +56,7 @@ export async function generateSwapCalldataWithUnit({ } const wethAddress = safeGet(unit.contracts, "WETH"); const curveRegistryAddress = safeGet(unit.contracts, "curveRegistry"); - const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch( + const { assetToAddress, swapExecutorContractAddress } = await simpleFetch( unit.blockchainService.getInfo )(); From 9d297dcbb8f9d574d337ea1e1f6c6483a346ca0d Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 13:25:37 +0400 Subject: [PATCH 04/11] bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fa10312..437abf1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.14-rc0", + "version": "0.20.14-rc100", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From 827b2d32cdee5ee4e57df125276f8daa41cadf1e Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 14:55:24 +0400 Subject: [PATCH 05/11] fix passing ticker instead of token address --- src/Unit/Exchange/generateSwapCalldata.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index a55d4a5..948d094 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -62,7 +62,7 @@ export async function generateSwapCalldataWithUnit({ let path = SafeArray.from(arrayLikePath); const walletBalance = await getWalletBalance( - path.first().assetIn, + safeGet(assetToAddress, path.first().assetIn), receiverAddress, unit.provider ); From ba508ec37eae4fa8605856e1ce15f1a7dfa77063 Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 14:59:50 +0400 Subject: [PATCH 06/11] bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fb57e71..785ac64 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.14-rc1", + "version": "0.20.14-rc2", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From 323b4e052d1c8464b691abcab21f5365e3b67c84 Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 15:45:50 +0400 Subject: [PATCH 07/11] change curve registry address --- src/config/chains.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/chains.json b/src/config/chains.json index 0cba1b0..68b940c 100644 --- a/src/config/chains.json +++ b/src/config/chains.json @@ -35,7 +35,7 @@ "baseCurrencyName": "BNB", "contracts": { "WETH": "0x23eE96bEaAB62abE126AA192e677c52bB7d274F0", - "curveRegistry": "0x8845b36C3DE93379F468590FFa102D4aF8C49A6c" + "curveRegistry": "0x93461072c00b2740c474a3d52c70be6249c802d8" } }, "3": { From 82632582265dd38c52fec014805253147e5a8c64 Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 15:46:18 +0400 Subject: [PATCH 08/11] bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 785ac64..3895c72 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.14-rc2", + "version": "0.20.14-rc3", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From ad40b10f78e9cab51cd216d7f11fd604e645065d Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 18:34:43 +0400 Subject: [PATCH 09/11] fix exchangeToNativeDecimal function --- src/Unit/Exchange/callGenerators/utils.ts | 2 +- src/Unit/Exchange/generateSwapCalldata.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Unit/Exchange/callGenerators/utils.ts b/src/Unit/Exchange/callGenerators/utils.ts index ad10f6b..b61dc4b 100644 --- a/src/Unit/Exchange/callGenerators/utils.ts +++ b/src/Unit/Exchange/callGenerators/utils.ts @@ -99,5 +99,5 @@ export async function toNativeDecimals(token: AddressLike, amount: BigNumberish, const contract = ERC20__factory.connect(token, provider) decimals = BigInt(await contract.decimals()) } - return BigInt(amount) * (BigInt(10) ** decimals) / (BigInt(10) ** 8n) + return BigInt(amount) * (BigInt(10) ** decimals) } \ No newline at end of file diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index 948d094..506c79b 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -77,7 +77,7 @@ export async function generateSwapCalldataWithUnit({ amount, minReturnAmount, receiverAddress, - useContractBalance: walletBalance < BigInt(amount), + useContractBalance: walletBalance < await exchangeToNativeDecimals(path.first().assetIn, amount, unit.provider), path, wethAddress, curveRegistryAddress, From 41e511a98855798ec005f865ea3c59a4e8e98ab7 Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 18:35:01 +0400 Subject: [PATCH 10/11] bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3895c72..da39107 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.14-rc3", + "version": "0.20.14-rc4", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", From a9103e8744e4ac362e83cedf0abf7f8037eefafa Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Mon, 6 Nov 2023 16:05:50 +0400 Subject: [PATCH 11/11] bump before merge --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index da39107..65738eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.14-rc4", + "version": "0.20.15", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js",