diff --git a/.changeset/chilly-monkeys-begin.md b/.changeset/chilly-monkeys-begin.md new file mode 100644 index 0000000000..5eb0e27c1a --- /dev/null +++ b/.changeset/chilly-monkeys-begin.md @@ -0,0 +1,6 @@ +--- +'@moralisweb3/common-evm-utils': patch +'@moralisweb3/evm-api': patch +--- + +Fix parsing of some values to wei from API diff --git a/packages/common/evmUtils/src/operations/events/getContractEventsOperation.ts b/packages/common/evmUtils/src/operations/events/getContractEventsOperation.ts index c0b81b532d..a0cab7c35c 100644 --- a/packages/common/evmUtils/src/operations/events/getContractEventsOperation.ts +++ b/packages/common/evmUtils/src/operations/events/getContractEventsOperation.ts @@ -6,7 +6,7 @@ import { DateInput, PaginatedResponseAdapter, } from '@moralisweb3/common-core'; -import { EvmChain, EvmChainish, EvmAddress, EvmAddressish, EvmEvent, EvmAbiItem } from '../../dataTypes'; +import { EvmChain, EvmChainish, EvmAddress, EvmAddressish, EvmEvent, EvmAbiItem, EvmNative } from '../../dataTypes'; import { EvmChainResolver } from '../../EvmChainResolver'; import { operations } from '../openapi'; @@ -111,7 +111,7 @@ function deserializeResponse( data: { to: event.data.to, from: event.data.from, - value: event.data.value, + value: maybe(event.data.value, (value) => EvmNative.create(value, 'wei')), }, }, core, diff --git a/packages/common/evmUtils/src/operations/nft/getNFTContractTransfersOperation.ts b/packages/common/evmUtils/src/operations/nft/getNFTContractTransfersOperation.ts index 3e81ce346b..ce86969c8a 100644 --- a/packages/common/evmUtils/src/operations/nft/getNFTContractTransfersOperation.ts +++ b/packages/common/evmUtils/src/operations/nft/getNFTContractTransfersOperation.ts @@ -100,7 +100,7 @@ function deserializeResponse( toAddress: EvmAddress.create(transfer.to_address, core), operator: transfer.operator ? EvmAddress.create(transfer.operator, core) : null, fromAddress: transfer.from_address ? EvmAddress.create(transfer.from_address, core) : null, - value: transfer.value ? EvmNative.create(transfer.value) : null, + value: transfer.value ? EvmNative.create(transfer.value, 'wei') : null, blockTimestamp: new Date(transfer.block_timestamp), }, core, diff --git a/packages/common/evmUtils/src/operations/nft/getNFTLowestPriceOperation.ts b/packages/common/evmUtils/src/operations/nft/getNFTLowestPriceOperation.ts index a134723b70..cf5e6806a3 100644 --- a/packages/common/evmUtils/src/operations/nft/getNFTLowestPriceOperation.ts +++ b/packages/common/evmUtils/src/operations/nft/getNFTLowestPriceOperation.ts @@ -71,7 +71,7 @@ function deserializeResponse( sellerAddress: EvmAddress.create(jsonResponse.seller_address, core), buyerAddress: EvmAddress.create(jsonResponse.buyer_address, core), marketplaceAddress: EvmAddress.create(jsonResponse.marketplace_address, core), - tokenAddress: EvmAddress.create(jsonResponse.token_address as string, core), + tokenAddress: EvmAddress.create(request.address, core), price: EvmNative.create(jsonResponse.price, 'wei'), blockTimestamp: new Date(jsonResponse.block_timestamp), tokenIds: jsonResponse.token_ids as string[], diff --git a/packages/common/evmUtils/src/operations/nft/getNFTTransfersFromToBlockOperation.ts b/packages/common/evmUtils/src/operations/nft/getNFTTransfersFromToBlockOperation.ts index e547f8ddd7..64f9281cb2 100644 --- a/packages/common/evmUtils/src/operations/nft/getNFTTransfersFromToBlockOperation.ts +++ b/packages/common/evmUtils/src/operations/nft/getNFTTransfersFromToBlockOperation.ts @@ -92,16 +92,19 @@ function deserializeResponse( core: Core, ) { return (jsonResponse.result ?? []).map((transfer) => - EvmNftTransfer.create({ - ...toCamelCase(transfer), - chain: EvmChainResolver.resolve(request.chain, core), - tokenAddress: EvmAddress.create(transfer.to_address, core), - toAddress: EvmAddress.create(transfer.to_address, core), - operator: transfer.operator ? EvmAddress.create(transfer.operator, core) : null, - fromAddress: transfer.from_address ? EvmAddress.create(transfer.from_address, core) : null, - value: transfer.value ? EvmNative.create(transfer.value) : null, - blockTimestamp: new Date(transfer.block_timestamp), - }), + EvmNftTransfer.create( + { + ...toCamelCase(transfer), + chain: EvmChainResolver.resolve(request.chain, core), + tokenAddress: EvmAddress.create(transfer.to_address, core), + toAddress: EvmAddress.create(transfer.to_address, core), + operator: transfer.operator ? EvmAddress.create(transfer.operator, core) : null, + fromAddress: transfer.from_address ? EvmAddress.create(transfer.from_address, core) : null, + value: transfer.value ? EvmNative.create(transfer.value, 'wei') : null, + blockTimestamp: new Date(transfer.block_timestamp), + }, + core, + ), ); } diff --git a/packages/common/evmUtils/src/operations/nft/getNFTTransfersOperation.ts b/packages/common/evmUtils/src/operations/nft/getNFTTransfersOperation.ts index 1463ca5964..80467a4172 100644 --- a/packages/common/evmUtils/src/operations/nft/getNFTTransfersOperation.ts +++ b/packages/common/evmUtils/src/operations/nft/getNFTTransfersOperation.ts @@ -72,16 +72,19 @@ function getRequestUrlParams(request: GetNFTTransfersRequest, core: Core) { function deserializeResponse(jsonResponse: GetNFTTransfersJSONResponse, request: GetNFTTransfersRequest, core: Core) { return (jsonResponse.result ?? []).map((transfer) => - EvmNftTransfer.create({ - ...toCamelCase(transfer), - chain: EvmChainResolver.resolve(request.chain, core), - tokenAddress: EvmAddress.create(transfer.to_address, core), - toAddress: EvmAddress.create(transfer.to_address, core), - operator: transfer.operator ? EvmAddress.create(transfer.operator, core) : null, - fromAddress: transfer.from_address ? EvmAddress.create(transfer.from_address, core) : null, - value: transfer.value ? EvmNative.create(transfer.value) : null, - blockTimestamp: new Date(transfer.block_timestamp), - }), + EvmNftTransfer.create( + { + ...toCamelCase(transfer), + chain: EvmChainResolver.resolve(request.chain, core), + tokenAddress: EvmAddress.create(transfer.to_address, core), + toAddress: EvmAddress.create(transfer.to_address, core), + operator: transfer.operator ? EvmAddress.create(transfer.operator, core) : null, + fromAddress: transfer.from_address ? EvmAddress.create(transfer.from_address, core) : null, + value: transfer.value ? EvmNative.create(transfer.value, 'wei') : null, + blockTimestamp: new Date(transfer.block_timestamp), + }, + core, + ), ); } diff --git a/packages/evmApi/integration/mocks/endpoints/getNFTLowestPrice.ts b/packages/evmApi/integration/mocks/endpoints/getNFTLowestPrice.ts index 96495d2ae2..46010c6c29 100644 --- a/packages/evmApi/integration/mocks/endpoints/getNFTLowestPrice.ts +++ b/packages/evmApi/integration/mocks/endpoints/getNFTLowestPrice.ts @@ -17,7 +17,7 @@ export const mockGetNFTLowestPrice = MockScenarios.create( }, response: { transaction_hash: '0x057Ec652A4F150f7FF94f089A38008f49a0DF88e', - transaction_index: 'string', + transaction_index: '1', token_ids: ['15', '54'], seller_address: '0x057Ec652A4F150f7FF94f089A38008f49a0DF88e', buyer_address: '0x057Ec652A4F150f7FF94f089A38008f49a0DF88e', diff --git a/packages/evmApi/integration/test/getContractEvents.test.ts b/packages/evmApi/integration/test/getContractEvents.test.ts index b998ac7fc9..20f1353680 100644 --- a/packages/evmApi/integration/test/getContractEvents.test.ts +++ b/packages/evmApi/integration/test/getContractEvents.test.ts @@ -51,7 +51,7 @@ describe('getContractEvents', () => { }); it('returns events', async () => { - const response = await evmApi.events.getContractEvents({ + const { result, pagination } = await evmApi.events.getContractEvents({ chain: 137, // Polygon address: '0x2953399124f0cbb46d2cbacd8a89cf0599974963', abi: ERC721_ABI_ITEM, @@ -62,10 +62,12 @@ describe('getContractEvents', () => { toDate: '2022-03-05T13:45:42.000Z', }); - const result = response.result; - expect(response).toBeDefined(); - expect(response.raw.total).toBe(12); - expect(result[0].address.lowercase).toBe('0x2953399124f0cbb46d2cbacd8a89cf0599974963'); - expect(result[0].blockNumber.toString()).toBe('14327217'); + const event = result[0]!; + + expect(event).toBeDefined(); + expect(pagination.total).toBe(12); + expect(event.address.lowercase).toBe('0x2953399124f0cbb46d2cbacd8a89cf0599974963'); + expect(event.blockNumber.toString()).toBe('14327217'); + expect(event.data.value?.wei).toBe('878000000'); }); }); diff --git a/packages/evmApi/integration/test/getNFTContractTransfers.test.ts b/packages/evmApi/integration/test/getNFTContractTransfers.test.ts index faa0f68902..622b49c59c 100644 --- a/packages/evmApi/integration/test/getNFTContractTransfers.test.ts +++ b/packages/evmApi/integration/test/getNFTContractTransfers.test.ts @@ -14,18 +14,18 @@ describe('getNFTContractTransfers', () => { describe('Get NFT Contract Transfers', () => { it('should get the contract transfers of NFTs for a given contract', async () => { - const result = await EvmApi.nft.getNFTContractTransfers({ + const { result, pagination } = await EvmApi.nft.getNFTContractTransfers({ address: '0x75e3e9c92162e62000425c98769965a76c2e387a', }); - const response = result.raw.result?.at(0); + const nft = result[0]!; - expect(result).toBeDefined(); - expect(result).toEqual(expect.objectContaining({})); - expect(result.raw.total).toBe(2000); - expect(response?.token_address).toEqual('0x057Ec652A4F150f7FF94f089A38008f49a0DF88e'); - expect(response?.transaction_hash).toEqual('0x057Ec652A4F150f7FF94f089A38008f49a0DF88e'); - expect(response?.possible_spam).toEqual(false); + expect(nft).toBeDefined(); + expect(pagination.total).toBe(2000); + expect(nft.tokenAddress.checksum).toEqual('0x057Ec652A4F150f7FF94f089A38008f49a0DF88e'); + expect(nft.transactionHash).toEqual('0x057Ec652A4F150f7FF94f089A38008f49a0DF88e'); + expect(nft.possibleSpam).toEqual(false); + expect(nft.value?.wei).toEqual('1000000000000000'); }); it('should not get the contract of NFT transfers of an invalid address and throw an error', async () => { diff --git a/packages/evmApi/integration/test/getNFTLowestPrice.test.ts b/packages/evmApi/integration/test/getNFTLowestPrice.test.ts index 670b923515..aa783704e1 100644 --- a/packages/evmApi/integration/test/getNFTLowestPrice.test.ts +++ b/packages/evmApi/integration/test/getNFTLowestPrice.test.ts @@ -14,15 +14,15 @@ describe('getNFTLowestPrice', () => { describe('Get NFT Lowest Price', () => { it('should get the lowest executed price for an NFT contract', async () => { - const result = await EvmApi.nft.getNFTLowestPrice({ + const { result } = (await EvmApi.nft.getNFTLowestPrice({ address: '0x75e3e9c92162e62000425c98769965a76c2e387a', - }); + }))!; expect(result).toBeDefined(); - expect(result).toEqual(expect.objectContaining({})); - expect(result?.raw.seller_address).toBe('0x057Ec652A4F150f7FF94f089A38008f49a0DF88e'); - expect(result?.raw.transaction_hash).toEqual('0x057Ec652A4F150f7FF94f089A38008f49a0DF88e'); - expect(result?.raw.block_number).toBe('13680123'); + expect(result.sellerAddress.checksum).toBe('0x057Ec652A4F150f7FF94f089A38008f49a0DF88e'); + expect(result.transactionHash).toEqual('0x057Ec652A4F150f7FF94f089A38008f49a0DF88e'); + expect(result.blockNumber.toString()).toBe('13680123'); + expect(result.price.wei).toBe('1000000000000000'); }); it('should not get the lowest executed price when an invalid address is provided and throw an error', async () => { diff --git a/packages/evmApi/integration/test/getNFTTransfers.test.ts b/packages/evmApi/integration/test/getNFTTransfers.test.ts index feb0e57d0f..2bc3c3166f 100644 --- a/packages/evmApi/integration/test/getNFTTransfers.test.ts +++ b/packages/evmApi/integration/test/getNFTTransfers.test.ts @@ -14,21 +14,21 @@ describe('getNFTTransfers', () => { describe('Get NFT Transfers', () => { it('should get the transfers of an NFT given a valid contract address and token ID', async () => { - const result = await EvmApi.nft.getNFTTransfers({ + const { result, pagination } = await EvmApi.nft.getNFTTransfers({ address: '0x75e3e9c92162e62000425c98769965a76c2e387a', tokenId: '15', }); - const response = result.raw.result?.at(0); + const nft = result[0]!; expect(result).toBeDefined(); - expect(result).toEqual(expect.objectContaining({})); - expect(result.raw.total).toBe(2000); - expect(response?.amount).toEqual('1'); - expect(response?.block_number).toBe('88256'); - expect(response?.contract_type).toBe('ERC721'); - expect(response?.token_id).toBe('15'); - expect(response?.possible_spam).toBe(false); + expect(pagination.total).toBe(2000); + expect(nft.amount).toEqual(1); + expect(nft.blockNumber.toString()).toBe('88256'); + expect(nft.contractType).toBe('ERC721'); + expect(nft.tokenId).toBe('15'); + expect(nft.possibleSpam).toBe(false); + expect(nft.value?.wei).toBe('1000000000000000'); }); it('should not get the transfers of an NFT given an invalid contract address and a valid token ID', async () => { diff --git a/packages/evmApi/integration/test/getNFTTransfersFromToBlock.test.ts b/packages/evmApi/integration/test/getNFTTransfersFromToBlock.test.ts index dcbec66562..bad22f1c53 100644 --- a/packages/evmApi/integration/test/getNFTTransfersFromToBlock.test.ts +++ b/packages/evmApi/integration/test/getNFTTransfersFromToBlock.test.ts @@ -14,21 +14,21 @@ describe('getNFTTransfersFromToBlock', () => { describe('Get NFTs Transfers From block to block', () => { it('should get transfers of NFTs from a block number to a block number', async () => { - const result = await EvmApi.nft.getNFTTransfersFromToBlock({ + const { result, pagination } = await EvmApi.nft.getNFTTransfersFromToBlock({ fromBlock: 1, toBlock: 2, }); - const response = result.raw.result?.at(0); + const transfer = result[0]!; - expect(result).toBeDefined(); - expect(result).toEqual(expect.objectContaining({})); - expect(result.raw.total).toBe(2000); - expect(response?.amount).toEqual('1'); - expect(response?.block_number).toBe('88256'); - expect(response?.contract_type).toBe('ERC721'); - expect(response?.token_id).toBe('15'); - expect(response?.possible_spam).toBe(false); + expect(transfer).toBeDefined(); + expect(pagination.total).toBe(2000); + expect(transfer.amount).toEqual(1); + expect(transfer.blockNumber.toString()).toBe('88256'); + expect(transfer.contractType).toBe('ERC721'); + expect(transfer.tokenId).toBe('15'); + expect(transfer.possibleSpam).toBe(false); + expect(transfer.value?.wei).toBe('1000000000000000'); }); it('should not get the NFT transfers from to block of an invalid block number and throw an error', async () => {