Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [[v4.0.0-alpha.0](https://github.com/multiversx/mx-sdk-dapp/pull/1393)] - 2025-03-27

- [Upgrade to sdk-core v.14](https://github.com/multiversx/mx-sdk-dapp/pull/1392)

## [[v3.3.2](https://github.com/multiversx/mx-sdk-dapp/pull/1391)] - 2025-03-17

- [Fixed floating data field decode dropdown](https://github.com/multiversx/mx-sdk-dapp/pull/1390)
Expand Down
26 changes: 13 additions & 13 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@multiversx/sdk-dapp",
"version": "3.3.2",
"version": "4.0.0-alpha.0",
"description": "A library to hold the main logic for a dapp on the MultiversX blockchain",
"author": "MultiversX",
"license": "GPL-3.0-or-later",
Expand Down Expand Up @@ -38,7 +38,7 @@
"@babel/preset-react": "7.23.3",
"@babel/preset-typescript": "7.23.3",
"@ledgerhq/hw-transport-mocker": "6.27.17",
"@multiversx/sdk-core": ">= 13.17.1",
"@multiversx/sdk-core": ">= 14.0.1",
"@octokit/rest": "19.0.5",
"@storybook/addon-actions": "6.5.14",
"@storybook/addon-essentials": "6.5.14",
Expand Down Expand Up @@ -124,7 +124,7 @@
"transaction"
],
"peerDependencies": {
"@multiversx/sdk-core": ">= 13.17.1",
"@multiversx/sdk-core": ">= 14.0.1",
"@types/react": "^18.0.24",
"@types/react-dom": "^18.0.8",
"axios": ">=1.7.4",
Expand Down Expand Up @@ -159,18 +159,18 @@
"dependencies": {
"@lifeomic/axios-fetch": "3.0.1",
"@metamask/providers": "16.0.0",
"@multiversx/sdk-dapp-utils": "1.0.0",
"@multiversx/sdk-extension-provider": "4.0.1",
"@multiversx/sdk-hw-provider": "7.0.0",
"@multiversx/sdk-metamask-provider": "1.0.0",
"@multiversx/sdk-dapp-utils": "2.0.0",
"@multiversx/sdk-extension-provider": "5.0.0",
"@multiversx/sdk-hw-provider": "8.0.0",
"@multiversx/sdk-metamask-provider": "2.0.0",
"@multiversx/sdk-native-auth-client": "1.0.9",
"@multiversx/sdk-opera-provider": "1.0.0-alpha.1",
"@multiversx/sdk-passkey-provider": "2.0.0",
"@multiversx/sdk-wallet-connect-provider": "5.0.2",
"@multiversx/sdk-web-wallet-cross-window-provider": "2.0.6",
"@multiversx/sdk-web-wallet-iframe-provider": "2.0.1",
"@multiversx/sdk-web-wallet-provider": "4.1.0",
"@multiversx/sdk-webview-provider": "2.0.3",
"@multiversx/sdk-passkey-provider": "2.0.1",
"@multiversx/sdk-wallet-connect-provider": "6.0.1",
"@multiversx/sdk-web-wallet-cross-window-provider": "3.0.0",
"@multiversx/sdk-web-wallet-iframe-provider": "3.0.0",
"@multiversx/sdk-web-wallet-provider": "5.0.0",
"@multiversx/sdk-webview-provider": "3.0.0",
"@reduxjs/toolkit": "1.8.2",
"bignumber.js": "9.x",
"linkify-react": "4.0.2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,16 @@ const ConfirmFeeComponent = ({
const [showGasDetails, setShowGasDetails] = useState(false);
const { shard } = useGetAccount();

const nonce = transaction.getNonce().valueOf();
const nonce = Number(transaction.nonce);

const [initialGasPriceInfo, setInitialGasPriceInfo] = useState({
[nonce]: transaction.getGasPrice().valueOf()
[nonce]: Number(transaction.gasPrice)
});

useEffect(() => {
setInitialGasPriceInfo((existing) => ({
...existing,
[nonce]: transaction.getGasPrice().valueOf()
[nonce]: Number(transaction.gasPrice)
}));
}, [nonce]);

Expand All @@ -56,10 +56,10 @@ const ConfirmFeeComponent = ({
const feeLimit = calculateFeeLimit({
gasPerDataByte: String(GAS_PER_DATA_BYTE),
gasPriceModifier: String(GAS_PRICE_MODIFIER),
gasLimit: transaction.getGasLimit().valueOf().toString(),
gasPrice: transaction.getGasPrice().valueOf().toString(),
data: transaction.getData().toString(),
chainId: transaction.getChainID().valueOf()
gasLimit: transaction.gasLimit.toString(),
gasPrice: transaction.gasPrice.toString(),
data: transaction.data.toString(),
chainId: transaction.chainID.valueOf()
});

const feeLimitFormatted = formatAmount({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ export const getGasPriceDetails = ({

const fastGasPrice = fastPpu
? recommendGasPrice({
transactionDataLength: transaction.getData().toString().length,
transactionGasLimit: transaction.getGasLimit().valueOf(),
transactionDataLength: transaction.data.length,
transactionGasLimit: Number(transaction.gasLimit),
ppu: fastPpu
})
: initialGasPrice;

const fasterGasPrice = fasterPpu
? recommendGasPrice({
transactionDataLength: transaction.getData().toString().length,
transactionGasLimit: transaction.getGasLimit().valueOf(),
transactionDataLength: transaction.data.length,
transactionGasLimit: Number(transaction.gasLimit),
ppu: fasterPpu
})
: initialGasPrice;
Expand Down
4 changes: 2 additions & 2 deletions src/hooks/signMessage/tests/verifyMessage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ describe('Verify Message test', () => {
const signature =
'{"address":"erd1axhx4kenjlae6sknq7zjg2g4fvzavv979r2fg425p62wkl84avtqsf7vvv","message":"0x68656c6c6f20776f726c64","signature":"0x795b8437bdbcc9c2a3f610a96d95bd393d23d584d40121ea388999ebd9a34157117a665c86a0285cb207e7da23f4fced848f81c218ebab735da22a5cdb00f803","version":1,"signer":"ErdJS"}';

it('should verify message successfully', () => {
const { address, isVerified, message } = verifyMessage(signature);
it('should verify message successfully', async () => {
const { address, isVerified, message } = await verifyMessage(signature);

expect(address).toStrictEqual(
'erd1axhx4kenjlae6sknq7zjg2g4fvzavv979r2fg425p62wkl84avtqsf7vvv'
Expand Down
13 changes: 11 additions & 2 deletions src/hooks/signMessage/verifyMessage.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import { Address, Message, MessageComputer } from '@multiversx/sdk-core/out';
import { getVerifier } from './getVerifier';

export const verifyMessage = (signedMessage: string) => {
export const verifyMessage = async (
signedMessage: string
): Promise<{
isVerified: boolean;
message: string;
address: string;
}> => {
try {
const { message, address, signature } = JSON.parse(signedMessage);

Expand All @@ -19,7 +25,10 @@ export const verifyMessage = (signedMessage: string) => {

const serializedMessage = messageComputer.computeBytesForVerifying(msg);

const isVerified = verifier.verify(serializedMessage, decodedSignature);
const isVerified = await verifier.verify(
serializedMessage,
decodedSignature
);

return {
isVerified,
Expand Down
6 changes: 3 additions & 3 deletions src/hooks/transactions/helpers/computeTransactionsNonce.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ export const computeTransactionsNonce = ({
return transactions.map((tx: Transaction, index: number) => {
const nextNonce = latestNonce + index;

const transactionNonce = tx.getNonce().valueOf();
const transactionNonce = tx.nonce;

// stop replacing nonce if transaction is configured with a higher nonce than the existing one
const computedNonce = computeTransactionNonce({
accountNonce: nextNonce,
transactionNonce
transactionNonce: Number(transactionNonce)
});

tx.setNonce(computedNonce);
tx.nonce = BigInt(computedNonce);

return tx;
});
Expand Down
8 changes: 0 additions & 8 deletions src/hooks/transactions/tests/computeTransactionsNonce.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ describe('computeTransactionsNonce', () => {
const transactions = mockedTransactions.map((tx) => {
tx.nonce = 0;
const newTx = newTransaction(tx);
newTx.setNonce = jest.fn();
return newTx;
});

Expand All @@ -71,9 +70,6 @@ describe('computeTransactionsNonce', () => {
transactions
});

expect(transactions[0].setNonce).toHaveBeenCalledWith(123);
expect(transactions[1].setNonce).toHaveBeenCalledWith(124);
expect(transactions[2].setNonce).toHaveBeenCalledWith(125);
expect(result).toEqual(transactions);
});

Expand All @@ -83,7 +79,6 @@ describe('computeTransactionsNonce', () => {
const transactions = mockedTransactions.map((tx, i) => {
tx.nonce = 125 + i;
const newTx = newTransaction(tx);
newTx.setNonce = jest.fn();
return newTx;
});

Expand All @@ -92,9 +87,6 @@ describe('computeTransactionsNonce', () => {
transactions
});

expect(transactions[0].setNonce).toHaveBeenCalledWith(125);
expect(transactions[1].setNonce).toHaveBeenCalledWith(126);
expect(transactions[2].setNonce).toHaveBeenCalledWith(127);
expect(result).toEqual(transactions);
});
});
30 changes: 15 additions & 15 deletions src/hooks/transactions/useSignMultipleTransactions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,15 @@ export const useSignMultipleTransactions = ({
useParseMultiEsdtTransferData({
transactions: activeGuardianAddress
? transactionsToSign?.map((transaction) => {
transaction.setSender(Address.fromBech32(address));
transaction.setVersion(TransactionVersion.withTxOptions());
transaction.setGuardian(Address.fromBech32(activeGuardianAddress));
transaction.sender = Address.newFromBech32(address);
transaction.version = TransactionVersion.withTxOptions().valueOf();
transaction.guardian = Address.newFromBech32(activeGuardianAddress);
const options = {
guarded: true,
...(isLedger ? { hashSign: true } : {})
};
transaction.setOptions(TransactionOptions.withOptions(options));
transaction.options =
TransactionOptions.withOptions(options).valueOf();
return transaction;
})
: transactionsToSign
Expand Down Expand Up @@ -165,7 +166,7 @@ export const useSignMultipleTransactions = ({

setCurrentTransaction({
transaction,
ppu: ppuMap[nonce].ppu || EMPTY_PPU,
ppu: ppuMap[Number(nonce)].ppu || EMPTY_PPU,
receiverScamInfo: verifiedAddresses[receiver]?.info || null,
transactionTokenInfo,
isTokenTransaction,
Expand All @@ -181,27 +182,26 @@ export const useSignMultipleTransactions = ({

const nonce = currentEditedTransaction.getNonce().valueOf();

const currentMultiplier = ppuMap[nonce].ppu;
const initialGasPrice = ppuMap[nonce].initialGasPrice;
const currentMultiplier = ppuMap[Number(nonce)].ppu;
const initialGasPrice = ppuMap[Number(nonce)].initialGasPrice;

if (currentMultiplier === newPPU) {
return;
}

setPpuMap((existing) => {
const newPpuMap = { ...existing };
newPpuMap[nonce] = {
...newPpuMap[nonce],
newPpuMap[Number(nonce)] = {
...newPpuMap[Number(nonce)],
ppu: newPPU
};
return newPpuMap;
});

const newGasPrice = newPPU
? recommendGasPrice({
transactionDataLength: currentEditedTransaction.getData().toString()
.length,
transactionGasLimit: currentEditedTransaction.getGasLimit().valueOf(),
transactionDataLength: currentEditedTransaction.data.length,
transactionGasLimit: Number(currentEditedTransaction.gasLimit),
ppu: newPPU
})
: initialGasPrice;
Expand Down Expand Up @@ -238,9 +238,9 @@ export const useSignMultipleTransactions = ({
useEffect(() => {
const newPpuMap: typeof ppuMap = {};
allTransactions.forEach((transaction) => {
const nonce = transaction.transaction.getNonce().valueOf();
newPpuMap[nonce] = {
initialGasPrice: transaction.transaction.getGasPrice().valueOf(),
const nonce = transaction.transaction.nonce;
newPpuMap[Number(nonce)] = {
initialGasPrice: Number(transaction.transaction.gasPrice),
ppu: EMPTY_PPU
};
});
Expand Down
9 changes: 5 additions & 4 deletions src/hooks/transactions/useSignTransactions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -239,10 +239,11 @@ export const useSignTransactions = () => {
(await provider.signTransactions(
isGuarded && allowGuardian
? transactions?.map((transaction) => {
transaction.setVersion(TransactionVersion.withTxOptions());
transaction.setOptions(
TransactionOptions.withOptions({ guarded: true })
);
transaction.version =
TransactionVersion.withTxOptions().valueOf();
transaction.options = TransactionOptions.withOptions({
guarded: true
}).valueOf();
return transaction;
})
: transactions
Expand Down
27 changes: 9 additions & 18 deletions src/models/newTransaction.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
import {
Address,
Transaction,
TransactionOptions,
TransactionVersion
} from '@multiversx/sdk-core';
import { Address, Transaction } from '@multiversx/sdk-core';
import { GAS_LIMIT, GAS_PRICE, VERSION } from 'constants/index';
import { RawTransactionType } from 'types';
import { getDataPayloadForTransaction } from 'utils/transactions/getDataPayloadForTransaction';
Expand All @@ -19,9 +14,9 @@ export function newTransaction(rawTransaction: RawTransactionType) {
}

const transaction = new Transaction({
value: rawTx.value.valueOf(),
value: BigInt(rawTx.value.valueOf()),
data: getDataPayloadForTransaction(rawTx.data),
nonce: rawTx.nonce.valueOf(),
nonce: BigInt(rawTx.nonce.valueOf()),
receiver: new Address(rawTx.receiver),
...(rawTx.receiverUsername
? { receiverUsername: rawTx.receiverUsername }
Expand All @@ -34,24 +29,20 @@ export function newTransaction(rawTransaction: RawTransactionType) {
: {}),
sender: new Address(rawTx.sender),
...(rawTx.senderUsername ? { senderUsername: rawTx.senderUsername } : {}),
gasLimit: rawTx.gasLimit.valueOf() ?? GAS_LIMIT,
gasPrice: rawTx.gasPrice.valueOf() ?? GAS_PRICE,
gasLimit: BigInt(rawTx.gasLimit.valueOf() ?? GAS_LIMIT),
gasPrice: BigInt(rawTx.gasPrice.valueOf() ?? GAS_PRICE),
chainID: rawTx.chainID.valueOf(),
version: new TransactionVersion(rawTx.version ?? VERSION),
...(rawTx.options
? { options: new TransactionOptions(rawTx.options) }
: {}),
version: rawTx.version ?? VERSION,
...(rawTx.options ? { options: rawTx.options } : {}),
...(rawTx.guardian ? { guardian: new Address(rawTx.guardian) } : {})
});

if (rawTx.guardianSignature) {
transaction.applyGuardianSignature(
Buffer.from(rawTx.guardianSignature, 'hex')
);
transaction.guardianSignature = Buffer.from(rawTx.guardianSignature, 'hex');
}

if (rawTx.signature) {
transaction.applySignature(Buffer.from(rawTx.signature, 'hex'));
transaction.signature = Buffer.from(rawTx.signature, 'hex');
}

return transaction;
Expand Down
7 changes: 5 additions & 2 deletions src/types/transactions.types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { ReactNode, Dispatch, SetStateAction } from 'react';
import { Address, Transaction } from '@multiversx/sdk-core';
import { IPlainTransactionObject } from '@multiversx/sdk-core/out/interface';
import {
Address,
IPlainTransactionObject,
Transaction
} from '@multiversx/sdk-core';

import { SignStepInnerClassesType } from '../UI/SignTransactionsModals/SignWithDeviceModal/SignStep';
import { WithClassnameType } from '../UI/types';
Expand Down
Loading