@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,57 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { AbstractAdapter } from '../common/abstract-adapter';
|
|
3
|
+
import { TronWeb } from 'tronweb';
|
|
4
|
+
import { HttpClient, ICustomLogger, PriceTokenAmount, Token, TokenAmount, TronBlockchainName } from '@cryptorubic/core';
|
|
5
|
+
import { TronTransactionConfig } from '../../../utils/models/tron-transaction-config';
|
|
6
|
+
import { TronParameters } from '../../../utils/models/tron-parameters';
|
|
7
|
+
import { Abi } from 'viem';
|
|
8
|
+
import { ContractMulticallResponse } from '../../../utils/models/contract-multicall-response';
|
|
9
|
+
import { TronWeb3PrimitiveType, Web3PrimitiveType } from '../../../utils/models/primitive-types';
|
|
10
|
+
import { MethodData } from '../../../utils/models/method-data';
|
|
11
|
+
import { ClientAdaptersFactoryParams } from '../../models/create-factory-params';
|
|
12
|
+
import { TronAdapterSigner } from './signer/tron-adapter-signer';
|
|
13
|
+
import { TronTransactionOptions } from './models/tron-send-tx-params';
|
|
14
|
+
import { AllowanceInfo } from '../models/common-types';
|
|
15
|
+
import { ApprovableAdapter } from '../models/approve-adapter';
|
|
16
|
+
import { TxStatus } from '../models/web3-public-models/tx-status';
|
|
17
|
+
export declare class TronAdapter extends AbstractAdapter<TronWeb, TronWeb, TronBlockchainName> implements ApprovableAdapter<TronTransactionConfig> {
|
|
18
|
+
private readonly rpcList;
|
|
19
|
+
readonly signer: TronAdapterSigner;
|
|
20
|
+
private readonly multicallAddress;
|
|
21
|
+
needPreswapAction(): Promise<boolean>;
|
|
22
|
+
constructor(rpcList: (string | {
|
|
23
|
+
fullHost: string;
|
|
24
|
+
})[], httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
|
|
25
|
+
initWeb3Client(): void;
|
|
26
|
+
callContractMethod<T extends Web3PrimitiveType = string>(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments?: unknown[]): Promise<T>;
|
|
27
|
+
getTransactionStatus(srcTxHash: string): Promise<TxStatus>;
|
|
28
|
+
/**
|
|
29
|
+
* Gets mined transaction info.
|
|
30
|
+
* @param hash Transaction hash.
|
|
31
|
+
*/
|
|
32
|
+
private getTransactionInfo;
|
|
33
|
+
getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
34
|
+
private batchMulticallTokenBalance;
|
|
35
|
+
multicallContractsMethods<Output extends TronWeb3PrimitiveType>(contractAbi: any, contractsData: {
|
|
36
|
+
contractAddress: string;
|
|
37
|
+
methodsData: MethodData[];
|
|
38
|
+
}[]): Promise<ContractMulticallResponse<any>[][]>;
|
|
39
|
+
getBlockNumber(): Promise<number | {
|
|
40
|
+
blockNumber: number;
|
|
41
|
+
workchain: number;
|
|
42
|
+
}>;
|
|
43
|
+
checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string): Promise<boolean>;
|
|
44
|
+
private multicall;
|
|
45
|
+
private multicallContractsMethodsByOne;
|
|
46
|
+
callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token[]>;
|
|
47
|
+
getBalance(userAddress: string, tokenAddress?: string): Promise<BigNumber>;
|
|
48
|
+
getTokenBalance(userAddress: string, tokenAddress: string): Promise<BigNumber>;
|
|
49
|
+
convertTronAddressToHex(address: string): Promise<string>;
|
|
50
|
+
static encodeMethodCall(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments: TronParameters, callValue?: string, feeLimit?: number): TronTransactionConfig;
|
|
51
|
+
read<T>(contractAddress: string, contractAbi: any, methodName: string, methodArguments?: unknown[]): Promise<T>;
|
|
52
|
+
private static flattenTypesToString;
|
|
53
|
+
getAllowance(fromTokenAddress: string, ownerAddress: string, spenderAddress: string): Promise<AllowanceInfo>;
|
|
54
|
+
needApprove(from: TokenAmount, walletAddress: string, spender: string): Promise<boolean>;
|
|
55
|
+
approveTokens(tokenAddress: string, spenderAddress: string, amount?: BigNumber | 'infinity', options?: TronTransactionOptions): Promise<string>;
|
|
56
|
+
encodeApprove(tokenAddress: string, spenderAddress: string, amount?: string): TronTransactionConfig;
|
|
57
|
+
}
|
|
@@ -2,22 +2,99 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TronAdapter = void 0;
|
|
4
4
|
const bignumber_js_1 = require("bignumber.js");
|
|
5
|
-
const trc_20_contract_abi_1 = require("
|
|
6
|
-
const tron_multicall_abi_1 = require("
|
|
7
|
-
const abstract_adapter_1 = require("
|
|
5
|
+
const trc_20_contract_abi_1 = require("../constants/trc-20-contract-abi");
|
|
6
|
+
const tron_multicall_abi_1 = require("../constants/tron-multicall-abi");
|
|
7
|
+
const abstract_adapter_1 = require("../common/abstract-adapter");
|
|
8
8
|
const tronweb_1 = require("tronweb");
|
|
9
9
|
const core_1 = require("@cryptorubic/core");
|
|
10
|
-
const web3_pure_1 = require("
|
|
11
|
-
const tron_web3_pure_1 = require("
|
|
10
|
+
const web3_pure_1 = require("../../../utils/web3-pure");
|
|
11
|
+
const tron_web3_pure_1 = require("../../../utils/web3-types/tron-web3-pure");
|
|
12
|
+
const tron_adapter_signer_1 = require("./signer/tron-adapter-signer");
|
|
13
|
+
const options_1 = require("../utils/options");
|
|
14
|
+
const parse_tron_error_1 = require("./utils/parse-tron-error");
|
|
15
|
+
const tx_status_1 = require("../models/web3-public-models/tx-status");
|
|
12
16
|
class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
13
|
-
async needPreswapAction(
|
|
14
|
-
// return this.needApprove()
|
|
17
|
+
async needPreswapAction() {
|
|
15
18
|
return false;
|
|
16
19
|
}
|
|
17
|
-
constructor(rpcList, logger) {
|
|
20
|
+
constructor(rpcList, httpClient, logger, clientParams) {
|
|
18
21
|
super(core_1.BLOCKCHAIN_NAME.TRON, logger);
|
|
22
|
+
this.rpcList = rpcList;
|
|
19
23
|
this.multicallAddress = 'T9ziQU4EBteJzjzMzhHELdhgWFqwzS5Vki';
|
|
20
|
-
this.
|
|
24
|
+
this.signer = new tron_adapter_signer_1.TronAdapterSigner(this.publicRef, httpClient, logger, clientParams);
|
|
25
|
+
}
|
|
26
|
+
initWeb3Client() {
|
|
27
|
+
const rpc = typeof this.rpcList[0] === 'string' ? this.rpcList[0] : this.rpcList[0].fullHost;
|
|
28
|
+
this.public = new tronweb_1.TronWeb({ fullHost: rpc });
|
|
29
|
+
}
|
|
30
|
+
async callContractMethod(contractAddress, contractAbi, methodName, methodArguments = []) {
|
|
31
|
+
this.public.setAddress(contractAddress);
|
|
32
|
+
const contract = await this.public.contract(contractAbi, contractAddress);
|
|
33
|
+
const response = await contract[methodName](...methodArguments).call();
|
|
34
|
+
return tron_web3_pure_1.TronWeb3Pure.flattenParameterToPrimitive(response);
|
|
35
|
+
}
|
|
36
|
+
async getTransactionStatus(srcTxHash) {
|
|
37
|
+
const txReceipt = await this.getTransactionInfo(srcTxHash);
|
|
38
|
+
if (txReceipt?.receipt) {
|
|
39
|
+
if (txReceipt.result === 'FAILED') {
|
|
40
|
+
return tx_status_1.TX_STATUS.FAIL;
|
|
41
|
+
}
|
|
42
|
+
return tx_status_1.TX_STATUS.SUCCESS;
|
|
43
|
+
}
|
|
44
|
+
return tx_status_1.TX_STATUS.PENDING;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Gets mined transaction info.
|
|
48
|
+
* @param hash Transaction hash.
|
|
49
|
+
*/
|
|
50
|
+
async getTransactionInfo(hash) {
|
|
51
|
+
return this.public.trx.getTransactionInfo(hash);
|
|
52
|
+
}
|
|
53
|
+
async getTokensBalances(userAddress, tokensAddresses) {
|
|
54
|
+
const indexOfNativeCoin = tokensAddresses.findIndex((tokenAddress) => web3_pure_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.TRON, tokenAddress));
|
|
55
|
+
const promises = [];
|
|
56
|
+
if (indexOfNativeCoin !== -1) {
|
|
57
|
+
tokensAddresses.splice(indexOfNativeCoin, 1);
|
|
58
|
+
promises[1] = this.getBalance(userAddress);
|
|
59
|
+
}
|
|
60
|
+
promises[0] = this.batchMulticallTokenBalance(userAddress, tokensAddresses, 50);
|
|
61
|
+
const results = await Promise.all(promises);
|
|
62
|
+
const tokensBalances = results[0].map((tokenResults) => {
|
|
63
|
+
const { success, output } = tokenResults[0];
|
|
64
|
+
return success ? new bignumber_js_1.default(output) : new bignumber_js_1.default(0);
|
|
65
|
+
});
|
|
66
|
+
if (indexOfNativeCoin !== -1) {
|
|
67
|
+
tokensBalances.splice(indexOfNativeCoin, 0, results[1]);
|
|
68
|
+
}
|
|
69
|
+
return tokensBalances;
|
|
70
|
+
}
|
|
71
|
+
async batchMulticallTokenBalance(userAddress, tokensAddresses, batchSize) {
|
|
72
|
+
if (tokensAddresses.length > 100) {
|
|
73
|
+
const balances = [];
|
|
74
|
+
for (let i = 0; i < tokensAddresses.length; i += batchSize) {
|
|
75
|
+
const batchRequest = tokensAddresses.slice(i, i + batchSize);
|
|
76
|
+
const batchResult = await this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, batchRequest.map((tokenAddress) => ({
|
|
77
|
+
contractAddress: tokenAddress,
|
|
78
|
+
methodsData: [
|
|
79
|
+
{
|
|
80
|
+
methodName: 'balanceOf',
|
|
81
|
+
methodArguments: [userAddress]
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
})));
|
|
85
|
+
balances.push(...batchResult);
|
|
86
|
+
}
|
|
87
|
+
return balances;
|
|
88
|
+
}
|
|
89
|
+
return this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokensAddresses.map((tokenAddress) => ({
|
|
90
|
+
contractAddress: tokenAddress,
|
|
91
|
+
methodsData: [
|
|
92
|
+
{
|
|
93
|
+
methodName: 'balanceOf',
|
|
94
|
+
methodArguments: [userAddress]
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
})));
|
|
21
98
|
}
|
|
22
99
|
async multicallContractsMethods(contractAbi, contractsData) {
|
|
23
100
|
const calls = contractsData.map(({ contractAddress, methodsData }) => {
|
|
@@ -33,35 +110,42 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
33
110
|
const success = outputs.results[outputIndex];
|
|
34
111
|
const returnData = outputs.returnData[outputIndex];
|
|
35
112
|
outputIndex++;
|
|
113
|
+
const methodOutputAbi = contractAbi.find(
|
|
114
|
+
// @ts-ignore
|
|
115
|
+
(funcSignature) => funcSignature.name === methodData.methodName
|
|
36
116
|
// @ts-ignore
|
|
37
|
-
|
|
117
|
+
).outputs;
|
|
38
118
|
return {
|
|
39
119
|
output: success ? tron_web3_pure_1.TronWeb3Pure.decodeMethodOutput(methodOutputAbi, returnData) : null,
|
|
40
120
|
success
|
|
41
121
|
};
|
|
42
122
|
}));
|
|
43
123
|
}
|
|
44
|
-
catch {
|
|
124
|
+
catch (err) {
|
|
125
|
+
this.logger
|
|
126
|
+
? this.logger.customError('[TronAdapter_multicallContractsMethods] Error: ', err)
|
|
127
|
+
: console.debug('[TronAdapter_multicallContractsMethods] Error:', err);
|
|
45
128
|
return this.multicallContractsMethodsByOne(contractAbi, contractsData);
|
|
46
129
|
}
|
|
47
130
|
}
|
|
131
|
+
async getBlockNumber() {
|
|
132
|
+
return (await this.public.trx.getCurrentBlock()).block_header.raw_data.number;
|
|
133
|
+
}
|
|
134
|
+
async checkEnoughBalance(token, walletAddress) {
|
|
135
|
+
const balance = await this.getBalance(walletAddress, token.address);
|
|
136
|
+
return balance.gte(token.weiAmount);
|
|
137
|
+
}
|
|
48
138
|
async multicall(calls) {
|
|
49
139
|
this.public.setAddress(this.multicallAddress);
|
|
50
140
|
const contract = await this.public.contract(tron_multicall_abi_1.TRON_MULTICALL_ABI, this.multicallAddress);
|
|
51
141
|
// @ts-ignore
|
|
52
142
|
return contract.aggregateViewCalls(calls).call();
|
|
53
143
|
}
|
|
54
|
-
async callContractMethod(contractAddress, contractAbi, methodName, methodArguments = []) {
|
|
55
|
-
this.public.setAddress(contractAddress);
|
|
56
|
-
const contract = await this.public.contract(contractAbi, contractAddress);
|
|
57
|
-
const response = await contract[methodName](...methodArguments).call();
|
|
58
|
-
return tron_web3_pure_1.TronWeb3Pure.flattenParameterToPrimitive(response);
|
|
59
|
-
}
|
|
60
144
|
multicallContractsMethodsByOne(contractAbi, contractsData) {
|
|
61
145
|
return Promise.all(contractsData.map((contractData) => {
|
|
62
146
|
return Promise.all(contractData.methodsData.map(async (methodData) => {
|
|
63
147
|
try {
|
|
64
|
-
const output = (await this.
|
|
148
|
+
const output = (await this.read(contractData.contractAddress, contractAbi, methodData.methodName, methodData.methodArguments));
|
|
65
149
|
return {
|
|
66
150
|
output,
|
|
67
151
|
success: true
|
|
@@ -76,32 +160,6 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
76
160
|
}));
|
|
77
161
|
}));
|
|
78
162
|
}
|
|
79
|
-
async getTokensBalances(userAddress, tokensAddresses) {
|
|
80
|
-
const indexOfNativeCoin = tokensAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, address));
|
|
81
|
-
const promises = [];
|
|
82
|
-
if (indexOfNativeCoin !== -1) {
|
|
83
|
-
tokensAddresses.splice(indexOfNativeCoin, 1);
|
|
84
|
-
promises[1] = this.getBalance(userAddress);
|
|
85
|
-
}
|
|
86
|
-
promises[0] = this.multicallContractsMethods(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokensAddresses.map((tokenAddress) => ({
|
|
87
|
-
contractAddress: tokenAddress,
|
|
88
|
-
methodsData: [
|
|
89
|
-
{
|
|
90
|
-
methodArguments: [userAddress],
|
|
91
|
-
methodName: 'balanceOf'
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
})));
|
|
95
|
-
const results = await Promise.all(promises);
|
|
96
|
-
const tokensBalances = results[0].map((tokenResults) => {
|
|
97
|
-
const { success, output } = tokenResults[0];
|
|
98
|
-
return success ? new bignumber_js_1.default(output) : new bignumber_js_1.default(0);
|
|
99
|
-
});
|
|
100
|
-
if (indexOfNativeCoin !== -1) {
|
|
101
|
-
tokensBalances.splice(indexOfNativeCoin, 0, results[1]);
|
|
102
|
-
}
|
|
103
|
-
return tokensBalances;
|
|
104
|
-
}
|
|
105
163
|
async callForTokensInfo(tokenAddresses) {
|
|
106
164
|
const tokenFields = ['decimals', 'symbol', 'name'];
|
|
107
165
|
const nativeTokenIndex = tokenAddresses.findIndex((address) => web3_pure_1.Web3Pure.isNativeAddress(core_1.CHAIN_TYPE.TRON, address));
|
|
@@ -154,21 +212,15 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
154
212
|
async getTokenBalance(userAddress, tokenAddress) {
|
|
155
213
|
this.public.setAddress(userAddress);
|
|
156
214
|
const contract = await this.public.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokenAddress);
|
|
157
|
-
|
|
158
|
-
|
|
215
|
+
const balance = await contract
|
|
216
|
+
// @ts-ignore
|
|
217
|
+
.balanceOf(userAddress)
|
|
218
|
+
.call();
|
|
159
219
|
return new bignumber_js_1.default(balance?.toString());
|
|
160
220
|
}
|
|
161
221
|
async convertTronAddressToHex(address) {
|
|
162
222
|
return this.public.address.toHex(address);
|
|
163
223
|
}
|
|
164
|
-
read() {
|
|
165
|
-
throw new Error('Method is not implemented');
|
|
166
|
-
}
|
|
167
|
-
;
|
|
168
|
-
write() {
|
|
169
|
-
throw new Error('Method is not implemented');
|
|
170
|
-
}
|
|
171
|
-
;
|
|
172
224
|
static encodeMethodCall(contractAddress, contractAbi, methodName, methodArguments, callValue, feeLimit) {
|
|
173
225
|
const methodAbi = contractAbi.find((abiItem) => abiItem.type === 'function' && abiItem.name === methodName);
|
|
174
226
|
if (!methodAbi) {
|
|
@@ -183,40 +235,63 @@ class TronAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
183
235
|
...(feeLimit && { feeLimit })
|
|
184
236
|
};
|
|
185
237
|
}
|
|
238
|
+
async read(contractAddress, contractAbi, methodName, methodArguments = []) {
|
|
239
|
+
this.public.setAddress(contractAddress);
|
|
240
|
+
const contract = await this.public.contract(contractAbi, contractAddress);
|
|
241
|
+
const response = await contract[methodName](...methodArguments).call();
|
|
242
|
+
return tron_web3_pure_1.TronWeb3Pure.flattenParameterToPrimitive(response);
|
|
243
|
+
}
|
|
186
244
|
static flattenTypesToString(abiInputs) {
|
|
187
245
|
return (abiInputs?.map((abiInput) => {
|
|
188
246
|
if (abiInput.type === 'tuple' || abiInput.type.includes('tuple')) {
|
|
247
|
+
const flattenedComponents = this.flattenTypesToString(
|
|
189
248
|
//@ts-ignore
|
|
190
|
-
|
|
249
|
+
abiInput.components);
|
|
191
250
|
return `(${flattenedComponents.join(',')})`;
|
|
192
251
|
}
|
|
193
252
|
return abiInput.type;
|
|
194
253
|
}) || []);
|
|
195
254
|
}
|
|
255
|
+
async getAllowance(fromTokenAddress, ownerAddress, spenderAddress) {
|
|
256
|
+
const [decimals, allowance] = await Promise.all([
|
|
257
|
+
this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals'),
|
|
258
|
+
this.read(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'allowance', [ownerAddress, spenderAddress])
|
|
259
|
+
]);
|
|
260
|
+
const allowanceWeiBN = new bignumber_js_1.default(allowance);
|
|
261
|
+
const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
|
|
262
|
+
return { allowanceNonWei, allowanceWei: allowanceWeiBN };
|
|
263
|
+
}
|
|
196
264
|
async needApprove(from, walletAddress, spender) {
|
|
197
265
|
if (from.isNative)
|
|
198
266
|
return false;
|
|
199
267
|
const { allowanceWei } = await this.getAllowance(from.address, walletAddress, spender);
|
|
200
268
|
return allowanceWei.lt(from.weiAmount);
|
|
201
269
|
}
|
|
270
|
+
async approveTokens(tokenAddress, spenderAddress, amount = 'infinity', options = {}) {
|
|
271
|
+
try {
|
|
272
|
+
const contract = await this.signer.wallet.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, tokenAddress);
|
|
273
|
+
const rawValue = amount === 'infinity' ? new bignumber_js_1.default(2).pow(256).minus(1) : amount;
|
|
274
|
+
const transactionHash = await contract.approve(spenderAddress, rawValue.toFixed(0)).send({
|
|
275
|
+
...(options.feeLimit && {
|
|
276
|
+
feeLimit: (0, options_1.stringifyAmount)(options.feeLimit)
|
|
277
|
+
})
|
|
278
|
+
});
|
|
279
|
+
if (options.onTransactionHash) {
|
|
280
|
+
options.onTransactionHash(transactionHash);
|
|
281
|
+
}
|
|
282
|
+
return transactionHash;
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
console.error('Approve execution error: ', err);
|
|
286
|
+
throw (0, parse_tron_error_1.parseTronError)(err);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
202
289
|
encodeApprove(tokenAddress, spenderAddress, amount) {
|
|
203
290
|
const amountWei = amount ?? new bignumber_js_1.default(2).pow(256).minus(1).toFixed();
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
to: tokenAddress,
|
|
208
|
-
value: '0'
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
async getAllowance(fromTokenAddress, walletAddress, spender) {
|
|
212
|
-
const [contract, decimals] = await Promise.all([
|
|
213
|
-
this.public.contract(trc_20_contract_abi_1.TRC20_CONTRACT_ABI, fromTokenAddress),
|
|
214
|
-
this.callContractMethod(fromTokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'decimals')
|
|
291
|
+
return TronAdapter.encodeMethodCall(tokenAddress, trc_20_contract_abi_1.TRC20_CONTRACT_ABI, 'approve', [
|
|
292
|
+
{ type: 'address', value: spenderAddress },
|
|
293
|
+
{ type: 'uint256', value: amountWei }
|
|
215
294
|
]);
|
|
216
|
-
const allowance = await this.getAllowance(fromTokenAddress, walletAddress, spender);
|
|
217
|
-
const allowanceWeiBN = new bignumber_js_1.default(allowance?.toString());
|
|
218
|
-
const allowanceNonWei = core_1.Token.fromWei(allowanceWeiBN, Number(decimals));
|
|
219
|
-
return { allowanceNonWei, allowanceWei: allowanceWeiBN };
|
|
220
295
|
}
|
|
221
296
|
}
|
|
222
297
|
exports.TronAdapter = TronAdapter;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseTronError = parseTronError;
|
|
4
|
+
const tron_insufficient_native_balance_1 = require("../../../../errors/blockchain/tron-insufficient-native-balance");
|
|
5
|
+
const tron_transaction_expired_1 = require("../../../../errors/blockchain/tron-transaction-expired");
|
|
6
|
+
const user_reject_error_1 = require("../../../../errors/blockchain/user-reject.error");
|
|
7
|
+
const errors_1 = require("../../utils/errors");
|
|
8
|
+
function parseTronError(err) {
|
|
9
|
+
if (err?.includes?.('Confirmation declined by user')) {
|
|
10
|
+
throw new user_reject_error_1.UserRejectError();
|
|
11
|
+
}
|
|
12
|
+
const message = err?.message;
|
|
13
|
+
if (message?.includes('balance is not sufficient')) {
|
|
14
|
+
throw new tron_insufficient_native_balance_1.TronInsufficientNativeBalance();
|
|
15
|
+
}
|
|
16
|
+
if (message?.includes('Transaction expired')) {
|
|
17
|
+
throw new tron_transaction_expired_1.TronTransactionExpired();
|
|
18
|
+
}
|
|
19
|
+
return (0, errors_1.parseError)(err);
|
|
20
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Abi } from 'viem';
|
|
2
|
+
import BigNumber from 'bignumber.js';
|
|
3
|
+
import { ICustomLogger, Token, TokenAmount, BlockchainName } from '@cryptorubic/core';
|
|
4
|
+
import { AbstractAdapterSigner } from './signer/abstract-adapter-signer';
|
|
5
|
+
import { MethodData } from '../models/web3-public-models/method-data';
|
|
6
|
+
import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
|
|
7
|
+
import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
|
|
8
|
+
import { TxStatus } from '../models/web3-public-models/tx-status';
|
|
9
|
+
export declare abstract class AbstractAdapter<P, W, B extends BlockchainName, SendTxParams extends object = {}, SendTxResponse = {}> {
|
|
10
|
+
abstract signer: AbstractAdapterSigner<W, SendTxParams, SendTxResponse>;
|
|
11
|
+
protected readonly logger?: ICustomLogger;
|
|
12
|
+
readonly blockchain: B;
|
|
13
|
+
/**
|
|
14
|
+
* used to pass public pointer in signer constructor
|
|
15
|
+
*/
|
|
16
|
+
private _publicRef;
|
|
17
|
+
protected set public(value: P | null);
|
|
18
|
+
get public(): P;
|
|
19
|
+
get publicRef(): {
|
|
20
|
+
public: P | null;
|
|
21
|
+
};
|
|
22
|
+
get connected(): boolean;
|
|
23
|
+
protected constructor(blockchain: B, logger?: ICustomLogger);
|
|
24
|
+
/**
|
|
25
|
+
* Used to set this.public property, if it's not set - you can't send rpc requests to blockchain.
|
|
26
|
+
* Mostly you need to instantiate it at the same time as BlockchainAdapterFactoryService.createAdapter() called.
|
|
27
|
+
* In rubic-app it's called on wallet connection to prevent unnecessary rpc requests `net_listening` from viem library.
|
|
28
|
+
*/
|
|
29
|
+
abstract initWeb3Client(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Gets account native or token balance in wei.
|
|
32
|
+
* @param userAddress Wallet address, whose balance you want to find out.
|
|
33
|
+
* @param tokenAddress Address of the smart-contract corresponding to the token,
|
|
34
|
+
*/
|
|
35
|
+
abstract getBalance(userAddress: string, tokenAddress?: string): Promise<BigNumber>;
|
|
36
|
+
abstract getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
37
|
+
abstract checkEnoughBalance(token: TokenAmount, walletAddress: string): Promise<boolean>;
|
|
38
|
+
abstract callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<BlockchainName>[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Calls pure method of smart-contract and returns its output value.
|
|
41
|
+
* @param contractAddress Address of smart-contract which method is to be executed.
|
|
42
|
+
* @param contractAbi Abi of smart-contract which method is to be executed.
|
|
43
|
+
* @param methodName Called method name.
|
|
44
|
+
* @param methodArguments Method arguments.
|
|
45
|
+
* @param options Transaction options.
|
|
46
|
+
*/
|
|
47
|
+
abstract callContractMethod<T extends Web3PrimitiveType = string>(contractAddress: string, contractAbi: Abi, methodName: string, methodArguments?: unknown[], options?: object): Promise<T>;
|
|
48
|
+
/**
|
|
49
|
+
* Gets token info by address.
|
|
50
|
+
* @param tokenAddress Address of token.
|
|
51
|
+
* @param tokenFields Token's fields to get.
|
|
52
|
+
*/
|
|
53
|
+
callForTokenInfo(tokenAddress: string): Promise<Token<BlockchainName>>;
|
|
54
|
+
/**
|
|
55
|
+
* Checks that user has enough balance.
|
|
56
|
+
* @param userAddress Wallet address, which contains tokens.
|
|
57
|
+
* @param token Token to check balance of.
|
|
58
|
+
* @param requiredAmount Required user balance in Eth units.
|
|
59
|
+
*/
|
|
60
|
+
checkBalance(token: Token, requiredAmount: BigNumber, userAddress: string): Promise<void | never>;
|
|
61
|
+
/**
|
|
62
|
+
* Uses multicall to make many methods calls in several contracts.
|
|
63
|
+
* @param contractAbi Target contract abi.
|
|
64
|
+
* @param contractsData Contract addresses and methods data, containing methods' names and arguments.
|
|
65
|
+
*/
|
|
66
|
+
abstract multicallContractsMethods<Output extends Web3PrimitiveType>(contractAbi: Abi, contractsData: {
|
|
67
|
+
contractAddress: string;
|
|
68
|
+
methodsData: MethodData[];
|
|
69
|
+
}[]): Promise<ContractMulticallResponse<Output>[][]>;
|
|
70
|
+
/**
|
|
71
|
+
* Gets last block number.
|
|
72
|
+
* @returns Block number.
|
|
73
|
+
*/
|
|
74
|
+
abstract getBlockNumber(): Promise<number | {
|
|
75
|
+
blockNumber: number;
|
|
76
|
+
workchain: number;
|
|
77
|
+
}>;
|
|
78
|
+
needPreswapAction(token: TokenAmount, contractAddress: string, walletAddress: string, amount: string | BigNumber): Promise<boolean>;
|
|
79
|
+
handlePreswap(contractAddress: string, walletAddress: string, tokenAmount: TokenAmount): Promise<void>;
|
|
80
|
+
static getRandomBytes(bytes: number): string;
|
|
81
|
+
abstract read<T>(...args: unknown[]): Promise<T>;
|
|
82
|
+
abstract getTransactionStatus(srcTxHash: string): Promise<TxStatus>;
|
|
83
|
+
getSrcTxStatus(blockchain: BlockchainName, srcTxHash: string): Promise<TxStatus>;
|
|
84
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbstractAdapter = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const core_1 = require("@cryptorubic/core");
|
|
6
|
+
const insufficient_funds_error_1 = require("../../../errors/swap/insufficient-funds.error");
|
|
7
|
+
const tx_status_1 = require("../models/web3-public-models/tx-status");
|
|
8
|
+
const waitFor_1 = require("../utils/waitFor");
|
|
9
|
+
class AbstractAdapter {
|
|
10
|
+
set public(value) {
|
|
11
|
+
this._publicRef.public = value;
|
|
12
|
+
}
|
|
13
|
+
get public() {
|
|
14
|
+
if (!this._publicRef.public) {
|
|
15
|
+
const msg = `Trying to access undefined public client in ${this.blockchain} adapter.`;
|
|
16
|
+
this.logger?.customLog(msg);
|
|
17
|
+
throw new Error(msg);
|
|
18
|
+
}
|
|
19
|
+
return this._publicRef.public;
|
|
20
|
+
}
|
|
21
|
+
get publicRef() {
|
|
22
|
+
return this._publicRef;
|
|
23
|
+
}
|
|
24
|
+
get connected() {
|
|
25
|
+
return !!this._publicRef.public;
|
|
26
|
+
}
|
|
27
|
+
constructor(blockchain, logger) {
|
|
28
|
+
/**
|
|
29
|
+
* used to pass public pointer in signer constructor
|
|
30
|
+
*/
|
|
31
|
+
this._publicRef = { public: null };
|
|
32
|
+
this.blockchain = blockchain;
|
|
33
|
+
if (logger) {
|
|
34
|
+
this.logger = logger;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Gets token info by address.
|
|
39
|
+
* @param tokenAddress Address of token.
|
|
40
|
+
* @param tokenFields Token's fields to get.
|
|
41
|
+
*/
|
|
42
|
+
async callForTokenInfo(tokenAddress) {
|
|
43
|
+
return (await this.callForTokensInfo([tokenAddress]))[0];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Checks that user has enough balance.
|
|
47
|
+
* @param userAddress Wallet address, which contains tokens.
|
|
48
|
+
* @param token Token to check balance of.
|
|
49
|
+
* @param requiredAmount Required user balance in Eth units.
|
|
50
|
+
*/
|
|
51
|
+
async checkBalance(token, requiredAmount, userAddress) {
|
|
52
|
+
const enoughBalance = await this.checkEnoughBalance(new core_1.TokenAmount({ ...token, tokenAmount: requiredAmount }), userAddress);
|
|
53
|
+
if (!enoughBalance) {
|
|
54
|
+
throw new insufficient_funds_error_1.InsufficientFundsError(token.symbol);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
needPreswapAction(token, contractAddress, walletAddress, amount) {
|
|
58
|
+
return Promise.resolve(false);
|
|
59
|
+
}
|
|
60
|
+
handlePreswap(contractAddress, walletAddress, tokenAmount) {
|
|
61
|
+
return Promise.resolve();
|
|
62
|
+
}
|
|
63
|
+
static getRandomBytes(bytes) {
|
|
64
|
+
const randomBytes = crypto.getRandomValues(new Uint8Array(bytes));
|
|
65
|
+
return (0, viem_1.bytesToHex)(randomBytes);
|
|
66
|
+
}
|
|
67
|
+
async getSrcTxStatus(blockchain, srcTxHash) {
|
|
68
|
+
try {
|
|
69
|
+
const status = await this.getTransactionStatus(srcTxHash);
|
|
70
|
+
if (status === tx_status_1.TX_STATUS.FAIL && blockchain === core_1.BLOCKCHAIN_NAME.ZK_SYNC) {
|
|
71
|
+
const zkSyncAwarenessTime = 4000;
|
|
72
|
+
await (0, waitFor_1.waitFor)(zkSyncAwarenessTime);
|
|
73
|
+
return this.getTransactionStatus(srcTxHash);
|
|
74
|
+
}
|
|
75
|
+
return status;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return tx_status_1.TX_STATUS.PENDING;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.AbstractAdapter = AbstractAdapter;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BlockchainName, HttpClient, ICustomLogger } from '@cryptorubic/core';
|
|
2
|
+
import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
|
|
3
|
+
export declare abstract class AbstractAdapterSigner<ClientWallet, SendTxParams, SendTxResponse> {
|
|
4
|
+
protected readonly httpClient: HttpClient;
|
|
5
|
+
protected readonly logger?: ICustomLogger | undefined;
|
|
6
|
+
protected readonly clientParams?: ClientAdaptersFactoryParams | undefined;
|
|
7
|
+
protected get apiUrl(): string;
|
|
8
|
+
private _walletAddress;
|
|
9
|
+
get walletAddress(): string;
|
|
10
|
+
private _wallet;
|
|
11
|
+
get wallet(): ClientWallet;
|
|
12
|
+
constructor(httpClient: HttpClient, logger?: ICustomLogger | undefined, clientParams?: ClientAdaptersFactoryParams | undefined);
|
|
13
|
+
abstract getBlockchainName(): Promise<BlockchainName | undefined>;
|
|
14
|
+
abstract sendTransaction(params: SendTxParams): Promise<SendTxResponse>;
|
|
15
|
+
abstract write(...args: unknown[]): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Checks, that selected blockchain in wallet is equal to passed blockchain.
|
|
18
|
+
*/
|
|
19
|
+
checkBlockchainCorrect(blockchainName: BlockchainName): Promise<void | never>;
|
|
20
|
+
setWalletAddress(newWalletAddress: string): void;
|
|
21
|
+
setWallet(wallet: ClientWallet): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbstractAdapterSigner = void 0;
|
|
4
|
+
const rubic_api_link_mapping_1 = require("../../../constants/rubic-api-link-mapping");
|
|
5
|
+
const wrong_network_error_1 = require("../../../../errors/swap/wrong-network.error");
|
|
6
|
+
class AbstractAdapterSigner {
|
|
7
|
+
get apiUrl() {
|
|
8
|
+
if (!this.clientParams?.envType) {
|
|
9
|
+
this.logger?.customError('clientParams.envType is not set for apiUrl call.');
|
|
10
|
+
throw new Error('clientParams.envType is not set for apiUrl call.');
|
|
11
|
+
}
|
|
12
|
+
const rubicApiLink = rubic_api_link_mapping_1.rubicApiLinkMapping[this.clientParams.envType];
|
|
13
|
+
return rubicApiLink ? rubicApiLink : 'https://dev1-api-v2.rubic.exchange';
|
|
14
|
+
}
|
|
15
|
+
get walletAddress() {
|
|
16
|
+
return this._walletAddress;
|
|
17
|
+
}
|
|
18
|
+
get wallet() {
|
|
19
|
+
return this._wallet;
|
|
20
|
+
}
|
|
21
|
+
constructor(httpClient, logger, clientParams) {
|
|
22
|
+
this.httpClient = httpClient;
|
|
23
|
+
this.logger = logger;
|
|
24
|
+
this.clientParams = clientParams;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Checks, that selected blockchain in wallet is equal to passed blockchain.
|
|
28
|
+
*/
|
|
29
|
+
async checkBlockchainCorrect(blockchainName) {
|
|
30
|
+
const userBlockchainName = await this.getBlockchainName();
|
|
31
|
+
if (userBlockchainName !== blockchainName) {
|
|
32
|
+
throw new wrong_network_error_1.WrongNetworkError(blockchainName);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
setWalletAddress(newWalletAddress) {
|
|
36
|
+
this._walletAddress = newWalletAddress;
|
|
37
|
+
}
|
|
38
|
+
setWallet(wallet) {
|
|
39
|
+
this._wallet = wallet;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.AbstractAdapterSigner = AbstractAdapterSigner;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const possibleErrors: string[];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.possibleErrors = void 0;
|
|
4
|
+
exports.possibleErrors = [
|
|
5
|
+
'not authorized',
|
|
6
|
+
'daily request count exceeded',
|
|
7
|
+
'invalid json rpc response',
|
|
8
|
+
"we can't execute this request",
|
|
9
|
+
'your account has been suspended',
|
|
10
|
+
'account suspended, please top up to reenable',
|
|
11
|
+
'your account has been suspended',
|
|
12
|
+
'too many requests, we recommend you to use free api key',
|
|
13
|
+
'origin not allowed'
|
|
14
|
+
];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { AbiItem } from '
|
|
1
|
+
import { AbiItem } from '../../../utils/models/abi-types';
|
|
2
2
|
export declare const TRON_MULTICALL_ABI: AbiItem[];
|