Invalid ABI, Please verify

I am having trouble with this also but my contract ABI is very condensed and even when formatted still results in the ABI code being declined

My ABI Code Below

For syncing events you have to extract only the ABI specific to. your event from the entire ABI specific to that smart contract.

Hi, please check the abi for me, it says Invalid ABI, The ABI should contain an array of inputs.

[
	{
		"inputs": [
			{
				"internalType": "contract ABC",
				"name": "_bony",
				"type": "address"
			}
		],
		"stateMutability": "nonpayable",
		"type": "constructor"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "Delist",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "value",
				"type": "uint256"
			}
		],
		"name": "List",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "address",
				"name": "sender",
				"type": "address"
			}
		],
		"name": "NftOfferCanceled",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "address",
				"name": "buyer",
				"type": "address"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "offerValue",
				"type": "uint256"
			}
		],
		"name": "NftOffered",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "address",
				"name": "previousOwner",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "address",
				"name": "newOwner",
				"type": "address"
			}
		],
		"name": "OwnershipTransferred",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": false,
				"internalType": "address",
				"name": "seller",
				"type": "address"
			},
			{
				"indexed": false,
				"internalType": "address",
				"name": "buyer",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "value",
				"type": "uint256"
			}
		],
		"name": "TradeExecuted",
		"type": "event"
	},
	{
		"inputs": [],
		"name": "TRADE_FEE",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "TRADE_FUNDED_FEE",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "buyNft",
		"outputs": [],
		"stateMutability": "payable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			}
		],
		"name": "delistNft",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "getBalance",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "getBalanceToken",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "tokenId",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "price",
				"type": "uint256"
			}
		],
		"name": "listNft",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"name": "listings",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			},
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"name": "nftsWithOffers",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "owner",
		"outputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "renounceOwnership",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "toggleMarketPlace",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "newOwner",
				"type": "address"
			}
		],
		"name": "transferOwnership",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "amount",
				"type": "uint256"
			}
		],
		"name": "updateServiceFee",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address payable",
				"name": "_wallet",
				"type": "address"
			}
		],
		"name": "updateWalletFund",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "walletFund",
		"outputs": [
			{
				"internalType": "address payable",
				"name": "",
				"type": "address"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "amount",
				"type": "uint256"
			}
		],
		"name": "withdrawFund",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "_amount",
				"type": "uint256"
			},
			{
				"internalType": "address",
				"name": "_toAddr",
				"type": "address"
			}
		],
		"name": "withdrawToken",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	}
]

what are you trying to do with this ABI?

For: Configure Sync and Watch Contract Events

It works for me now, thanks!

@binhnyc02 I’m having the same issue. How did you fix it?

@cryptokid can you clarify what you said about extracting only the ABI specific to the event? Which part of the ABI should we include? Thanks!

Hey @brown2020

You need to copy the ABI

After this step you can use for example http://jsonviewer.stack.hu/ and format the code.

You need to find ABI object with type event and name you need. Here is example:

After this you need to provide the ABI object to event settings

@Yomoo Thank you for your help and feedback. I’m making progress! I think I now understand it. The problem could be in my marketplace.sol because the one I deployed doesn’t seem to have the MarketItemCreated event in the ABI. I’m going to try the whole process from the start again. Maybe I mixed up some of the files.

1 Like

Awesome! Feel free to ask us any questions.

Happy BUIDLing! :man_mechanic:

I struggled a bit to find the solution to this problem. We are used to copying the ABI from BscScan, and that way it doesn’t work. I believe developers should address this.

you have an example that doesn’t work?

Yes, if you go to BsC Scan and just copy the ABI from there, it doesn’t work. Then I saw in the video that it only takes part of the ABI. For example, it must start with {}, not [], as they come by default from BsC Scan. It confuses people. It’s working now, but I had to look for this information on the forum. On the Moralis screen, it asks for the ABI, not the ABI JSON portion of the event.

ok, yes, it doesn’t ask for the entire abi of the smart contract, only for the abi of that event

I couldn’t fix the error. Can you help me? My topic

[
{
“inputs”: [
{
“internalType”: “string”,
“name”: “name”,
“type”: “string”
},
{
“internalType”: “string”,
“name”: “symbol”,
“type”: “string”
}
],
“stateMutability”: “nonpayable”,
“type”: “constructor”
},
{
“anonymous”: false,
“inputs”: [
{
“indexed”: true,
“internalType”: “address”,
“name”: “owner”,
“type”: “address”
},
{
“indexed”: true,
“internalType”: “address”,
“name”: “spender”,
“type”: “address”
},
{
“indexed”: false,
“internalType”: “uint256”,
“name”: “value”,
“type”: “uint256”
}
],
“name”: “Approval”,
“type”: “event”
},
{
“inputs”: [
{
“internalType”: “address”,
“name”: “spender”,
“type”: “address”
},
{
“internalType”: “uint256”,
“name”: “amount”,
“type”: “uint256”
}
],
“name”: “approve”,
“outputs”: [
{
“internalType”: “bool”,
“name”: “”,
“type”: “bool”
}
],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “uint256”,
“name”: “amount”,
“type”: “uint256”
}
],
“name”: “burn”,
“outputs”: [],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “address”,
“name”: “account”,
“type”: “address”
},
{
“internalType”: “uint256”,
“name”: “amount”,
“type”: “uint256”
}
],
“name”: “burnFrom”,
“outputs”: [],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “address”,
“name”: “spender”,
“type”: “address”
},
{
“internalType”: “uint256”,
“name”: “subtractedValue”,
“type”: “uint256”
}
],
“name”: “decreaseAllowance”,
“outputs”: [
{
“internalType”: “bool”,
“name”: “”,
“type”: “bool”
}
],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
},
{
“internalType”: “address”,
“name”: “account”,
“type”: “address”
}
],
“name”: “grantRole”,
“outputs”: [],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “address”,
“name”: “spender”,
“type”: “address”
},
{
“internalType”: “uint256”,
“name”: “addedValue”,
“type”: “uint256”
}
],
“name”: “increaseAllowance”,
“outputs”: [
{
“internalType”: “bool”,
“name”: “”,
“type”: “bool”
}
],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “address”,
“name”: “to”,
“type”: “address”
},
{
“internalType”: “uint256”,
“name”: “amount”,
“type”: “uint256”
}
],
“name”: “mint”,
“outputs”: [],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“inputs”: [],
“name”: “pause”,
“outputs”: [],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“anonymous”: false,
“inputs”: [
{
“indexed”: false,
“internalType”: “address”,
“name”: “account”,
“type”: “address”
}
],
“name”: “Paused”,
“type”: “event”
},
{
“inputs”: [
{
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
},
{
“internalType”: “address”,
“name”: “account”,
“type”: “address”
}
],
“name”: “renounceRole”,
“outputs”: [],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
},
{
“internalType”: “address”,
“name”: “account”,
“type”: “address”
}
],
“name”: “revokeRole”,
“outputs”: [],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“anonymous”: false,
“inputs”: [
{
“indexed”: true,
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
},
{
“indexed”: true,
“internalType”: “bytes32”,
“name”: “previousAdminRole”,
“type”: “bytes32”
},
{
“indexed”: true,
“internalType”: “bytes32”,
“name”: “newAdminRole”,
“type”: “bytes32”
}
],
“name”: “RoleAdminChanged”,
“type”: “event”
},
{
“anonymous”: false,
“inputs”: [
{
“indexed”: true,
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
},
{
“indexed”: true,
“internalType”: “address”,
“name”: “account”,
“type”: “address”
},
{
“indexed”: true,
“internalType”: “address”,
“name”: “sender”,
“type”: “address”
}
],
“name”: “RoleGranted”,
“type”: “event”
},
{
“anonymous”: false,
“inputs”: [
{
“indexed”: true,
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
},
{
“indexed”: true,
“internalType”: “address”,
“name”: “account”,
“type”: “address”
},
{
“indexed”: true,
“internalType”: “address”,
“name”: “sender”,
“type”: “address”
}
],
“name”: “RoleRevoked”,
“type”: “event”
},
{
“inputs”: [
{
“internalType”: “address”,
“name”: “to”,
“type”: “address”
},
{
“internalType”: “uint256”,
“name”: “amount”,
“type”: “uint256”
}
],
“name”: “transfer”,
“outputs”: [
{
“internalType”: “bool”,
“name”: “”,
“type”: “bool”
}
],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“anonymous”: false,
“inputs”: [
{
“indexed”: true,
“internalType”: “address”,
“name”: “from”,
“type”: “address”
},
{
“indexed”: true,
“internalType”: “address”,
“name”: “to”,
“type”: “address”
},
{
“indexed”: false,
“internalType”: “uint256”,
“name”: “value”,
“type”: “uint256”
}
],
“name”: “Transfer”,
“type”: “event”
},
{
“inputs”: [
{
“internalType”: “address”,
“name”: “from”,
“type”: “address”
},
{
“internalType”: “address”,
“name”: “to”,
“type”: “address”
},
{
“internalType”: “uint256”,
“name”: “amount”,
“type”: “uint256”
}
],
“name”: “transferFrom”,
“outputs”: [
{
“internalType”: “bool”,
“name”: “”,
“type”: “bool”
}
],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“inputs”: [],
“name”: “unpause”,
“outputs”: [],
“stateMutability”: “nonpayable”,
“type”: “function”
},
{
“anonymous”: false,
“inputs”: [
{
“indexed”: false,
“internalType”: “address”,
“name”: “account”,
“type”: “address”
}
],
“name”: “Unpaused”,
“type”: “event”
},
{
“inputs”: [
{
“internalType”: “address”,
“name”: “owner”,
“type”: “address”
},
{
“internalType”: “address”,
“name”: “spender”,
“type”: “address”
}
],
“name”: “allowance”,
“outputs”: [
{
“internalType”: “uint256”,
“name”: “”,
“type”: “uint256”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “address”,
“name”: “account”,
“type”: “address”
}
],
“name”: “balanceOf”,
“outputs”: [
{
“internalType”: “uint256”,
“name”: “”,
“type”: “uint256”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [],
“name”: “decimals”,
“outputs”: [
{
“internalType”: “uint8”,
“name”: “”,
“type”: “uint8”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [],
“name”: “DEFAULT_ADMIN_ROLE”,
“outputs”: [
{
“internalType”: “bytes32”,
“name”: “”,
“type”: “bytes32”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
}
],
“name”: “getRoleAdmin”,
“outputs”: [
{
“internalType”: “bytes32”,
“name”: “”,
“type”: “bytes32”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
},
{
“internalType”: “uint256”,
“name”: “index”,
“type”: “uint256”
}
],
“name”: “getRoleMember”,
“outputs”: [
{
“internalType”: “address”,
“name”: “”,
“type”: “address”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
}
],
“name”: “getRoleMemberCount”,
“outputs”: [
{
“internalType”: “uint256”,
“name”: “”,
“type”: “uint256”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “bytes32”,
“name”: “role”,
“type”: “bytes32”
},
{
“internalType”: “address”,
“name”: “account”,
“type”: “address”
}
],
“name”: “hasRole”,
“outputs”: [
{
“internalType”: “bool”,
“name”: “”,
“type”: “bool”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [],
“name”: “MINTER_ROLE”,
“outputs”: [
{
“internalType”: “bytes32”,
“name”: “”,
“type”: “bytes32”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [],
“name”: “name”,
“outputs”: [
{
“internalType”: “string”,
“name”: “”,
“type”: “string”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [],
“name”: “paused”,
“outputs”: [
{
“internalType”: “bool”,
“name”: “”,
“type”: “bool”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [],
“name”: “PAUSER_ROLE”,
“outputs”: [
{
“internalType”: “bytes32”,
“name”: “”,
“type”: “bytes32”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [
{
“internalType”: “bytes4”,
“name”: “interfaceId”,
“type”: “bytes4”
}
],
“name”: “supportsInterface”,
“outputs”: [
{
“internalType”: “bool”,
“name”: “”,
“type”: “bool”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [],
“name”: “symbol”,
“outputs”: [
{
“internalType”: “string”,
“name”: “”,
“type”: “string”
}
],
“stateMutability”: “view”,
“type”: “function”
},
{
“inputs”: [],
“name”: “totalSupply”,
“outputs”: [
{
“internalType”: “uint256”,
“name”: “”,
“type”: “uint256”
}
],
“stateMutability”: “view”,
“type”: “function”
}
]

this is my auto generated ABI in the Remix and i followed tutorial instructions and i dont know the problem here

Can you identify the part from this Abi for your particular event that you want to sync?

i dont exactly know what to get here.

in the tutorial it say’s click the ABI it will auto copy into the clipboard
then i paste it in the cloud function without changing any code.
but it is invalid.

Where do you need that ABI? What for?

Usually that abi has the information for a lot of functions. Sometimes you need only a part form that abi depending where you need to use it.

1 Like