@cryptorubic/web3 1.3.1 → 1.4.1
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/README.md +1 -1
- package/package.json +2 -1
- 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/models/web3-public-models/tx-status.d.ts +3 -0
- package/src/lib/adapter/adapters/models/web3-public-models/tx-status.js +4 -1
- package/src/lib/adapter/blockchain-adapter-factory.service.d.ts +3 -1
- package/src/lib/adapter/blockchain-adapter-factory.service.js +4 -0
- package/src/lib/adapter/constants/chain-configs/chain-configs.js +27 -0
- package/src/lib/adapter/constants/viem-blockchain-mapping.js +2 -1
- package/src/lib/adapter/models/create-factory-params.d.ts +3 -2
- 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/utils/constants/web3-pure-store.js +2 -4
- 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/web3-types/stellar-web3-pure.d.ts +5 -0
- package/src/lib/utils/web3-types/stellar-web3-pure.js +30 -0
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
# web3
|
|
1
|
+
# web3
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cryptorubic/web3",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@ethersproject/bignumber": "^5.8.0",
|
|
6
6
|
"@mysten/sui": "^1.24.0",
|
|
7
7
|
"@solana/spl-token": "*",
|
|
8
8
|
"@solana/web3.js": "1.95.3",
|
|
9
9
|
"@solflare-wallet/utl-sdk": "^1.4.0",
|
|
10
|
+
"@stellar/stellar-sdk": "^14.4.3",
|
|
10
11
|
"@suiet/wallet-sdk": "^0.3.3",
|
|
11
12
|
"@ton/core": "^0.59.1",
|
|
12
13
|
"@ton/ton": "^15.1.0",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const FAKE_STELLAR_WALLET = "GA43DZREOL4ISMF3RE4ETB4DVJVTITWEWTKPGJRZW4EOZCOCNLNOUVVB";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BasicSendTransactionOptions } from '../../models/basic-transaction-options';
|
|
2
|
+
import { Transaction } from '@stellar/stellar-sdk';
|
|
3
|
+
export interface StellarSendTxParams {
|
|
4
|
+
txOptions: StellarTransactionOptions;
|
|
5
|
+
}
|
|
6
|
+
export interface StellarTransactionOptions extends BasicSendTransactionOptions {
|
|
7
|
+
transaction: string | Transaction;
|
|
8
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export interface StellarWallet {
|
|
2
|
+
/**
|
|
3
|
+
* Function used to request the public key from the active account or
|
|
4
|
+
* specific path on a wallet.
|
|
5
|
+
*
|
|
6
|
+
* @param params
|
|
7
|
+
* @param params.path - The path to tell the wallet which position to ask. This is commonly used in hardware wallets.
|
|
8
|
+
* @param params.skipRequestAccess - Freighter separates the access request from the logic of getting the address, if this is set to true we will avoid requesting the access
|
|
9
|
+
*
|
|
10
|
+
* @return Promise<{ address: string }>
|
|
11
|
+
*/
|
|
12
|
+
getAddress(params?: {
|
|
13
|
+
path?: string;
|
|
14
|
+
skipRequestAccess?: boolean;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
address: string;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* A function to request a wallet to sign a built transaction in its XDR mode
|
|
20
|
+
*
|
|
21
|
+
* @param xdr - A Transaction or a FeeBumpTransaction
|
|
22
|
+
* @param opts - Options compatible with https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0043.md#signtransaction
|
|
23
|
+
* @param opts.networkPassphrase - The Stellar network to use when signing
|
|
24
|
+
* @param opts.address - The public key of the account that should be used to sign
|
|
25
|
+
* @param opts.path - This options is added for special cases like Hardware wallets
|
|
26
|
+
*
|
|
27
|
+
* @return Promise<{ signedTxXdr: string; signerAddress: string }>
|
|
28
|
+
*/
|
|
29
|
+
signTransaction(xdr: string, opts?: {
|
|
30
|
+
networkPassphrase?: string;
|
|
31
|
+
address?: string;
|
|
32
|
+
path?: string;
|
|
33
|
+
submit?: boolean;
|
|
34
|
+
submitUrl?: string;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
signedTxXdr: string;
|
|
37
|
+
signerAddress?: string;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* A function to request a wallet to sign an AuthEntry XDR.
|
|
41
|
+
*
|
|
42
|
+
* @param authEntry - An XDR string version of `HashIdPreimageSorobanAuthorization`
|
|
43
|
+
* @param opts - Options compatible with https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0043.md#signauthentry
|
|
44
|
+
* @param opts.networkPassphrase - The Stellar network to use when signing
|
|
45
|
+
* @param opts.address - The public key of the account that should be used to sign
|
|
46
|
+
* @param opts.path - This options is added for special cases like Hardware wallets
|
|
47
|
+
*
|
|
48
|
+
* @return - Promise<{ signedAuthEntry: string; signerAddress: string }>
|
|
49
|
+
*/
|
|
50
|
+
signAuthEntry(authEntry: string, opts?: {
|
|
51
|
+
networkPassphrase?: string;
|
|
52
|
+
address?: string;
|
|
53
|
+
path?: string;
|
|
54
|
+
}): Promise<{
|
|
55
|
+
signedAuthEntry: string;
|
|
56
|
+
signerAddress?: string;
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* A function to request a wallet to sign an AuthEntry XDR.
|
|
60
|
+
*
|
|
61
|
+
* @param message - An arbitrary string rather than a transaction or auth entry
|
|
62
|
+
* @param opts - Options compatible with https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0043.md#signmessage
|
|
63
|
+
* @param opts.networkPassphrase - The Stellar network to use when signing
|
|
64
|
+
* @param opts.address - The public key of the account that should be used to sign
|
|
65
|
+
* @param opts.path - This options is added for special cases like Hardware wallets
|
|
66
|
+
*
|
|
67
|
+
* @return - Promise<{ signedMessage: string; signerAddress: string }>
|
|
68
|
+
*/
|
|
69
|
+
signMessage(message: string, opts?: {
|
|
70
|
+
networkPassphrase?: string;
|
|
71
|
+
address?: string;
|
|
72
|
+
path?: string;
|
|
73
|
+
}): Promise<{
|
|
74
|
+
signedMessage: string;
|
|
75
|
+
signerAddress?: string;
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* A function to request the current selected network in the wallet. This comes
|
|
79
|
+
* handy when you are dealing with a wallet that doesn't allow you to specify which network to use (For example Lobstr and Rabet)
|
|
80
|
+
*
|
|
81
|
+
* @return - Promise<{ network: string; networkPassphrase: string }>
|
|
82
|
+
*/
|
|
83
|
+
getNetwork(): Promise<{
|
|
84
|
+
network: string;
|
|
85
|
+
networkPassphrase: string;
|
|
86
|
+
}>;
|
|
87
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BlockchainName, HttpClient, ICustomLogger } from '@cryptorubic/core';
|
|
2
|
+
import { AbstractAdapterSigner } from '../../common/signer/abstract-adapter-signer';
|
|
3
|
+
import { StellarClient } from '../models/stellar-client';
|
|
4
|
+
import { StellarSendTxParams } from '../models/stellar-send-tx-params';
|
|
5
|
+
import { StellarWallet } from '../models/stellar-wallet';
|
|
6
|
+
import { ClientAdaptersFactoryParams } from '../../../models/create-factory-params';
|
|
7
|
+
import { xdr } from '@stellar/stellar-sdk';
|
|
8
|
+
export declare class StellarAdapterSigner extends AbstractAdapterSigner<StellarWallet, StellarSendTxParams, string> {
|
|
9
|
+
private readonly publicRef;
|
|
10
|
+
get publicClient(): StellarClient;
|
|
11
|
+
constructor(publicRef: {
|
|
12
|
+
public: StellarClient | null;
|
|
13
|
+
}, httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
|
|
14
|
+
write<T>(): Promise<T>;
|
|
15
|
+
getBlockchainName(): Promise<BlockchainName>;
|
|
16
|
+
sendTransaction(params: StellarSendTxParams): Promise<string>;
|
|
17
|
+
parseTxError(txResult: xdr.TransactionResult): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StellarAdapterSigner = void 0;
|
|
4
|
+
const core_1 = require("@cryptorubic/core");
|
|
5
|
+
const abstract_adapter_signer_1 = require("../../common/signer/abstract-adapter-signer");
|
|
6
|
+
const stellar_sdk_1 = require("@stellar/stellar-sdk");
|
|
7
|
+
const bignumber_js_1 = require("bignumber.js");
|
|
8
|
+
const insufficient_funds_gas_price_value_error_1 = require("../../../../errors/cross-chain/insufficient-funds-gas-price-value.error");
|
|
9
|
+
class StellarAdapterSigner extends abstract_adapter_signer_1.AbstractAdapterSigner {
|
|
10
|
+
get publicClient() {
|
|
11
|
+
if (!this.publicRef.public) {
|
|
12
|
+
const msg = 'Trying to access undefined publicClient in StellarAdapterSigner';
|
|
13
|
+
this.logger?.customLog(msg);
|
|
14
|
+
throw new Error(msg);
|
|
15
|
+
}
|
|
16
|
+
return this.publicRef.public;
|
|
17
|
+
}
|
|
18
|
+
constructor(publicRef, httpClient, logger, clientParams) {
|
|
19
|
+
super(httpClient, logger, clientParams);
|
|
20
|
+
this.publicRef = publicRef;
|
|
21
|
+
}
|
|
22
|
+
async write() {
|
|
23
|
+
throw new Error('Method write is not supported');
|
|
24
|
+
}
|
|
25
|
+
getBlockchainName() {
|
|
26
|
+
return Promise.resolve(core_1.BLOCKCHAIN_NAME.STELLAR);
|
|
27
|
+
}
|
|
28
|
+
async sendTransaction(params) {
|
|
29
|
+
try {
|
|
30
|
+
const transaction = typeof params.txOptions.transaction === 'string'
|
|
31
|
+
? stellar_sdk_1.TransactionBuilder.fromXDR(params.txOptions.transaction, stellar_sdk_1.Networks.PUBLIC)
|
|
32
|
+
: params.txOptions.transaction;
|
|
33
|
+
const [preparedTransaction, accountInfo] = await Promise.all([
|
|
34
|
+
this.publicClient.prepareTransaction(transaction),
|
|
35
|
+
this.publicClient.getAccountEntry(this.walletAddress)
|
|
36
|
+
]);
|
|
37
|
+
// account has min required balance that cannot be spent
|
|
38
|
+
const minBalance = new bignumber_js_1.default(2 + accountInfo.numSubEntries()).multipliedBy(5000000);
|
|
39
|
+
const necessaryBalance = minBalance.plus(preparedTransaction.fee);
|
|
40
|
+
if (necessaryBalance.gt(accountInfo.balance().toString())) {
|
|
41
|
+
throw new insufficient_funds_gas_price_value_error_1.InsufficientFundsGasPriceValueError();
|
|
42
|
+
}
|
|
43
|
+
const { signedTxXdr } = await this.wallet.signTransaction(preparedTransaction.toXDR(), {
|
|
44
|
+
networkPassphrase: stellar_sdk_1.Networks.PUBLIC,
|
|
45
|
+
address: this.walletAddress
|
|
46
|
+
});
|
|
47
|
+
const resp = await this.publicClient.sendTransaction(stellar_sdk_1.TransactionBuilder.fromXDR(signedTxXdr, stellar_sdk_1.Networks.PUBLIC));
|
|
48
|
+
const txStatus = await this.publicClient.pollTransaction(resp.hash);
|
|
49
|
+
if (txStatus.status === 'FAILED') {
|
|
50
|
+
this.parseTxError(txStatus.resultXdr);
|
|
51
|
+
}
|
|
52
|
+
if (params.txOptions.onTransactionHash) {
|
|
53
|
+
params.txOptions.onTransactionHash?.(txStatus.txHash);
|
|
54
|
+
}
|
|
55
|
+
return txStatus.txHash;
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
console.error('Send transaction error', err);
|
|
59
|
+
throw err;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
parseTxError(txResult) {
|
|
63
|
+
const failedTxCode = txResult.result().switch().name;
|
|
64
|
+
if (failedTxCode === 'txInsufficientBalance') {
|
|
65
|
+
throw new insufficient_funds_gas_price_value_error_1.InsufficientFundsGasPriceValueError();
|
|
66
|
+
}
|
|
67
|
+
const failedOperation = txResult.result().results()[0];
|
|
68
|
+
const failedOperationCode = failedOperation.tr().value().switch().name;
|
|
69
|
+
if (failedOperationCode === 'changeTrustLowReserve') {
|
|
70
|
+
throw new insufficient_funds_gas_price_value_error_1.InsufficientFundsGasPriceValueError();
|
|
71
|
+
}
|
|
72
|
+
throw new Error(failedOperationCode);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.StellarAdapterSigner = StellarAdapterSigner;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { BlockchainName, HttpClient, ICustomLogger, PriceTokenAmount, StellarBlockchainName, Token, TokenAmount } from '@cryptorubic/core';
|
|
2
|
+
import { AbstractAdapter } from '../common/abstract-adapter';
|
|
3
|
+
import { StellarClient } from './models/stellar-client';
|
|
4
|
+
import { StellarWallet } from './models/stellar-wallet';
|
|
5
|
+
import { TxStatus } from '../models/web3-public-models/tx-status';
|
|
6
|
+
import { Account, Horizon } from '@stellar/stellar-sdk';
|
|
7
|
+
import { ClientAdaptersFactoryParams } from '../../models/create-factory-params';
|
|
8
|
+
import { StellarAdapterSigner } from './signer/stellar-adapter-signer';
|
|
9
|
+
import BigNumber from 'bignumber.js';
|
|
10
|
+
import { Web3PrimitiveType } from '../../../utils/models/primitive-types';
|
|
11
|
+
import { Abi } from 'viem';
|
|
12
|
+
import { MethodData } from '../models/web3-public-models/method-data';
|
|
13
|
+
import { ContractMulticallResponse } from '../models/web3-public-models/contract-multicall-response';
|
|
14
|
+
import { StellarTransactionConfig } from '../../../utils/models/stellar-transaction-config';
|
|
15
|
+
import { StellarRpcProvider } from './models/stellar-rpc-provider';
|
|
16
|
+
export declare class StellarAdapter extends AbstractAdapter<StellarClient, StellarWallet, StellarBlockchainName> {
|
|
17
|
+
private readonly rpc;
|
|
18
|
+
readonly signer: StellarAdapterSigner;
|
|
19
|
+
readonly horizonClient: Horizon.Server;
|
|
20
|
+
private readonly CLASSIC_TOKEN_DECIMALS;
|
|
21
|
+
constructor(rpc: StellarRpcProvider[], httpClient: HttpClient, logger?: ICustomLogger, clientParams?: ClientAdaptersFactoryParams);
|
|
22
|
+
initWeb3Client(): void;
|
|
23
|
+
getBlockNumber(): Promise<number | {
|
|
24
|
+
blockNumber: number;
|
|
25
|
+
workchain: number;
|
|
26
|
+
}>;
|
|
27
|
+
getTokensBalances(userAddress: string, tokensAddresses: string[]): Promise<BigNumber[]>;
|
|
28
|
+
getBalance(userAddress: string, tokenAddress?: string): Promise<BigNumber>;
|
|
29
|
+
callForTokensInfo(tokenAddresses: string[] | ReadonlyArray<string>): Promise<Token<BlockchainName>[]>;
|
|
30
|
+
callForTokenInfo(tokenAddress: string): Promise<Token<BlockchainName>>;
|
|
31
|
+
checkEnoughBalance(token: TokenAmount | PriceTokenAmount, walletAddress: string): Promise<boolean>;
|
|
32
|
+
needTrustline(token: TokenAmount | PriceTokenAmount, walletAddress: string): Promise<boolean>;
|
|
33
|
+
addTrustline(tokenAddress: string): Promise<string>;
|
|
34
|
+
encodeTrustline(tokenAddress: string, walletAddress: string): Promise<string>;
|
|
35
|
+
getTokenContractId(tokenAddress: string): string;
|
|
36
|
+
private convertTokenAddressToAsset;
|
|
37
|
+
read<T>(address: string, method: string, methodArgs?: {
|
|
38
|
+
value: string;
|
|
39
|
+
type: string;
|
|
40
|
+
}[]): Promise<T>;
|
|
41
|
+
simulateTransaction(config: StellarTransactionConfig): Promise<string>;
|
|
42
|
+
getTransactionStatus(srcTxHash: string): Promise<TxStatus>;
|
|
43
|
+
getMinWeiBalance(userAddress: string): Promise<BigNumber>;
|
|
44
|
+
getFeeFromTransaction(xdr: string): BigNumber;
|
|
45
|
+
getAccountInfo(walletAddress: string): Promise<Account>;
|
|
46
|
+
callContractMethod<T extends Web3PrimitiveType = string>(_contractAddress: string, _contractAbi: Abi | undefined, _methodName: string, _methodArguments?: {
|
|
47
|
+
value: string;
|
|
48
|
+
type: string;
|
|
49
|
+
}[], _options?: object): Promise<T>;
|
|
50
|
+
multicallContractsMethods<Output extends Web3PrimitiveType>(_contractAbi: Abi, _contractsData: {
|
|
51
|
+
contractAddress: string;
|
|
52
|
+
methodsData: MethodData[];
|
|
53
|
+
}[]): Promise<ContractMulticallResponse<Output>[][]>;
|
|
54
|
+
}
|
|
@@ -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;
|
|
@@ -4,7 +4,10 @@ export declare const TX_STATUS: {
|
|
|
4
4
|
readonly FAIL: "FAIL";
|
|
5
5
|
readonly FALLBACK: "FALLBACK";
|
|
6
6
|
readonly REVERT: "REVERT";
|
|
7
|
+
readonly REVERTED: "REVERTED";
|
|
7
8
|
readonly UNKNOWN: "UNKNOWN";
|
|
8
9
|
readonly READY_TO_CLAIM: "READY_TO_CLAIM";
|
|
10
|
+
readonly WAITING_FOR_TRUSTLINE: "WAITING_FOR_TRUSTLINE";
|
|
11
|
+
readonly WAITING_FOR_REFUND_TRUSTLINE: "WAITING_FOR_REFUND_TRUSTLINE";
|
|
9
12
|
};
|
|
10
13
|
export type TxStatus = (typeof TX_STATUS)[keyof typeof TX_STATUS];
|
|
@@ -7,6 +7,9 @@ exports.TX_STATUS = {
|
|
|
7
7
|
FAIL: 'FAIL',
|
|
8
8
|
FALLBACK: 'FALLBACK',
|
|
9
9
|
REVERT: 'REVERT',
|
|
10
|
+
REVERTED: 'REVERTED',
|
|
10
11
|
UNKNOWN: 'UNKNOWN',
|
|
11
|
-
READY_TO_CLAIM: 'READY_TO_CLAIM'
|
|
12
|
+
READY_TO_CLAIM: 'READY_TO_CLAIM',
|
|
13
|
+
WAITING_FOR_TRUSTLINE: 'WAITING_FOR_TRUSTLINE',
|
|
14
|
+
WAITING_FOR_REFUND_TRUSTLINE: 'WAITING_FOR_REFUND_TRUSTLINE'
|
|
12
15
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractAdapter } from './adapters/common/abstract-adapter';
|
|
2
2
|
import { WalletProviderCore } from './constants/models/wallet-provider';
|
|
3
|
-
import { BlockchainName, EvmBlockchainName, SolanaBlockchainName, TronBlockchainName, ICustomLogger, TonBlockchainName, BitcoinBlockchainName, SuiBlockchainName } from '@cryptorubic/core';
|
|
3
|
+
import { BlockchainName, EvmBlockchainName, SolanaBlockchainName, TronBlockchainName, ICustomLogger, TonBlockchainName, BitcoinBlockchainName, SuiBlockchainName, StellarBlockchainName } from '@cryptorubic/core';
|
|
4
4
|
import { TonAdapter } from './adapters/adapter-ton/ton-adapter';
|
|
5
5
|
import { EvmAdapter } from './adapters/adapter-evm/evm-adapter';
|
|
6
6
|
import { BitcoinAdapter } from './adapters/adapter-bitcoin/bitcoin-adapter';
|
|
@@ -8,6 +8,7 @@ import { SolanaAdapter } from './adapters/adapter-solana/solana-adapter';
|
|
|
8
8
|
import { TronAdapter } from './adapters/adapter-tron/tron-adapter';
|
|
9
9
|
import { SuiAdapter } from './adapters/adapter-sui/sui-adapter';
|
|
10
10
|
import { AdapterFactoryParams } from './models/create-factory-params';
|
|
11
|
+
import { StellarAdapter } from './adapters/adapter-stellar/stellar-adapter';
|
|
11
12
|
export declare class BlockchainAdapterFactoryService {
|
|
12
13
|
private readonly rpcList;
|
|
13
14
|
private readonly httpClient;
|
|
@@ -25,6 +26,7 @@ export declare class BlockchainAdapterFactoryService {
|
|
|
25
26
|
getAdapter(blockchain: TonBlockchainName): TonAdapter;
|
|
26
27
|
getAdapter(blockchain: BitcoinBlockchainName): BitcoinAdapter;
|
|
27
28
|
getAdapter(blockchain: SuiBlockchainName): SuiAdapter;
|
|
29
|
+
getAdapter(blockchain: StellarBlockchainName): StellarAdapter;
|
|
28
30
|
private createStorage;
|
|
29
31
|
private createAdapter;
|
|
30
32
|
connectWallet(blockchain: BlockchainName, wallet: WalletProviderCore): void;
|
|
@@ -9,6 +9,7 @@ const bitcoin_adapter_1 = require("./adapters/adapter-bitcoin/bitcoin-adapter");
|
|
|
9
9
|
const solana_adapter_1 = require("./adapters/adapter-solana/solana-adapter");
|
|
10
10
|
const tron_adapter_1 = require("./adapters/adapter-tron/tron-adapter");
|
|
11
11
|
const sui_adapter_1 = require("./adapters/adapter-sui/sui-adapter");
|
|
12
|
+
const stellar_adapter_1 = require("./adapters/adapter-stellar/stellar-adapter");
|
|
12
13
|
class BlockchainAdapterFactoryService {
|
|
13
14
|
constructor(rpcList, httpClient, createLogger, tonParams, clientParams) {
|
|
14
15
|
this.rpcList = rpcList;
|
|
@@ -80,6 +81,9 @@ class BlockchainAdapterFactoryService {
|
|
|
80
81
|
if (blockchainType === core_1.CHAIN_TYPE.SOLANA) {
|
|
81
82
|
return new solana_adapter_1.SolanaAdapter(rpcs, this.httpClient, this.createLogger?.(`SOLANA_ADAPTER`), this.clientParams);
|
|
82
83
|
}
|
|
84
|
+
if (blockchain === core_1.BLOCKCHAIN_NAME.STELLAR) {
|
|
85
|
+
return new stellar_adapter_1.StellarAdapter(rpcs, this.httpClient, this.logger, this.clientParams);
|
|
86
|
+
}
|
|
83
87
|
}
|
|
84
88
|
if (blockchain === core_1.BLOCKCHAIN_NAME.TON && this.tonParams?.tonApiConfig && this.tonParams?.tonClientConfig) {
|
|
85
89
|
return new ton_adapter_1.TonAdapter(this.httpClient, this.tonParams, this.createLogger?.(`TON_ADAPTER`), this.clientParams);
|
|
@@ -1491,5 +1491,32 @@ exports.viemConfig = {
|
|
|
1491
1491
|
address: '0xcA11bde05977b3631167028862bE2a173976CA11'
|
|
1492
1492
|
}
|
|
1493
1493
|
}
|
|
1494
|
+
}),
|
|
1495
|
+
MEGAETH: (0, viem_1.defineChain)({
|
|
1496
|
+
id: 4326,
|
|
1497
|
+
name: 'MegaETH',
|
|
1498
|
+
network: 'MegaETH',
|
|
1499
|
+
nativeCurrency: {
|
|
1500
|
+
name: 'Ethereum',
|
|
1501
|
+
symbol: 'ETH',
|
|
1502
|
+
decimals: 18
|
|
1503
|
+
},
|
|
1504
|
+
rpcUrls: {
|
|
1505
|
+
default: {
|
|
1506
|
+
http: ['https://mainnet.megaeth.com/rpc']
|
|
1507
|
+
}
|
|
1508
|
+
},
|
|
1509
|
+
blockExplorers: {
|
|
1510
|
+
default: {
|
|
1511
|
+
name: 'megaethblockscout',
|
|
1512
|
+
url: 'https://mega.etherscan.io'
|
|
1513
|
+
}
|
|
1514
|
+
},
|
|
1515
|
+
testnet: false,
|
|
1516
|
+
contracts: {
|
|
1517
|
+
multicall3: {
|
|
1518
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11'
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1494
1521
|
})
|
|
1495
1522
|
};
|
|
@@ -78,5 +78,6 @@ exports.viemBlockchainMapping = {
|
|
|
78
78
|
[core_1.BLOCKCHAIN_NAME.HEMI]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.HEMI],
|
|
79
79
|
[core_1.BLOCKCHAIN_NAME.PLASMA]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.PLASMA],
|
|
80
80
|
[core_1.BLOCKCHAIN_NAME.HYPER_EVM]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.HYPER_EVM],
|
|
81
|
-
[core_1.BLOCKCHAIN_NAME.MONAD]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.MONAD]
|
|
81
|
+
[core_1.BLOCKCHAIN_NAME.MONAD]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.MONAD],
|
|
82
|
+
[core_1.BLOCKCHAIN_NAME.MEGAETH]: chain_configs_1.viemConfig[core_1.BLOCKCHAIN_NAME.MEGAETH]
|
|
82
83
|
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { EvmBlockchainName, HttpClient, ICustomLogger, SolanaBlockchainName, SuiBlockchainName, TronBlockchainName } from '@cryptorubic/core';
|
|
1
|
+
import { EvmBlockchainName, HttpClient, ICustomLogger, SolanaBlockchainName, StellarBlockchainName, SuiBlockchainName, TronBlockchainName } from '@cryptorubic/core';
|
|
2
2
|
import { EnvType } from '../constants/models/env-type';
|
|
3
3
|
import { TronWebProvider } from '../adapters/adapter-tron/models/tron-web-provider';
|
|
4
4
|
import { TonAdapterConfig } from '../adapters/models/ton-adapter-config';
|
|
5
5
|
import { FallbackTransportConfig, HttpTransportConfig } from 'viem';
|
|
6
|
-
|
|
6
|
+
import { StellarRpcProvider } from '../adapters/adapter-stellar/models/stellar-rpc-provider';
|
|
7
|
+
export type RpcListType = Record<EvmBlockchainName, string[]> & Record<TronBlockchainName, TronWebProvider[]> & Record<SolanaBlockchainName, string[]> & Record<SuiBlockchainName, string[]> & Record<StellarBlockchainName, StellarRpcProvider[]>;
|
|
7
8
|
export interface AdapterFactoryParams {
|
|
8
9
|
rpcList: RpcListType;
|
|
9
10
|
httpClient?: HttpClient;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InactiveAccountError = void 0;
|
|
4
|
+
const rubic_sdk_error_1 = require("../rubic-sdk.error");
|
|
5
|
+
class InactiveAccountError extends rubic_sdk_error_1.RubicSdkError {
|
|
6
|
+
constructor() {
|
|
7
|
+
super('Account is not activated');
|
|
8
|
+
Object.setPrototypeOf(this, InactiveAccountError.prototype);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.InactiveAccountError = InactiveAccountError;
|
|
@@ -13,6 +13,7 @@ const ton_web3_pure_1 = require("../web3-types/ton-web3-pure");
|
|
|
13
13
|
const tron_web3_pure_1 = require("../web3-types/tron-web3-pure");
|
|
14
14
|
const changenow_api_blockchain_1 = require("./changenow-api-blockchain");
|
|
15
15
|
const zcash_web3_pure_1 = require("../web3-types/zcash-web3-pure");
|
|
16
|
+
const stellar_web3_pure_1 = require("../web3-types/stellar-web3-pure");
|
|
16
17
|
exports.web3PureStore = {
|
|
17
18
|
[core_1.CHAIN_TYPE.EVM]: new evm_web3_pure_1.EvmWeb3Pure(),
|
|
18
19
|
[core_1.CHAIN_TYPE.SUI]: new sui_web3_pure_1.SuiWeb3Pure(),
|
|
@@ -25,6 +26,7 @@ exports.web3PureStore = {
|
|
|
25
26
|
[core_1.CHAIN_TYPE.BSV]: new bitcoin_web3_pure_1.BitcoinWeb3Pure(),
|
|
26
27
|
[core_1.CHAIN_TYPE.NEAR]: new near_web3_pure_1.NearWeb3Pure(),
|
|
27
28
|
[core_1.CHAIN_TYPE.ZCASH]: new zcash_web3_pure_1.ZcashWeb3Pure(),
|
|
29
|
+
[core_1.CHAIN_TYPE.STELLAR]: new stellar_web3_pure_1.StellarWeb3Pure(),
|
|
28
30
|
// Common Web3
|
|
29
31
|
[core_1.CHAIN_TYPE.RIPPLE]: new common_web3_pure_1.CommonWeb3Pure({
|
|
30
32
|
cnApiKey: changenow_api_blockchain_1.changenowApiBlockchain.RIPPLE,
|
|
@@ -133,10 +135,6 @@ exports.web3PureStore = {
|
|
|
133
135
|
cnApiKey: changenow_api_blockchain_1.changenowApiBlockchain.WAX,
|
|
134
136
|
regex: /^[a-z1-5.]{1,12}$/
|
|
135
137
|
}),
|
|
136
|
-
[core_1.CHAIN_TYPE.STELLAR]: new common_web3_pure_1.CommonWeb3Pure({
|
|
137
|
-
cnApiKey: changenow_api_blockchain_1.changenowApiBlockchain.STEEM,
|
|
138
|
-
regex: /^G[A-D]{1}[A-Z2-7]{54}$/
|
|
139
|
-
}),
|
|
140
138
|
[core_1.CHAIN_TYPE.XDC]: new common_web3_pure_1.CommonWeb3Pure({
|
|
141
139
|
cnApiKey: changenow_api_blockchain_1.changenowApiBlockchain.XDC,
|
|
142
140
|
regex: /^xdc[a-fA-F\d]{40}$/
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StellarWeb3Pure = void 0;
|
|
4
|
+
const stellar_sdk_1 = require("@stellar/stellar-sdk");
|
|
5
|
+
const changenow_api_blockchain_1 = require("../constants/changenow-api-blockchain");
|
|
6
|
+
const common_web3_pure_1 = require("./common-web3-pure");
|
|
7
|
+
class StellarWeb3Pure extends common_web3_pure_1.CommonWeb3Pure {
|
|
8
|
+
constructor() {
|
|
9
|
+
super({
|
|
10
|
+
cnApiKey: changenow_api_blockchain_1.changenowApiBlockchain.STELLAR,
|
|
11
|
+
regex: /^G[A-Z2-7]{55}$/
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async isAddressCorrect(address) {
|
|
15
|
+
try {
|
|
16
|
+
if (address.includes('-')) {
|
|
17
|
+
const [code, issuer] = address.split('-');
|
|
18
|
+
if (!code || !issuer)
|
|
19
|
+
return false;
|
|
20
|
+
new stellar_sdk_1.Asset(code, issuer);
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return this.regEx.test(address);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.StellarWeb3Pure = StellarWeb3Pure;
|