How to run smart contract functions
Prerequisites
Before getting started, make sure you have the following ready:
- Node v.14+ or Python
- NPM/Yarn or Pip
Step 1: Setup Moralis
First register your Moralis account and get your Moralis API Key.
Once you have your Moralis API Key, install the Moralis SDK in your project.
- npm
- yarn
- pnpm
- pip
npm install moralis @moralisweb3/common-evm-utils
yarn add moralis @moralisweb3/common-evm-utils
pnpm add moralis @moralisweb3/common-evm-utils
pip install moralis
Step 2: Get the verbose transaction of an address
In order to run smart contract function, Moralis provides you a runContractFunction endpoint to do so.
Here you'll need three parameters: address
, function_name
and abi
.
Once you've obtained the address
and function_name
parameters, you can get the contract's ABI by going to blockchain explorer such as Etherscan and copy the contract ABI directly. Your ABI should be in JSON format as follows:
[
{
"inputs": [],
"name": "getPrice",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
]
Once you've obtained the ABI, you can copy the following code:
- index.js (JavaScript)
- index.ts (TypeScript)
- index.py (Python)
const Moralis = require("moralis").default;
const { EvmChain } = require("@moralisweb3/common-evm-utils");
const abi = require("abi.json");
const runApp = async () => {
await Moralis.start({
apiKey: "YOUR_API_KEY",
// ...and any other configuration
});
const chain = EvmChain.ETHEREUM;
const address = "0x1A92f7381B9F03921564a437210bB9396471050C";
// token 0 address, e.g. WETH token address
const functionName = "getPrice";
const response = await Moralis.EvmApi.utils.runContractFunction({
address,
functionName,
abi,
chain,
});
console.log(response.toJSON());
};
runApp();
import Moralis from "moralis";
import { EvmChain } from "@moralisweb3/common-evm-utils";
import abi from "abi.json";
const runApp = async () => {
await Moralis.start({
apiKey: "YOUR_API_KEY",
// ...and any other configuration
});
const chain = EvmChain.ETHEREUM;
const address = "0x1A92f7381B9F03921564a437210bB9396471050C";
// token 0 address, e.g. WETH token address
const functionName = "getPrice";
const response = await Moralis.EvmApi.utils.runContractFunction({
address,
functionName,
abi,
chain,
});
console.log(response.toJSON());
};
runApp();
from moralis import evm_api
import json
# Read abi.json file
with open('abi.json', 'r') as data:
abi = json.load(data)
api_key = "YOUR_API_KEY"
params = {
"address": "0x1A92f7381B9F03921564a437210bB9396471050C",
"function_name": "getPrice",
"abi": abi,
"chain": "eth"
}
result = evm_api.utils.run_contract_function(
api_key=api_key,
params=params,
)
print(result)
Step 3: Run the script
To run the script, enter the following command:
- Shell (JavaScript)
- Shell (TypeScript)
- Shell (Python)
node index.js
ts-node index.ts
python index.py
In your terminal, you should see the following JSON response:
20000000000000000
Congratulations 🥳 You just run smart contract functions with just a few lines of code using the Moralis Utils API!
Youtube Video
API Reference
If you want to know more details on the endpoint and optional parameters, check out:
Support
If you face any trouble following the tutorial, feel free to reach out to our community engineers in our Discord or Forum to get 24/7 developer support.