Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix/evm native creation in wei #1071

Merged
merged 2 commits into from
Mar 28, 2023
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
6 changes: 6 additions & 0 deletions .changeset/chilly-monkeys-begin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@moralisweb3/common-evm-utils': patch
'@moralisweb3/evm-api': patch
---

Fix parsing of some values to wei from API
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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[],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
),
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
),
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
14 changes: 8 additions & 6 deletions packages/evmApi/integration/test/getContractEvents.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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');
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down
12 changes: 6 additions & 6 deletions packages/evmApi/integration/test/getNFTLowestPrice.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down
18 changes: 9 additions & 9 deletions packages/evmApi/integration/test/getNFTTransfers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down