@cryptorubic/web3 0.0.34 → 0.0.37-alpha-1212.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 +42 -15
- package/src/index.d.ts +130 -19
- package/src/index.js +130 -17
- package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.d.ts +40 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.js +177 -0
- 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-send-tx-params.js +2 -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/adapter-evm/evm-adapter.js +498 -0
- 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 +263 -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/adapter-solana/services/solana-tokens-service.d.ts +22 -0
- package/src/lib/adapter/adapters/adapter-solana/services/solana-tokens-service.js +138 -0
- 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/adapter-solana/solana-adapter.d.ts +49 -0
- package/src/lib/adapter/adapters/adapter-solana/solana-adapter.js +231 -0
- package/src/lib/adapter/adapters/adapter-stellar/constants/fake-stellar-wallet.d.ts +1 -0
- package/src/lib/adapter/adapters/adapter-stellar/constants/fake-stellar-wallet.js +4 -0
- package/src/lib/adapter/adapters/adapter-stellar/models/stellar-client.d.ts +2 -0
- package/src/lib/adapter/adapters/adapter-stellar/models/stellar-client.js +2 -0
- package/src/lib/adapter/adapters/adapter-stellar/models/stellar-rpc-provider.d.ts +6 -0
- package/src/lib/adapter/adapters/adapter-stellar/models/stellar-rpc-provider.js +2 -0
- package/src/lib/adapter/adapters/adapter-stellar/models/stellar-send-tx-params.d.ts +8 -0
- package/src/lib/adapter/adapters/adapter-stellar/models/stellar-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/adapter-stellar/models/stellar-wallet.d.ts +87 -0
- package/src/lib/adapter/adapters/adapter-stellar/models/stellar-wallet.js +2 -0
- package/src/lib/adapter/adapters/adapter-stellar/signer/stellar-adapter-signer.d.ts +18 -0
- package/src/lib/adapter/adapters/adapter-stellar/signer/stellar-adapter-signer.js +75 -0
- package/src/lib/adapter/adapters/adapter-stellar/stellar-adapter.d.ts +54 -0
- package/src/lib/adapter/adapters/adapter-stellar/stellar-adapter.js +253 -0
- 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/adapter-sui/sui-adapter.js +111 -0
- 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 +8 -7
- package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.js +39 -56
- 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-transfer-tx-params.d.ts +7 -0
- package/src/lib/adapter/adapters/adapter-tron/models/tron-transfer-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 +19 -0
- package/src/lib/adapter/adapters/adapter-tron/signer/tron-adapter-signer.js +81 -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} +145 -70
- 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/constants/possible-errors.d.ts +1 -0
- package/src/lib/adapter/adapters/constants/possible-errors.js +14 -0
- package/src/lib/adapter/adapters/constants/tron-multicall-abi.d.ts +1 -1
- package/src/lib/adapter/adapters/constants/uni-v3-permit-abi.d.ts +2 -0
- package/src/lib/adapter/adapters/constants/uni-v3-permit-abi.js +72 -0
- package/src/lib/adapter/adapters/models/approve-adapter.d.ts +20 -6
- package/src/lib/adapter/adapters/models/approve-adapter.js +4 -0
- package/src/lib/adapter/adapters/models/basic-transaction-options.d.ts +7 -0
- package/src/lib/adapter/adapters/models/basic-transaction-options.js +2 -0
- package/src/lib/adapter/adapters/models/bitcoin-user-address-info.d.ts +53 -0
- package/src/lib/adapter/adapters/models/bitcoin-user-address-info.js +2 -0
- package/src/lib/adapter/adapters/models/btc-wallet-provider.d.ts +10 -0
- package/src/lib/adapter/adapters/models/btc-wallet-provider.js +2 -0
- package/src/lib/adapter/adapters/models/evm-adapter-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.d.ts +22 -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/permit2-contract-types.d.ts +1 -0
- package/src/lib/adapter/adapters/models/permit2-contract-types.js +2 -0
- package/src/lib/adapter/adapters/models/solana-web3-types.d.ts +60 -0
- package/src/lib/adapter/adapters/models/solana-web3-types.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/token-models.d.ts +1 -0
- package/src/lib/adapter/adapters/models/token-models.js +2 -0
- package/src/lib/adapter/adapters/models/ton-adapter-config.d.ts +2 -2
- package/src/lib/adapter/adapters/models/ton-api-config.d.ts +1 -1
- package/src/lib/adapter/adapters/models/tonapi-models.d.ts +2 -2
- 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 +13 -0
- package/src/lib/adapter/adapters/models/web3-public-models/tx-status.js +15 -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/timeout.d.ts +1 -0
- package/src/lib/adapter/adapters/utils/timeout.js +15 -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 +20 -10
- package/src/lib/adapter/blockchain-adapter-factory.service.js +58 -53
- package/src/lib/adapter/constants/chain-configs/chain-configs.d.ts +1 -1
- package/src/lib/adapter/constants/chain-configs/chain-configs.js +603 -138
- 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/models/wallet-provider.d.ts +9 -3
- 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.d.ts +1 -1
- package/src/lib/adapter/constants/viem-blockchain-mapping.js +16 -7
- package/src/lib/adapter/models/create-factory-params.d.ts +24 -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/inactive-account.error.d.ts +4 -0
- package/src/lib/errors/blockchain/inactive-account.error.js +11 -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/changenow-api-blockchain.d.ts +1 -2
- package/src/lib/utils/constants/changenow-api-blockchain.js +1 -1
- package/src/lib/utils/constants/web3-pure-store.d.ts +2 -2
- package/src/lib/utils/constants/web3-pure-store.js +20 -18
- package/src/lib/utils/models/contract-multicall-response.d.ts +1 -1
- package/src/lib/utils/models/evm-transaction-config.d.ts +2 -0
- package/src/lib/utils/models/primitive-types.d.ts +1 -1
- package/src/lib/utils/models/stellar-transaction-config.d.ts +3 -0
- package/src/lib/utils/models/stellar-transaction-config.js +2 -0
- package/src/lib/utils/models/tron-transaction-config.d.ts +1 -1
- package/src/lib/utils/web3-pure.d.ts +2 -2
- package/src/lib/utils/web3-pure.js +6 -7
- package/src/lib/utils/web3-types/bitcoin-web3-pure.d.ts +1 -1
- package/src/lib/utils/web3-types/common-web3-pure.js +0 -2
- package/src/lib/utils/web3-types/evm-web3-pure.d.ts +1 -1
- package/src/lib/utils/web3-types/icp-web3-pure.d.ts +1 -1
- package/src/lib/utils/web3-types/near-web3-pure.d.ts +6 -0
- package/src/lib/utils/web3-types/near-web3-pure.js +24 -0
- package/src/lib/utils/web3-types/solana-web3-pure.d.ts +2 -1
- package/src/lib/utils/web3-types/solana-web3-pure.js +11 -1
- package/src/lib/utils/web3-types/stellar-web3-pure.d.ts +5 -0
- package/src/lib/utils/web3-types/stellar-web3-pure.js +30 -0
- package/src/lib/utils/web3-types/sui-web3-pure.d.ts +8 -0
- package/src/lib/utils/web3-types/sui-web3-pure.js +27 -0
- package/src/lib/utils/web3-types/ton-web3-pure.d.ts +2 -1
- package/src/lib/utils/web3-types/ton-web3-pure.js +6 -0
- package/src/lib/utils/web3-types/tron-web3-pure.d.ts +8 -6
- package/src/lib/utils/web3-types/tron-web3-pure.js +18 -4
- 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 -19
- package/src/lib/adapter/adapters/abstract-adapter.js +0 -49
- package/src/lib/adapter/adapters/evm-adapter.d.ts +0 -34
- package/src/lib/adapter/adapters/evm-adapter.js +0 -247
- package/src/lib/adapter/adapters/solana-adapter.d.ts +0 -15
- package/src/lib/adapter/adapters/solana-adapter.js +0 -59
- 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 -36
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EvmAdapter = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
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
|
+
const core_1 = require("@cryptorubic/core");
|
|
9
|
+
const bignumber_js_1 = require("bignumber.js");
|
|
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");
|
|
18
|
+
class EvmAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
19
|
+
async needPreswapAction(token, contractAddress, walletAddress, amount) {
|
|
20
|
+
return this.needApprove(token, contractAddress, walletAddress, amount);
|
|
21
|
+
}
|
|
22
|
+
async handlePreswap(contractAddress, walletAddress, tokenAmount) {
|
|
23
|
+
const approveAmount = this.blockchain === core_1.BLOCKCHAIN_NAME.GNOSIS || this.blockchain === core_1.BLOCKCHAIN_NAME.CRONOS
|
|
24
|
+
? tokenAmount.stringWeiAmount
|
|
25
|
+
: tokenAmount.stringTokenAmount;
|
|
26
|
+
const isNative = web3_pure_1.Web3Pure.isNativeAddress(this.blockchain, tokenAmount.address);
|
|
27
|
+
const fromTokenAddress = isNative && tokenAmount.blockchain === core_1.BLOCKCHAIN_NAME.METIS
|
|
28
|
+
? '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000'
|
|
29
|
+
: tokenAmount.blockchain;
|
|
30
|
+
await this.signer.writeContract(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'approve', '0', [approveAmount]);
|
|
31
|
+
}
|
|
32
|
+
constructor(httpClient, adapterOptions, logger, clientParams) {
|
|
33
|
+
super(adapterOptions.blockchain, logger);
|
|
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);
|
|
126
|
+
}
|
|
127
|
+
createPublicClient(rpcList) {
|
|
128
|
+
if (!rpcList?.[0]) {
|
|
129
|
+
this.logger?.customError('RPC list is empty');
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
const customViemConfig = this.clientParams?.viemConfig?.[this.blockchain];
|
|
133
|
+
const defaultTransportConfig = {
|
|
134
|
+
batch: { batchSize: 2000, wait: 16 },
|
|
135
|
+
onFetchResponse: (response) => this.handlePossibleError(response),
|
|
136
|
+
retryCount: 2,
|
|
137
|
+
retryDelay: 100,
|
|
138
|
+
timeout: 5000
|
|
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;
|
|
149
|
+
const chain = viem_blockchain_mapping_1.viemBlockchainMapping[this.blockchain];
|
|
150
|
+
return (0, viem_1.createPublicClient)({
|
|
151
|
+
// @ts-ignore
|
|
152
|
+
chain,
|
|
153
|
+
transport: (0, viem_1.fallback)(transports, fallbackConfig)
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
async multicallByContract(contracts, allowErrors = true) {
|
|
157
|
+
const results = await this.public.multicall(contracts);
|
|
158
|
+
const rpcRequestFail = results.every((result) => result?.status === 'failure');
|
|
159
|
+
if (rpcRequestFail) {
|
|
160
|
+
// @ts-ignore
|
|
161
|
+
if (rpcRequestFail?.[0]?.stats === 'failure') {
|
|
162
|
+
// @ts-ignore
|
|
163
|
+
throw new Error(rpcRequestFail?.[0]?.error);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const hasErrors = results.find((result) => {
|
|
167
|
+
if (result?.error || result.status !== 'success') {
|
|
168
|
+
this.logger?.customWarn('Multicall error', result?.error?.data || result?.error?.message || result?.error);
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
return false;
|
|
172
|
+
});
|
|
173
|
+
if (hasErrors && !allowErrors) {
|
|
174
|
+
throw new Error('Multicall error');
|
|
175
|
+
}
|
|
176
|
+
return results;
|
|
177
|
+
}
|
|
178
|
+
async multicallByAddress(address, abi, method, methodArgs = [], allowErrors = true) {
|
|
179
|
+
const contract = {
|
|
180
|
+
abi,
|
|
181
|
+
address: address,
|
|
182
|
+
functionName: method
|
|
183
|
+
};
|
|
184
|
+
const contracts = methodArgs.map((multicallArguments) => ({
|
|
185
|
+
...contract,
|
|
186
|
+
args: multicallArguments
|
|
187
|
+
}));
|
|
188
|
+
return this.multicallByContract({ contracts }, allowErrors);
|
|
189
|
+
}
|
|
190
|
+
static encodeMethodCall(contractAddress, contractAbi, method, parameters = [], value) {
|
|
191
|
+
try {
|
|
192
|
+
const data = (0, viem_1.encodeFunctionData)({
|
|
193
|
+
abi: contractAbi,
|
|
194
|
+
args: parameters,
|
|
195
|
+
functionName: method
|
|
196
|
+
});
|
|
197
|
+
return {
|
|
198
|
+
data: data,
|
|
199
|
+
to: contractAddress,
|
|
200
|
+
value: value || '0'
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
throw err;
|
|
205
|
+
}
|
|
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
|
+
}
|
|
232
|
+
async simulateTransaction(config, from, timeout = 15000) {
|
|
233
|
+
try {
|
|
234
|
+
const callParams = {
|
|
235
|
+
account: from,
|
|
236
|
+
data: config.data,
|
|
237
|
+
to: config.to,
|
|
238
|
+
...(config.value && { value: BigInt(config.value) })
|
|
239
|
+
};
|
|
240
|
+
const gasLimitWei = await Promise.race([
|
|
241
|
+
this.public.estimateGas(callParams),
|
|
242
|
+
new Promise((_, reject) => setTimeout(() => reject('Timeout'), timeout))
|
|
243
|
+
]);
|
|
244
|
+
return gasLimitWei?.toString();
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
this.logger?.customError('Error while simulating transaction', err);
|
|
248
|
+
throw err;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async callForTokensInfo(tokenAddresses) {
|
|
252
|
+
const nativeTokenIndex = tokenAddresses.findIndex((address) => (0, core_1.compareAddresses)(address, '0x0000000000000000000000000000000000000000'));
|
|
253
|
+
const filteredTokenAddresses = tokenAddresses.filter((_, index) => index !== nativeTokenIndex);
|
|
254
|
+
const contracts = filteredTokenAddresses.flatMap((contractAddress) => {
|
|
255
|
+
const contract = {
|
|
256
|
+
abi: erc20_token_abi_1.erc20TokenAbi,
|
|
257
|
+
address: contractAddress
|
|
258
|
+
};
|
|
259
|
+
return ['decimals', 'symbol', 'name'].map((method) => ({ ...contract, functionName: method }));
|
|
260
|
+
});
|
|
261
|
+
const results = contracts.length
|
|
262
|
+
? (await this.multicallByContract({ contracts }, false))
|
|
263
|
+
: [];
|
|
264
|
+
const tokens = [];
|
|
265
|
+
for (let i = 0; i < results.length; i += 3) {
|
|
266
|
+
try {
|
|
267
|
+
const decimals = Number(results[i].result);
|
|
268
|
+
const symbol = results[i + 1].result;
|
|
269
|
+
const name = results[i + 2].result;
|
|
270
|
+
const token = new core_1.Token({
|
|
271
|
+
address: filteredTokenAddresses[i / 3],
|
|
272
|
+
blockchain: this.blockchain,
|
|
273
|
+
decimals,
|
|
274
|
+
name,
|
|
275
|
+
symbol
|
|
276
|
+
});
|
|
277
|
+
tokens.push(token);
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
this.logger?.customError('Error while loading token', err);
|
|
281
|
+
tokens.push(null);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
if (nativeTokenIndex === -1) {
|
|
285
|
+
return tokens.filter(Boolean);
|
|
286
|
+
}
|
|
287
|
+
const blockchainNativeToken = core_1.nativeTokensList[this.blockchain];
|
|
288
|
+
tokens.splice(nativeTokenIndex, 0, blockchainNativeToken);
|
|
289
|
+
return tokens.filter(Boolean);
|
|
290
|
+
}
|
|
291
|
+
async getGasPrice() {
|
|
292
|
+
const bigIntGas = await this.public.getGasPrice();
|
|
293
|
+
return String(bigIntGas);
|
|
294
|
+
}
|
|
295
|
+
async checkEnoughBalance(token, walletAddress, amount = token.tokenAmount) {
|
|
296
|
+
const weiBalance = await this.getBalance(walletAddress, token.isNative ? undefined : token.address);
|
|
297
|
+
const balance = core_1.Token.fromWei(weiBalance, token.decimals);
|
|
298
|
+
return balance.gte(amount);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* @param walletAddress
|
|
302
|
+
* @param tokenAddress
|
|
303
|
+
* @returns wei amount
|
|
304
|
+
*/
|
|
305
|
+
async getBalance(walletAddress, tokenAddress) {
|
|
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);
|
|
310
|
+
}
|
|
311
|
+
const nativeBalance = await this.public.getBalance({
|
|
312
|
+
address: walletAddress
|
|
313
|
+
});
|
|
314
|
+
return new bignumber_js_1.default(nativeBalance.toString());
|
|
315
|
+
}
|
|
316
|
+
async getTransactionCount(walletAddress) {
|
|
317
|
+
const transactionCount = await this.public?.getTransactionCount({
|
|
318
|
+
address: walletAddress
|
|
319
|
+
});
|
|
320
|
+
return transactionCount ?? 0;
|
|
321
|
+
}
|
|
322
|
+
async getAllowance(fromTokenAddress, walletAddress, spenderAddress) {
|
|
323
|
+
const [decimals, allowance] = await Promise.all([
|
|
324
|
+
this.read(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'decimals'),
|
|
325
|
+
this.read(fromTokenAddress, erc20_token_abi_1.erc20TokenAbi, 'allowance', [walletAddress, spenderAddress])
|
|
326
|
+
]);
|
|
327
|
+
const allowanceWeiBN = new bignumber_js_1.default(allowance);
|
|
328
|
+
const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
|
|
329
|
+
return { allowanceNonWei, allowanceWei: allowanceWeiBN };
|
|
330
|
+
}
|
|
331
|
+
async needApprove(token, contractAddress, walletAddress, amount) {
|
|
332
|
+
// Native coin in METIS can be Token required approve
|
|
333
|
+
if (token.isNative && token.blockchain !== core_1.BLOCKCHAIN_NAME.METIS) {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
// Special native address for METIS native coin
|
|
337
|
+
const fromTokenAddress = token.isNative && token.blockchain === core_1.BLOCKCHAIN_NAME.METIS ? '0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000' : token.address;
|
|
338
|
+
const { allowanceWei } = await this.getAllowance(fromTokenAddress, walletAddress, contractAddress);
|
|
339
|
+
return allowanceWei.lt(token.weiAmount);
|
|
340
|
+
}
|
|
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
|
+
};
|
|
394
|
+
}
|
|
395
|
+
async needPermit2Approve(token, permit2Address, walletAddress, spenderAddress) {
|
|
396
|
+
const res = await this.read(permit2Address, uni_v3_permit_abi_1.UNI_V3_PERMIT_2_ABI, 'allowance', [
|
|
397
|
+
walletAddress,
|
|
398
|
+
token.address,
|
|
399
|
+
spenderAddress
|
|
400
|
+
]);
|
|
401
|
+
const [amount, expiration, _nonce] = res;
|
|
402
|
+
return token.weiAmount.gt(amount) || new bignumber_js_1.default(Date.now()).gt(Number(expiration) * 1000);
|
|
403
|
+
}
|
|
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);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Calculates EIP-1559 specific gas details.
|
|
417
|
+
* @see {@link https://github.com/ethers-io/ethers.js/blob/master/packages/abstract-provider/src.ts/index.ts#L235}
|
|
418
|
+
* @returns block baseFee, average maxPriorityFeePerGas, and maxFeePerGas.
|
|
419
|
+
*/
|
|
420
|
+
async getPriorityFeeGas() {
|
|
421
|
+
const block = await this.getBlock('latest');
|
|
422
|
+
let lastBaseFeePerGas = null;
|
|
423
|
+
let maxFeePerGas = null;
|
|
424
|
+
let maxPriorityFeePerGas = null;
|
|
425
|
+
if (block && block.baseFeePerGas) {
|
|
426
|
+
const baseFeePerGas = await this.getBaseFeePerGas(block.number);
|
|
427
|
+
try {
|
|
428
|
+
lastBaseFeePerGas = baseFeePerGas;
|
|
429
|
+
maxPriorityFeePerGas = await this.getMaxPriorityFeePerGas();
|
|
430
|
+
maxFeePerGas = baseFeePerGas * 2 + maxPriorityFeePerGas;
|
|
431
|
+
}
|
|
432
|
+
catch (err) {
|
|
433
|
+
console.debug(err);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
return {
|
|
437
|
+
baseFee: lastBaseFeePerGas?.toFixed(),
|
|
438
|
+
maxFeePerGas: maxFeePerGas?.toFixed(),
|
|
439
|
+
maxPriorityFeePerGas: maxPriorityFeePerGas?.toFixed()
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Gets block by block id.
|
|
444
|
+
* @param [blockId] Block id: hash, number ... Default is 'latest'.
|
|
445
|
+
* @returns Block by blockId parameter.
|
|
446
|
+
*/
|
|
447
|
+
getBlock(blockType = 'latest') {
|
|
448
|
+
if (typeof blockType === 'string') {
|
|
449
|
+
// @TODO FIX TYPE
|
|
450
|
+
return this.public.getBlock({ blockTag: blockType });
|
|
451
|
+
}
|
|
452
|
+
return this.public.getBlock({ blockNumber: blockType });
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Estimates average maxPriorityFeePerGas for EIP-1559 transactions based on last 20 blocks.
|
|
456
|
+
* @see {@link https://docs.alchemy.com/docs/how-to-build-a-gas-fee-estimator-using-eip-1559}
|
|
457
|
+
* @returns Average maxPriorityFeePerGas in wei
|
|
458
|
+
*/
|
|
459
|
+
async getMaxPriorityFeePerGas() {
|
|
460
|
+
const HISTORICAL_BLOCKS = 20;
|
|
461
|
+
const feeHistory = await this.public.getFeeHistory({
|
|
462
|
+
blockCount: HISTORICAL_BLOCKS,
|
|
463
|
+
rewardPercentiles: [50],
|
|
464
|
+
blockTag: 'pending'
|
|
465
|
+
});
|
|
466
|
+
if (!feeHistory?.reward) {
|
|
467
|
+
throw new Error('No fee history found');
|
|
468
|
+
}
|
|
469
|
+
const blocks = feeHistory.reward.map((x) => x.map((reward) => Number(reward)));
|
|
470
|
+
const rewardSum = blocks.map((x) => x[0]).reduce((acc, v) => acc + (v || 0), 0);
|
|
471
|
+
return Math.round(rewardSum / blocks.length);
|
|
472
|
+
}
|
|
473
|
+
async getBaseFeePerGas(blockNumber) {
|
|
474
|
+
const feeHistory = await this.public.getFeeHistory({
|
|
475
|
+
blockCount: 1,
|
|
476
|
+
rewardPercentiles: [50],
|
|
477
|
+
// blockTag: 'pending',
|
|
478
|
+
blockNumber: blockNumber
|
|
479
|
+
});
|
|
480
|
+
if (!feeHistory?.baseFeePerGas.length) {
|
|
481
|
+
throw new Error('No fee history found');
|
|
482
|
+
}
|
|
483
|
+
const feedSum = feeHistory.baseFeePerGas.reduce((acc, v) => acc.plus(v.toString() || 0), new bignumber_js_1.default(0));
|
|
484
|
+
return feedSum.dividedBy(feeHistory.baseFeePerGas.length).toNumber();
|
|
485
|
+
}
|
|
486
|
+
async handlePossibleError(response) {
|
|
487
|
+
const body = JSON.stringify(response.body);
|
|
488
|
+
const isError = !response.ok || 'error' in response || possible_errors_1.possibleErrors.some((error) => body.includes(error));
|
|
489
|
+
if (isError) {
|
|
490
|
+
this.logger?.customError('Rpc fetch error', {
|
|
491
|
+
blockchain: this.blockchain,
|
|
492
|
+
text: await response.text(),
|
|
493
|
+
url: response.url
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
exports.EvmAdapter = EvmAdapter;
|
|
@@ -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
|
+
}
|