@cryptorubic/web3 0.15.0-alpha-stellar.0 → 0.16.3-alpha-2695.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 +5 -1
- package/src/index.d.ts +130 -22
- package/src/index.js +130 -20
- package/src/lib/adapter/adapters/adapter-bitcoin/bitcoin-adapter.d.ts +40 -0
- package/src/lib/adapter/adapters/{bitcoin-adapter.js → adapter-bitcoin/bitcoin-adapter.js} +50 -15
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-send-tx-params.d.ts +5 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.d.ts +5 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-psbt-encoded-config.js +2 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types.d.ts +7 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-trade-types.js +2 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config.d.ts +6 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/models/btc-web3-private-models/bitcoin-transfer-encoded-config.js +2 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/signer/bitcoin-adapter-signer.d.ts +17 -0
- package/src/lib/adapter/adapters/adapter-bitcoin/signer/bitcoin-adapter-signer.js +131 -0
- package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.d.ts +4 -0
- package/src/lib/adapter/adapters/adapter-evm/constants/proxy-hash-errors.js +705 -0
- package/src/lib/adapter/adapters/adapter-evm/evm-adapter.d.ts +120 -0
- package/src/lib/adapter/adapters/{evm-adapter.js → adapter-evm/evm-adapter.js} +215 -87
- package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.d.ts +38 -0
- package/src/lib/adapter/adapters/adapter-evm/models/evm-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/adapter-evm/signer/evm-adapter-signer.d.ts +53 -0
- package/src/lib/adapter/adapters/adapter-evm/signer/evm-adapter-signer.js +262 -0
- package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.d.ts +12 -0
- package/src/lib/adapter/adapters/adapter-evm/utils/parse-evm-error.js +70 -0
- package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.d.ts +16 -0
- package/src/lib/adapter/adapters/adapter-solana/models/solana-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/{utils → adapter-solana/services}/solana-tokens-service.d.ts +1 -1
- package/src/lib/adapter/adapters/{utils → adapter-solana/services}/solana-tokens-service.js +2 -2
- package/src/lib/adapter/adapters/adapter-solana/signer/solana-adapter-signer.d.ts +17 -0
- package/src/lib/adapter/adapters/adapter-solana/signer/solana-adapter-signer.js +87 -0
- package/src/lib/adapter/adapters/{solana-adapter.d.ts → adapter-solana/solana-adapter.d.ts} +25 -15
- package/src/lib/adapter/adapters/{solana-adapter.js → adapter-solana/solana-adapter.js} +60 -38
- package/src/lib/adapter/adapters/adapter-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/{sui-adapter.js → adapter-sui/sui-adapter.js} +45 -9
- package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.d.ts +26 -0
- package/src/lib/adapter/adapters/adapter-ton/models/ton-send-tx-params.js +2 -0
- package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.d.ts +5 -5
- package/src/lib/adapter/adapters/{utils → adapter-ton/services}/ton-api.service.js +15 -45
- 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} +135 -97
- 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/trc-20-contract-abi.d.ts +1 -0
- package/src/lib/adapter/adapters/constants/tron-multicall-abi.js +12 -5
- package/src/lib/adapter/adapters/models/approve-adapter.d.ts +12 -8
- package/src/lib/adapter/adapters/models/approve-adapter.js +1 -1
- package/src/lib/adapter/adapters/models/basic-transaction-options.d.ts +1 -1
- package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.d.ts +5 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/batch-call.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.d.ts +4 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-call.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.d.ts +4 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/evm-multicall-response.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.d.ts +18 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price-viem.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/gas-price.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.d.ts +10 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/permit2-contract-types.js +2 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.d.ts +5 -0
- package/src/lib/adapter/adapters/models/evm-web3-public-models/rpc-response.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/contract-params.d.ts +23 -0
- package/src/lib/adapter/adapters/models/old-features-models/contract-params.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.d.ts +32 -0
- package/src/lib/adapter/adapters/models/old-features-models/encode-transaction-options.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.d.ts +6 -0
- package/src/lib/adapter/adapters/models/old-features-models/is-deflation-token.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.d.ts +5 -0
- package/src/lib/adapter/adapters/models/old-features-models/non-evm-chain-address-correct-response.js +2 -0
- package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.d.ts +65 -0
- package/src/lib/adapter/adapters/models/old-features-models/swap-transaction-options.js +2 -0
- package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.d.ts +8 -0
- package/src/lib/adapter/adapters/models/status-manager-models/tx-status-data.js +2 -0
- package/src/lib/adapter/adapters/models/ton-api-config.d.ts +1 -1
- 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/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 +17 -13
- package/src/lib/adapter/blockchain-adapter-factory.service.js +50 -61
- package/src/lib/adapter/constants/chain-configs/chain-configs.js +92 -56
- package/src/lib/adapter/constants/models/env-type.d.ts +1 -0
- package/src/lib/adapter/constants/models/env-type.js +2 -0
- package/src/lib/adapter/constants/models/solana-web3.d.ts +1 -1
- package/src/lib/adapter/constants/rubic-api-link-mapping.d.ts +2 -0
- package/src/lib/adapter/constants/rubic-api-link-mapping.js +16 -0
- package/src/lib/adapter/constants/viem-blockchain-mapping.js +3 -2
- package/src/lib/adapter/models/create-factory-params.d.ts +27 -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/web3-pure-store.js +12 -9
- 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-call.d.ts +8 -3
- 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/zcash-web3-pure.d.ts +5 -0
- package/src/lib/utils/web3-types/zcash-web3-pure.js +17 -0
- package/src/lib/adapter/adapters/abstract-adapter.d.ts +0 -23
- package/src/lib/adapter/adapters/abstract-adapter.js +0 -59
- package/src/lib/adapter/adapters/bitcoin-adapter.d.ts +0 -18
- package/src/lib/adapter/adapters/evm-adapter.d.ts +0 -59
- package/src/lib/adapter/adapters/sui-adapter.d.ts +0 -17
- package/src/lib/adapter/adapters/ton-adapter.d.ts +0 -22
- package/src/lib/adapter/adapters/ton-adapter.js +0 -100
- package/src/lib/adapter/adapters/tron-adapter.d.ts +0 -37
- /package/src/lib/adapter/adapters/{models/gas-price.js → adapter-bitcoin/models/btc-send-tx-params.js} +0 -0
- /package/src/lib/adapter/adapters/models/{gas-price.d.ts → evm-web3-public-models/gas-price.d.ts} +0 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StellarAdapter = void 0;
|
|
4
|
+
const core_1 = require("@cryptorubic/core");
|
|
5
|
+
const abstract_adapter_1 = require("../common/abstract-adapter");
|
|
6
|
+
const tx_status_1 = require("../models/web3-public-models/tx-status");
|
|
7
|
+
const stellar_sdk_1 = require("@stellar/stellar-sdk");
|
|
8
|
+
const stellar_adapter_signer_1 = require("./signer/stellar-adapter-signer");
|
|
9
|
+
const stellar_sdk_2 = require("@stellar/stellar-sdk");
|
|
10
|
+
const bignumber_js_1 = require("bignumber.js");
|
|
11
|
+
const web3_pure_1 = require("../../../utils/web3-pure");
|
|
12
|
+
const fake_stellar_wallet_1 = require("./constants/fake-stellar-wallet");
|
|
13
|
+
const inactive_account_error_1 = require("../../../errors/blockchain/inactive-account.error");
|
|
14
|
+
class StellarAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
15
|
+
constructor(rpc, httpClient, logger, clientParams) {
|
|
16
|
+
super(core_1.BLOCKCHAIN_NAME.STELLAR, logger);
|
|
17
|
+
this.rpc = rpc;
|
|
18
|
+
this.CLASSIC_TOKEN_DECIMALS = 7;
|
|
19
|
+
this.signer = new stellar_adapter_signer_1.StellarAdapterSigner(this.publicRef, httpClient, logger, clientParams);
|
|
20
|
+
this.horizonClient = new stellar_sdk_1.Horizon.Server(rpc[0].horizon, {
|
|
21
|
+
allowHttp: true,
|
|
22
|
+
appName: 'rubic.exchange',
|
|
23
|
+
headers: rpc[0].horizonHeaders
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
initWeb3Client() {
|
|
27
|
+
this.public = new stellar_sdk_2.rpc.Server(this.rpc[0].soroban, {
|
|
28
|
+
allowHttp: true,
|
|
29
|
+
timeout: 5000,
|
|
30
|
+
headers: this.rpc[0].sorobanHeaders
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async getBlockNumber() {
|
|
34
|
+
const { sequence } = await this.public.getLatestLedger();
|
|
35
|
+
return sequence;
|
|
36
|
+
}
|
|
37
|
+
async getTokensBalances(userAddress, tokensAddresses) {
|
|
38
|
+
try {
|
|
39
|
+
const balances = (await this.horizonClient.loadAccount(userAddress)).balances;
|
|
40
|
+
return tokensAddresses.map((token) => {
|
|
41
|
+
const possibleBalance = balances.find((balance) => {
|
|
42
|
+
if (balance.asset_type === 'native') {
|
|
43
|
+
return web3_pure_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.STELLAR, token);
|
|
44
|
+
}
|
|
45
|
+
const tokenBalance = balance;
|
|
46
|
+
return (0, core_1.compareAddresses)(token, `${tokenBalance.asset_code}-${tokenBalance.asset_issuer}`);
|
|
47
|
+
});
|
|
48
|
+
return new bignumber_js_1.default(core_1.Token.toWei(possibleBalance?.balance || '0', this.CLASSIC_TOKEN_DECIMALS));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
console.error(err);
|
|
53
|
+
return tokensAddresses.map(() => new bignumber_js_1.default(0));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async getBalance(userAddress, tokenAddress) {
|
|
57
|
+
try {
|
|
58
|
+
if (!tokenAddress || web3_pure_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.STELLAR, tokenAddress)) {
|
|
59
|
+
const resp = await this.public.getAccountEntry(userAddress);
|
|
60
|
+
return new bignumber_js_1.default(resp.balance().toString());
|
|
61
|
+
}
|
|
62
|
+
const resp = await this.public.getTrustline(userAddress, this.convertTokenAddressToAsset(tokenAddress));
|
|
63
|
+
return new bignumber_js_1.default(resp.balance().toString());
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return new bignumber_js_1.default(0);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async callForTokensInfo(tokenAddresses) {
|
|
70
|
+
return Promise.all(tokenAddresses.map((token) => this.callForTokenInfo(token)));
|
|
71
|
+
}
|
|
72
|
+
async callForTokenInfo(tokenAddress) {
|
|
73
|
+
if (web3_pure_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.STELLAR, tokenAddress)) {
|
|
74
|
+
return core_1.nativeTokensList[core_1.BLOCKCHAIN_NAME.STELLAR];
|
|
75
|
+
}
|
|
76
|
+
const [code, issuer] = tokenAddress.toUpperCase().split('-');
|
|
77
|
+
try {
|
|
78
|
+
const fetchedTokens = await this.horizonClient.assets().forIssuer(issuer).limit(200).call();
|
|
79
|
+
const fetchedToken = fetchedTokens.records.find((fetchedToken) => (0, core_1.compareAddresses)(fetchedToken.asset_code, code) &&
|
|
80
|
+
(0, core_1.compareAddresses)(fetchedToken.asset_issuer, issuer) &&
|
|
81
|
+
parseFloat(fetchedToken.balances.authorized) > 0);
|
|
82
|
+
if (fetchedToken && 'toml' in fetchedToken._links) {
|
|
83
|
+
const { href } = fetchedToken._links.toml;
|
|
84
|
+
if (href) {
|
|
85
|
+
const { CURRENCIES } = await stellar_sdk_1.StellarToml.Resolver.resolve(new URL(href).hostname, { allowHttp: true }).catch(() => ({}));
|
|
86
|
+
if (CURRENCIES) {
|
|
87
|
+
const tomlToken = CURRENCIES.find((currency) => (0, core_1.compareAddresses)(fetchedToken.asset_code, currency.code) &&
|
|
88
|
+
(0, core_1.compareAddresses)(fetchedToken.asset_issuer, currency.issuer));
|
|
89
|
+
return new core_1.Token({
|
|
90
|
+
name: tomlToken.name || tomlToken.code,
|
|
91
|
+
symbol: tomlToken.code,
|
|
92
|
+
decimals: tomlToken.display_decimals || this.CLASSIC_TOKEN_DECIMALS,
|
|
93
|
+
blockchain: core_1.BLOCKCHAIN_NAME.STELLAR,
|
|
94
|
+
address: `${tomlToken.code}-${tomlToken.issuer}`
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return new core_1.Token({
|
|
99
|
+
name: fetchedToken.asset_code,
|
|
100
|
+
symbol: fetchedToken.asset_code,
|
|
101
|
+
decimals: this.CLASSIC_TOKEN_DECIMALS,
|
|
102
|
+
blockchain: core_1.BLOCKCHAIN_NAME.STELLAR,
|
|
103
|
+
address: `${fetchedToken.asset_code}-${fetchedToken.asset_issuer}`
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
throw new Error('Token not found');
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.error(err);
|
|
110
|
+
throw err;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async checkEnoughBalance(token, walletAddress) {
|
|
114
|
+
const userBalance = await this.getBalance(walletAddress, token.address);
|
|
115
|
+
return userBalance.gte(token.weiAmount);
|
|
116
|
+
}
|
|
117
|
+
async needTrustline(token, walletAddress) {
|
|
118
|
+
const isCorrectWalletAddress = await web3_pure_1.Web3Pure.isAddressCorrect(core_1.BLOCKCHAIN_NAME.STELLAR, walletAddress);
|
|
119
|
+
if (token.isNative || !isCorrectWalletAddress)
|
|
120
|
+
return false;
|
|
121
|
+
try {
|
|
122
|
+
const trustline = await this.public.getTrustline(walletAddress, this.convertTokenAddressToAsset(token.address));
|
|
123
|
+
return new bignumber_js_1.default(trustline.limit().toString()).lt(token.weiAmount);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async addTrustline(tokenAddress) {
|
|
130
|
+
try {
|
|
131
|
+
const tx = await this.encodeTrustline(tokenAddress, this.signer.walletAddress);
|
|
132
|
+
const { signedTxXdr } = await this.signer.wallet.signTransaction(tx, {
|
|
133
|
+
networkPassphrase: stellar_sdk_1.Networks.PUBLIC,
|
|
134
|
+
address: this.signer.walletAddress
|
|
135
|
+
});
|
|
136
|
+
const resp = await this.public.sendTransaction(stellar_sdk_1.TransactionBuilder.fromXDR(signedTxXdr, stellar_sdk_1.Networks.PUBLIC));
|
|
137
|
+
if (resp.status === 'ERROR' && resp.errorResult) {
|
|
138
|
+
this.signer.parseTxError(resp.errorResult);
|
|
139
|
+
}
|
|
140
|
+
const resStatus = await this.public.pollTransaction(resp.hash);
|
|
141
|
+
if (resStatus.status === 'FAILED') {
|
|
142
|
+
this.signer.parseTxError(resStatus.resultXdr);
|
|
143
|
+
}
|
|
144
|
+
return resStatus.txHash;
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
this.logger?.customError('FAILED TO ADD TRUSTLINE', err);
|
|
148
|
+
throw err;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async encodeTrustline(tokenAddress, walletAddress) {
|
|
152
|
+
const account = await this.getAccountInfo(walletAddress);
|
|
153
|
+
const tx = new stellar_sdk_1.TransactionBuilder(account, {
|
|
154
|
+
fee: stellar_sdk_1.BASE_FEE,
|
|
155
|
+
networkPassphrase: stellar_sdk_1.Networks.PUBLIC
|
|
156
|
+
})
|
|
157
|
+
.addOperation(stellar_sdk_1.Operation.changeTrust({
|
|
158
|
+
asset: this.convertTokenAddressToAsset(tokenAddress)
|
|
159
|
+
}))
|
|
160
|
+
.setTimeout(600)
|
|
161
|
+
.build();
|
|
162
|
+
return tx.toXDR();
|
|
163
|
+
}
|
|
164
|
+
getTokenContractId(tokenAddress) {
|
|
165
|
+
if (web3_pure_1.Web3Pure.isNativeAddress(core_1.BLOCKCHAIN_NAME.STELLAR, tokenAddress)) {
|
|
166
|
+
return stellar_sdk_1.Asset.native().contractId(stellar_sdk_1.Networks.PUBLIC);
|
|
167
|
+
}
|
|
168
|
+
return this.convertTokenAddressToAsset(tokenAddress).contractId(stellar_sdk_1.Networks.PUBLIC);
|
|
169
|
+
}
|
|
170
|
+
convertTokenAddressToAsset(tokenAddress) {
|
|
171
|
+
const [code, issuer] = tokenAddress.split('-');
|
|
172
|
+
return new stellar_sdk_1.Asset(code, issuer);
|
|
173
|
+
}
|
|
174
|
+
async read(address, method, methodArgs = []) {
|
|
175
|
+
const contract = new stellar_sdk_1.Contract(address);
|
|
176
|
+
const args = methodArgs.map(({ value, type }) => (0, stellar_sdk_1.nativeToScVal)(value, { type }));
|
|
177
|
+
const operation = contract.call(method, ...args);
|
|
178
|
+
const tx = new stellar_sdk_1.TransactionBuilder(new stellar_sdk_1.Account(fake_stellar_wallet_1.FAKE_STELLAR_WALLET, '0'), {
|
|
179
|
+
fee: stellar_sdk_1.BASE_FEE,
|
|
180
|
+
networkPassphrase: stellar_sdk_1.Networks.PUBLIC
|
|
181
|
+
})
|
|
182
|
+
.addOperation(operation)
|
|
183
|
+
.setTimeout(600)
|
|
184
|
+
.build();
|
|
185
|
+
const resp = await this.public.simulateTransaction(tx);
|
|
186
|
+
if ('error' in resp) {
|
|
187
|
+
throw new Error(resp.error);
|
|
188
|
+
}
|
|
189
|
+
const rawValue = resp.result.retval;
|
|
190
|
+
return (0, stellar_sdk_1.scValToNative)(rawValue);
|
|
191
|
+
}
|
|
192
|
+
async simulateTransaction(config) {
|
|
193
|
+
try {
|
|
194
|
+
const resp = await this.public.simulateTransaction(stellar_sdk_1.TransactionBuilder.fromXDR(config.transaction, stellar_sdk_1.Networks.PUBLIC));
|
|
195
|
+
if ('error' in resp) {
|
|
196
|
+
throw new Error(resp.error);
|
|
197
|
+
}
|
|
198
|
+
return resp.minResourceFee;
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
this.logger?.customError('Error while simulating transaction', err);
|
|
202
|
+
throw err;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async getTransactionStatus(srcTxHash) {
|
|
206
|
+
try {
|
|
207
|
+
const resp = await this.public.pollTransaction(srcTxHash);
|
|
208
|
+
if (resp.status === 'SUCCESS') {
|
|
209
|
+
return tx_status_1.TX_STATUS.SUCCESS;
|
|
210
|
+
}
|
|
211
|
+
if (resp.status === 'FAILED') {
|
|
212
|
+
return tx_status_1.TX_STATUS.FAIL;
|
|
213
|
+
}
|
|
214
|
+
return tx_status_1.TX_STATUS.PENDING;
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return tx_status_1.TX_STATUS.PENDING;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async getMinWeiBalance(userAddress) {
|
|
221
|
+
try {
|
|
222
|
+
const resp = await this.public.getAccountEntry(userAddress);
|
|
223
|
+
const baseReserve = 5000000;
|
|
224
|
+
return new bignumber_js_1.default(2 + resp.numSubEntries()).multipliedBy(baseReserve);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return new bignumber_js_1.default(0);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
getFeeFromTransaction(xdr) {
|
|
231
|
+
const parsedTranssaction = stellar_sdk_1.TransactionBuilder.fromXDR(xdr, stellar_sdk_1.Networks.PUBLIC);
|
|
232
|
+
return new bignumber_js_1.default(parsedTranssaction.fee);
|
|
233
|
+
}
|
|
234
|
+
async getAccountInfo(walletAddress) {
|
|
235
|
+
try {
|
|
236
|
+
const account = await this.public.getAccount(walletAddress);
|
|
237
|
+
return account;
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
if (err.message?.includes('Account not found')) {
|
|
241
|
+
throw new inactive_account_error_1.InactiveAccountError();
|
|
242
|
+
}
|
|
243
|
+
throw err;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
async callContractMethod(_contractAddress, _contractAbi = [], _methodName, _methodArguments = [], _options) {
|
|
247
|
+
throw new Error('Method call is not supported');
|
|
248
|
+
}
|
|
249
|
+
multicallContractsMethods(_contractAbi, _contractsData) {
|
|
250
|
+
throw new Error('Method multicall is not supported');
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
exports.StellarAdapter = StellarAdapter;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Transaction } from '@mysten/sui/transactions';
|
|
2
|
+
import { BasicSendTransactionOptions } from '../../models/basic-transaction-options';
|
|
3
|
+
export interface SuiSendTxParams {
|
|
4
|
+
txOptions: SuiTransactionOptions;
|
|
5
|
+
}
|
|
6
|
+
export interface SuiTransactionOptions extends BasicSendTransactionOptions {
|
|
7
|
+
transactionBlock: Transaction;
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BlockchainName, HttpClient, ICustomLogger } from '@cryptorubic/core';
|
|
2
|
+
import { AbstractAdapterSigner } from '../../common/signer/abstract-adapter-signer';
|
|
3
|
+
import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
|
|
4
|
+
import { SuiSendTxParams } from '../models/sui-send-tx-params';
|
|
5
|
+
import { WalletAdapter } from '@suiet/wallet-sdk';
|
|
6
|
+
import { ExecuteTransactionBlockParams, SuiClient, SuiTransactionBlockResponse } from '@mysten/sui/dist/cjs/client';
|
|
7
|
+
export declare class SuiAdapterSigner extends AbstractAdapterSigner<WalletAdapter, SuiSendTxParams, string> {
|
|
8
|
+
private readonly publicRef;
|
|
9
|
+
get publicClient(): SuiClient;
|
|
10
|
+
constructor(publicRef: {
|
|
11
|
+
public: SuiClient | null;
|
|
12
|
+
}, httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
|
|
13
|
+
write<T>(): Promise<T>;
|
|
14
|
+
getBlockchainName(): Promise<BlockchainName>;
|
|
15
|
+
sendTransaction(params: SuiSendTxParams): Promise<string>;
|
|
16
|
+
executeTxBlock(params: ExecuteTransactionBlockParams): Promise<SuiTransactionBlockResponse>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SuiAdapterSigner = void 0;
|
|
4
|
+
const core_1 = require("@cryptorubic/core");
|
|
5
|
+
const abstract_adapter_signer_1 = require("../../common/signer/abstract-adapter-signer");
|
|
6
|
+
const user_reject_error_1 = require("../../../../errors/blockchain/user-reject.error");
|
|
7
|
+
const parse_evm_error_1 = require("../../adapter-evm/utils/parse-evm-error");
|
|
8
|
+
class SuiAdapterSigner extends abstract_adapter_signer_1.AbstractAdapterSigner {
|
|
9
|
+
get publicClient() {
|
|
10
|
+
if (!this.publicRef.public) {
|
|
11
|
+
const msg = `Trying to access undefined publicClient in SuiAdapterSigner.`;
|
|
12
|
+
this.logger?.customLog(msg);
|
|
13
|
+
throw new Error(msg);
|
|
14
|
+
}
|
|
15
|
+
return this.publicRef.public;
|
|
16
|
+
}
|
|
17
|
+
constructor(publicRef, httpClient, logger, clientParams) {
|
|
18
|
+
super(httpClient, logger, clientParams);
|
|
19
|
+
this.publicRef = publicRef;
|
|
20
|
+
}
|
|
21
|
+
async write() {
|
|
22
|
+
throw new Error('Method write is not supported');
|
|
23
|
+
}
|
|
24
|
+
getBlockchainName() {
|
|
25
|
+
return Promise.resolve(core_1.BLOCKCHAIN_NAME.SUI);
|
|
26
|
+
}
|
|
27
|
+
async sendTransaction(params) {
|
|
28
|
+
try {
|
|
29
|
+
const account = this.wallet.accounts[0];
|
|
30
|
+
const signedTx = await this.wallet.features['sui:signTransaction'].signTransaction({
|
|
31
|
+
account: account,
|
|
32
|
+
transaction: params.txOptions.transactionBlock,
|
|
33
|
+
chain: 'sui:mainnet'
|
|
34
|
+
});
|
|
35
|
+
const tx = await this.executeTxBlock({
|
|
36
|
+
transactionBlock: signedTx.bytes,
|
|
37
|
+
signature: signedTx.signature
|
|
38
|
+
});
|
|
39
|
+
params.txOptions.onTransactionHash?.(tx.digest);
|
|
40
|
+
return tx.digest;
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (err?.message.includes('User rejected the request.') ||
|
|
44
|
+
err?.message.includes('User rejection | (UserRejectionError:-4005)')) {
|
|
45
|
+
throw new user_reject_error_1.UserRejectError();
|
|
46
|
+
}
|
|
47
|
+
console.error(`Send transaction error. ${err}`);
|
|
48
|
+
throw (0, parse_evm_error_1.parseEvmError)(err);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
executeTxBlock(params) {
|
|
52
|
+
return this.publicClient.executeTransactionBlock(params);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.SuiAdapterSigner = SuiAdapterSigner;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Abi, MulticallResponse } from 'viem';
|
|
2
|
+
import { HttpClient, ICustomLogger, PriceTokenAmount, SuiBlockchainName, Token, TokenAmount } from '@cryptorubic/core';
|
|
3
|
+
import { SuiClient } from '@mysten/sui/client';
|
|
4
|
+
import BigNumber from 'bignumber.js';
|
|
5
|
+
import { AbstractAdapter } from '../common/abstract-adapter';
|
|
6
|
+
import { WalletAdapter } from '@suiet/wallet-sdk';
|
|
7
|
+
import { SuiAdapterSigner } from './signer/sui-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 { TxStatus } from '../models/web3-public-models/tx-status';
|
|
12
|
+
export declare class SuiAdapter extends AbstractAdapter<SuiClient, WalletAdapter, SuiBlockchainName> {
|
|
13
|
+
private readonly rpcList;
|
|
14
|
+
readonly signer: SuiAdapterSigner;
|
|
15
|
+
constructor(rpcList: string[], httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
|
|
16
|
+
initWeb3Client(): void;
|
|
17
|
+
callContractMethod<T extends Web3PrimitiveType = string>(): Promise<T>;
|
|
18
|
+
read<T>(): Promise<T>;
|
|
19
|
+
getTransactionStatus(srcTxHash: string): Promise<TxStatus>;
|
|
20
|
+
getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
21
|
+
multicallContractsMethods<Output extends Web3PrimitiveType>(): Promise<ContractMulticallResponse<Output>[][]>;
|
|
22
|
+
getBlockNumber(): Promise<number | {
|
|
23
|
+
blockNumber: number;
|
|
24
|
+
workchain: number;
|
|
25
|
+
}>;
|
|
26
|
+
multicallByAddress<T>(_address: string, _abi: Abi, _method: string, _methodArgs?: unknown[][], _allowErrors?: boolean): Promise<MulticallResponse<T>[]>;
|
|
27
|
+
simulateTransaction(_config: object, _from: string): Promise<void>;
|
|
28
|
+
callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<SuiBlockchainName>[]>;
|
|
29
|
+
checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string): Promise<boolean>;
|
|
30
|
+
getBalance(userAddress: string, tokenAddress?: string): Promise<BigNumber>;
|
|
31
|
+
compareSuiAddress(addressA: string, addressB: string): boolean;
|
|
32
|
+
}
|
|
@@ -1,24 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SuiAdapter = void 0;
|
|
4
|
-
const abstract_adapter_1 = require("./abstract-adapter");
|
|
5
4
|
const core_1 = require("@cryptorubic/core");
|
|
6
|
-
const web3_pure_1 = require("../../utils/web3-pure");
|
|
7
5
|
const client_1 = require("@mysten/sui/client");
|
|
8
6
|
const bignumber_js_1 = require("bignumber.js");
|
|
7
|
+
const abstract_adapter_1 = require("../common/abstract-adapter");
|
|
8
|
+
const web3_pure_1 = require("../../../utils/web3-pure");
|
|
9
|
+
const sui_adapter_signer_1 = require("./signer/sui-adapter-signer");
|
|
10
|
+
const tx_status_1 = require("../models/web3-public-models/tx-status");
|
|
9
11
|
class SuiAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
10
|
-
constructor(rpcList, logger) {
|
|
12
|
+
constructor(rpcList, httpClient, logger, clientParams) {
|
|
11
13
|
super(core_1.BLOCKCHAIN_NAME.SUI, logger);
|
|
12
|
-
this.
|
|
14
|
+
this.rpcList = rpcList;
|
|
15
|
+
this.signer = new sui_adapter_signer_1.SuiAdapterSigner(this.publicRef, httpClient, logger, clientParams);
|
|
13
16
|
}
|
|
14
|
-
|
|
17
|
+
initWeb3Client() {
|
|
18
|
+
this.public = new client_1.SuiClient({ url: this.rpcList[0] });
|
|
19
|
+
}
|
|
20
|
+
async callContractMethod() {
|
|
21
|
+
throw new Error('Method call is not supported');
|
|
22
|
+
}
|
|
23
|
+
async read() {
|
|
15
24
|
throw new Error('Method read is not supported');
|
|
16
25
|
}
|
|
17
|
-
async
|
|
18
|
-
|
|
26
|
+
async getTransactionStatus(srcTxHash) {
|
|
27
|
+
try {
|
|
28
|
+
const txDetails = await this.public.getTransactionBlock({ digest: srcTxHash, options: { showEffects: true } });
|
|
29
|
+
const status = txDetails?.effects?.status.status;
|
|
30
|
+
if (!status) {
|
|
31
|
+
return tx_status_1.TX_STATUS.PENDING;
|
|
32
|
+
}
|
|
33
|
+
return status === 'success' ? tx_status_1.TX_STATUS.SUCCESS : tx_status_1.TX_STATUS.FAIL;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return tx_status_1.TX_STATUS.PENDING;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async getTokensBalances(userAddress, tokensAddresses) {
|
|
40
|
+
const allUserTokens = await this.public.getAllBalances({ owner: userAddress });
|
|
41
|
+
return tokensAddresses.map((address) => {
|
|
42
|
+
const possibleBalance = allUserTokens.find((el) => (0, core_1.compareAddresses)(address, el.coinType) || this.compareSuiAddress(address, el.coinType));
|
|
43
|
+
return new bignumber_js_1.default(possibleBalance?.totalBalance || 0);
|
|
44
|
+
});
|
|
19
45
|
}
|
|
20
|
-
|
|
21
|
-
throw new Error('Method
|
|
46
|
+
multicallContractsMethods() {
|
|
47
|
+
throw new Error('Method not implemented.');
|
|
48
|
+
}
|
|
49
|
+
async getBlockNumber() {
|
|
50
|
+
const epochInfo = await this.public.getEpochs({ limit: 1 });
|
|
51
|
+
const stringEpoch = epochInfo.data[0].epoch;
|
|
52
|
+
return Number(stringEpoch);
|
|
22
53
|
}
|
|
23
54
|
async multicallByAddress(_address, _abi, _method, _methodArgs = [], _allowErrors = true) {
|
|
24
55
|
throw new Error('Method multicall is not supported');
|
|
@@ -71,5 +102,10 @@ class SuiAdapter extends abstract_adapter_1.AbstractAdapter {
|
|
|
71
102
|
const balance = await this.public.getBalance({ owner: userAddress });
|
|
72
103
|
return new bignumber_js_1.default(balance.totalBalance);
|
|
73
104
|
}
|
|
105
|
+
compareSuiAddress(addressA, addressB) {
|
|
106
|
+
const pureAddressA = addressA.split(':')[0];
|
|
107
|
+
const pureAddressB = addressB.split(':')[0];
|
|
108
|
+
return (0, core_1.compareAddresses)(new bignumber_js_1.default(pureAddressA).toFixed(), new bignumber_js_1.default(pureAddressB).toFixed());
|
|
109
|
+
}
|
|
74
110
|
}
|
|
75
111
|
exports.SuiAdapter = SuiAdapter;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BasicSendTransactionOptions } from '../../models/basic-transaction-options';
|
|
2
|
+
export interface TonSendTxParams {
|
|
3
|
+
txOptions: TonTransactionOptions;
|
|
4
|
+
}
|
|
5
|
+
export interface TonTransactionOptions extends BasicSendTransactionOptions {
|
|
6
|
+
messages: TonEncodedConfig[];
|
|
7
|
+
}
|
|
8
|
+
export interface TonEncodedConfig {
|
|
9
|
+
/**
|
|
10
|
+
* In default transfer - it's a receiverWalletAddress to send funds
|
|
11
|
+
* In tx using contracts - it's a jettonWalletAddress (like ERC-20, but in TON)
|
|
12
|
+
*/
|
|
13
|
+
address: string;
|
|
14
|
+
/**
|
|
15
|
+
* Amount to send in tx in nanotons
|
|
16
|
+
* In default trasfer - it's a transfered value
|
|
17
|
+
* In tx using contracts - it's static gasFee, by default toNano(0.05).toString()
|
|
18
|
+
*/
|
|
19
|
+
amount: string;
|
|
20
|
+
/**
|
|
21
|
+
* Data for contract.
|
|
22
|
+
* body.toBoc().toString('base64')
|
|
23
|
+
*/
|
|
24
|
+
payload?: string;
|
|
25
|
+
stateInit?: string;
|
|
26
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { TonApiAccountInfoResp, TonApiAllNonNullableTokenInfoForWalletResp, TonApiParseAddressResp, TonApiTokenInfoForWalletResp, TonApiTokenInfoResp, TonApiTxDataByBocResp } from '
|
|
2
|
-
import { TonCenterBlockInfo } from '
|
|
1
|
+
import { TonApiAccountInfoResp, TonApiAllNonNullableTokenInfoForWalletResp, TonApiParseAddressResp, TonApiTokenInfoForWalletResp, TonApiTokenInfoResp, TonApiTxDataByBocResp } from '../../models/tonapi-models';
|
|
2
|
+
import { TonCenterBlockInfo } from '../../models/toncenter-types';
|
|
3
3
|
import { HttpClient, ICustomLogger } from '@cryptorubic/core';
|
|
4
|
-
import { TonApiConfig } from '
|
|
5
|
-
import { Web3PrimitiveType } from '
|
|
4
|
+
import { TonApiConfig } from '../../models/ton-api-config';
|
|
5
|
+
import { Web3PrimitiveType } from '../../../../utils/models/primitive-types';
|
|
6
6
|
export declare class TonApiService {
|
|
7
7
|
private readonly httpClient;
|
|
8
8
|
private readonly logger?;
|
|
9
9
|
private readonly tonApiUrl;
|
|
10
|
-
private readonly
|
|
10
|
+
private readonly apiHeaders;
|
|
11
11
|
private readonly tonCenterV3Url;
|
|
12
12
|
constructor(httpClient: HttpClient, params: TonApiConfig, logger?: ICustomLogger | undefined);
|
|
13
13
|
/**
|
|
@@ -5,7 +5,10 @@ class TonApiService {
|
|
|
5
5
|
constructor(httpClient, params, logger) {
|
|
6
6
|
this.httpClient = httpClient;
|
|
7
7
|
this.logger = logger;
|
|
8
|
-
this.
|
|
8
|
+
this.apiHeaders = {
|
|
9
|
+
...params.tonApiHeaders,
|
|
10
|
+
referer: 'https://app.rubic.exchange'
|
|
11
|
+
};
|
|
9
12
|
this.tonApiUrl = params?.tonApiUrl || 'https://tonapi.io';
|
|
10
13
|
this.tonCenterV3Url = params.tonCenterV3Url || 'https://toncenter.com/api/v3';
|
|
11
14
|
}
|
|
@@ -14,10 +17,7 @@ class TonApiService {
|
|
|
14
17
|
*/
|
|
15
18
|
async getAllFormatsOfAddress(walletAddress) {
|
|
16
19
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/address/${walletAddress}/parse`, {
|
|
17
|
-
headers:
|
|
18
|
-
apiKey: this.apiKey,
|
|
19
|
-
referer: 'https://app.rubic.exchange'
|
|
20
|
-
}
|
|
20
|
+
headers: this.apiHeaders
|
|
21
21
|
});
|
|
22
22
|
if ('error' in res) {
|
|
23
23
|
throw new Error(`[TonWeb3Pure] Error in getAllFormatsOfAddress - ${res.error}`);
|
|
@@ -30,10 +30,7 @@ class TonApiService {
|
|
|
30
30
|
*/
|
|
31
31
|
async fetchWalletSeqno(walletAddress) {
|
|
32
32
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/wallet/${walletAddress}/seqno`, {
|
|
33
|
-
headers:
|
|
34
|
-
apiKey: this.apiKey,
|
|
35
|
-
referer: 'https://app.rubic.exchange'
|
|
36
|
-
}
|
|
33
|
+
headers: this.apiHeaders
|
|
37
34
|
});
|
|
38
35
|
if ('error' in res) {
|
|
39
36
|
throw new Error(`[TonApiService] Error in fetchWalletSeqno - ${res.error}`);
|
|
@@ -42,10 +39,7 @@ class TonApiService {
|
|
|
42
39
|
}
|
|
43
40
|
async fetchTxInfo(txHash) {
|
|
44
41
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/blockchain/transactions/${txHash}`, {
|
|
45
|
-
headers:
|
|
46
|
-
apiKey: this.apiKey,
|
|
47
|
-
referer: 'https://app.rubic.exchange'
|
|
48
|
-
}
|
|
42
|
+
headers: this.apiHeaders
|
|
49
43
|
});
|
|
50
44
|
if ('error' in res) {
|
|
51
45
|
throw new Error(`[TonApiService] Error in fetchTxInfo - ${res.error}`);
|
|
@@ -54,10 +48,7 @@ class TonApiService {
|
|
|
54
48
|
}
|
|
55
49
|
async fetchTxInfoByMessageHash(txHash) {
|
|
56
50
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/blockchain/messages/${txHash}/transaction`, {
|
|
57
|
-
headers:
|
|
58
|
-
apiKey: this.apiKey,
|
|
59
|
-
referer: 'https://app.rubic.exchange'
|
|
60
|
-
}
|
|
51
|
+
headers: this.apiHeaders
|
|
61
52
|
});
|
|
62
53
|
if ('error' in res) {
|
|
63
54
|
throw new Error(`[TonApiService] Error in fetchTxInfoByMessageHash - ${res.error}`);
|
|
@@ -67,10 +58,7 @@ class TonApiService {
|
|
|
67
58
|
async checkIsTxCompleted(txHash) {
|
|
68
59
|
try {
|
|
69
60
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/events/${txHash}`, {
|
|
70
|
-
headers:
|
|
71
|
-
apiKey: this.apiKey,
|
|
72
|
-
referer: 'https://app.rubic.exchange'
|
|
73
|
-
}
|
|
61
|
+
headers: this.apiHeaders
|
|
74
62
|
});
|
|
75
63
|
if ('error' in res) {
|
|
76
64
|
throw new Error(`[TonApiService] Error in checkIsTxCompleted - ${res.error}`);
|
|
@@ -83,10 +71,7 @@ class TonApiService {
|
|
|
83
71
|
}
|
|
84
72
|
async healthcheck() {
|
|
85
73
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/status`, {
|
|
86
|
-
headers:
|
|
87
|
-
apiKey: this.apiKey,
|
|
88
|
-
referer: 'https://app.rubic.exchange'
|
|
89
|
-
}
|
|
74
|
+
headers: this.apiHeaders
|
|
90
75
|
});
|
|
91
76
|
if ('error' in res || !res.rest_online) {
|
|
92
77
|
return false;
|
|
@@ -116,10 +101,7 @@ class TonApiService {
|
|
|
116
101
|
argsParam += '?' + methodArgs.map((param) => `args=${param}`).join('&');
|
|
117
102
|
}
|
|
118
103
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/blockchain/accounts/${address}/methods/${methodName}${argsParam}`, {
|
|
119
|
-
headers:
|
|
120
|
-
apiKey: this.apiKey,
|
|
121
|
-
referer: 'https://app.rubic.exchange'
|
|
122
|
-
}
|
|
104
|
+
headers: this.apiHeaders
|
|
123
105
|
});
|
|
124
106
|
if ('error' in res) {
|
|
125
107
|
throw new Error(`[TonApiService] Error in callContractMethod - ${res.error}`);
|
|
@@ -129,10 +111,7 @@ class TonApiService {
|
|
|
129
111
|
async fetchTokenInfo(tokenAddress) {
|
|
130
112
|
try {
|
|
131
113
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/jettons/${tokenAddress}`, {
|
|
132
|
-
headers:
|
|
133
|
-
apiKey: this.apiKey,
|
|
134
|
-
referer: 'https://app.rubic.exchange'
|
|
135
|
-
}
|
|
114
|
+
headers: this.apiHeaders
|
|
136
115
|
});
|
|
137
116
|
if ('error' in res) {
|
|
138
117
|
throw new Error(`[TonApiService] Error in fetchTokenInfo - ${res.error}`);
|
|
@@ -151,10 +130,7 @@ class TonApiService {
|
|
|
151
130
|
async fetchTokenInfoForWallet(walletAddress, tokenAddress) {
|
|
152
131
|
try {
|
|
153
132
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/accounts/${walletAddress}/jettons/${tokenAddress}`, {
|
|
154
|
-
headers:
|
|
155
|
-
apiKey: this.apiKey,
|
|
156
|
-
referer: 'https://app.rubic.exchange'
|
|
157
|
-
}
|
|
133
|
+
headers: this.apiHeaders
|
|
158
134
|
});
|
|
159
135
|
if ('error' in res) {
|
|
160
136
|
this.logger?.customError('[TonApiService] ERROR IN fetchTokenInfoForWallet', res.error);
|
|
@@ -169,10 +145,7 @@ class TonApiService {
|
|
|
169
145
|
}
|
|
170
146
|
async fetchAllNonNullableTokensInfoForWallet(walletAddress) {
|
|
171
147
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/accounts/${walletAddress}/jettons`, {
|
|
172
|
-
headers:
|
|
173
|
-
apiKey: this.apiKey,
|
|
174
|
-
referer: 'https://app.rubic.exchange'
|
|
175
|
-
}
|
|
148
|
+
headers: this.apiHeaders
|
|
176
149
|
});
|
|
177
150
|
if ('error' in res) {
|
|
178
151
|
throw new Error(`[TonApiService] Error in fetchAllNonNullableTokensInfoForWallet - ${res.error}`);
|
|
@@ -184,10 +157,7 @@ class TonApiService {
|
|
|
184
157
|
*/
|
|
185
158
|
async fetchAccountInfo(walletAddress) {
|
|
186
159
|
const res = await this.httpClient.get(`${this.tonApiUrl}/v2/accounts/${walletAddress}`, {
|
|
187
|
-
headers:
|
|
188
|
-
apiKey: this.apiKey,
|
|
189
|
-
referer: 'https://app.rubic.exchange'
|
|
190
|
-
}
|
|
160
|
+
headers: this.apiHeaders
|
|
191
161
|
});
|
|
192
162
|
if ('error' in res) {
|
|
193
163
|
throw new Error(`[TonApiService] Error in fetchAccountInfo - ${res.error}`);
|