@cryptorubic/web3 0.15.0-alpha-stellar.0 → 1.0.0-alpha-rub-1103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -1
- package/src/index.d.ts +130 -22
- package/src/index.js +130 -20
- package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.d.ts +38 -0
- package/src/lib/adapter/adapters/{bitcoin-adapter.js → adapter-bitcoin/bitcoin-adapter.js} +35 -13
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-send-tx-params.d.ts +5 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.d.ts +5 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.js +2 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types.d.ts +7 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types.js +2 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config.d.ts +6 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config.js +2 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/signer/bitcoin-adapter-signer.d.ts +17 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/signer/bitcoin-adapter-signer.js +131 -0
- package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.d.ts +4 -0
- package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.js +705 -0
- package/src/lib/adapter/adapters/adapter-evm/evm-adapter.d.ts +120 -0
- package/src/lib/adapter/adapters/{evm-adapter.js → adapter-evm/evm-adapter.js} +215 -87
- package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.d.ts +38 -0
- package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/adapter-evm/signer/evm-adapter-signer.d.ts +53 -0
- package/src/lib/adapter/adapters/adapter-evm/signer/evm-adapter-signer.js +268 -0
- package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.d.ts +12 -0
- package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.js +70 -0
- package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.d.ts +16 -0
- package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/{utils → adapter-solana/services}/solana-tokens-service.d.ts +1 -1
- package/src/lib/adapter/adapters/{utils → adapter-solana/services}/solana-tokens-service.js +2 -2
- package/src/lib/adapter/adapters/adapter-solana/signer/solana-adapter-signer.d.ts +17 -0
- package/src/lib/adapter/adapters/adapter-solana/signer/solana-adapter-signer.js +87 -0
- package/src/lib/adapter/adapters/{solana-adapter.d.ts → adapter-solana/solana-adapter.d.ts} +25 -15
- package/src/lib/adapter/adapters/{solana-adapter.js → adapter-solana/solana-adapter.js} +60 -38
- package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.d.ts +8 -0
- package/src/lib/adapter/adapters/adapter-sui/models/sui-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/adapter-sui/signer/sui-adapter-signer.d.ts +17 -0
- package/src/lib/adapter/adapters/adapter-sui/signer/sui-adapter-signer.js +55 -0
- package/src/lib/adapter/adapters/adapter-sui/sui-adapter.d.ts +32 -0
- package/src/lib/adapter/adapters/{sui-adapter.js → adapter-sui/sui-adapter.js} +45 -9
- package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.d.ts +26 -0
- package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.d.ts +4 -4
- package/src/lib/adapter/adapters/adapter-ton/signer/ton-adapter-signer.d.ts +43 -0
- package/src/lib/adapter/adapters/adapter-ton/signer/ton-adapter-signer.js +166 -0
- package/src/lib/adapter/adapters/adapter-ton/ton-adapter.d.ts +32 -0
- package/src/lib/adapter/adapters/adapter-ton/ton-adapter.js +104 -0
- package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.d.ts +13 -0
- package/src/lib/adapter/adapters/adapter-tron/models/tron-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/adapter-tron/models/tron-web-provider.d.ts +4 -0
- package/src/lib/adapter/adapters/adapter-tron/models/tron-web-provider.js +2 -0
- package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.d.ts +17 -0
- package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.js +57 -0
- package/src/lib/adapter/adapters/adapter-tron/tron-adapter.d.ts +57 -0
- package/src/lib/adapter/adapters/{tron-adapter.js → adapter-tron/tron-adapter.js} +131 -66
- package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.d.ts +2 -0
- package/src/lib/adapter/adapters/adapter-tron/utils/parse-tron-error.js +20 -0
- package/src/lib/adapter/adapters/common/abstract-adapter.d.ts +84 -0
- package/src/lib/adapter/adapters/common/abstract-adapter.js +82 -0
- package/src/lib/adapter/adapters/common/signer/abstract-adapter-signer.d.ts +22 -0
- package/src/lib/adapter/adapters/common/signer/abstract-adapter-signer.js +42 -0
- package/src/lib/adapter/adapters/models/approve-adapter.d.ts +12 -8
- package/src/lib/adapter/adapters/models/approve-adapter.js +1 -1
- package/src/lib/adapter/adapters/models/basic-transaction-options.d.ts +1 -1
- package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.d.ts +5 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.d.ts +4 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.d.ts +4 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.d.ts +18 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.d.ts +10 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.d.ts +5 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/contract-params.d.ts +23 -0
- package/src/lib/adapter/adapters/models/old-features-models/contract-params.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.d.ts +32 -0
- package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.d.ts +6 -0
- package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.d.ts +5 -0
- package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.d.ts +65 -0
- package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.js +2 -0
- package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.d.ts +8 -0
- package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.js +2 -0
- package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.d.ts +5 -0
- package/src/lib/adapter/adapters/models/web3-public-models/contract-multicall-response.js +2 -0
- package/src/lib/adapter/adapters/models/web3-public-models/method-data.d.ts +4 -0
- package/src/lib/adapter/adapters/models/web3-public-models/method-data.js +2 -0
- package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.d.ts +1 -0
- package/src/lib/adapter/adapters/models/web3-public-models/supported-token-field.js +2 -0
- package/src/lib/adapter/adapters/models/web3-public-models/tx-status.d.ts +10 -0
- package/src/lib/adapter/adapters/models/web3-public-models/tx-status.js +12 -0
- package/src/lib/adapter/adapters/utils/errors.d.ts +2 -0
- package/src/lib/adapter/adapters/utils/errors.js +10 -0
- package/src/lib/adapter/adapters/utils/options.d.ts +10 -0
- package/src/lib/adapter/adapters/utils/options.js +59 -0
- package/src/lib/adapter/adapters/utils/waitFor.d.ts +1 -0
- package/src/lib/adapter/adapters/utils/waitFor.js +6 -0
- package/src/lib/adapter/blockchain-adapter-factory.service.d.ts +15 -13
- package/src/lib/adapter/blockchain-adapter-factory.service.js +44 -61
- package/src/lib/adapter/constants/chain-configs/chain-configs.js +38 -56
- package/src/lib/adapter/constants/models/env-type.d.ts +1 -0
- package/src/lib/adapter/constants/models/env-type.js +2 -0
- package/src/lib/adapter/constants/models/solana-web3.d.ts +1 -1
- package/src/lib/adapter/constants/rubic-api-link-mapping.d.ts +2 -0
- package/src/lib/adapter/constants/rubic-api-link-mapping.js +16 -0
- package/src/lib/adapter/constants/viem-blockchain-mapping.js +0 -1
- package/src/lib/adapter/models/create-factory-params.d.ts +23 -0
- package/src/lib/adapter/models/create-factory-params.js +2 -0
- package/src/lib/errors/blockchain/deflation-token.error.d.ts +11 -0
- package/src/lib/errors/blockchain/deflation-token.error.js +16 -0
- package/src/lib/errors/blockchain/healthcheck.error.d.ts +8 -0
- package/src/lib/errors/blockchain/healthcheck.error.js +15 -0
- package/src/lib/errors/blockchain/invalid-address.error.d.ts +8 -0
- package/src/lib/errors/blockchain/invalid-address.error.js +15 -0
- package/src/lib/errors/blockchain/low-gas.error.d.ts +7 -0
- package/src/lib/errors/blockchain/low-gas.error.js +14 -0
- package/src/lib/errors/blockchain/transaction-reverted.error.d.ts +7 -0
- package/src/lib/errors/blockchain/transaction-reverted.error.js +14 -0
- package/src/lib/errors/blockchain/tron-insufficient-native-balance.d.ts +7 -0
- package/src/lib/errors/blockchain/tron-insufficient-native-balance.js +14 -0
- package/src/lib/errors/blockchain/tron-transaction-expired.d.ts +7 -0
- package/src/lib/errors/blockchain/tron-transaction-expired.js +14 -0
- package/src/lib/errors/blockchain/user-reject.error.d.ts +7 -0
- package/src/lib/errors/blockchain/user-reject.error.js +14 -0
- package/src/lib/errors/blockchain/wrong-from-address.error.d.ts +7 -0
- package/src/lib/errors/blockchain/wrong-from-address.error.js +14 -0
- package/src/lib/errors/blockchain/wrong-receiver-address.error.d.ts +7 -0
- package/src/lib/errors/blockchain/wrong-receiver-address.error.js +14 -0
- package/src/lib/errors/common/timeout.error.d.ts +4 -0
- package/src/lib/errors/common/timeout.error.js +12 -0
- package/src/lib/errors/common/tx-reverted-in-chain.error.d.ts +4 -0
- package/src/lib/errors/common/tx-reverted-in-chain.error.js +11 -0
- package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.d.ts +7 -0
- package/src/lib/errors/cross-chain/cross-chain-is-unavailable.error.js +14 -0
- package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.d.ts +7 -0
- package/src/lib/errors/cross-chain/insufficient-funds-gas-price-value.error.js +14 -0
- package/src/lib/errors/cross-chain/low-to-slippage.error.d.ts +6 -0
- package/src/lib/errors/cross-chain/low-to-slippage.error.js +10 -0
- package/src/lib/errors/cross-chain/max-gas-price-overflow.error.d.ts +8 -0
- package/src/lib/errors/cross-chain/max-gas-price-overflow.error.js +15 -0
- package/src/lib/errors/cross-chain/too-low-amount.error.d.ts +7 -0
- package/src/lib/errors/cross-chain/too-low-amount.error.js +14 -0
- package/src/lib/errors/cross-chain/unsupported-receiver-address.error.d.ts +4 -0
- package/src/lib/errors/cross-chain/unsupported-receiver-address.error.js +11 -0
- package/src/lib/errors/cross-chain/updated-rates-error.d.ts +10 -0
- package/src/lib/errors/cross-chain/updated-rates-error.js +17 -0
- package/src/lib/errors/models/rubic-api-error.d.ts +21 -0
- package/src/lib/errors/models/rubic-api-error.js +2 -0
- package/src/lib/errors/on-chain/on-chain-is-unavailable.error.d.ts +7 -0
- package/src/lib/errors/on-chain/on-chain-is-unavailable.error.js +14 -0
- package/src/lib/errors/proxy/unapproved-contract-error.d.ts +8 -0
- package/src/lib/errors/proxy/unapproved-contract-error.js +15 -0
- package/src/lib/errors/proxy/unapproved-method-error.d.ts +8 -0
- package/src/lib/errors/proxy/unapproved-method-error.js +15 -0
- package/src/lib/errors/proxy/unlisted-error.d.ts +9 -0
- package/src/lib/errors/proxy/unlisted-error.js +16 -0
- package/src/lib/errors/rubic-sdk.error.d.ts +6 -0
- package/src/lib/errors/rubic-sdk.error.js +13 -0
- package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.d.ts +7 -0
- package/src/lib/errors/swap/bridgers-pair-is-unavailable.error.js +14 -0
- package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.d.ts +8 -0
- package/src/lib/errors/swap/failed-to-check-for-transaction-receipt.error.js +15 -0
- package/src/lib/errors/swap/insufficient-funds-oneinch.error.d.ts +9 -0
- package/src/lib/errors/swap/insufficient-funds-oneinch.error.js +15 -0
- package/src/lib/errors/swap/insufficient-funds.error.d.ts +11 -0
- package/src/lib/errors/swap/insufficient-funds.error.js +18 -0
- package/src/lib/errors/swap/insufficient-liquidity.error.d.ts +7 -0
- package/src/lib/errors/swap/insufficient-liquidity.error.js +14 -0
- package/src/lib/errors/swap/lifi-pair-is-unavailable.error.d.ts +7 -0
- package/src/lib/errors/swap/lifi-pair-is-unavailable.error.js +14 -0
- package/src/lib/errors/swap/low-slippage-deflationary-token.error.d.ts +7 -0
- package/src/lib/errors/swap/low-slippage-deflationary-token.error.js +14 -0
- package/src/lib/errors/swap/low-slippage.error.d.ts +8 -0
- package/src/lib/errors/swap/low-slippage.error.js +15 -0
- package/src/lib/errors/swap/max-amount.error.d.ts +7 -0
- package/src/lib/errors/swap/max-amount.error.js +14 -0
- package/src/lib/errors/swap/max-decimals.error.d.ts +5 -0
- package/src/lib/errors/swap/max-decimals.error.js +12 -0
- package/src/lib/errors/swap/min-amount.error.d.ts +7 -0
- package/src/lib/errors/swap/min-amount.error.js +14 -0
- package/src/lib/errors/swap/no-linked-account-erros.d.ts +4 -0
- package/src/lib/errors/swap/no-linked-account-erros.js +11 -0
- package/src/lib/errors/swap/not-supported-blockchain.d.ts +8 -0
- package/src/lib/errors/swap/not-supported-blockchain.js +15 -0
- package/src/lib/errors/swap/not-supported-region.d.ts +7 -0
- package/src/lib/errors/swap/not-supported-region.js +14 -0
- package/src/lib/errors/swap/not-supported-tokens.error.d.ts +7 -0
- package/src/lib/errors/swap/not-supported-tokens.error.js +14 -0
- package/src/lib/errors/swap/not-whitelisted-provider.error.d.ts +10 -0
- package/src/lib/errors/swap/not-whitelisted-provider.error.js +17 -0
- package/src/lib/errors/swap/simulation-failed.error.d.ts +6 -0
- package/src/lib/errors/swap/simulation-failed.error.js +12 -0
- package/src/lib/errors/swap/swap-error-on-provider-side.d.ts +7 -0
- package/src/lib/errors/swap/swap-error-on-provider-side.js +14 -0
- package/src/lib/errors/swap/swap-request.error.d.ts +7 -0
- package/src/lib/errors/swap/swap-request.error.js +14 -0
- package/src/lib/errors/swap/trade-expired.error.d.ts +4 -0
- package/src/lib/errors/swap/trade-expired.error.js +11 -0
- package/src/lib/errors/swap/unnecessary-approve.error.d.ts +7 -0
- package/src/lib/errors/swap/unnecessary-approve.error.js +14 -0
- package/src/lib/errors/swap/wallet-not-connected.error.d.ts +8 -0
- package/src/lib/errors/swap/wallet-not-connected.error.js +15 -0
- package/src/lib/errors/swap/wrong-network.error.d.ts +10 -0
- package/src/lib/errors/swap/wrong-network.error.js +16 -0
- package/src/lib/utils/constants/web3-pure-store.js +10 -5
- package/src/lib/utils/models/evm-transaction-config.d.ts +2 -0
- package/src/lib/utils/web3-types/zcash-web3-pure.d.ts +5 -0
- package/src/lib/utils/web3-types/zcash-web3-pure.js +17 -0
- package/src/lib/adapter/adapters/abstract-adapter.d.ts +0 -23
- package/src/lib/adapter/adapters/abstract-adapter.js +0 -59
- package/src/lib/adapter/adapters/bitcoin-adapter.d.ts +0 -18
- package/src/lib/adapter/adapters/evm-adapter.d.ts +0 -59
- package/src/lib/adapter/adapters/sui-adapter.d.ts +0 -17
- package/src/lib/adapter/adapters/ton-adapter.d.ts +0 -22
- package/src/lib/adapter/adapters/ton-adapter.js +0 -100
- package/src/lib/adapter/adapters/tron-adapter.d.ts +0 -37
- /package/src/lib/adapter/adapters/{models/gas-price.js → adapter-bitcoin/models/btc-send-tx-params.js} +0 -0
- /package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.js +0 -0
- /package/src/lib/adapter/adapters/models/{gas-price.d.ts → evm-web3-public-models/gas-price.d.ts} +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Abi, MulticallResponse, MulticallParameters, PublicActions, PublicClient, WalletClient, WalletActions, BlockNumber, BlockTag, GetBlockReturnType, TransactionReceipt } from 'viem';
|
|
2
|
+
import { AbstractAdapter } from '../common/abstract-adapter';
|
|
3
|
+
import { EvmBlockchainName, ICustomLogger, Token, TokenAmount, PriceTokenAmount, HttpClient } from '@cryptorubic/core';
|
|
4
|
+
import BigNumber from 'bignumber.js';
|
|
5
|
+
import { EvmAdapterOptions } from '../models/evm-adapter-options';
|
|
6
|
+
import { EvmTransactionConfig } from '../../../utils/models/evm-transaction-config';
|
|
7
|
+
import { EvmAdapterSigner } from './signer/evm-adapter-signer';
|
|
8
|
+
import { ClientAdaptersFactoryParams } from '../../models/create-factory-params';
|
|
9
|
+
import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
|
|
10
|
+
import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
|
|
11
|
+
import { MethodData } from '../models/web3-public-models/method-data';
|
|
12
|
+
import { GasPrice } from '../models/evm-web3-public-models/gas-price';
|
|
13
|
+
import { EvmTransactionOptions } from './models/evm-send-tx-params';
|
|
14
|
+
import { ApprovableAdapter } from '../models/approve-adapter';
|
|
15
|
+
import { AllowanceInfo } from '../models/common-types';
|
|
16
|
+
import { TxStatus } from '../models/web3-public-models/tx-status';
|
|
17
|
+
export declare class EvmAdapter extends AbstractAdapter<PublicActions & PublicClient, WalletClient & WalletActions, EvmBlockchainName> implements ApprovableAdapter<EvmTransactionConfig> {
|
|
18
|
+
private readonly adapterOptions;
|
|
19
|
+
private readonly clientParams?;
|
|
20
|
+
readonly signer: EvmAdapterSigner;
|
|
21
|
+
needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
|
|
22
|
+
handlePreswap(contractAddress: string, walletAddress: string, tokenAmount: TokenAmount): Promise<void>;
|
|
23
|
+
constructor(httpClient: HttpClient, adapterOptions: EvmAdapterOptions, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams | undefined);
|
|
24
|
+
initWeb3Client(): void;
|
|
25
|
+
callContractMethod<T extends Web3PrimitiveType = string>(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments?: unknown[], options?: {
|
|
26
|
+
from?: string;
|
|
27
|
+
value?: string;
|
|
28
|
+
gasPrice?: string;
|
|
29
|
+
gas?: string;
|
|
30
|
+
}): Promise<T>;
|
|
31
|
+
getTransactionStatus(hash: string): Promise<TxStatus>;
|
|
32
|
+
/**
|
|
33
|
+
* Gets mined transaction receipt.
|
|
34
|
+
* @param hash Transaction hash
|
|
35
|
+
*/
|
|
36
|
+
private getTransactionReceipt;
|
|
37
|
+
getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
38
|
+
multicallContractsMethods<Output extends Web3PrimitiveType>(contractAbi: Abi, contractsData: {
|
|
39
|
+
contractAddress: string;
|
|
40
|
+
methodsData: MethodData[];
|
|
41
|
+
}[]): Promise<ContractMulticallResponse<Output>[][]>;
|
|
42
|
+
getBlockNumber(): Promise<number | {
|
|
43
|
+
blockNumber: number;
|
|
44
|
+
workchain: number;
|
|
45
|
+
}>;
|
|
46
|
+
private createPublicClient;
|
|
47
|
+
multicallByContract<T>(contracts: MulticallParameters, allowErrors?: boolean): Promise<MulticallResponse<T>[]>;
|
|
48
|
+
multicallByAddress<T>(address: string, abi: Abi, method: string, methodArgs?: unknown[][], allowErrors?: boolean): Promise<MulticallResponse<T>[]>;
|
|
49
|
+
static encodeMethodCall(contractAddress: string, contractAbi: Abi, method: string, parameters?: unknown[], value?: string): EvmTransactionConfig;
|
|
50
|
+
read<T>(address: string, abi: Abi, method: string, methodArgs?: unknown[]): Promise<T>;
|
|
51
|
+
/**
|
|
52
|
+
* Generate random HEX strings from a given byte size.
|
|
53
|
+
* @param size byte size.
|
|
54
|
+
*/
|
|
55
|
+
static randomHex(size: number): string;
|
|
56
|
+
/**
|
|
57
|
+
* Converts address to checksum format.
|
|
58
|
+
* @param address Address to convert.
|
|
59
|
+
*/
|
|
60
|
+
static toChecksumAddress(address: string): string;
|
|
61
|
+
simulateTransaction(config: EvmTransactionConfig, from: string, timeout?: number): Promise<string>;
|
|
62
|
+
callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<EvmBlockchainName>[]>;
|
|
63
|
+
getGasPrice(): Promise<string>;
|
|
64
|
+
checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string, amount?: BigNumber): Promise<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* @param walletAddress
|
|
67
|
+
* @param tokenAddress
|
|
68
|
+
* @returns wei amount
|
|
69
|
+
*/
|
|
70
|
+
getBalance(walletAddress: string, tokenAddress?: string): Promise<BigNumber>;
|
|
71
|
+
getTransactionCount(walletAddress: string): Promise<number>;
|
|
72
|
+
getAllowance(fromTokenAddress: string, walletAddress: string, spenderAddress: string): Promise<AllowanceInfo>;
|
|
73
|
+
needApprove(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string): Promise<boolean>;
|
|
74
|
+
/**
|
|
75
|
+
* Executes approve method in ERC-20 token contract.
|
|
76
|
+
* @param tokenAddress Address of the smart-contract corresponding to the token.
|
|
77
|
+
* @param spenderAddress Wallet or contract address to approve.
|
|
78
|
+
* @param amount Token amount to approve in wei.
|
|
79
|
+
* @param [options] Additional options.
|
|
80
|
+
* @returns Approval transaction hash.
|
|
81
|
+
*/
|
|
82
|
+
approveTokens(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: EvmTransactionOptions): Promise<string>;
|
|
83
|
+
/**
|
|
84
|
+
* Build encoded approve transaction config.
|
|
85
|
+
* @param tokenAddress Address of the smart-contract corresponding to the token.
|
|
86
|
+
* @param spenderAddress Wallet or contract address to approve.
|
|
87
|
+
* @param amount wei amount of tokens in approval window in spending cap field
|
|
88
|
+
* @returns Encoded approve transaction config.
|
|
89
|
+
*/
|
|
90
|
+
encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): EvmTransactionConfig;
|
|
91
|
+
needPermit2Approve(token: TokenAmount, permit2Address: string, walletAddress: string, spenderAddress: string): Promise<boolean>;
|
|
92
|
+
/**
|
|
93
|
+
* @param tokenAddress Token address you want to approve for spending
|
|
94
|
+
* @param permit2Address Addres of permit2 contract
|
|
95
|
+
* @param spenderAddress Contract address spending your tokens
|
|
96
|
+
* @param amount Approved amount
|
|
97
|
+
* @param deadline Ms number added to current time (Date.now()) until approve expiration
|
|
98
|
+
*/
|
|
99
|
+
approveOnPermit2(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: EvmTransactionOptions): Promise<TransactionReceipt>;
|
|
100
|
+
/**
|
|
101
|
+
* Calculates EIP-1559 specific gas details.
|
|
102
|
+
* @see {@link https://github.com/ethers-io/ethers.js/blob/master/packages/abstract-provider/src.ts/index.ts#L235}
|
|
103
|
+
* @returns block baseFee, average maxPriorityFeePerGas, and maxFeePerGas.
|
|
104
|
+
*/
|
|
105
|
+
getPriorityFeeGas(): Promise<GasPrice>;
|
|
106
|
+
/**
|
|
107
|
+
* Gets block by block id.
|
|
108
|
+
* @param [blockId] Block id: hash, number ... Default is 'latest'.
|
|
109
|
+
* @returns Block by blockId parameter.
|
|
110
|
+
*/
|
|
111
|
+
getBlock(blockType?: BlockNumber | BlockTag): Promise<GetBlockReturnType>;
|
|
112
|
+
/**
|
|
113
|
+
* Estimates average maxPriorityFeePerGas for EIP-1559 transactions based on last 20 blocks.
|
|
114
|
+
* @see {@link https://docs.alchemy.com/docs/how-to-build-a-gas-fee-estimator-using-eip-1559}
|
|
115
|
+
* @returns Average maxPriorityFeePerGas in wei
|
|
116
|
+
*/
|
|
117
|
+
getMaxPriorityFeePerGas(): Promise<number>;
|
|
118
|
+
getBaseFeePerGas(blockNumber: bigint): Promise<number>;
|
|
119
|
+
private handlePossibleError;
|
|
120
|
+
}
|
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EvmAdapter = void 0;
|
|
4
4
|
const viem_1 = require("viem");
|
|
5
|
-
const viem_blockchain_mapping_1 = require("
|
|
6
|
-
const erc20_token_abi_1 = require("
|
|
7
|
-
const abstract_adapter_1 = require("
|
|
5
|
+
const viem_blockchain_mapping_1 = require("../../constants/viem-blockchain-mapping");
|
|
6
|
+
const erc20_token_abi_1 = require("../constants/erc20-token-abi");
|
|
7
|
+
const abstract_adapter_1 = require("../common/abstract-adapter");
|
|
8
8
|
const core_1 = require("@cryptorubic/core");
|
|
9
9
|
const bignumber_js_1 = require("bignumber.js");
|
|
10
|
-
const web3_pure_1 = require("
|
|
11
|
-
const possible_errors_1 = require("
|
|
12
|
-
const
|
|
10
|
+
const web3_pure_1 = require("../../../utils/web3-pure");
|
|
11
|
+
const possible_errors_1 = require("../constants/possible-errors");
|
|
12
|
+
const evm_adapter_signer_1 = require("./signer/evm-adapter-signer");
|
|
13
|
+
const rubic_sdk_error_1 = require("../../../errors/rubic-sdk.error");
|
|
14
|
+
const uni_v3_permit_abi_1 = require("../constants/uni-v3-permit-abi");
|
|
15
|
+
const insufficient_funds_gas_price_value_error_1 = require("../../../errors/cross-chain/insufficient-funds-gas-price-value.error");
|
|
16
|
+
const options_1 = require("../utils/options");
|
|
17
|
+
const tx_status_1 = require("../models/web3-public-models/tx-status");
|
|
13
18
|
class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
14
19
|
async needPreswapAction(token, contractAddress, walletAddress, amount) {
|
|
15
20
|
return this.needApprove(token, contractAddress, walletAddress, amount);
|
|
@@ -22,68 +27,132 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
22
27
|
const fromTokenAddress = isNative && tokenAmount.blockchain === core_1.BLOCKCHAIN_NAME.METIS
|
|
23
28
|
? '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000'
|
|
24
29
|
: tokenAmount.blockchain;
|
|
25
|
-
await this.writeContract(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', '0', [approveAmount]);
|
|
30
|
+
await this.signer.writeContract(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', '0', [approveAmount]);
|
|
26
31
|
}
|
|
27
|
-
constructor(adapterOptions, logger) {
|
|
32
|
+
constructor(httpClient, adapterOptions, logger, clientParams) {
|
|
28
33
|
super(adapterOptions.blockchain, logger);
|
|
29
|
-
this.
|
|
34
|
+
this.adapterOptions = adapterOptions;
|
|
35
|
+
this.clientParams = clientParams;
|
|
36
|
+
this.signer = new evm_adapter_signer_1.EvmAdapterSigner(this.publicRef, httpClient, logger, clientParams);
|
|
37
|
+
}
|
|
38
|
+
initWeb3Client() {
|
|
39
|
+
this.public = this.createPublicClient(this.adapterOptions.rpcList);
|
|
40
|
+
}
|
|
41
|
+
async callContractMethod(contractAddress, contractAbi, methodName, methodArguments = [], options = {}) {
|
|
42
|
+
return this.public.readContract({
|
|
43
|
+
abi: contractAbi,
|
|
44
|
+
address: contractAddress,
|
|
45
|
+
functionName: methodName,
|
|
46
|
+
args: methodArguments,
|
|
47
|
+
...(options.from && { account: options.from })
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async getTransactionStatus(hash) {
|
|
51
|
+
const txReceipt = await this.getTransactionReceipt(hash);
|
|
52
|
+
if (txReceipt === null) {
|
|
53
|
+
return tx_status_1.TX_STATUS.PENDING;
|
|
54
|
+
}
|
|
55
|
+
if (txReceipt.status) {
|
|
56
|
+
return tx_status_1.TX_STATUS.SUCCESS;
|
|
57
|
+
}
|
|
58
|
+
return tx_status_1.TX_STATUS.FAIL;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Gets mined transaction receipt.
|
|
62
|
+
* @param hash Transaction hash
|
|
63
|
+
*/
|
|
64
|
+
async getTransactionReceipt(hash) {
|
|
65
|
+
return this.public.getTransactionReceipt({ hash: hash });
|
|
66
|
+
}
|
|
67
|
+
async getTokensBalances(userAddress, tokensAddresses) {
|
|
68
|
+
const indexOfNativeCoin = tokensAddresses.findIndex((tokenAddress) => web3_pure_1.Web3Pure.isNativeAddress('ETH', tokenAddress));
|
|
69
|
+
const promises = [];
|
|
70
|
+
if (indexOfNativeCoin !== -1) {
|
|
71
|
+
tokensAddresses.splice(indexOfNativeCoin, 1);
|
|
72
|
+
promises[1] = this.getBalance(userAddress);
|
|
73
|
+
}
|
|
74
|
+
promises[0] = this.multicallContractsMethods(erc20_token_abi_1.erc20TokenAbi, tokensAddresses.map((tokenAddress) => ({
|
|
75
|
+
contractAddress: tokenAddress,
|
|
76
|
+
methodsData: [
|
|
77
|
+
{
|
|
78
|
+
methodName: 'balanceOf',
|
|
79
|
+
methodArguments: [userAddress]
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
})));
|
|
83
|
+
const results = await Promise.all(promises);
|
|
84
|
+
const tokensBalances = results[0].map((tokenResults) => {
|
|
85
|
+
const { success, output } = tokenResults[0];
|
|
86
|
+
return success ? new bignumber_js_1.default(output) : new bignumber_js_1.default(0);
|
|
87
|
+
});
|
|
88
|
+
if (indexOfNativeCoin !== -1) {
|
|
89
|
+
tokensBalances.splice(indexOfNativeCoin, 0, results[1]);
|
|
90
|
+
}
|
|
91
|
+
return tokensBalances;
|
|
92
|
+
}
|
|
93
|
+
async multicallContractsMethods(contractAbi, contractsData) {
|
|
94
|
+
const contracts = contractsData
|
|
95
|
+
.map(({ contractAddress, methodsData }) => {
|
|
96
|
+
const wagmiContract = {
|
|
97
|
+
address: contractAddress,
|
|
98
|
+
abi: contractAbi
|
|
99
|
+
};
|
|
100
|
+
return methodsData.map(({ methodName, methodArguments }) => ({
|
|
101
|
+
...wagmiContract,
|
|
102
|
+
functionName: methodName,
|
|
103
|
+
args: methodArguments
|
|
104
|
+
}));
|
|
105
|
+
})
|
|
106
|
+
.flat();
|
|
107
|
+
const outputs = await this.public.multicall({ contracts });
|
|
108
|
+
let outputIndex = 0;
|
|
109
|
+
return contractsData.map((contractData) => {
|
|
110
|
+
return contractData.methodsData.map(() => {
|
|
111
|
+
const output = outputs[outputIndex];
|
|
112
|
+
if (!output) {
|
|
113
|
+
throw new rubic_sdk_error_1.RubicSdkError('Output has to be defined');
|
|
114
|
+
}
|
|
115
|
+
outputIndex++;
|
|
116
|
+
return {
|
|
117
|
+
success: output.status === 'success',
|
|
118
|
+
output: output?.error ? null : output.result
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
async getBlockNumber() {
|
|
124
|
+
const blockNumber = await this.public.getBlockNumber();
|
|
125
|
+
return Number(blockNumber);
|
|
30
126
|
}
|
|
31
127
|
createPublicClient(rpcList) {
|
|
32
128
|
if (!rpcList?.[0]) {
|
|
33
129
|
this.logger?.customError('RPC list is empty');
|
|
34
130
|
return null;
|
|
35
131
|
}
|
|
36
|
-
const
|
|
132
|
+
const customViemConfig = this.clientParams?.viemConfig?.[this.blockchain];
|
|
133
|
+
const defaultTransportConfig = {
|
|
37
134
|
batch: { batchSize: 2000, wait: 16 },
|
|
38
|
-
onFetchResponse: (response) =>
|
|
39
|
-
this.handlePossibleError(response);
|
|
40
|
-
},
|
|
135
|
+
onFetchResponse: (response) => this.handlePossibleError(response),
|
|
41
136
|
retryCount: 2,
|
|
42
137
|
retryDelay: 100,
|
|
43
138
|
timeout: 5000
|
|
44
|
-
}
|
|
139
|
+
};
|
|
140
|
+
const defaultFallbackConfig = {
|
|
141
|
+
rank: {
|
|
142
|
+
interval: 1800000
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
const transports = rpcList.map((rpc) => {
|
|
146
|
+
return (0, viem_1.http)(rpc, customViemConfig?.transportConfig ? customViemConfig.transportConfig : defaultTransportConfig);
|
|
147
|
+
});
|
|
148
|
+
const fallbackConfig = customViemConfig?.fallbackConfig ? customViemConfig?.fallbackConfig : defaultFallbackConfig;
|
|
45
149
|
const chain = viem_blockchain_mapping_1.viemBlockchainMapping[this.blockchain];
|
|
46
150
|
return (0, viem_1.createPublicClient)({
|
|
47
151
|
// @ts-ignore
|
|
48
152
|
chain,
|
|
49
|
-
transport: (0, viem_1.fallback)(transports,
|
|
50
|
-
rank: {
|
|
51
|
-
interval: 1800000
|
|
52
|
-
}
|
|
53
|
-
})
|
|
153
|
+
transport: (0, viem_1.fallback)(transports, fallbackConfig)
|
|
54
154
|
});
|
|
55
155
|
}
|
|
56
|
-
async read(address, abi, method, methodArgs = []) {
|
|
57
|
-
const result = await this.public.readContract({
|
|
58
|
-
abi,
|
|
59
|
-
address: address,
|
|
60
|
-
args: methodArgs,
|
|
61
|
-
functionName: method
|
|
62
|
-
});
|
|
63
|
-
return result;
|
|
64
|
-
}
|
|
65
|
-
async writeContract(address, abi, method, value = '0', methodArgs = []) {
|
|
66
|
-
const result = await this.wallet.writeContract({
|
|
67
|
-
abi,
|
|
68
|
-
address: address,
|
|
69
|
-
account: address,
|
|
70
|
-
args: methodArgs,
|
|
71
|
-
functionName: method,
|
|
72
|
-
chain: this.public.chain,
|
|
73
|
-
value: (0, viem_1.parseEther)(value)
|
|
74
|
-
});
|
|
75
|
-
return result;
|
|
76
|
-
}
|
|
77
|
-
async write(address, to, value, data) {
|
|
78
|
-
const result = await this.wallet.sendTransaction({
|
|
79
|
-
account: address,
|
|
80
|
-
to: to,
|
|
81
|
-
value: (0, viem_1.parseEther)(value),
|
|
82
|
-
data: data,
|
|
83
|
-
chain: this.public.chain
|
|
84
|
-
});
|
|
85
|
-
return result;
|
|
86
|
-
}
|
|
87
156
|
async multicallByContract(contracts, allowErrors = true) {
|
|
88
157
|
const results = await this.public.multicall(contracts);
|
|
89
158
|
const rpcRequestFail = results.every((result) => result?.status === 'failure');
|
|
@@ -135,6 +204,31 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
135
204
|
throw err;
|
|
136
205
|
}
|
|
137
206
|
}
|
|
207
|
+
async read(address, abi, method, methodArgs = []) {
|
|
208
|
+
const result = await this.public.readContract({
|
|
209
|
+
abi,
|
|
210
|
+
address: address,
|
|
211
|
+
args: methodArgs,
|
|
212
|
+
functionName: method
|
|
213
|
+
});
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Generate random HEX strings from a given byte size.
|
|
218
|
+
* @param size byte size.
|
|
219
|
+
*/
|
|
220
|
+
static randomHex(size) {
|
|
221
|
+
const bytes = new Uint8Array(size);
|
|
222
|
+
crypto.getRandomValues(bytes);
|
|
223
|
+
return (0, viem_1.toHex)(bytes);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Converts address to checksum format.
|
|
227
|
+
* @param address Address to convert.
|
|
228
|
+
*/
|
|
229
|
+
static toChecksumAddress(address) {
|
|
230
|
+
return (0, viem_1.getAddress)(address);
|
|
231
|
+
}
|
|
138
232
|
async simulateTransaction(config, from, timeout = 15000) {
|
|
139
233
|
try {
|
|
140
234
|
const callParams = {
|
|
@@ -209,14 +303,15 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
209
303
|
* @returns wei amount
|
|
210
304
|
*/
|
|
211
305
|
async getBalance(walletAddress, tokenAddress) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
return new bignumber_js_1.default(nativeBalance.toString());
|
|
306
|
+
const isToken = tokenAddress && !web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.EVM, tokenAddress);
|
|
307
|
+
if (isToken) {
|
|
308
|
+
const tokenBalance = await this.read(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'balanceOf', [walletAddress]);
|
|
309
|
+
return new bignumber_js_1.default(tokenBalance);
|
|
217
310
|
}
|
|
218
|
-
const
|
|
219
|
-
|
|
311
|
+
const nativeBalance = await this.public.getBalance({
|
|
312
|
+
address: walletAddress
|
|
313
|
+
});
|
|
314
|
+
return new bignumber_js_1.default(nativeBalance.toString());
|
|
220
315
|
}
|
|
221
316
|
async getTransactionCount(walletAddress) {
|
|
222
317
|
const transactionCount = await this.public?.getTransactionCount({
|
|
@@ -233,15 +328,6 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
233
328
|
const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
|
|
234
329
|
return { allowanceNonWei, allowanceWei: allowanceWeiBN };
|
|
235
330
|
}
|
|
236
|
-
encodeApprove(tokenAddress, spenderAddress, amount) {
|
|
237
|
-
const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
|
|
238
|
-
const tx = EvmAdapter.encodeMethodCall(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', [spenderAddress, amountWei]);
|
|
239
|
-
return {
|
|
240
|
-
data: tx.data,
|
|
241
|
-
to: tx.to,
|
|
242
|
-
value: tx.value
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
331
|
async needApprove(token, contractAddress, walletAddress, amount) {
|
|
246
332
|
// Native coin in METIS can be Token required approve
|
|
247
333
|
if (token.isNative && token.blockchain !== core_1.BLOCKCHAIN_NAME.METIS) {
|
|
@@ -252,9 +338,59 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
252
338
|
const { allowanceWei } = await this.getAllowance(fromTokenAddress, walletAddress, contractAddress);
|
|
253
339
|
return allowanceWei.lt(token.weiAmount);
|
|
254
340
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
341
|
+
/**
|
|
342
|
+
* Executes approve method in ERC-20 token contract.
|
|
343
|
+
* @param tokenAddress Address of the smart-contract corresponding to the token.
|
|
344
|
+
* @param spenderAddress Wallet or contract address to approve.
|
|
345
|
+
* @param amount Token amount to approve in wei.
|
|
346
|
+
* @param [options] Additional options.
|
|
347
|
+
* @returns Approval transaction hash.
|
|
348
|
+
*/
|
|
349
|
+
async approveTokens(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
|
|
350
|
+
try {
|
|
351
|
+
const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
|
|
352
|
+
const encodedApprove = this.encodeApprove(tokenAddress, spenderAddress, rawValue.toFixed(0));
|
|
353
|
+
const gaslessParams = {
|
|
354
|
+
account: this.signer.walletAddress,
|
|
355
|
+
to: tokenAddress,
|
|
356
|
+
value: BigInt('0'),
|
|
357
|
+
data: encodedApprove.data
|
|
358
|
+
};
|
|
359
|
+
const gas = await this.public.estimateGas({
|
|
360
|
+
...gaslessParams,
|
|
361
|
+
...(0, options_1.getViemGasOptions)(options)
|
|
362
|
+
});
|
|
363
|
+
const gasfulViemOptions = {
|
|
364
|
+
...gaslessParams,
|
|
365
|
+
...(0, options_1.getViemGasOptions)(options),
|
|
366
|
+
gas: gas.toString()
|
|
367
|
+
};
|
|
368
|
+
const receipt = await this.signer.executeContractMethod(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', [spenderAddress, BigInt(rawValue.toFixed(0))], gasfulViemOptions);
|
|
369
|
+
return receipt.transactionHash;
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
if (err?.message?.includes('gas required exceeds allowance') || err?.message?.includes('insufficient balance to pay for gas')) {
|
|
373
|
+
throw new insufficient_funds_gas_price_value_error_1.InsufficientFundsGasPriceValueError();
|
|
374
|
+
}
|
|
375
|
+
console.debug(err);
|
|
376
|
+
throw err;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Build encoded approve transaction config.
|
|
381
|
+
* @param tokenAddress Address of the smart-contract corresponding to the token.
|
|
382
|
+
* @param spenderAddress Wallet or contract address to approve.
|
|
383
|
+
* @param amount wei amount of tokens in approval window in spending cap field
|
|
384
|
+
* @returns Encoded approve transaction config.
|
|
385
|
+
*/
|
|
386
|
+
encodeApprove(tokenAddress, spenderAddress, amount) {
|
|
387
|
+
const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
|
|
388
|
+
const tx = EvmAdapter.encodeMethodCall(tokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', [spenderAddress, amountWei]);
|
|
389
|
+
return {
|
|
390
|
+
data: tx.data,
|
|
391
|
+
to: tx.to,
|
|
392
|
+
value: tx.value
|
|
393
|
+
};
|
|
258
394
|
}
|
|
259
395
|
async needPermit2Approve(token, permit2Address, walletAddress, spenderAddress) {
|
|
260
396
|
const res = await this.read(permit2Address, uni_v3_permit_abi_1.UNI_V3_PERMIT_2_ABI, 'allowance', [
|
|
@@ -265,24 +401,16 @@ class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
265
401
|
const [amount, expiration, _nonce] = res;
|
|
266
402
|
return token.weiAmount.gt(amount) || new bignumber_js_1.default(Date.now()).gt(Number(expiration) * 1000);
|
|
267
403
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
to: tx.to
|
|
279
|
-
};
|
|
280
|
-
}
|
|
281
|
-
async approveOnPermit2(fromAddress, tokenAddress, permit2Address, spenderAddress, deadline = new bignumber_js_1.default(1000000), amount) {
|
|
282
|
-
const approveAmount = amount ? amount : new bignumber_js_1.default(2).pow(256).minus(1);
|
|
283
|
-
const expiration = new bignumber_js_1.default(Date.now()).plus(deadline).toFixed();
|
|
284
|
-
const tx = this.encodePermit2Approve(tokenAddress, spenderAddress, permit2Address, expiration, approveAmount.toFixed());
|
|
285
|
-
return this.write(fromAddress, tx.to, tx.value, tx.data);
|
|
404
|
+
/**
|
|
405
|
+
* @param tokenAddress Token address you want to approve for spending
|
|
406
|
+
* @param permit2Address Addres of permit2 contract
|
|
407
|
+
* @param spenderAddress Contract address spending your tokens
|
|
408
|
+
* @param amount Approved amount
|
|
409
|
+
* @param deadline Ms number added to current time (Date.now()) until approve expiration
|
|
410
|
+
*/
|
|
411
|
+
async approveOnPermit2(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
|
|
412
|
+
const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
|
|
413
|
+
return this.signer.executeContractMethod(tokenAddress, uni_v3_permit_abi_1.UNI_V3_PERMIT_2_ABI, 'approve', [spenderAddress, BigInt(rawValue.toString())], options);
|
|
286
414
|
}
|
|
287
415
|
/**
|
|
288
416
|
* Calculates EIP-1559 specific gas details.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { BasicSendTransactionOptions } from '../../models/basic-transaction-options';
|
|
3
|
+
import { EIP1559Gas, SingleGasPrice } from '../../models/evm-web3-public-models/gas-price';
|
|
4
|
+
export interface EvmSendTxParams {
|
|
5
|
+
txOptions: EvmTransactionOptions;
|
|
6
|
+
}
|
|
7
|
+
export interface EvmTransactionOptions extends EvmBasicTransactionOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Encoded data, which will be executed in transaction.
|
|
10
|
+
*/
|
|
11
|
+
data?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Native token amount in wei.
|
|
14
|
+
*/
|
|
15
|
+
value?: BigNumber | string | bigint;
|
|
16
|
+
/**
|
|
17
|
+
* Use in case of eip-155
|
|
18
|
+
*/
|
|
19
|
+
chainId?: string;
|
|
20
|
+
/**
|
|
21
|
+
* gasLimit multiplier (to change ratio for specific chain)
|
|
22
|
+
*/
|
|
23
|
+
gasLimitRatio?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Address send transaction to
|
|
26
|
+
*/
|
|
27
|
+
to?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface EvmBasicTransactionOptions extends BasicSendTransactionOptions {
|
|
30
|
+
/**
|
|
31
|
+
* Transaction gas limit.
|
|
32
|
+
*/
|
|
33
|
+
gas?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Transaction gas price options.
|
|
36
|
+
*/
|
|
37
|
+
gasPriceOptions?: EIP1559Gas | SingleGasPrice;
|
|
38
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { BlockchainName, HttpClient, ICustomLogger } from '@cryptorubic/core';
|
|
2
|
+
import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
|
|
3
|
+
import { AbstractAdapterSigner } from '../../common/signer/abstract-adapter-signer';
|
|
4
|
+
import { Abi, PublicActions, PublicClient, TransactionReceipt, WalletActions, WalletClient } from 'viem';
|
|
5
|
+
import { EvmSendTxParams, EvmTransactionOptions } from '../models/evm-send-tx-params';
|
|
6
|
+
import { Web3Error } from '../utils/parse-evm-error';
|
|
7
|
+
export declare class EvmAdapterSigner extends AbstractAdapterSigner<WalletClient & WalletActions, EvmSendTxParams, TransactionReceipt> {
|
|
8
|
+
private readonly publicRef;
|
|
9
|
+
get publicClient(): PublicActions & PublicClient;
|
|
10
|
+
constructor(publicRef: {
|
|
11
|
+
public: (PublicActions & PublicClient) | null;
|
|
12
|
+
}, httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
|
|
13
|
+
getBlockchainName(): Promise<BlockchainName | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
* Sends Eth in transaction and resolve the promise when the transaction is included in the block.
|
|
16
|
+
* @param toAddress Eth receiver address.
|
|
17
|
+
* @param [options] Additional options.
|
|
18
|
+
* @returns Transaction receipt.
|
|
19
|
+
*/
|
|
20
|
+
sendTransaction(params: EvmSendTxParams): Promise<TransactionReceipt>;
|
|
21
|
+
/**
|
|
22
|
+
* Tries to send Eth in transaction and resolve the promise when the transaction is included in the block or rejects the error.
|
|
23
|
+
* @param toAddress Eth receiver address.
|
|
24
|
+
* @param [options] Additional options.
|
|
25
|
+
* @returns Transaction receipt.
|
|
26
|
+
*/
|
|
27
|
+
trySendTransaction(params: EvmSendTxParams): Promise<TransactionReceipt>;
|
|
28
|
+
/**
|
|
29
|
+
* Executes method of smart-contract and resolve the promise when the transaction is included in the block.
|
|
30
|
+
* @param contractAddress Address of smart-contract which method is to be executed.
|
|
31
|
+
* @param contractAbi Abi of smart-contract which method is to be executed.
|
|
32
|
+
* @param methodName Method name to execute.
|
|
33
|
+
* @param methodArguments Method arguments.
|
|
34
|
+
* @param [options] Additional options.
|
|
35
|
+
* @returns Smart-contract method returned value.
|
|
36
|
+
*/
|
|
37
|
+
executeContractMethod(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments: unknown[], options?: EvmTransactionOptions): Promise<TransactionReceipt>;
|
|
38
|
+
/**
|
|
39
|
+
* Tries to execute method of smart-contract and resolve the promise when the transaction is included in the block or rejects the error.
|
|
40
|
+
* @param contractAddress Address of smart-contract which method is to be executed.
|
|
41
|
+
* @param contractAbi Abi of smart-contract which method is to be executed.
|
|
42
|
+
* @param methodName Method name to execute.
|
|
43
|
+
* @param methodArguments Method arguments.
|
|
44
|
+
* @param [options] Additional options.
|
|
45
|
+
* @param allowError Check error and decides to execute contact if error is allowed.
|
|
46
|
+
*/
|
|
47
|
+
tryExecuteContractMethod(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments: unknown[], options?: EvmTransactionOptions, allowError?: (err: Web3Error) => boolean): Promise<TransactionReceipt>;
|
|
48
|
+
private shouldIgnoreError;
|
|
49
|
+
signMessage(message: string): Promise<string>;
|
|
50
|
+
private getChainAndAccount;
|
|
51
|
+
writeContract(address: string, abi: Abi, method: string, value?: string, methodArgs?: unknown[]): Promise<string>;
|
|
52
|
+
write(address: string, to: string, value: string, data: string, options?: EvmTransactionOptions): Promise<string>;
|
|
53
|
+
}
|