Skip to content

Commit

Permalink
Update vault-wallet-toolkit dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
chriselly committed Oct 9, 2024
1 parent 09748c6 commit 70dae2d
Show file tree
Hide file tree
Showing 11 changed files with 658 additions and 86 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"react-native": "0.72.3",
"react-native-reanimated": "3.3.0",
"react-native-web": "0.19.1",
"vault-wallet-toolkit": "https://github.com/uphold/vault-wallet-toolkit.git#1.1.1",
"vault-wallet-toolkit": "https://github.com/uphold/vault-wallet-toolkit.git#1.2.0",
"webpack": "5.76.3",
"xrpl": "2.9.0",
"yup": "0.28.5"
Expand Down
8 changes: 3 additions & 5 deletions src/lib/vault/btc-provider.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
/* eslint-disable import/no-unresolved */
import './constants';
import * as bitcoin from 'bitcoinjs-lib';
import { Blockchain, WalletService } from 'vault-wallet-toolkit';
import { Blockchain, signTransaction } from 'vault-wallet-toolkit';
import { Electrum } from './clients/electrum/electrum-client';
import { NetworkUtil } from './network';
import { coinSelection } from './clients/coin-selection/coin-selection';
import { getNetwork } from './network';
import { getRedeemScript, satsToBtc, signatureValidator } from './clients/utils/bitcoin-utils';
import { txhexToElectrumTransaction } from './clients/utils/electrum-utils';

Expand All @@ -18,11 +18,9 @@ const SEQUENCE_RBF_ENABLED = 0xffffffff - 2;
// Network fee always set to fast
const BTC_FEE_RATE = 1;

export const { signTransaction } = WalletService;

class BitcoinProvider {
constructor() {
this.network = NetworkUtil.getNetwork(blockchain);
this.network = getNetwork(blockchain);
this.instance = new Electrum(this.network);
}

Expand Down
4 changes: 2 additions & 2 deletions src/lib/vault/clients/utils/electrum-utils.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
/* eslint-disable id-length */
import { Blockchain, NetworkUtil } from '../../network';
import { Blockchain, getNetwork } from '../../network';
import * as bitcoin from 'bitcoinjs-lib';
import BigNumber from 'bignumber.js';
import reverse from 'buffer-reverse';

const network = NetworkUtil.getNetwork(Blockchain.BTC) as bitcoin.Network;
const network = getNetwork(Blockchain.BTC) as bitcoin.Network;

export interface TransactionOutput {
address: string;
Expand Down
60 changes: 60 additions & 0 deletions src/lib/vault/clients/xrpl/xrpl-client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { Blockchain, Network, getNetwork } from 'vault-wallet-toolkit';
import { Client } from 'xrpl';

const xrplPeersMap = {
[Network.PRODUCTION]: ['wss://xrplcluster.com', 'wss://s1.ripple.com', 'wss://s2.ripple.com'],
[Network.DEVELOPMENT]: ['wss://testnet.xrpl-labs.com', 'wss://s.altnet.rippletest.net:51233'],
[Network.LOCAL]: []
};

export class XrplProvider {
instance!: Client;
peers: string[] = xrplPeersMap[getNetwork<Network>(Blockchain.XRPL)];

constructor() {
this.createInstanceWithRandomPeer();
}

async connect(): Promise<void> {
try {
await this.instance.connect();
} catch (err: any) {
this.createInstanceWithRandomPeer();
await this.connect();
}
}

private createInstanceWithRandomPeer() {
if (this.peers.length === 0) {
this.peers = xrplPeersMap[getNetwork<Network>(Blockchain.XRPL)];
throw new Error('Cannot connect to provider');
}
const randomPeerIndex = Math.floor(Math.random() * this.peers.length);
const randomPeer = this.peers[randomPeerIndex];

this.peers.splice(randomPeerIndex, 1);
this.instance = new Client(randomPeer);
}

async disconnect(): Promise<void> {
await this.instance.disconnect();
}

get isConnected(): boolean {
return this.instance.isConnected();
}
}

let xrplProvider: XrplProvider;

export const getXrplProvider = async () => {
if (!xrplProvider) {
xrplProvider = new XrplProvider();
}

if (!xrplProvider.isConnected) {
await xrplProvider.connect();
}

return xrplProvider;
};
4 changes: 2 additions & 2 deletions src/lib/vault/constants.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { NetworkUtil, getNetworkEnv } from './network';
import { getNetworkEnv, setNetwork } from './network';

NetworkUtil.setNetwork(getNetworkEnv());
setNetwork(getNetworkEnv());
7 changes: 3 additions & 4 deletions src/lib/vault/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import './constants';
import { Network, getNetworkEnv } from './network';
import { ValidationUtils, Blockchain as VaultBlockchain, WalletService } from 'vault-wallet-toolkit';
import { Blockchain as VaultBlockchain, validateAddress as validateVaultAddress } from 'vault-wallet-toolkit';
import { Wallet } from 'vault-wallet-toolkit/lib/core/Wallet';
import { bitcoinProvider } from './btc-provider';
import {
Expand All @@ -19,18 +19,17 @@ import {
import { translate } from '../../lib/i18n';
import { tokens as xrplMainnetTokens } from './xrpl-tokenlist-mainnet.json';
import { tokens as xrplTestnetTokens } from './xrpl-tokenlist-testnet.json';
export { validateMnemonic, signTransaction } from 'vault-wallet-toolkit';
export { DEFAULT_MULTISIG_SIGNERS_REQUIRED } from './network';

export const Blockchain = VaultBlockchain;
export const { validateMnemonic } = ValidationUtils;
export const { signTransaction } = WalletService;
export const transactionTypes = Object.freeze({
[Blockchain.XRPL]: xrplTransactionTypes,
[Blockchain.BTC]: {}
});

export const validateAddress = (network, address) => {
return ValidationUtils.validateAddress(network, address, getNetworkEnv());
return validateVaultAddress(network, address, getNetworkEnv());
};

export const validateDescriptor = descriptor => {
Expand Down
4 changes: 2 additions & 2 deletions src/lib/vault/network.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Blockchain, Network, NetworkUtil } from 'vault-wallet-toolkit';
export { Blockchain, Network, NetworkUtil };
import { Blockchain, Network, getNetwork, setNetwork } from 'vault-wallet-toolkit';
export { Blockchain, Network, getNetwork, setNetwork };

// eslint-disable-next-line no-process-env
const { NET } = process.env;
Expand Down
7 changes: 3 additions & 4 deletions src/lib/vault/xrpl-provider.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
/* eslint-disable import/no-unresolved */
import './constants';
import { Blockchain, WalletService } from 'vault-wallet-toolkit';
import { Blockchain, signTransaction } from 'vault-wallet-toolkit';
import { DEFAULT_MULTISIG_ENTRIES, DEFAULT_MULTISIG_SIGNERS_REQUIRED } from './network';
import { dropsToXrp, encode, multisign, xrpToDrops } from 'xrpl';
import { getXrplProvider } from 'vault-wallet-toolkit/lib/core/Xrpledger/XrplProvider';
import { getXrplProvider } from './clients/xrpl/xrpl-client';
export { convertHexToString } from 'xrpl';
import BigNumber from 'bignumber.js';

Expand All @@ -14,8 +15,6 @@ export const transactionTypes = Object.freeze({
TrustSet: 'TrustSet'
});

export const { signTransaction } = WalletService;

const signer = (key, tx) => signTransaction(blockchain, key, tx, { multisig: true });

export const multisigner = (tx, keys) => multisign(keys.map(key => signer(key, tx)));
Expand Down
11 changes: 6 additions & 5 deletions test/cypress/support/helpers/vault.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
import { Blockchain, WalletService } from 'vault-wallet-toolkit';
import { Network, NetworkUtil } from '../../../../src/lib/vault/network';
/*eslint-disable import/no-unresolved */
import { Blockchain, createWallet } from 'vault-wallet-toolkit';
import { Network, setNetwork } from '../../../../src/lib/vault/network';
import {
getAccountReserve,
getAccountTrustlines,
getBalance,
getLedgerReserve
} from '../../../../src/lib/vault/xrpl-provider';
import { getAddress } from '../../../../src/lib/vault';
import { getXrplProvider } from 'vault-wallet-toolkit/lib/core/Xrpledger/XrplProvider';
import { getXrplProvider } from '../../../../src/lib/vault/clients/xrpl/xrpl-client';

const defaultBlockchain = Blockchain.XRPL;

NetworkUtil.setNetwork(Network.DEVELOPMENT);
setNetwork(Network.DEVELOPMENT);

const createWallets = numberOfWallets => {
return [...Array(numberOfWallets)].map(() => {
return WalletService.createWalletMinimal();
return createWallet();
});
};

Expand Down
1 change: 1 addition & 0 deletions webpack.app.babel.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ const webpackConfig = {
plugins,
resolve: {
alias: {
'@hashgraph/sdk': path.resolve('node_modules/@hashgraph/sdk/src/browser.js'),
lodash: path.resolve('node_modules/lodash-es'),
'lodash-es': path.resolve('node_modules/lodash-es'),
node_modules: path.resolve('node_modules'),
Expand Down
Loading

0 comments on commit 70dae2d

Please # to comment.