Moralis Data Types

Intro

Within the SDK, we have several data types to make your life easier when working with the SDK. These data types are useful for:

  • Easy creation of data types by allowing different input formats (for example, "0x1" or 1 for a chain)
  • Easy formatting of data types (lowercase and checksum addresses, for example)
  • Utility methods (such as comparing two different data types regardless of the input/format)
  • Additional properties (such as currency, rpcUrls, and paths to explorers)

Configuring Default Types for EvmChain and EvmAddress (Optional)

It's possible to set default types for EvmChain and EvmAddress to read data from them using the .format() method. Please visit NodeJS SDK config.

Using Data Types

The most common use cases for the data types are:

  • As input for methods and API calls
  • Creating new instances manually for usage within your dapp
  • Using returned data types from the API

Use as Input for Methods and API Calls

For many API calls, you can provide a chain or address parameter. In these cases, you can provide any valid input value for an EvmChain or EvmAddress. For example, these are all valid inputs:

import { EvmChain, EvmAddress } from '@moralisweb3/evm-utils'

Moralis.EvmApi.nft.getWalletNFTs({
  chain: '0x1',
  address: '0xa74476443119A942dE498590Fe1f2454d7D4aC0d'
})

Moralis.EvmApi.nft.getWalletNFTs({
  chain: '0x1',
  address: '0xa74476443119a942de498590fe1f2454d7d4ac0d'
})

Moralis.EvmApi.nft.getWalletNFTs({
  chain: EvmChain.ETHEREUM,
  address: EvmAddress.ZERO_ADDRESS
})

Moralis.EvmApi.nft.getWalletNFTs({
  chain: EvmChain.create(1),
  address: EvmAddress.create("0xa74476443119A942dE498590Fe1f2454d7D4aC0d"),
})

Creating New Instances Manually for Usage Within Your Dapp

If you need to use any of the data types within your apps, then you can import them from '@moralisweb3/evm-utils or '@moralisweb3/sol-utils, and create your instance via the .create() method.

For example:

import { EvmNative } from '@moralisweb3/evm-utils'

const oneEth = EvmNative.create(1, 'ether')

oneEth.wei // 1000000000000000000
import { EvmAddress } from '@moralisweb3/evm-utils'

const myAddress = EvmAddress.create('0xa74476443119A942dE498590Fe1f2454d7D4aC0d')

myAddress.lowercase // "0xa74476443119a942de498590fe1f2454d7d4ac0d"

Using Returned Data Types from the API

You will encounter many data types as return values from any of the APIs. These provide a lot of extra value. For example:

const response = await Moralis.EvmApi.balance.getNativeBalance(params)

// myBalance is an instance of the EvmNative data type
const myBalance = response.result.balance

myBalance.wei   // 1000000000000000000
myBalance.ether // 1.0
myBalance.equals("1000000000000000000") // true

EvmChain

Instead of handling EVM chains as decimal or hex string types, the Moralis SDK now handles them as a separate class instance, and we call them Moralis Data Types.

Create EvmChain

import { EvmChain } from '@moralisweb3/evm-utils'

//by name
const chain = EvmChain.ETHEREUM 
//or by hex string
const chain = EvmChain.create("0x1")
// or by decimal value
const chain = EvmChain.create(1)

Read EvmChain

You can read the following values from the EvmChain instance:

ChainId

console.log("decimal: ", chain.decimal)
// decimal: 1
console.log("hex: ", chain.hex)
// hex: "0x1"
console.log("hex: ", chain.format())
// output depends on specified by default formatting type

Name

console.log("name: ", chain.name)
// name:"Ethereum Mainnet"

Currency

console.log("currency: ", chain.currency)
// currency: {name : "Ether", symbol: "ETH", decimals: 18 }

EvmChain - Comparing Equality

This utility method can be helpful when you handle decimals and hex values altogether in your dapp:

console.log('check 1: ', chain.equals(1))
// check 1: true
console.log('check 2: ', chain.equals("0x1"))
// check 2: true
console.log('check 3: ', chain.equals(EvmChain.create(1)))
// check 3: true
console.log('check 4: ', chain.equals(EvmChain.create("0x1")))
// check 4: true

EvmAddress

Create EvmAddress

import { EvmAddress } from '@moralisweb3/evm-utils'

// by lowercase address
const address = EvmAddress.create('0xa9c4c85dd0495e32d08ef64d51fdeb35d200edfe')
// or by checksum
const address = EvmAddress.create('0xa9C4c85DD0495E32D08EF64d51fDEB35D200EDfe')

Read EvmAddress

console.log("lowercase: ", address.lowercase)
// lowercase: "0xa9c4c85dd0495e32d08ef64d51fdeb35d200edfe"
console.log("checksum: ", address.checksum)
// checksum: "0xa9C4c85DD0495E32D08EF64d51fDEB35D200EDfe"
console.log("checksum: ", address.format())
// output depends on specified by default formatting type

EvmAddress - Comparing Equality

This utility method can be helpful when you handle lowercase and checksum values altogether in your dapp:

console.log('check 1: ', address.equals('0xa9c4c85dd0495e32d08ef64d51fdeb35d200edfe'))
// check 1: true
console.log('check 2: ', address.equals('0xa9C4c85DD0495E32D08EF64d51fDEB35D200EDfe'))
// check 2: true
console.log('check 3: ', address.equals(EvmAddress.create('0xa9c4c85dd0495e32d08ef64d51fdeb35d200edfe')))
// check 3: true
console.log('check 4: ', address.equals(EvmAddress.create('0xa9C4c85DD0495E32D08EF64d51fDEB35D200EDfe')))
// check 4: true

Other Data Types

For information about all the data types, visit:


Did this page help you?