Hello,
I’m trying to build indexer with provided ABI of an NFT contract. ABI is as follows:
{
"types": [
{
"typeId": 0,
"type": "()",
"components": [],
"typeParameters": null
},
{
"typeId": 1,
"type": "b256",
"components": null,
"typeParameters": null
},
{
"typeId": 2,
"type": "bool",
"components": null,
"typeParameters": null
},
{
"typeId": 3,
"type": "enum AccessError",
"components": [
{
"name": "OwnerDoesNotExist",
"type": 0,
"typeArguments": null
},
{
"name": "SenderNotOwner",
"type": 0,
"typeArguments": null
},
{
"name": "SenderNotOwnerOrApproved",
"type": 0,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 4,
"type": "enum Identity",
"components": [
{
"name": "Address",
"type": 10,
"typeArguments": null
},
{
"name": "ContractId",
"type": 12,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 5,
"type": "enum InputError",
"components": [
{
"name": "TokenAlreadyExists",
"type": 0,
"typeArguments": null
},
{
"name": "TokenDoesNotExist",
"type": 0,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 6,
"type": "enum Option",
"components": [
{
"name": "None",
"type": 0,
"typeArguments": null
},
{
"name": "Some",
"type": 7,
"typeArguments": null
}
],
"typeParameters": [
7
]
},
{
"typeId": 7,
"type": "generic T",
"components": null,
"typeParameters": null
},
{
"typeId": 8,
"type": "str[19]",
"components": null,
"typeParameters": null
},
{
"typeId": 9,
"type": "str[61]",
"components": null,
"typeParameters": null
},
{
"typeId": 10,
"type": "struct Address",
"components": [
{
"name": "value",
"type": 1,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 11,
"type": "struct ApprovalEvent",
"components": [
{
"name": "approved",
"type": 6,
"typeArguments": [
{
"name": "",
"type": 4,
"typeArguments": null
}
]
},
{
"name": "owner",
"type": 4,
"typeArguments": null
},
{
"name": "token_id",
"type": 17,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 12,
"type": "struct ContractId",
"components": [
{
"name": "value",
"type": 1,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 13,
"type": "struct MintEvent",
"components": [
{
"name": "owner",
"type": 4,
"typeArguments": null
},
{
"name": "token_id",
"type": 17,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 14,
"type": "struct NFTMetadata",
"components": [
{
"name": "token_name",
"type": 8,
"typeArguments": null
},
{
"name": "token_uri",
"type": 9,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 15,
"type": "struct OperatorEvent",
"components": [
{
"name": "approved",
"type": 2,
"typeArguments": null
},
{
"name": "operator",
"type": 4,
"typeArguments": null
},
{
"name": "owner",
"type": 4,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 16,
"type": "struct TransferEvent",
"components": [
{
"name": "from",
"type": 4,
"typeArguments": null
},
{
"name": "sender",
"type": 4,
"typeArguments": null
},
{
"name": "to",
"type": 4,
"typeArguments": null
},
{
"name": "token_id",
"type": 17,
"typeArguments": null
}
],
"typeParameters": null
},
{
"typeId": 17,
"type": "u64",
"components": null,
"typeParameters": null
}
],
"functions": [
{
"inputs": [
{
"name": "approved",
"type": 6,
"typeArguments": [
{
"name": "",
"type": 4,
"typeArguments": null
}
]
},
{
"name": "token_id",
"type": 17,
"typeArguments": null
}
],
"name": "approve",
"output": {
"name": "",
"type": 0,
"typeArguments": null
},
"attributes": [
{
"name": "storage",
"arguments": [
"read",
"write"
]
}
]
},
{
"inputs": [
{
"name": "token_id",
"type": 17,
"typeArguments": null
}
],
"name": "approved",
"output": {
"name": "",
"type": 6,
"typeArguments": [
{
"name": "",
"type": 4,
"typeArguments": null
}
]
},
"attributes": [
{
"name": "storage",
"arguments": [
"read"
]
}
]
},
{
"inputs": [
{
"name": "owner",
"type": 4,
"typeArguments": null
}
],
"name": "balance_of",
"output": {
"name": "",
"type": 17,
"typeArguments": null
},
"attributes": [
{
"name": "storage",
"arguments": [
"read"
]
}
]
},
{
"inputs": [
{
"name": "operator",
"type": 4,
"typeArguments": null
},
{
"name": "owner",
"type": 4,
"typeArguments": null
}
],
"name": "is_approved_for_all",
"output": {
"name": "",
"type": 2,
"typeArguments": null
},
"attributes": [
{
"name": "storage",
"arguments": [
"read"
]
}
]
},
{
"inputs": [
{
"name": "amount",
"type": 17,
"typeArguments": null
},
{
"name": "to",
"type": 4,
"typeArguments": null
}
],
"name": "mint",
"output": {
"name": "",
"type": 0,
"typeArguments": null
},
"attributes": [
{
"name": "storage",
"arguments": [
"read",
"write"
]
}
]
},
{
"inputs": [
{
"name": "token_id",
"type": 17,
"typeArguments": null
}
],
"name": "owner_of",
"output": {
"name": "",
"type": 6,
"typeArguments": [
{
"name": "",
"type": 4,
"typeArguments": null
}
]
},
"attributes": [
{
"name": "storage",
"arguments": [
"read"
]
}
]
},
{
"inputs": [
{
"name": "approve",
"type": 2,
"typeArguments": null
},
{
"name": "operator",
"type": 4,
"typeArguments": null
}
],
"name": "set_approval_for_all",
"output": {
"name": "",
"type": 0,
"typeArguments": null
},
"attributes": [
{
"name": "storage",
"arguments": [
"write"
]
}
]
},
{
"inputs": [],
"name": "tokens_minted",
"output": {
"name": "",
"type": 17,
"typeArguments": null
},
"attributes": [
{
"name": "storage",
"arguments": [
"read"
]
}
]
},
{
"inputs": [
{
"name": "to",
"type": 4,
"typeArguments": null
},
{
"name": "token_id",
"type": 17,
"typeArguments": null
}
],
"name": "transfer",
"output": {
"name": "",
"type": 0,
"typeArguments": null
},
"attributes": [
{
"name": "storage",
"arguments": [
"read",
"write"
]
}
]
},
{
"inputs": [
{
"name": "token_id",
"type": 17,
"typeArguments": null
}
],
"name": "token_metadata",
"output": {
"name": "",
"type": 6,
"typeArguments": [
{
"name": "",
"type": 14,
"typeArguments": null
}
]
},
"attributes": [
{
"name": "storage",
"arguments": [
"read"
]
}
]
}
],
"loggedTypes": [
{
"logId": 0,
"loggedType": {
"name": "",
"type": 5,
"typeArguments": []
}
},
{
"logId": 1,
"loggedType": {
"name": "",
"type": 3,
"typeArguments": []
}
},
{
"logId": 2,
"loggedType": {
"name": "",
"type": 11,
"typeArguments": []
}
},
{
"logId": 3,
"loggedType": {
"name": "",
"type": 5,
"typeArguments": []
}
},
{
"logId": 4,
"loggedType": {
"name": "",
"type": 13,
"typeArguments": []
}
},
{
"logId": 5,
"loggedType": {
"name": "",
"type": 5,
"typeArguments": []
}
},
{
"logId": 6,
"loggedType": {
"name": "",
"type": 15,
"typeArguments": []
}
},
{
"logId": 7,
"loggedType": {
"name": "",
"type": 5,
"typeArguments": []
}
},
{
"logId": 8,
"loggedType": {
"name": "",
"type": 3,
"typeArguments": []
}
},
{
"logId": 9,
"loggedType": {
"name": "",
"type": 16,
"typeArguments": []
}
}
],
"messagesTypes": [],
"configurables": []
}
When running cargo build --release
I get the following error:
--> src/lib.rs:5:1
|
5 | #[indexer(manifest = "hello_indexer.manifest.yaml")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: message: Could not derive TypeApplication param types.: InvalidData("type id 0 not found in type lookup")
Everything works if I remove the entity of typeId 0 from the ABI and all other entities that reference it, but I believe that that’s not the way to do it.
My cargo dependencies:
[dependencies]
fuel-indexer-macros = { version = "0.11", default-features = false }
fuel-indexer-plugin = { version = "0.11" }
fuel-indexer-schema = { version = "0.11", default-features = false }
fuel-tx = "0.26"
fuels = { version = "0.40.0", default-features = false }
getrandom = { version = "0.2", features = ["js"] }
serde = { version = "1.0", default-features = false, features = ["derive"] }