diff --git a/README.md b/README.md index c6422ea8..07eba207 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ The output file will be saved in `./Selectors.md`. To regenerate the Go bindings for, e.g., [the devices API](https://github.com/DIMO-Network/devices-api/blob/main/internal/contracts/registry.go), you would run ```sh -abigen --abi abis/DimoRegistry.json --out registry.go --pkg contracts --type Registry +npm run abigen ``` -and copy over that file. +and copy over the generated files from [bindings](/bindings) folder. diff --git a/Selectors.md b/Selectors.md index c2cd858f..943a2b19 100644 --- a/Selectors.md +++ b/Selectors.md @@ -33,7 +33,6 @@ | 0xb17b974b | adminCacheDimoStreamrEns() | | 0x56936962 | adminChangeParentNode(uint256,address,uint256[]) | | 0x3febacab | adminPairAftermarketDevice(uint256,uint256) | -| 0x5f741f4d | adminRemoveVehicleAttribute(string) | | 0x3d9cf004 | adminSetStorageNodeIdForVehicleIds(uint256[],uint256) | | 0xdd60fd1a | adminSetVehicleDDs((uint256,string)[]) | | 0xf73a8f04 | renameManufacturers((uint256,string)[]) | @@ -57,8 +56,6 @@ | 0xf6391f5c | RoleRevoked(bytes32,address,address) | | 0xe89d3dc7 | SyntheticDeviceAttributeSet(uint256,string,string) | | 0xe4edc3c1 | SyntheticDeviceNodeBurned(uint256,uint256,address) | -| 0x9b4bf377 | VehicleAttributeRemoved(string) | -| 0x3a259e5d | VehicleAttributeSet(uint256,string,string) | | 0x7b36384f | VehicleNodeBurned(uint256,address) | | 0x9197060b | VehicleStorageNodeIdSet(uint256,uint256) | @@ -248,9 +245,7 @@ | 0x03f4b74a | SyntheticDeviceIdProxySet(address) | | 0xe4edc3c1 | SyntheticDeviceNodeBurned(uint256,uint256,address) | | 0x5a560c1a | SyntheticDeviceNodeMinted(uint256,uint256,uint256,address,address) | -| 0x3a259e5d | VehicleAttributeSet(uint256,string,string) | | 0xd471ae8a | VehicleNodeMinted(uint256,uint256,address) | -| 0xc7c7d9ac | VehicleNodeMintedWithDeviceDefinition(uint256,uint256,address,string) | #### Errors | Selector | Signature | @@ -273,17 +268,15 @@ #### Functions | Selector | Signature | |-|-| -| 0xf0d1a557 | addVehicleAttribute(string) | | 0xd0b61156 | burnVehicleSign(uint256,bytes) | | 0xb7bded95 | getDeviceDefinitionIdByVehicleId(uint256) | -| 0x8b04a18b | mintVehicleWithDeviceDefinition(uint256,address,uint256,string,(string,string)[]) | -| 0x8bf71ebc | mintVehicleWithDeviceDefinition(uint256,address,uint256,string,(string,string)[],(address,uint256,uint256,string)) | -| 0x97c95b2a | mintVehicleWithDeviceDefinition(uint256,address,string,(string,string)[],(address,uint256,uint256,string)) | -| 0xd84baff1 | mintVehicleWithDeviceDefinition(uint256,address,string,(string,string)[]) | -| 0x592c0889 | mintVehicleWithDeviceDefinitionSign(uint256,address,uint256,string,(string,string)[],bytes) | -| 0x8dca2b8e | mintVehicleWithDeviceDefinitionSign(uint256,address,string,(string,string)[],bytes) | +| 0x6241c3b6 | mintVehicle(uint256,address) | +| 0x65f43d21 | mintVehicle(uint256,address,uint256,(address,uint256,uint256,string)) | +| 0x7163864b | mintVehicle(uint256,address,uint256) | +| 0xf6dfeac5 | mintVehicle(uint256,address,(address,uint256,uint256,string)) | +| 0x0410a326 | mintVehicleSign(uint256,address,uint256,bytes) | +| 0xae10486b | mintVehicleSign(uint256,address,bytes) | | 0x9bfae6da | setVehicleIdProxyAddress(address) | -| 0xd9c3ae61 | setVehicleInfo(uint256,(string,string)[]) | | 0xea0e7d3a | validateBurnAndResetNode(uint256) | #### Events @@ -292,19 +285,14 @@ | 0xbd79b86f | RoleAdminChanged(bytes32,bytes32,bytes32) | | 0x2f878811 | RoleGranted(bytes32,address,address) | | 0xf6391f5c | RoleRevoked(bytes32,address,address) | -| 0x2b7d41dc | VehicleAttributeAdded(string) | -| 0x3a259e5d | VehicleAttributeSet(uint256,string,string) | | 0x3e7484c4 | VehicleIdProxySet(address) | | 0x7b36384f | VehicleNodeBurned(uint256,address) | | 0xd471ae8a | VehicleNodeMinted(uint256,uint256,address) | -| 0xc7c7d9ac | VehicleNodeMintedWithDeviceDefinition(uint256,uint256,address,string) | | 0x9197060b | VehicleStorageNodeIdSet(uint256,uint256) | #### Errors | Selector | Signature | |-|-| -| 0x130e2668 | AttributeExists(string) | -| 0x1c48d49e | AttributeNotWhitelisted(string) | | 0xe3ca9639 | InvalidNode(address,uint256) | | 0x38a85a8d | InvalidOwnerSignature() | | 0x5299bab7 | InvalidParentNode(uint256) | @@ -422,23 +410,19 @@ #### Functions | Selector | Signature | |-|-| -| 0x688ecea4 | mintVehicleAndSdSign((uint256,address,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[])) | -| 0xfb1a28e8 | mintVehicleAndSdSign((uint256,address,(string,string)[],uint256,bytes,bytes,address,(string,string)[])) | -| 0x484db0b3 | mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[])) | -| 0xd23965e3 | mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[])) | -| 0x58657dcc | mintVehicleAndSdWithDeviceDefinitionSignAndSacd((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]),(address,uint256,uint256,string)) | -| 0x788a2f48 | mintVehicleAndSdWithDeviceDefinitionSignAndSacd((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]),(address,uint256,uint256,string)) | -| 0x1a5d15a1 | mintVehicleAndSdWithDeviceDefinitionSignBatch((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[]) | -| 0x7ae7fe4e | mintVehicleAndSdWithDeviceDefinitionSignBatch((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[]) | +| 0x6a27b02f | mintVehicleAndSdSign((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[])) | +| 0xec681b0f | mintVehicleAndSdSign((uint256,address,uint256,bytes,bytes,address,(string,string)[])) | +| 0x77c1d454 | mintVehicleAndSdSignAndSacd((uint256,address,uint256,bytes,bytes,address,(string,string)[]),(address,uint256,uint256,string)) | +| 0x8e8230b6 | mintVehicleAndSdSignAndSacd((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[]),(address,uint256,uint256,string)) | +| 0x54d80641 | mintVehicleAndSdSignBatch((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[]) | +| 0x5f462306 | mintVehicleAndSdSignBatch((uint256,address,uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[]) | #### Events | Selector | Signature | |-|-| | 0xe89d3dc7 | SyntheticDeviceAttributeSet(uint256,string,string) | | 0x5a560c1a | SyntheticDeviceNodeMinted(uint256,uint256,uint256,address,address) | -| 0x3a259e5d | VehicleAttributeSet(uint256,string,string) | | 0xd471ae8a | VehicleNodeMinted(uint256,uint256,address) | -| 0xc7c7d9ac | VehicleNodeMintedWithDeviceDefinition(uint256,uint256,address,string) | | 0x9197060b | VehicleStorageNodeIdSet(uint256,uint256) | #### Errors diff --git a/abis/DimoRegistry.json b/abis/DimoRegistry.json index 87739d09..76887410 100644 --- a/abis/DimoRegistry.json +++ b/abis/DimoRegistry.json @@ -482,44 +482,6 @@ "name": "SyntheticDeviceNodeBurned", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - } - ], - "name": "VehicleAttributeRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "name": "VehicleAttributeSet", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -671,19 +633,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - } - ], - "name": "adminRemoveVehicleAttribute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -2072,37 +2021,6 @@ "name": "VehicleNodeMinted", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "manufacturerId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "vehicleId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - } - ], - "name": "VehicleNodeMintedWithDeviceDefinition", - "type": "event" - }, { "inputs": [ { @@ -2337,19 +2255,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - } - ], - "name": "VehicleAttributeAdded", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -2363,19 +2268,6 @@ "name": "VehicleIdProxySet", "type": "event" }, - { - "inputs": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - } - ], - "name": "addVehicleAttribute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -2424,36 +2316,9 @@ "internalType": "address", "name": "owner", "type": "address" - }, - { - "internalType": "uint256", - "name": "storageNodeId", - "type": "uint256" - }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" } ], - "name": "mintVehicleWithDeviceDefinition", + "name": "mintVehicle", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -2475,28 +2340,6 @@ "name": "storageNodeId", "type": "uint256" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" - }, { "components": [ { @@ -2525,7 +2368,7 @@ "type": "tuple" } ], - "name": "mintVehicleWithDeviceDefinition", + "name": "mintVehicle", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -2543,26 +2386,27 @@ "type": "address" }, { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" + "internalType": "uint256", + "name": "storageNodeId", + "type": "uint256" + } + ], + "name": "mintVehicle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "manufacturerNode", + "type": "uint256" }, { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" + "internalType": "address", + "name": "owner", + "type": "address" }, { "components": [ @@ -2592,7 +2436,7 @@ "type": "tuple" } ], - "name": "mintVehicleWithDeviceDefinition", + "name": "mintVehicle", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -2610,29 +2454,17 @@ "type": "address" }, { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" + "internalType": "uint256", + "name": "storageNodeId", + "type": "uint256" }, { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" + "internalType": "bytes", + "name": "signature", + "type": "bytes" } ], - "name": "mintVehicleWithDeviceDefinition", + "name": "mintVehicleSign", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -2649,134 +2481,32 @@ "name": "owner", "type": "address" }, - { - "internalType": "uint256", - "name": "storageNodeId", - "type": "uint256" - }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" - }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], - "name": "mintVehicleWithDeviceDefinitionSign", + "name": "mintVehicleSign", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ - { - "internalType": "uint256", - "name": "manufacturerNode", - "type": "uint256" - }, { "internalType": "address", - "name": "owner", + "name": "addr", "type": "address" - }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "name": "mintVehicleWithDeviceDefinitionSign", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "setVehicleIdProxyAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" - } - ], - "name": "setVehicleInfo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ + } + ], + "name": "setVehicleIdProxyAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { "internalType": "uint256", "name": "tokenId", @@ -2980,23 +2710,6 @@ "name": "storageNodeId", "type": "uint256" }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -3059,23 +2772,6 @@ "name": "owner", "type": "address" }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -3138,33 +2834,6 @@ "name": "owner", "type": "address" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "internalType": "uint256", - "name": "storageNodeId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -3203,175 +2872,7 @@ "type": "tuple[]" } ], - "internalType": "struct MintVehicleAndSdWithDdInputWithSnId", - "name": "data", - "type": "tuple" - } - ], - "name": "mintVehicleAndSdWithDeviceDefinitionSign", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "manufacturerNode", - "type": "uint256" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "connectionId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "vehicleOwnerSig", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "syntheticDeviceSig", - "type": "bytes" - }, - { - "internalType": "address", - "name": "syntheticDeviceAddr", - "type": "address" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsDevice", - "type": "tuple[]" - } - ], - "internalType": "struct MintVehicleAndSdWithDdInput", - "name": "data", - "type": "tuple" - } - ], - "name": "mintVehicleAndSdWithDeviceDefinitionSign", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "manufacturerNode", - "type": "uint256" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "connectionId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "vehicleOwnerSig", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "syntheticDeviceSig", - "type": "bytes" - }, - { - "internalType": "address", - "name": "syntheticDeviceAddr", - "type": "address" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsDevice", - "type": "tuple[]" - } - ], - "internalType": "struct MintVehicleAndSdWithDdInput", + "internalType": "struct MintVehicleAndSdInput", "name": "data", "type": "tuple" }, @@ -3403,7 +2904,7 @@ "type": "tuple" } ], - "name": "mintVehicleAndSdWithDeviceDefinitionSignAndSacd", + "name": "mintVehicleAndSdSignAndSacd", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -3422,33 +2923,11 @@ "name": "owner", "type": "address" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, { "internalType": "uint256", "name": "storageNodeId", "type": "uint256" }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -3487,7 +2966,7 @@ "type": "tuple[]" } ], - "internalType": "struct MintVehicleAndSdWithDdInputWithSnId", + "internalType": "struct MintVehicleAndSdInputWithSnId", "name": "data", "type": "tuple" }, @@ -3519,7 +2998,7 @@ "type": "tuple" } ], - "name": "mintVehicleAndSdWithDeviceDefinitionSignAndSacd", + "name": "mintVehicleAndSdSignAndSacd", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -3538,33 +3017,11 @@ "name": "owner", "type": "address" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, { "internalType": "uint256", "name": "storageNodeId", "type": "uint256" }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -3630,12 +3087,12 @@ "type": "tuple" } ], - "internalType": "struct MintVehicleAndSdWithDdInputWithSnIdBatch[]", + "internalType": "struct MintVehicleAndSdInputWithSnIdBatch[]", "name": "data", "type": "tuple[]" } ], - "name": "mintVehicleAndSdWithDeviceDefinitionSignBatch", + "name": "mintVehicleAndSdSignBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -3654,28 +3111,6 @@ "name": "owner", "type": "address" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -3741,12 +3176,12 @@ "type": "tuple" } ], - "internalType": "struct MintVehicleAndSdWithDdInputBatch[]", + "internalType": "struct MintVehicleAndSdInputBatch[]", "name": "data", "type": "tuple[]" } ], - "name": "mintVehicleAndSdWithDeviceDefinitionSignBatch", + "name": "mintVehicleAndSdSignBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/abis/contracts/dev/DevAdmin.sol/DevAdmin.json b/abis/contracts/dev/DevAdmin.sol/DevAdmin.json index 1cb035b1..41ec48b6 100644 --- a/abis/contracts/dev/DevAdmin.sol/DevAdmin.json +++ b/abis/contracts/dev/DevAdmin.sol/DevAdmin.json @@ -340,44 +340,6 @@ "name": "SyntheticDeviceNodeBurned", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - } - ], - "name": "VehicleAttributeRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "name": "VehicleAttributeSet", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -529,19 +491,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - } - ], - "name": "adminRemoveVehicleAttribute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { diff --git a/abis/contracts/implementations/MultipleMinter.sol/MultipleMinter.json b/abis/contracts/implementations/MultipleMinter.sol/MultipleMinter.json index 9d614efa..435a8a86 100644 --- a/abis/contracts/implementations/MultipleMinter.sol/MultipleMinter.json +++ b/abis/contracts/implementations/MultipleMinter.sol/MultipleMinter.json @@ -126,31 +126,6 @@ "name": "SyntheticDeviceNodeMinted", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "name": "VehicleAttributeSet", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -176,37 +151,6 @@ "name": "VehicleNodeMinted", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "manufacturerId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "vehicleId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - } - ], - "name": "VehicleNodeMintedWithDeviceDefinition", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -245,23 +189,6 @@ "name": "storageNodeId", "type": "uint256" }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -324,23 +251,6 @@ "name": "owner", "type": "address" }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -403,33 +313,6 @@ "name": "owner", "type": "address" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "internalType": "uint256", - "name": "storageNodeId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -468,175 +351,7 @@ "type": "tuple[]" } ], - "internalType": "struct MintVehicleAndSdWithDdInputWithSnId", - "name": "data", - "type": "tuple" - } - ], - "name": "mintVehicleAndSdWithDeviceDefinitionSign", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "manufacturerNode", - "type": "uint256" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "connectionId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "vehicleOwnerSig", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "syntheticDeviceSig", - "type": "bytes" - }, - { - "internalType": "address", - "name": "syntheticDeviceAddr", - "type": "address" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsDevice", - "type": "tuple[]" - } - ], - "internalType": "struct MintVehicleAndSdWithDdInput", - "name": "data", - "type": "tuple" - } - ], - "name": "mintVehicleAndSdWithDeviceDefinitionSign", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "manufacturerNode", - "type": "uint256" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "connectionId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "vehicleOwnerSig", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "syntheticDeviceSig", - "type": "bytes" - }, - { - "internalType": "address", - "name": "syntheticDeviceAddr", - "type": "address" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsDevice", - "type": "tuple[]" - } - ], - "internalType": "struct MintVehicleAndSdWithDdInput", + "internalType": "struct MintVehicleAndSdInput", "name": "data", "type": "tuple" }, @@ -668,7 +383,7 @@ "type": "tuple" } ], - "name": "mintVehicleAndSdWithDeviceDefinitionSignAndSacd", + "name": "mintVehicleAndSdSignAndSacd", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -687,33 +402,11 @@ "name": "owner", "type": "address" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, { "internalType": "uint256", "name": "storageNodeId", "type": "uint256" }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -752,7 +445,7 @@ "type": "tuple[]" } ], - "internalType": "struct MintVehicleAndSdWithDdInputWithSnId", + "internalType": "struct MintVehicleAndSdInputWithSnId", "name": "data", "type": "tuple" }, @@ -784,7 +477,7 @@ "type": "tuple" } ], - "name": "mintVehicleAndSdWithDeviceDefinitionSignAndSacd", + "name": "mintVehicleAndSdSignAndSacd", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -803,33 +496,11 @@ "name": "owner", "type": "address" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, { "internalType": "uint256", "name": "storageNodeId", "type": "uint256" }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -895,12 +566,12 @@ "type": "tuple" } ], - "internalType": "struct MintVehicleAndSdWithDdInputWithSnIdBatch[]", + "internalType": "struct MintVehicleAndSdInputWithSnIdBatch[]", "name": "data", "type": "tuple[]" } ], - "name": "mintVehicleAndSdWithDeviceDefinitionSignBatch", + "name": "mintVehicleAndSdSignBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -919,28 +590,6 @@ "name": "owner", "type": "address" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfoPairsVehicle", - "type": "tuple[]" - }, { "internalType": "uint256", "name": "connectionId", @@ -1006,12 +655,12 @@ "type": "tuple" } ], - "internalType": "struct MintVehicleAndSdWithDdInputBatch[]", + "internalType": "struct MintVehicleAndSdInputBatch[]", "name": "data", "type": "tuple[]" } ], - "name": "mintVehicleAndSdWithDeviceDefinitionSignBatch", + "name": "mintVehicleAndSdSignBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/abis/contracts/implementations/nodes/SyntheticDevice.sol/SyntheticDevice.json b/abis/contracts/implementations/nodes/SyntheticDevice.sol/SyntheticDevice.json index 77665663..040f8335 100644 --- a/abis/contracts/implementations/nodes/SyntheticDevice.sol/SyntheticDevice.json +++ b/abis/contracts/implementations/nodes/SyntheticDevice.sol/SyntheticDevice.json @@ -305,31 +305,6 @@ "name": "SyntheticDeviceNodeMinted", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "name": "VehicleAttributeSet", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -355,37 +330,6 @@ "name": "VehicleNodeMinted", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "manufacturerId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "vehicleId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - } - ], - "name": "VehicleNodeMintedWithDeviceDefinition", - "type": "event" - }, { "inputs": [ { diff --git a/abis/contracts/implementations/nodes/Vehicle.sol/Vehicle.json b/abis/contracts/implementations/nodes/Vehicle.sol/Vehicle.json index 7b1d3e1e..f2d66964 100644 --- a/abis/contracts/implementations/nodes/Vehicle.sol/Vehicle.json +++ b/abis/contracts/implementations/nodes/Vehicle.sol/Vehicle.json @@ -1,26 +1,4 @@ [ - { - "inputs": [ - { - "internalType": "string", - "name": "attr", - "type": "string" - } - ], - "name": "AttributeExists", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "attr", - "type": "string" - } - ], - "name": "AttributeNotWhitelisted", - "type": "error" - }, { "inputs": [ { @@ -165,44 +143,6 @@ "name": "RoleRevoked", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - } - ], - "name": "VehicleAttributeAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "name": "VehicleAttributeSet", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -260,37 +200,6 @@ "name": "VehicleNodeMinted", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "manufacturerId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "vehicleId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - } - ], - "name": "VehicleNodeMintedWithDeviceDefinition", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -310,19 +219,6 @@ "name": "VehicleStorageNodeIdSet", "type": "event" }, - { - "inputs": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - } - ], - "name": "addVehicleAttribute", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -371,36 +267,9 @@ "internalType": "address", "name": "owner", "type": "address" - }, - { - "internalType": "uint256", - "name": "storageNodeId", - "type": "uint256" - }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" } ], - "name": "mintVehicleWithDeviceDefinition", + "name": "mintVehicle", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -422,28 +291,6 @@ "name": "storageNodeId", "type": "uint256" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" - }, { "components": [ { @@ -472,7 +319,7 @@ "type": "tuple" } ], - "name": "mintVehicleWithDeviceDefinition", + "name": "mintVehicle", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -490,26 +337,27 @@ "type": "address" }, { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" + "internalType": "uint256", + "name": "storageNodeId", + "type": "uint256" + } + ], + "name": "mintVehicle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "manufacturerNode", + "type": "uint256" }, { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" + "internalType": "address", + "name": "owner", + "type": "address" }, { "components": [ @@ -539,47 +387,7 @@ "type": "tuple" } ], - "name": "mintVehicleWithDeviceDefinition", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "manufacturerNode", - "type": "uint256" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" - } - ], - "name": "mintVehicleWithDeviceDefinition", + "name": "mintVehicle", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -601,35 +409,13 @@ "name": "storageNodeId", "type": "uint256" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" - }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], - "name": "mintVehicleWithDeviceDefinitionSign", + "name": "mintVehicleSign", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -646,35 +432,13 @@ "name": "owner", "type": "address" }, - { - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" - }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], - "name": "mintVehicleWithDeviceDefinitionSign", + "name": "mintVehicleSign", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -692,36 +456,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "internalType": "struct AttributeInfoPair[]", - "name": "attrInfo", - "type": "tuple[]" - } - ], - "name": "setVehicleInfo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { diff --git a/abis/contracts/implementations/nodes/VehicleInternal.sol/VehicleInternal.json b/abis/contracts/implementations/nodes/VehicleInternal.sol/VehicleInternal.json index 28d1d394..d7ff0e24 100644 --- a/abis/contracts/implementations/nodes/VehicleInternal.sol/VehicleInternal.json +++ b/abis/contracts/implementations/nodes/VehicleInternal.sol/VehicleInternal.json @@ -1,29 +1,4 @@ [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "attribute", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "info", - "type": "string" - } - ], - "name": "VehicleAttributeSet", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -48,36 +23,5 @@ ], "name": "VehicleNodeMinted", "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "manufacturerId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "vehicleId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "deviceDefinitionId", - "type": "string" - } - ], - "name": "VehicleNodeMintedWithDeviceDefinition", - "type": "event" } ] diff --git a/contracts/dev/DevAdmin.sol b/contracts/dev/DevAdmin.sol index 4f3facf1..da7dc062 100644 --- a/contracts/dev/DevAdmin.sol +++ b/contracts/dev/DevAdmin.sol @@ -53,7 +53,6 @@ contract DevAdmin is AccessControlInternal { uint256 indexed vehicleNode, address indexed owner ); - event VehicleAttributeSet(uint256 tokenId, string attribute, string info); event AftermarketDeviceAttributeSet( uint256 tokenId, string attribute, @@ -69,7 +68,6 @@ contract DevAdmin is AccessControlInternal { uint256 vehicleNode, address indexed owner ); - event VehicleAttributeRemoved(string attribute); event DeviceDefinitionIdSet(uint256 indexed vehicleId, string ddId); event VehicleStorageNodeIdSet( uint256 indexed vehicleId, @@ -287,13 +285,11 @@ contract DevAdmin is AccessControlInternal { owner = INFT(vehicleIdProxyAddress).ownerOf(tokenId); delete ns.nodes[vehicleIdProxyAddress][tokenId].parentNode; - delete vs.vehicleIdToDeviceDefinitionId[tokenId]; + delete vs._deprecated_vehicleIdToDeviceDefinitionId[tokenId]; emit VehicleNodeBurned(tokenId, owner); INFT(vehicleIdProxyAddress).burn(tokenId); - - _resetVehicleInfos(tokenId); } } @@ -375,13 +371,11 @@ contract DevAdmin is AccessControlInternal { } delete ns.nodes[vehicleIdProxyAddress][tokenId].parentNode; - delete vs.vehicleIdToDeviceDefinitionId[tokenId]; + delete vs._deprecated_vehicleIdToDeviceDefinitionId[tokenId]; emit VehicleNodeBurned(tokenId, owner); INFT(vehicleIdProxyAddress).burn(tokenId); - - _resetVehicleInfos(tokenId); } } @@ -638,21 +632,6 @@ contract DevAdmin is AccessControlInternal { streamRegistry.createStreamWithENS(dimoStreamrEns, "/vehicles/", "{}"); } - /** - * @notice Admin function remove a vehicle node attribute - * @dev Caller must have the DEV_SUPER_ADMIN_ROLE or DEV_REMOVE_ATTR roles - */ - function adminRemoveVehicleAttribute( - string calldata attribute - ) external authorized(DEV_REMOVE_ATTR) { - if ( - AttributeSet.remove( - VehicleStorage.getStorage().whitelistedAttributes, - attribute - ) - ) emit VehicleAttributeRemoved(attribute); - } - /** * @notice Admin function add device definition to existing vehicles * @dev Caller must have the DEV_SUPER_ADMIN_ROLE or DEV_SET_DD roles @@ -673,7 +652,7 @@ contract DevAdmin is AccessControlInternal { if (!INFT(vehicleIdProxyAddress).exists(vehicleId)) revert InvalidNode(vehicleIdProxyAddress, vehicleId); - vs.vehicleIdToDeviceDefinitionId[vehicleId] = ddId; + vs._deprecated_vehicleIdToDeviceDefinitionId[vehicleId] = ddId; emit DeviceDefinitionIdSet(vehicleId, ddId); } @@ -714,30 +693,6 @@ contract DevAdmin is AccessControlInternal { } } - /** - * @dev Internal function to reset vehicle node infos - * It iterates over all whitelisted attributes to reset each info - * @param tokenId Node which will have the infos reset - */ - function _resetVehicleInfos(uint256 tokenId) private { - NodesStorage.Storage storage ns = NodesStorage.getStorage(); - VehicleStorage.Storage storage vds = VehicleStorage.getStorage(); - address idProxyAddress = vds.idProxyAddress; - string[] memory attributes = AttributeSet.values( - vds.whitelistedAttributes - ); - - for ( - uint256 i = 0; - i < AttributeSet.count(vds.whitelistedAttributes); - i++ - ) { - delete ns.nodes[idProxyAddress][tokenId].info[attributes[i]]; - - emit VehicleAttributeSet(tokenId, attributes[i], ""); - } - } - /** * @dev Internal function to reset AD node infos * It iterates over all whitelisted attributes to reset each info diff --git a/contracts/implementations/MultipleMinter.sol b/contracts/implementations/MultipleMinter.sol index adde0ec2..07687a8e 100644 --- a/contracts/implementations/MultipleMinter.sol +++ b/contracts/implementations/MultipleMinter.sol @@ -31,14 +31,12 @@ contract MultipleMinter is /** * @notice Mints and pairs a vehicle and a synthetic device through a metatransaction - * @dev DEPRECATED: This function will be removed in a future release - * Please use the version with storageNodeId parameter instead + * @dev Device definitions are tracked off-chain via per-vehicle documents * @dev The vehicle owner signs a typed structured (EIP-712) message in advance which is verified during execution. * Caller must have the CONNECTION_MINT_SD_PERMISSION for the specified connection or be the connection ID owner * @param data A MintVehicleAndSdInput struct containing: * - manufacturerNode: Parent manufacturer node ID of the vehicle * - owner: The new nodes owner address - * - attrInfoPairsVehicle: List of attribute-info pairs to be added to the vehicle * - connectionId: Parent connection ID of the synthetic device * - vehicleOwnerSig: Vehicle owner's EIP-712 signature * - syntheticDeviceSig: Synthetic device's EIP-712 signature @@ -107,19 +105,8 @@ contract MultipleMinter is data.owner ); - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenIdVehicle, - data.attrInfoPairsVehicle - ); - message = keccak256( - abi.encode( - MINT_VEHICLE_TYPEHASH, - data.manufacturerNode, - data.owner, - attributesHash, - infosHash - ) + abi.encode(MINT_VEHICLE_TYPEHASH, data.manufacturerNode, data.owner) ); if ( @@ -174,7 +161,6 @@ contract MultipleMinter is * - manufacturerNode: Parent manufacturer node ID of the vehicle * - owner: The new nodes owner address * - storageNodeId: ID of the storage node to associate with the vehicle - * - attrInfoPairsVehicle: List of attribute-info pairs to be added to the vehicle * - connectionId: Parent connection ID of the synthetic device * - vehicleOwnerSig: Vehicle owner's EIP-712 signature * - syntheticDeviceSig: Synthetic device's EIP-712 signature @@ -242,19 +228,8 @@ contract MultipleMinter is data.owner ); - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenIdVehicle, - data.attrInfoPairsVehicle - ); - message = keccak256( - abi.encode( - MINT_VEHICLE_TYPEHASH, - data.manufacturerNode, - data.owner, - attributesHash, - infosHash - ) + abi.encode(MINT_VEHICLE_TYPEHASH, data.manufacturerNode, data.owner) ); if ( @@ -303,304 +278,13 @@ contract MultipleMinter is } /** - * @notice Mints and pairs a vehicle with a Device Definition ID and a synthetic device through a metatransaction - * @dev DEPRECATED: This function will be removed in a future release - * Please use the version with storageNodeId parameter instead - * @dev The vehicle owner signs a typed structured (EIP-712) message in advance which is verified during execution. - * Caller must have the CONNECTION_MINT_SD_PERMISSION for the specified connection or be the connection ID owner. - * @param data A MintVehicleAndSdWithDdInput struct containing: - * - manufacturerNode: Parent manufacturer node ID of the vehicle - * - owner: The new nodes owner address - * - deviceDefinitionId: The Device Definition ID to associate with the vehicle - * - attrInfoPairsVehicle: List of attribute-info pairs to be added to the vehicle - * - connectionId: Parent connection ID of the synthetic device - * - vehicleOwnerSig: Vehicle owner's EIP-712 signature - * - syntheticDeviceSig: Synthetic device's EIP-712 signature - * - syntheticDeviceAddr: Address associated with the synthetic device - * - attrInfoPairsDevice: List of attribute-info pairs to be added to the synthetic device - * Emits VehicleNodeMintedWithDeviceDefinition and SyntheticDeviceNodeMinted events on success. - * Reverts if connection or manufacturer node doesn't exist, caller lacks permission, - * device is already registered, or signatures are invalid. - */ - function mintVehicleAndSdWithDeviceDefinitionSign( - MintVehicleAndSdWithDdInput calldata data - ) external { - MapperStorage.Storage storage ms = MapperStorage.getStorage(); - VehicleStorage.Storage storage vs = VehicleStorage.getStorage(); - SyntheticDeviceStorage.Storage storage sds = SyntheticDeviceStorage - .getStorage(); - SharedStorage.Storage storage sharedStorage = SharedStorage - .getStorage(); - - address vehicleIdProxyAddress = vs.idProxyAddress; - address sdIdProxyAddress = sds.idProxyAddress; - - if ( - !INFT(SharedStorage.getStorage().connectionsManager).exists( - data.connectionId - ) - ) revert InvalidParentNode(data.connectionId); - if ( - !INFT(ManufacturerStorage.getStorage().idProxyAddress).exists( - data.manufacturerNode - ) - ) revert InvalidParentNode(data.manufacturerNode); - if ( - !ISacd(sharedStorage.sacd).hasPermission( - sharedStorage.connectionsManager, - data.connectionId, - msg.sender, - CONNECTION_MINT_SD_PERMISSION - ) - ) revert Errors.Unauthorized(msg.sender); - if (sds.deviceAddressToNodeId[data.syntheticDeviceAddr] != 0) - revert DeviceAlreadyRegistered(data.syntheticDeviceAddr); - - bytes32 message = keccak256( - abi.encode(MINT_VEHICLE_SD_TYPEHASH, data.connectionId) - ); - - if ( - !Eip712CheckerInternal._verifySignature( - data.syntheticDeviceAddr, - message, - data.syntheticDeviceSig - ) - ) revert InvalidSdSignature(); - - // ----- START Vehicle mint ----- - uint256 newTokenIdVehicle = INFT(vehicleIdProxyAddress).safeMint( - data.owner - ); - - emit VehicleNodeMintedWithDeviceDefinition( - data.manufacturerNode, - newTokenIdVehicle, - data.owner, - data.deviceDefinitionId - ); - - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenIdVehicle, - data.attrInfoPairsVehicle - ); - - message = keccak256( - abi.encode( - MINT_VEHICLE_WITH_DD_TYPEHASH, - data.manufacturerNode, - data.owner, - keccak256(bytes(data.deviceDefinitionId)), - attributesHash, - infosHash - ) - ); - - if ( - !Eip712CheckerInternal._verifySignature( - data.owner, - message, - data.vehicleOwnerSig - ) - ) revert InvalidOwnerSignature(); - // ----- END Vehicle mint ----- - - // ----- START Synthetic Device mint and attributes ----- - uint256 newTokenIdDevice = INFT(sdIdProxyAddress).safeMint(data.owner); - - emit SyntheticDeviceNodeMinted( - data.connectionId, - newTokenIdDevice, - newTokenIdVehicle, - data.syntheticDeviceAddr, - data.owner - ); - - if (data.attrInfoPairsDevice.length > 0) - _setInfos(newTokenIdDevice, data.attrInfoPairsDevice); - // ----- END Synthetic Device mint and attributes ----- - - // ----- Internal contract state change ----- - NodesStorage - .getStorage() - .nodes[vehicleIdProxyAddress][newTokenIdVehicle].parentNode = data - .manufacturerNode; - vs.vehicleIdToDeviceDefinitionId[newTokenIdVehicle] = data - .deviceDefinitionId; - - NodesStorage - .getStorage() - .nodes[sdIdProxyAddress][newTokenIdDevice].parentNode = data - .connectionId; - - ms.nodeLinks[vehicleIdProxyAddress][sdIdProxyAddress][ - newTokenIdVehicle - ] = newTokenIdDevice; - ms.nodeLinks[sdIdProxyAddress][vehicleIdProxyAddress][ - newTokenIdDevice - ] = newTokenIdVehicle; - - sds.deviceAddressToNodeId[data.syntheticDeviceAddr] = newTokenIdDevice; - sds.nodeIdToDeviceAddress[newTokenIdDevice] = data.syntheticDeviceAddr; - - ChargingInternal._chargeDcx(msg.sender, MINT_VEHICLE_OPERATION); - } - - /** - * @notice Mints and pairs a vehicle with a Device Definition ID and a synthetic device through a metatransaction + * @notice Mints and pairs a vehicle and a synthetic device, and sets permissions with SACD through a metatransaction + * @dev Device definitions are tracked off-chain via per-vehicle documents * @dev The vehicle owner signs a typed structured (EIP-712) message in advance which is verified during execution. * Caller must have the CONNECTION_MINT_SD_PERMISSION for the specified connection or be the connection ID owner. - * @param data A MintVehicleAndSdWithDdInputWithSnId struct containing: - * - manufacturerNode: Parent manufacturer node ID of the vehicle - * - owner: The new nodes owner address - * - storageNodeId: ID of the storage node to associate with the vehicle - * - deviceDefinitionId: The Device Definition ID to associate with the vehicle - * - attrInfoPairsVehicle: List of attribute-info pairs to be added to the vehicle - * - connectionId: Parent connection ID of the synthetic device - * - vehicleOwnerSig: Vehicle owner's EIP-712 signature - * - syntheticDeviceSig: Synthetic device's EIP-712 signature - * - syntheticDeviceAddr: Address associated with the synthetic device - * - attrInfoPairsDevice: List of attribute-info pairs to be added to the synthetic device - * Emits VehicleNodeMintedWithDeviceDefinition and SyntheticDeviceNodeMinted events on success. - * Reverts if connection or manufacturer node doesn't exist, caller lacks permission, - * device is already registered, storage node is invalid, or signatures are invalid. - */ - function mintVehicleAndSdWithDeviceDefinitionSign( - MintVehicleAndSdWithDdInputWithSnId calldata data - ) external { - MapperStorage.Storage storage ms = MapperStorage.getStorage(); - VehicleStorage.Storage storage vs = VehicleStorage.getStorage(); - SyntheticDeviceStorage.Storage storage sds = SyntheticDeviceStorage - .getStorage(); - SharedStorage.Storage storage sharedStorage = SharedStorage - .getStorage(); - - address vehicleIdProxyAddress = vs.idProxyAddress; - address sdIdProxyAddress = sds.idProxyAddress; - - if ( - !INFT(SharedStorage.getStorage().connectionsManager).exists( - data.connectionId - ) - ) revert InvalidParentNode(data.connectionId); - if ( - !INFT(ManufacturerStorage.getStorage().idProxyAddress).exists( - data.manufacturerNode - ) - ) revert InvalidParentNode(data.manufacturerNode); - if ( - !ISacd(sharedStorage.sacd).hasPermission( - sharedStorage.connectionsManager, - data.connectionId, - msg.sender, - CONNECTION_MINT_SD_PERMISSION - ) - ) revert Errors.Unauthorized(msg.sender); - if (sds.deviceAddressToNodeId[data.syntheticDeviceAddr] != 0) - revert DeviceAlreadyRegistered(data.syntheticDeviceAddr); - - bytes32 message = keccak256( - abi.encode(MINT_VEHICLE_SD_TYPEHASH, data.connectionId) - ); - - if ( - !Eip712CheckerInternal._verifySignature( - data.syntheticDeviceAddr, - message, - data.syntheticDeviceSig - ) - ) revert InvalidSdSignature(); - - // ----- START Vehicle mint ----- - uint256 newTokenIdVehicle = INFT(vehicleIdProxyAddress).safeMint( - data.owner - ); - - emit VehicleNodeMintedWithDeviceDefinition( - data.manufacturerNode, - newTokenIdVehicle, - data.owner, - data.deviceDefinitionId - ); - - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenIdVehicle, - data.attrInfoPairsVehicle - ); - - message = keccak256( - abi.encode( - MINT_VEHICLE_WITH_DD_TYPEHASH, - data.manufacturerNode, - data.owner, - keccak256(bytes(data.deviceDefinitionId)), - attributesHash, - infosHash - ) - ); - - if ( - !Eip712CheckerInternal._verifySignature( - data.owner, - message, - data.vehicleOwnerSig - ) - ) revert InvalidOwnerSignature(); - // ----- END Vehicle mint ----- - - // ----- START Synthetic Device mint and attributes ----- - uint256 newTokenIdDevice = INFT(sdIdProxyAddress).safeMint(data.owner); - - emit SyntheticDeviceNodeMinted( - data.connectionId, - newTokenIdDevice, - newTokenIdVehicle, - data.syntheticDeviceAddr, - data.owner - ); - - if (data.attrInfoPairsDevice.length > 0) - _setInfos(newTokenIdDevice, data.attrInfoPairsDevice); - // ----- END Synthetic Device mint and attributes ----- - - // ----- Internal contract state change ----- - NodesStorage - .getStorage() - .nodes[vehicleIdProxyAddress][newTokenIdVehicle].parentNode = data - .manufacturerNode; - vs.vehicleIdToDeviceDefinitionId[newTokenIdVehicle] = data - .deviceDefinitionId; - - NodesStorage - .getStorage() - .nodes[sdIdProxyAddress][newTokenIdDevice].parentNode = data - .connectionId; - - ms.nodeLinks[vehicleIdProxyAddress][sdIdProxyAddress][ - newTokenIdVehicle - ] = newTokenIdDevice; - ms.nodeLinks[sdIdProxyAddress][vehicleIdProxyAddress][ - newTokenIdDevice - ] = newTokenIdVehicle; - - sds.deviceAddressToNodeId[data.syntheticDeviceAddr] = newTokenIdDevice; - sds.nodeIdToDeviceAddress[newTokenIdDevice] = data.syntheticDeviceAddr; - - ChargingInternal._chargeDcx(msg.sender, MINT_VEHICLE_OPERATION); - _setStorageNodeIdForVehicleId(newTokenIdVehicle, data.storageNodeId); - } - - /** - * @notice Mints and pairs a vehicle (with a Device Definition Id) and a synthetic device, and sets permissions with SACD through a metatransaction - * @dev DEPRECATED: This function will be removed in a future release - * Please use the version with storageNodeId parameter instead - * @dev The vehicle owner signs a typed structured (EIP-712) message in advance which is verified during execution. - * Caller must have the CONNECTION_MINT_SD_PERMISSION for the specified connection or be the connection ID owner. - * @param data A MintVehicleAndSdWithDdInput struct containing: + * @param data A MintVehicleAndSdInput struct containing: * - manufacturerNode: Parent manufacturer node ID of the vehicle * - owner: The new nodes owner address - * - deviceDefinitionId: The Device Definition ID to associate with the vehicle - * - attrInfoPairsVehicle: List of attribute-info pairs to be added to the vehicle * - connectionId: Parent connection ID of the synthetic device * - vehicleOwnerSig: Vehicle owner's EIP-712 signature * - syntheticDeviceSig: Synthetic device's EIP-712 signature @@ -611,21 +295,21 @@ contract MultipleMinter is * - permissions: The uint256 that represents the byte array of permissions * - expiration: Expiration timestamp of the permissions * - source: The URI source associated with the permissions - * Emits VehicleNodeMintedWithDeviceDefinition and SyntheticDeviceNodeMinted events on success. * Reverts if connection or manufacturer node doesn't exist, caller lacks permission, * device is already registered, or signatures are invalid. */ - function mintVehicleAndSdWithDeviceDefinitionSignAndSacd( - MintVehicleAndSdWithDdInput calldata data, + function mintVehicleAndSdSignAndSacd( + MintVehicleAndSdInput calldata data, SacdInput calldata sacdInput ) external { - VehicleStorage.Storage storage vs = VehicleStorage.getStorage(); SyntheticDeviceStorage.Storage storage sds = SyntheticDeviceStorage .getStorage(); SharedStorage.Storage storage sharedStorage = SharedStorage .getStorage(); - address vehicleIdProxyAddress = vs.idProxyAddress; + address vehicleIdProxyAddress = VehicleStorage + .getStorage() + .idProxyAddress; address sdIdProxyAddress = sds.idProxyAddress; if ( @@ -666,27 +350,14 @@ contract MultipleMinter is data.owner ); - emit VehicleNodeMintedWithDeviceDefinition( + emit VehicleNodeMinted( data.manufacturerNode, newTokenIdVehicle, - data.owner, - data.deviceDefinitionId - ); - - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenIdVehicle, - data.attrInfoPairsVehicle + data.owner ); message = keccak256( - abi.encode( - MINT_VEHICLE_WITH_DD_TYPEHASH, - data.manufacturerNode, - data.owner, - keccak256(bytes(data.deviceDefinitionId)), - attributesHash, - infosHash - ) + abi.encode(MINT_VEHICLE_TYPEHASH, data.manufacturerNode, data.owner) ); if ( @@ -718,8 +389,6 @@ contract MultipleMinter is .getStorage() .nodes[vehicleIdProxyAddress][newTokenIdVehicle].parentNode = data .manufacturerNode; - vs.vehicleIdToDeviceDefinitionId[newTokenIdVehicle] = data - .deviceDefinitionId; NodesStorage .getStorage() @@ -742,15 +411,14 @@ contract MultipleMinter is } /** - * @notice Mints and pairs a vehicle (with a Device Definition Id) and a synthetic device, and sets permissions with SACD through a metatransaction + * @notice Mints and pairs a vehicle and a synthetic device, and sets permissions with SACD through a metatransaction + * @dev Device definitions are tracked off-chain via per-vehicle documents * @dev The vehicle owner signs a typed structured (EIP-712) message in advance which is verified during execution. * Caller must have the CONNECTION_MINT_SD_PERMISSION for the specified connection or be the connection ID owner. - * @param data A MintVehicleAndSdWithDdInputWithSnId struct containing: + * @param data A MintVehicleAndSdInputWithSnId struct containing: * - manufacturerNode: Parent manufacturer node ID of the vehicle * - owner: The new nodes owner address * - storageNodeId: ID of the storage node to associate with the vehicle - * - deviceDefinitionId: The Device Definition ID to associate with the vehicle - * - attrInfoPairsVehicle: List of attribute-info pairs to be added to the vehicle * - connectionId: Parent connection ID of the synthetic device * - vehicleOwnerSig: Vehicle owner's EIP-712 signature * - syntheticDeviceSig: Synthetic device's EIP-712 signature @@ -761,21 +429,21 @@ contract MultipleMinter is * - permissions: The uint256 that represents the byte array of permissions * - expiration: Expiration timestamp of the permissions * - source: The URI source associated with the permissions - * Emits VehicleNodeMintedWithDeviceDefinition and SyntheticDeviceNodeMinted events on success. * Reverts if connection or manufacturer node doesn't exist, caller lacks permission, * device is already registered, storage node is invalid, or signatures are invalid. */ - function mintVehicleAndSdWithDeviceDefinitionSignAndSacd( - MintVehicleAndSdWithDdInputWithSnId calldata data, + function mintVehicleAndSdSignAndSacd( + MintVehicleAndSdInputWithSnId calldata data, SacdInput calldata sacdInput ) external { - VehicleStorage.Storage storage vs = VehicleStorage.getStorage(); SyntheticDeviceStorage.Storage storage sds = SyntheticDeviceStorage .getStorage(); SharedStorage.Storage storage sharedStorage = SharedStorage .getStorage(); - address vehicleIdProxyAddress = vs.idProxyAddress; + address vehicleIdProxyAddress = VehicleStorage + .getStorage() + .idProxyAddress; address sdIdProxyAddress = sds.idProxyAddress; if ( @@ -816,27 +484,14 @@ contract MultipleMinter is data.owner ); - emit VehicleNodeMintedWithDeviceDefinition( + emit VehicleNodeMinted( data.manufacturerNode, newTokenIdVehicle, - data.owner, - data.deviceDefinitionId - ); - - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenIdVehicle, - data.attrInfoPairsVehicle + data.owner ); message = keccak256( - abi.encode( - MINT_VEHICLE_WITH_DD_TYPEHASH, - data.manufacturerNode, - data.owner, - keccak256(bytes(data.deviceDefinitionId)), - attributesHash, - infosHash - ) + abi.encode(MINT_VEHICLE_TYPEHASH, data.manufacturerNode, data.owner) ); if ( @@ -868,8 +523,6 @@ contract MultipleMinter is .getStorage() .nodes[vehicleIdProxyAddress][newTokenIdVehicle].parentNode = data .manufacturerNode; - vs.vehicleIdToDeviceDefinitionId[newTokenIdVehicle] = data - .deviceDefinitionId; NodesStorage .getStorage() @@ -893,29 +546,26 @@ contract MultipleMinter is } /** - * @notice Mints and pairs multiple vehicles (with Device Definition Ids) and synthetic devices in batch - * @dev DEPRECATED: This function will be removed in a future release - * Please use the version with storageNodeId parameter instead + * @notice Mints and pairs multiple vehicles and synthetic devices in batch + * @dev Device definitions are tracked off-chain via per-vehicle documents * @dev Processes multiple vehicle and synthetic device pairs in a single transaction. - * For each pair, verifies signatures, mints tokens, sets attributes, and establishes relationships. - * Caller must have the CONNECTION_MINT_SD_PERMISSION for each specified connection or be the connection ID owner. - * @param data An array of MintVehicleAndSdWithDdInputBatch structs, each containing: + * For each pair, verifies signatures, mints tokens, sets attributes, and establishes relationships. + * Caller must have the CONNECTION_MINT_SD_PERMISSION for each specified connection or be the connection ID owner. + * @param data An array of MintVehicleAndSdInputBatch structs, each containing: * - manufacturerNode: Parent manufacturer node ID of the vehicle * - owner: The new nodes owner address - * - deviceDefinitionId: The Device Definition ID to associate with the vehicle - * - attrInfoPairsVehicle: List of attribute-info pairs to be added to the vehicle * - connectionId: Parent connection ID of the synthetic device * - vehicleOwnerSig: Vehicle owner's EIP-712 signature * - syntheticDeviceSig: Synthetic device's EIP-712 signature * - syntheticDeviceAddr: Address associated with the synthetic device * - attrInfoPairsDevice: List of attribute-info pairs to be added to the synthetic device * - sacdInput: SACD input args for setting permissions on the vehicle - * Emits VehicleNodeMintedWithDeviceDefinition and SyntheticDeviceNodeMinted events for each pair. - * Reverts if any connection or manufacturer node doesn't exist, caller lacks permission, - * any device is already registered, or any signature is invalid. + * @dev Emits VehicleNodeMinted and SyntheticDeviceNodeMinted events for each pair. + * Reverts if any connection or manufacturer node doesn't exist, caller lacks permission, + * any device is already registered, or any signature is invalid. */ - function mintVehicleAndSdWithDeviceDefinitionSignBatch( - MintVehicleAndSdWithDdInputBatch[] calldata data + function mintVehicleAndSdSignBatch( + MintVehicleAndSdInputBatch[] calldata data ) external { SyntheticDeviceStorage.Storage storage sds = SyntheticDeviceStorage .getStorage(); @@ -966,26 +616,17 @@ contract MultipleMinter is data[i].owner ); - emit VehicleNodeMintedWithDeviceDefinition( + emit VehicleNodeMinted( data[i].manufacturerNode, newTokenIdVehicle, - data[i].owner, - data[i].deviceDefinitionId - ); - - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenIdVehicle, - data[i].attrInfoPairsVehicle + data[i].owner ); message = keccak256( abi.encode( - MINT_VEHICLE_WITH_DD_TYPEHASH, + MINT_VEHICLE_TYPEHASH, data[i].manufacturerNode, - data[i].owner, - keccak256(bytes(data[i].deviceDefinitionId)), - attributesHash, - infosHash + data[i].owner ) ); @@ -1021,9 +662,6 @@ contract MultipleMinter is .nodes[vehicleIdProxyAddress][newTokenIdVehicle].parentNode = data[ i ].manufacturerNode; - VehicleStorage.getStorage().vehicleIdToDeviceDefinitionId[ - newTokenIdVehicle - ] = data[i].deviceDefinitionId; NodesStorage .getStorage() @@ -1053,28 +691,27 @@ contract MultipleMinter is } /** - * @notice Mints and pairs multiple vehicles (with Device Definition Ids) and synthetic devices in batch + * @notice Mints and pairs multiple vehicles and synthetic devices in batch + * @dev Device definitions are tracked off-chain via per-vehicle documents * @dev Processes multiple vehicle and synthetic device pairs in a single transaction. * For each pair, verifies signatures, mints tokens, sets attributes, and establishes relationships. * Caller must have the CONNECTION_MINT_SD_PERMISSION for each specified connection or be the connection ID owner. - * @param data An array of MintVehicleAndSdWithDdInputWithSnIdBatch structs, each containing: + * @param data An array of MintVehicleAndSdInputWithSnIdBatch structs, each containing: * - manufacturerNode: Parent manufacturer node ID of the vehicle * - owner: The new nodes owner address * - storageNodeId: ID of the storage node to associate with the vehicle - * - deviceDefinitionId: The Device Definition ID to associate with the vehicle - * - attrInfoPairsVehicle: List of attribute-info pairs to be added to the vehicle * - connectionId: Parent connection ID of the synthetic device * - vehicleOwnerSig: Vehicle owner's EIP-712 signature * - syntheticDeviceSig: Synthetic device's EIP-712 signature * - syntheticDeviceAddr: Address associated with the synthetic device * - attrInfoPairsDevice: List of attribute-info pairs to be added to the synthetic device * - sacdInput: SACD input args for setting permissions on the vehicle - * @dev Emits VehicleNodeMintedWithDeviceDefinition and SyntheticDeviceNodeMinted events for each pair. + * @dev Emits VehicleNodeMinted and SyntheticDeviceNodeMinted events for each pair. * Reverts if any connection or manufacturer node doesn't exist, caller lacks permission, * any device is already registered, any storage node is invalid, or any signature is invalid. */ - function mintVehicleAndSdWithDeviceDefinitionSignBatch( - MintVehicleAndSdWithDdInputWithSnIdBatch[] calldata data + function mintVehicleAndSdSignBatch( + MintVehicleAndSdInputWithSnIdBatch[] calldata data ) external { SyntheticDeviceStorage.Storage storage sds = SyntheticDeviceStorage .getStorage(); @@ -1125,26 +762,17 @@ contract MultipleMinter is data[i].owner ); - emit VehicleNodeMintedWithDeviceDefinition( + emit VehicleNodeMinted( data[i].manufacturerNode, newTokenIdVehicle, - data[i].owner, - data[i].deviceDefinitionId - ); - - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenIdVehicle, - data[i].attrInfoPairsVehicle + data[i].owner ); message = keccak256( abi.encode( - MINT_VEHICLE_WITH_DD_TYPEHASH, + MINT_VEHICLE_TYPEHASH, data[i].manufacturerNode, - data[i].owner, - keccak256(bytes(data[i].deviceDefinitionId)), - attributesHash, - infosHash + data[i].owner ) ); @@ -1180,9 +808,6 @@ contract MultipleMinter is .nodes[vehicleIdProxyAddress][newTokenIdVehicle].parentNode = data[ i ].manufacturerNode; - VehicleStorage.getStorage().vehicleIdToDeviceDefinitionId[ - newTokenIdVehicle - ] = data[i].deviceDefinitionId; NodesStorage .getStorage() diff --git a/contracts/implementations/nodes/Vehicle.sol b/contracts/implementations/nodes/Vehicle.sol index e2e01511..65b3a89d 100644 --- a/contracts/implementations/nodes/Vehicle.sol +++ b/contracts/implementations/nodes/Vehicle.sol @@ -14,7 +14,7 @@ import "../../libraries/nodes/VehicleStorage.sol"; import "../../libraries/nodes/SyntheticDeviceStorage.sol"; import {MINT_VEHICLE_OPERATION} from "../../shared/Operations.sol"; -import {ADMIN_ROLE, MINT_VEHICLE_ROLE, BURN_VEHICLE_ROLE, SET_VEHICLE_INFO_ROLE} from "../../shared/Roles.sol"; +import {ADMIN_ROLE, MINT_VEHICLE_ROLE, BURN_VEHICLE_ROLE} from "../../shared/Roles.sol"; import "@solidstate/contracts/access/access_control/AccessControlInternal.sol"; @@ -31,7 +31,6 @@ contract Vehicle is keccak256("BurnVehicleSign(uint256 vehicleNode)"); event VehicleIdProxySet(address indexed proxy); - event VehicleAttributeAdded(string attribute); event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner); modifier onlyNftProxy() { @@ -56,43 +55,18 @@ contract Vehicle is emit VehicleIdProxySet(addr); } - /** - * @notice Adds an attribute to the whielist - * @dev Only an admin can add a new attribute - * @param attribute The attribute to be added - */ - function addVehicleAttribute( - string calldata attribute - ) external onlyRole(ADMIN_ROLE) { - if ( - !AttributeSet.add( - VehicleStorage.getStorage().whitelistedAttributes, - attribute - ) - ) revert AttributeExists(attribute); - - emit VehicleAttributeAdded(attribute); - } - // ***** Interaction with nodes *****// /** - * @notice Function to mint a vehicle with a Device Definition Id - * @dev DEPRECATED: This function will be removed in a future release - * Please use the version with storageNodeId parameter instead + * @notice Mints a vehicle + * @dev Device definitions and vehicle attributes are tracked off-chain via per-vehicle documents * @param manufacturerNode Parent manufacturer node id * @param owner The address of the new owner - * @param deviceDefinitionId The Device Definition Id - * @param attrInfo List of attribute-info pairs to be added */ - function mintVehicleWithDeviceDefinition( - uint256 manufacturerNode, - address owner, - string calldata deviceDefinitionId, - AttributeInfoPair[] calldata attrInfo - ) external { - VehicleStorage.Storage storage vs = VehicleStorage.getStorage(); - address vehicleIdProxyAddress = vs.idProxyAddress; + function mintVehicle(uint256 manufacturerNode, address owner) external { + address vehicleIdProxyAddress = VehicleStorage + .getStorage() + .idProxyAddress; if ( !INFT(ManufacturerStorage.getStorage().idProxyAddress).exists( @@ -105,39 +79,27 @@ contract Vehicle is NodesStorage .getStorage() .nodes[vehicleIdProxyAddress][newTokenId].parentNode = manufacturerNode; - vs.vehicleIdToDeviceDefinitionId[newTokenId] = deviceDefinitionId; - - emit VehicleNodeMintedWithDeviceDefinition( - manufacturerNode, - newTokenId, - owner, - deviceDefinitionId - ); - if (attrInfo.length > 0) _setInfos(newTokenId, attrInfo); + emit VehicleNodeMinted(manufacturerNode, newTokenId, owner); ChargingInternal._chargeDcx(msg.sender, MINT_VEHICLE_OPERATION); } /** - * @notice Function to mint a vehicle with a Device Definition Id and associate it with a Storage Node Id - * @dev This function creates a new vehicle node, associates it with a manufacturer, - * assigns a device definition ID, and links it to a Storage Node Id + * @notice Mints a vehicle and associates it with a Storage Node Id + * @dev Device definitions and vehicle attributes are tracked off-chain via per-vehicle documents * @param manufacturerNode The ID of the parent manufacturer node * @param owner The address that will own the newly minted vehicle * @param storageNodeId The ID of the storage node to associate with this vehicle - * @param deviceDefinitionId The unique identifier for the device definition - * @param attrInfo Array of attribute-info pairs to be added to the vehicle */ - function mintVehicleWithDeviceDefinition( + function mintVehicle( uint256 manufacturerNode, address owner, - uint256 storageNodeId, - string calldata deviceDefinitionId, - AttributeInfoPair[] calldata attrInfo + uint256 storageNodeId ) external { - VehicleStorage.Storage storage vs = VehicleStorage.getStorage(); - address vehicleIdProxyAddress = vs.idProxyAddress; + address vehicleIdProxyAddress = VehicleStorage + .getStorage() + .idProxyAddress; if ( !INFT(ManufacturerStorage.getStorage().idProxyAddress).exists( @@ -150,44 +112,32 @@ contract Vehicle is NodesStorage .getStorage() .nodes[vehicleIdProxyAddress][newTokenId].parentNode = manufacturerNode; - vs.vehicleIdToDeviceDefinitionId[newTokenId] = deviceDefinitionId; - - emit VehicleNodeMintedWithDeviceDefinition( - manufacturerNode, - newTokenId, - owner, - deviceDefinitionId - ); - if (attrInfo.length > 0) _setInfos(newTokenId, attrInfo); + emit VehicleNodeMinted(manufacturerNode, newTokenId, owner); ChargingInternal._chargeDcx(msg.sender, MINT_VEHICLE_OPERATION); _setStorageNodeIdForVehicleId(newTokenId, storageNodeId); } /** - * @notice Function to mint a vehicle with a Device Definition Id and set permissions with SACD - * @dev DEPRECATED: This function will be removed in a future release - * Please use the version with storageNodeId parameter instead + * @notice Mints a vehicle and sets permissions with SACD + * @dev Device definitions and vehicle attributes are tracked off-chain via per-vehicle documents * @param manufacturerNode Parent manufacturer node id * @param owner The address of the new owner - * @param deviceDefinitionId The Device Definition Id - * @param attrInfo List of attribute-info pairs to be added * @param sacdInput SACD input args * grantee -> The address to receive the permissions * permissions -> The uint256 that represents the byte array of permissions * expiration -> Expiration of the permissions * source -> The URI source associated with the permissions */ - function mintVehicleWithDeviceDefinition( + function mintVehicle( uint256 manufacturerNode, address owner, - string calldata deviceDefinitionId, - AttributeInfoPair[] calldata attrInfo, SacdInput calldata sacdInput ) external { - VehicleStorage.Storage storage vs = VehicleStorage.getStorage(); - address vehicleIdProxyAddress = vs.idProxyAddress; + address vehicleIdProxyAddress = VehicleStorage + .getStorage() + .idProxyAddress; if ( !INFT(ManufacturerStorage.getStorage().idProxyAddress).exists( @@ -200,16 +150,8 @@ contract Vehicle is NodesStorage .getStorage() .nodes[vehicleIdProxyAddress][newTokenId].parentNode = manufacturerNode; - vs.vehicleIdToDeviceDefinitionId[newTokenId] = deviceDefinitionId; - emit VehicleNodeMintedWithDeviceDefinition( - manufacturerNode, - newTokenId, - owner, - deviceDefinitionId - ); - - if (attrInfo.length > 0) _setInfos(newTokenId, attrInfo); + emit VehicleNodeMinted(manufacturerNode, newTokenId, owner); ChargingInternal._chargeDcx(msg.sender, MINT_VEHICLE_OPERATION); @@ -217,30 +159,26 @@ contract Vehicle is } /** - * @notice Function to mint a vehicle with a Device Definition Id, associate it with a Storage Node Id, and set permissions with SACD - * @dev This function creates a new vehicle node, associates it with a manufacturer, - * assigns a device definition ID, links it to a Storage Node Id, and sets SACD permissions + * @notice Mints a vehicle, associates it with a Storage Node Id, and sets permissions with SACD + * @dev Device definitions and vehicle attributes are tracked off-chain via per-vehicle documents * @param manufacturerNode The ID of the parent manufacturer node * @param owner The address that will own the newly minted vehicle * @param storageNodeId The ID of the storage node to associate with this vehicle - * @param deviceDefinitionId The unique identifier for the device definition - * @param attrInfo Array of attribute-info pairs to be added to the vehicle * @param sacdInput SACD input args containing: * - grantee: The address to receive the permissions * - permissions: The uint256 that represents the byte array of permissions * - expiration: Expiration of the permissions * - source: The URI source associated with the permissions */ - function mintVehicleWithDeviceDefinition( + function mintVehicle( uint256 manufacturerNode, address owner, uint256 storageNodeId, - string calldata deviceDefinitionId, - AttributeInfoPair[] calldata attrInfo, SacdInput calldata sacdInput ) external { - VehicleStorage.Storage storage vs = VehicleStorage.getStorage(); - address vehicleIdProxyAddress = vs.idProxyAddress; + address vehicleIdProxyAddress = VehicleStorage + .getStorage() + .idProxyAddress; if ( !INFT(ManufacturerStorage.getStorage().idProxyAddress).exists( @@ -253,16 +191,8 @@ contract Vehicle is NodesStorage .getStorage() .nodes[vehicleIdProxyAddress][newTokenId].parentNode = manufacturerNode; - vs.vehicleIdToDeviceDefinitionId[newTokenId] = deviceDefinitionId; - - emit VehicleNodeMintedWithDeviceDefinition( - manufacturerNode, - newTokenId, - owner, - deviceDefinitionId - ); - if (attrInfo.length > 0) _setInfos(newTokenId, attrInfo); + emit VehicleNodeMinted(manufacturerNode, newTokenId, owner); ChargingInternal._chargeDcx(msg.sender, MINT_VEHICLE_OPERATION); @@ -271,21 +201,16 @@ contract Vehicle is } /** - * @notice Mint a vehicle with a Device Definition Id through a metatransaction - * @dev DEPRECATED: This function will be removed in a future release - * Please use the version with storageNodeId parameter instead + * @notice Mint a vehicle through a metatransaction + * @dev Device definitions and vehicle attributes are tracked off-chain via per-vehicle documents * @dev Caller must have the mint vehicle role * @param manufacturerNode Parent manufacturer node id * @param owner The address of the new owner - * @param deviceDefinitionId The Device Definition Id - * @param attrInfo attrInfo * @param signature User's signature hash */ - function mintVehicleWithDeviceDefinitionSign( + function mintVehicleSign( uint256 manufacturerNode, address owner, - string calldata deviceDefinitionId, - AttributeInfoPair[] calldata attrInfo, bytes calldata signature ) external onlyRole(MINT_VEHICLE_ROLE) { address vehicleIdProxyAddress = VehicleStorage @@ -303,31 +228,11 @@ contract Vehicle is NodesStorage .getStorage() .nodes[vehicleIdProxyAddress][newTokenId].parentNode = manufacturerNode; - VehicleStorage.getStorage().vehicleIdToDeviceDefinitionId[ - newTokenId - ] = deviceDefinitionId; - - emit VehicleNodeMintedWithDeviceDefinition( - manufacturerNode, - newTokenId, - owner, - deviceDefinitionId - ); - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenId, - attrInfo - ); + emit VehicleNodeMinted(manufacturerNode, newTokenId, owner); bytes32 message = keccak256( - abi.encode( - MINT_VEHICLE_WITH_DD_TYPEHASH, - manufacturerNode, - owner, - keccak256(bytes(deviceDefinitionId)), - attributesHash, - infosHash - ) + abi.encode(MINT_VEHICLE_TYPEHASH, manufacturerNode, owner) ); if (!Eip712CheckerInternal._verifySignature(owner, message, signature)) @@ -337,22 +242,18 @@ contract Vehicle is } /** - * @notice Mints a vehicle with a Device Definition Id through a metatransaction and associates it with a Storage Node Id - * @dev This function creates a new vehicle node via a signed transaction, associates it with a manufacturer, - * assigns a device definition ID, and links it to a Storage Node. Caller must have the MINT_VEHICLE_ROLE + * @notice Mints a vehicle through a metatransaction and associates it with a Storage Node Id + * @dev Device definitions and vehicle attributes are tracked off-chain via per-vehicle documents + * @dev Caller must have the MINT_VEHICLE_ROLE * @param manufacturerNode The ID of the parent manufacturer node * @param owner The address that will own the newly minted vehicle * @param storageNodeId The ID of the storage node to associate with this vehicle - * @param deviceDefinitionId The unique identifier for the device definition - * @param attrInfo Array of attribute-info pairs to be added to the vehicle * @param signature The owner's EIP-712 signature authorizing the mint operation */ - function mintVehicleWithDeviceDefinitionSign( + function mintVehicleSign( uint256 manufacturerNode, address owner, uint256 storageNodeId, - string calldata deviceDefinitionId, - AttributeInfoPair[] calldata attrInfo, bytes calldata signature ) external onlyRole(MINT_VEHICLE_ROLE) { address vehicleIdProxyAddress = VehicleStorage @@ -370,31 +271,11 @@ contract Vehicle is NodesStorage .getStorage() .nodes[vehicleIdProxyAddress][newTokenId].parentNode = manufacturerNode; - VehicleStorage.getStorage().vehicleIdToDeviceDefinitionId[ - newTokenId - ] = deviceDefinitionId; - - emit VehicleNodeMintedWithDeviceDefinition( - manufacturerNode, - newTokenId, - owner, - deviceDefinitionId - ); - (bytes32 attributesHash, bytes32 infosHash) = _setInfosHash( - newTokenId, - attrInfo - ); + emit VehicleNodeMinted(manufacturerNode, newTokenId, owner); bytes32 message = keccak256( - abi.encode( - MINT_VEHICLE_WITH_DD_TYPEHASH, - manufacturerNode, - owner, - keccak256(bytes(deviceDefinitionId)), - attributesHash, - infosHash - ) + abi.encode(MINT_VEHICLE_TYPEHASH, manufacturerNode, owner) ); if (!Eip712CheckerInternal._verifySignature(owner, message, signature)) @@ -405,25 +286,7 @@ contract Vehicle is } /** - * @notice Add infos to node - * @dev attributes must be whitelisted - * @dev Caller must have the set vehicle info role - * @param tokenId Node where the info will be added - * @param attrInfo List of attribute-info pairs to be added - */ - function setVehicleInfo( - uint256 tokenId, - AttributeInfoPair[] calldata attrInfo - ) external onlyRole(SET_VEHICLE_INFO_ROLE) { - address vehicleIdProxy = VehicleStorage.getStorage().idProxyAddress; - if (!INFT(vehicleIdProxy).exists(tokenId)) - revert InvalidNode(vehicleIdProxy, tokenId); - - _setInfos(tokenId, attrInfo); - } - - /** - * @notice Burns a vehicle and reset all its attributes + * @notice Burns a vehicle * @dev Caller must have the burn vehicle role * @dev This contract has the BURNER_ROLE in the VehicleId * @param tokenId Vehicle node id @@ -456,9 +319,7 @@ contract Vehicle is revert InvalidOwnerSignature(); delete ns.nodes[vehicleIdProxyAddress][tokenId].parentNode; - delete vs.vehicleIdToDeviceDefinitionId[tokenId]; - - _resetInfos(tokenId); + delete vs._deprecated_vehicleIdToDeviceDefinitionId[tokenId]; emit VehicleNodeBurned(tokenId, owner); @@ -466,7 +327,7 @@ contract Vehicle is } /** - * @notice Validates burning of a vehicle and reset all its attributes + * @notice Validates burning of a vehicle * @dev Can only be called by the VehicleId Proxy when a token owner calls the `burn` function * @dev The actual burn takes place on the VehicleId contract * @param tokenId Vehicle node id @@ -493,82 +354,24 @@ contract Vehicle is address owner = INFT(vehicleIdProxyAddress).ownerOf(tokenId); delete ns.nodes[vehicleIdProxyAddress][tokenId].parentNode; - delete vs.vehicleIdToDeviceDefinitionId[tokenId]; + delete vs._deprecated_vehicleIdToDeviceDefinitionId[tokenId]; delete sn.vehicleIdToStorageNodeId[tokenId]; - _resetInfos(tokenId); - emit VehicleNodeBurned(tokenId, owner); } /** - * @notice Gets the Device Definition Id associated to a Vehicle Id - * @dev If there is no ddId associated, it returns an empty string + * @notice Gets the legacy on-chain Device Definition Id associated with a Vehicle Id + * @dev Device definitions are tracked off-chain for vehicles minted through `mintVehicle*`. + * This getter only returns data for vehicles minted before the off-chain migration; + * it returns an empty string for vehicles minted after. * @param vehicleId Vehicle Id */ function getDeviceDefinitionIdByVehicleId( uint256 vehicleId ) external view returns (string memory ddId) { - ddId = VehicleStorage.getStorage().vehicleIdToDeviceDefinitionId[ - vehicleId - ]; - } - - // ***** PRIVATE FUNCTIONS ***** // - - /** - * @dev Internal function to add infos to node - * @dev attributes must be whitelisted - * @param tokenId Node where the info will be added - * @param attrInfo List of attribute-info pairs to be added - */ - function _setInfos( - uint256 tokenId, - AttributeInfoPair[] calldata attrInfo - ) private { - NodesStorage.Storage storage ns = NodesStorage.getStorage(); - VehicleStorage.Storage storage s = VehicleStorage.getStorage(); - address idProxyAddress = s.idProxyAddress; - - for (uint256 i = 0; i < attrInfo.length; i++) { - if ( - !AttributeSet.exists( - s.whitelistedAttributes, - attrInfo[i].attribute - ) - ) revert AttributeNotWhitelisted(attrInfo[i].attribute); - - ns.nodes[idProxyAddress][tokenId].info[ - attrInfo[i].attribute - ] = attrInfo[i].info; - - emit VehicleAttributeSet( - tokenId, - attrInfo[i].attribute, - attrInfo[i].info - ); - } - } - - /** - * @dev Internal function to reset node infos - * It iterates over all whitelisted attributes to reset each info - * @param tokenId Node which will have the infos reset - */ - function _resetInfos(uint256 tokenId) private { - NodesStorage.Storage storage ns = NodesStorage.getStorage(); - VehicleStorage.Storage storage sds = VehicleStorage.getStorage(); - address idProxyAddress = sds.idProxyAddress; - string[] memory attributes = AttributeSet.values( - sds.whitelistedAttributes - ); - - for ( - uint256 i = 0; - i < AttributeSet.count(sds.whitelistedAttributes); - i++ - ) { - delete ns.nodes[idProxyAddress][tokenId].info[attributes[i]]; - } + ddId = VehicleStorage + .getStorage() + ._deprecated_vehicleIdToDeviceDefinitionId[vehicleId]; } } diff --git a/contracts/implementations/nodes/VehicleInternal.sol b/contracts/implementations/nodes/VehicleInternal.sol index f4ce569f..60007f11 100644 --- a/contracts/implementations/nodes/VehicleInternal.sol +++ b/contracts/implementations/nodes/VehicleInternal.sol @@ -1,84 +1,17 @@ //SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.13; -import "../../libraries/NodesStorage.sol"; -import "../../libraries/nodes/VehicleStorage.sol"; - -import "../../shared/Types.sol"; -import "../../shared/Errors.sol"; - /** * @title VehicleInternal * @notice Contract with internal Vehicle related functions used in multiple contracts */ contract VehicleInternal { - // TODO Should we change the signature to add Storage Node ID? bytes32 internal constant MINT_VEHICLE_TYPEHASH = - keccak256( - "MintVehicleSign(uint256 manufacturerNode,address owner,string[] attributes,string[] infos)" - ); - // TODO Should we change the signature to add Storage Node ID? - bytes32 internal constant MINT_VEHICLE_WITH_DD_TYPEHASH = - keccak256( - "MintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode,address owner,string deviceDefinitionId,string[] attributes,string[] infos)" - ); + keccak256("MintVehicleSign(uint256 manufacturerNode,address owner)"); - event VehicleAttributeSet(uint256 tokenId, string attribute, string info); event VehicleNodeMinted( uint256 manufacturerNode, uint256 tokenId, address owner ); - event VehicleNodeMintedWithDeviceDefinition( - uint256 indexed manufacturerId, - uint256 indexed vehicleId, - address indexed owner, - string deviceDefinitionId - ); - - /** - * @dev Internal function to add infos to node and calculate attribute and info hashes - * @dev attributes must be whitelisted - * @param tokenId Node where the info will be added - * @param attrInfo List of attribute-info pairs to be added - * @return keccak256 of the list of attributes and infos - */ - function _setInfosHash( - uint256 tokenId, - AttributeInfoPair[] calldata attrInfo - ) internal returns (bytes32, bytes32) { - NodesStorage.Storage storage ns = NodesStorage.getStorage(); - VehicleStorage.Storage storage s = VehicleStorage.getStorage(); - address idProxyAddress = s.idProxyAddress; - - bytes32[] memory attributeHashes = new bytes32[](attrInfo.length); - bytes32[] memory infoHashes = new bytes32[](attrInfo.length); - - for (uint256 i = 0; i < attrInfo.length; i++) { - if ( - !AttributeSet.exists( - s.whitelistedAttributes, - attrInfo[i].attribute - ) - ) revert AttributeNotWhitelisted(attrInfo[i].attribute); - - attributeHashes[i] = keccak256(bytes(attrInfo[i].attribute)); - infoHashes[i] = keccak256(bytes(attrInfo[i].info)); - - ns.nodes[idProxyAddress][tokenId].info[ - attrInfo[i].attribute - ] = attrInfo[i].info; - - emit VehicleAttributeSet( - tokenId, - attrInfo[i].attribute, - attrInfo[i].info - ); - } - - return ( - keccak256(abi.encodePacked(attributeHashes)), - keccak256(abi.encodePacked(infoHashes)) - ); - } } diff --git a/contracts/libraries/nodes/VehicleStorage.sol b/contracts/libraries/nodes/VehicleStorage.sol index d18b335f..faf0612e 100644 --- a/contracts/libraries/nodes/VehicleStorage.sol +++ b/contracts/libraries/nodes/VehicleStorage.sol @@ -15,10 +15,16 @@ library VehicleStorage { struct Storage { address idProxyAddress; - // Allowed node attribute - AttributeSet.Set whitelistedAttributes; - // Vehicle Id to Device Definition Id - mapping(uint256 => string) vehicleIdToDeviceDefinitionId; + // DEPRECATED: vehicle attributes (Make/Model/Year) moved off-chain alongside + // device definitions. Do not read, write, or reuse this slot — the inner + // AttributeSet mappings still hold legacy whitelist data at slots derived + // from this base position. + AttributeSet.Set _deprecated_whitelistedAttributes; + // DEPRECATED: device definitions moved off-chain. Do not read, write, or + // reuse this slot for any new field — old entries still live at + // keccak256(tokenId, baseSlot) and would alias any replacement + // mapping(uint256 => *) declared in the same position. + mapping(uint256 => string) _deprecated_vehicleIdToDeviceDefinitionId; } /* solhint-disable no-inline-assembly */ diff --git a/contracts/shared/Roles.sol b/contracts/shared/Roles.sol index a64cafa6..b41bccbc 100644 --- a/contracts/shared/Roles.sol +++ b/contracts/shared/Roles.sol @@ -26,7 +26,6 @@ bytes32 constant SET_SD_INFO_ROLE = keccak256("SET_SD_INFO_ROLE"); // Vehicle roles bytes32 constant MINT_VEHICLE_ROLE = keccak256("MINT_VEHICLE_ROLE"); bytes32 constant BURN_VEHICLE_ROLE = keccak256("BURN_VEHICLE_ROLE"); -bytes32 constant SET_VEHICLE_INFO_ROLE = keccak256("SET_VEHICLE_INFO_ROLE"); // Multiple Minter roles bytes32 constant MINT_VEHICLE_SD_ROLE = keccak256("MINT_VEHICLE_SD_ROLE"); @@ -45,7 +44,6 @@ bytes32 constant DEV_AD_BURN_ROLE = keccak256("DEV_AD_BURN_ROLE"); bytes32 constant DEV_SD_BURN_ROLE = keccak256("DEV_SD_BURN_ROLE"); bytes32 constant DEV_CHANGE_PARENT_NODE = keccak256("DEV_CHANGE_PARENT_NODE"); bytes32 constant DEV_CACHE_ENS = keccak256("DEV_CACHE_ENS"); -bytes32 constant DEV_REMOVE_ATTR = keccak256("DEV_REMOVE_ATTR"); bytes32 constant DEV_SET_DD = keccak256("DEV_SET_DD"); bytes32 constant DEV_MIGRATE_SD_PARENTS = keccak256("DEV_MIGRATE_SD_PARENTS"); bytes32 constant DEV_SET_STORAGE_NODE_ID = keccak256("DEV_SET_STORAGE_NODE_ID"); diff --git a/contracts/shared/Types.sol b/contracts/shared/Types.sol index 2f0d36a0..452f656a 100644 --- a/contracts/shared/Types.sol +++ b/contracts/shared/Types.sol @@ -41,7 +41,6 @@ struct MintSyntheticDeviceInput { struct MintVehicleAndSdInput { uint256 manufacturerNode; // Parent manufacturer node id of the vehicle address owner; // The new nodes owner - AttributeInfoPair[] attrInfoPairsVehicle; // List of attribute-info pairs to be added of the vehicle uint256 connectionId; // Parent connection id of the synthetic device bytes vehicleOwnerSig; // Vehicle owner signature hash bytes syntheticDeviceSig; // Synthetic Device's signature hash @@ -53,7 +52,6 @@ struct MintVehicleAndSdInputWithSnId { uint256 manufacturerNode; // Parent manufacturer node id of the vehicle address owner; // The new nodes owner uint256 storageNodeId; // ID of the storage node to associate with the vehicle - AttributeInfoPair[] attrInfoPairsVehicle; // List of attribute-info pairs to be added of the vehicle uint256 connectionId; // Parent connection id of the synthetic device bytes vehicleOwnerSig; // Vehicle owner signature hash bytes syntheticDeviceSig; // Synthetic Device's signature hash @@ -61,36 +59,9 @@ struct MintVehicleAndSdInputWithSnId { AttributeInfoPair[] attrInfoPairsDevice; // List of attribute-info pairs to be added of the synthetic device } -struct MintVehicleAndSdWithDdInput { +struct MintVehicleAndSdInputBatch { uint256 manufacturerNode; // Parent manufacturer node id of the vehicle address owner; // The new nodes owner - string deviceDefinitionId; // The Device Definition Id - AttributeInfoPair[] attrInfoPairsVehicle; // List of attribute-info pairs to be added of the vehicle - uint256 connectionId; // Parent connection id of the synthetic device - bytes vehicleOwnerSig; // Vehicle owner signature hash - bytes syntheticDeviceSig; // Synthetic Device's signature hash - address syntheticDeviceAddr; // Address associated with the synthetic device - AttributeInfoPair[] attrInfoPairsDevice; // List of attribute-info pairs to be added of the synthetic device -} - -struct MintVehicleAndSdWithDdInputWithSnId { - uint256 manufacturerNode; // Parent manufacturer node id of the vehicle - address owner; // The new nodes owner - string deviceDefinitionId; // The Device Definition Id - uint256 storageNodeId; // ID of the storage node to associate with the vehicle - AttributeInfoPair[] attrInfoPairsVehicle; // List of attribute-info pairs to be added of the vehicle - uint256 connectionId; // Parent connection id of the synthetic device - bytes vehicleOwnerSig; // Vehicle owner signature hash - bytes syntheticDeviceSig; // Synthetic Device's signature hash - address syntheticDeviceAddr; // Address associated with the synthetic device - AttributeInfoPair[] attrInfoPairsDevice; // List of attribute-info pairs to be added of the synthetic device -} - -struct MintVehicleAndSdWithDdInputBatch { - uint256 manufacturerNode; // Parent manufacturer node id of the vehicle - address owner; // The new nodes owner - string deviceDefinitionId; // The Device Definition Id - AttributeInfoPair[] attrInfoPairsVehicle; // List of attribute-info pairs to be added of the vehicle uint256 connectionId; // Parent connection id of the synthetic device bytes vehicleOwnerSig; // Vehicle owner signature hash bytes syntheticDeviceSig; // Synthetic Device's signature hash @@ -99,12 +70,10 @@ struct MintVehicleAndSdWithDdInputBatch { SacdInput sacdInput; } -struct MintVehicleAndSdWithDdInputWithSnIdBatch { +struct MintVehicleAndSdInputWithSnIdBatch { uint256 manufacturerNode; // Parent manufacturer node id of the vehicle address owner; // The new nodes owner - string deviceDefinitionId; // The Device Definition Id uint256 storageNodeId; // ID of the storage node to associate with the vehicle - AttributeInfoPair[] attrInfoPairsVehicle; // List of attribute-info pairs to be added of the vehicle uint256 connectionId; // Parent connection id of the synthetic device bytes vehicleOwnerSig; // Vehicle owner signature hash bytes syntheticDeviceSig; // Synthetic Device's signature hash diff --git a/package.json b/package.json index a6d9f6a8..5048a66a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "hardhat.config.ts", "scripts": { "build": "npx hardhat clean && npx hardhat compile && npx hardhat run scripts/abiGenerator.ts && npx hardhat run scripts/listSelectors.ts && npm run abigen", - "abigen": "abigen --abi abis/DimoRegistry.json --out registry.go --pkg contracts --type Registry", + "abigen": "bash scripts/generate-bindings.sh", "test": "npx hardhat test --network localhost", "test-parallel": "npx hardhat test --parallel ./test/NFTs/* ./test/nodes/* ./test/streamr/* ./test/*.test.ts", "test-tableland": "npx hardhat test ./test/tableland/* --network localhost ", diff --git a/registry.go b/registry.go index 3b209647..55753eba 100644 --- a/registry.go +++ b/registry.go @@ -104,83 +104,38 @@ type MintSyntheticDeviceInput struct { // MintVehicleAndSdInput is an auto generated low-level Go binding around an user-defined struct. type MintVehicleAndSdInput struct { - ManufacturerNode *big.Int - Owner common.Address - AttrInfoPairsVehicle []AttributeInfoPair - ConnectionId *big.Int - VehicleOwnerSig []byte - SyntheticDeviceSig []byte - SyntheticDeviceAddr common.Address - AttrInfoPairsDevice []AttributeInfoPair + ManufacturerNode *big.Int + Owner common.Address + ConnectionId *big.Int + VehicleOwnerSig []byte + SyntheticDeviceSig []byte + SyntheticDeviceAddr common.Address + AttrInfoPairsDevice []AttributeInfoPair } // MintVehicleAndSdInputWithSnId is an auto generated low-level Go binding around an user-defined struct. type MintVehicleAndSdInputWithSnId struct { - ManufacturerNode *big.Int - Owner common.Address - StorageNodeId *big.Int - AttrInfoPairsVehicle []AttributeInfoPair - ConnectionId *big.Int - VehicleOwnerSig []byte - SyntheticDeviceSig []byte - SyntheticDeviceAddr common.Address - AttrInfoPairsDevice []AttributeInfoPair -} - -// MintVehicleAndSdWithDdInput is an auto generated low-level Go binding around an user-defined struct. -type MintVehicleAndSdWithDdInput struct { - ManufacturerNode *big.Int - Owner common.Address - DeviceDefinitionId string - AttrInfoPairsVehicle []AttributeInfoPair - ConnectionId *big.Int - VehicleOwnerSig []byte - SyntheticDeviceSig []byte - SyntheticDeviceAddr common.Address - AttrInfoPairsDevice []AttributeInfoPair -} - -// MintVehicleAndSdWithDdInputBatch is an auto generated low-level Go binding around an user-defined struct. -type MintVehicleAndSdWithDdInputBatch struct { - ManufacturerNode *big.Int - Owner common.Address - DeviceDefinitionId string - AttrInfoPairsVehicle []AttributeInfoPair - ConnectionId *big.Int - VehicleOwnerSig []byte - SyntheticDeviceSig []byte - SyntheticDeviceAddr common.Address - AttrInfoPairsDevice []AttributeInfoPair - SacdInput SacdInput -} - -// MintVehicleAndSdWithDdInputWithSnId is an auto generated low-level Go binding around an user-defined struct. -type MintVehicleAndSdWithDdInputWithSnId struct { - ManufacturerNode *big.Int - Owner common.Address - DeviceDefinitionId string - StorageNodeId *big.Int - AttrInfoPairsVehicle []AttributeInfoPair - ConnectionId *big.Int - VehicleOwnerSig []byte - SyntheticDeviceSig []byte - SyntheticDeviceAddr common.Address - AttrInfoPairsDevice []AttributeInfoPair -} - -// MintVehicleAndSdWithDdInputWithSnIdBatch is an auto generated low-level Go binding around an user-defined struct. -type MintVehicleAndSdWithDdInputWithSnIdBatch struct { - ManufacturerNode *big.Int - Owner common.Address - DeviceDefinitionId string - StorageNodeId *big.Int - AttrInfoPairsVehicle []AttributeInfoPair - ConnectionId *big.Int - VehicleOwnerSig []byte - SyntheticDeviceSig []byte - SyntheticDeviceAddr common.Address - AttrInfoPairsDevice []AttributeInfoPair - SacdInput SacdInput + ManufacturerNode *big.Int + Owner common.Address + StorageNodeId *big.Int + ConnectionId *big.Int + VehicleOwnerSig []byte + SyntheticDeviceSig []byte + SyntheticDeviceAddr common.Address + AttrInfoPairsDevice []AttributeInfoPair +} + +// MintVehicleAndSdInputWithSnIdBatch is an auto generated low-level Go binding around an user-defined struct. +type MintVehicleAndSdInputWithSnIdBatch struct { + ManufacturerNode *big.Int + Owner common.Address + StorageNodeId *big.Int + ConnectionId *big.Int + VehicleOwnerSig []byte + SyntheticDeviceSig []byte + SyntheticDeviceAddr common.Address + AttrInfoPairsDevice []AttributeInfoPair + SacdInput SacdInput } // SacdInput is an auto generated low-level Go binding around an user-defined struct. @@ -203,7 +158,7 @@ type TablelandPolicy struct { // RegistryMetaData contains all meta data concerning the Registry contract. var RegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"UintUtils__InsufficientHexLength\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"ModuleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"ModuleRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"oldSelectors\",\"type\":\"bytes4[]\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"newSelectors\",\"type\":\"bytes4[]\"}],\"name\":\"ModuleUpdated\",\"type\":\"event\"},{\"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\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"addModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"removeModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"oldSelectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"bytes4[]\",\"name\":\"newSelectors\",\"type\":\"bytes4[]\"}],\"name\":\"updateModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AdNotClaimed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AdPaired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InvalidNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"InvalidStorageNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"VehiclePaired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"AftermarketDeviceAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceNodeBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDevicePaired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"}],\"name\":\"AftermarketDeviceUnclaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceUnpaired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ddId\",\"type\":\"string\"}],\"name\":\"DeviceDefinitionIdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"SyntheticDeviceAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceNodeBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"VehicleAttributeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"VehicleAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"VehicleNodeBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"VehicleStorageNodeIdSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnAftermarketDevices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnAftermarketDevicesAndDeletePairings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnSyntheticDevicesAndDeletePairings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnVehicles\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnVehiclesAndDeletePairings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"adminCacheDimoStreamrEns\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newParentNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"nodeIdList\",\"type\":\"uint256[]\"}],\"name\":\"adminChangeParentNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"}],\"name\":\"adminPairAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"adminRemoveVehicleAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"vehicleIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"adminSetStorageNodeIdForVehicleIds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"}],\"internalType\":\"structDevAdmin.VehicleIdDeviceDefinitionId[]\",\"name\":\"vehicleIdDdId\",\"type\":\"tuple[]\"}],\"name\":\"adminSetVehicleDDs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structDevAdmin.IdManufacturerName[]\",\"name\":\"idManufacturerNames\",\"type\":\"tuple[]\"}],\"name\":\"renameManufacturers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferAftermarketDeviceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"aftermarketDeviceNodes\",\"type\":\"uint256[]\"}],\"name\":\"unclaimAftermarketDeviceNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"aftermarketDeviceNodes\",\"type\":\"uint256[]\"}],\"name\":\"unpairAftermarketDeviceByDeviceNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"vehicleNodes\",\"type\":\"uint256[]\"}],\"name\":\"unpairAftermarketDeviceByVehicleNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"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\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multiDelegateCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multiStaticCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AdNotPaired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attr\",\"type\":\"string\"}],\"name\":\"AttributeExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attr\",\"type\":\"string\"}],\"name\":\"AttributeNotWhitelisted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"DeviceAlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"DeviceAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAdSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLicense\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOwnerSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InvalidParentNode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnersDoNotMatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"VehicleNotPaired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aftermarketDeviceAddress\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceAddressReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"AftermarketDeviceAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aftermarketDeviceAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceNodeMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceUnclaimed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addAftermarketDeviceAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"}],\"name\":\"claimAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNodeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"internalType\":\"structAftermarketDeviceOwnerPair[]\",\"name\":\"adOwnerPair\",\"type\":\"tuple[]\"}],\"name\":\"claimAftermarketDeviceBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ownerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"}],\"name\":\"claimAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"getAftermarketDeviceAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getAftermarketDeviceIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"isAftermarketDeviceClaimed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isClaimed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairs\",\"type\":\"tuple[]\"}],\"internalType\":\"structAftermarketDeviceInfos[]\",\"name\":\"adInfos\",\"type\":\"tuple[]\"}],\"name\":\"mintAftermarketDeviceByManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"}],\"name\":\"pairAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"}],\"name\":\"pairAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"pairAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"}],\"name\":\"pairAftermarketDeviceWithAdSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"aftermarketDeviceNodeList\",\"type\":\"uint256[]\"}],\"name\":\"reprovisionAftermarketDeviceByManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNodeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"deviceAddress\",\"type\":\"address\"}],\"internalType\":\"structAftermarketDeviceIdAddressPair[]\",\"name\":\"adIdAddrs\",\"type\":\"tuple[]\"}],\"name\":\"resetAftermarketDeviceAddressByManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"}],\"name\":\"resetAftermarketDeviceForClaiming\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAftermarketDeviceIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"setAftermarketDeviceInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"}],\"name\":\"unpairAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"unpairAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"ControllerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"ManufacturerAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"ManufacturerAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ManufacturerIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ManufacturerNodeMinted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addManufacturerAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"getManufacturerIdByName\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getManufacturerNameById\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isAllowedToOwnManufacturerNode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isAllowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isController\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isManufacturerMinted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isManufacturerMinted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairList\",\"type\":\"tuple[]\"}],\"name\":\"mintManufacturer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"names\",\"type\":\"string[]\"}],\"name\":\"mintManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setManufacturerIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoList\",\"type\":\"tuple[]\"}],\"name\":\"setManufacturerInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"updateManufacturerMinted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"InvalidSdSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyNftProxy\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"SyntheticDeviceAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"syntheticDeviceAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceNodeMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"VehicleNodeMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"}],\"name\":\"VehicleNodeMintedWithDeviceDefinition\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addSyntheticDeviceAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ownerSig\",\"type\":\"bytes\"}],\"name\":\"burnSyntheticDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"getSyntheticDeviceAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getSyntheticDeviceIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairs\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintSyntheticDeviceBatchInput[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"mintSyntheticDeviceBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairs\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintSyntheticDeviceInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintSyntheticDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setSyntheticDeviceIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"setSyntheticDeviceInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"validateSdBurnAndResetNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"VehicleAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"VehicleIdProxySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addVehicleAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ownerSig\",\"type\":\"bytes\"}],\"name\":\"burnVehicleSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"getDeviceDefinitionIdByVehicleId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"ddId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"mintVehicleWithDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"permissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"}],\"internalType\":\"structSacdInput\",\"name\":\"sacdInput\",\"type\":\"tuple\"}],\"name\":\"mintVehicleWithDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"permissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"}],\"internalType\":\"structSacdInput\",\"name\":\"sacdInput\",\"type\":\"tuple\"}],\"name\":\"mintVehicleWithDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"mintVehicleWithDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"mintVehicleWithDeviceDefinitionSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"mintVehicleWithDeviceDefinitionSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setVehicleIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"setVehicleInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"validateBurnAndResetNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"getInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getParentNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"parentNode\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"BeneficiarySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"getBeneficiary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceNode\",\"type\":\"uint256\"}],\"name\":\"getLink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"targetNode\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddressSource\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"idProxyAddressTarget\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceNode\",\"type\":\"uint256\"}],\"name\":\"getNodeLink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"targetNode\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"setAftermarketDeviceBeneficiary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdInputWithSnId\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdWithDdInputWithSnId\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdWithDeviceDefinitionSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdWithDdInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdWithDeviceDefinitionSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdWithDdInput\",\"name\":\"data\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"permissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"}],\"internalType\":\"structSacdInput\",\"name\":\"sacdInput\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdWithDeviceDefinitionSignAndSacd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdWithDdInputWithSnId\",\"name\":\"data\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"permissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"}],\"internalType\":\"structSacdInput\",\"name\":\"sacdInput\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdWithDeviceDefinitionSignAndSacd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"permissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"}],\"internalType\":\"structSacdInput\",\"name\":\"sacdInput\",\"type\":\"tuple\"}],\"internalType\":\"structMintVehicleAndSdWithDdInputWithSnIdBatch[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"mintVehicleAndSdWithDeviceDefinitionSignBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"permissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"}],\"internalType\":\"structSacdInput\",\"name\":\"sacdInput\",\"type\":\"tuple\"}],\"internalType\":\"structMintVehicleAndSdWithDdInputBatch[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"mintVehicleAndSdWithDeviceDefinitionSignBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"connectionsManager\",\"type\":\"address\"}],\"name\":\"ConnectionsManagerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dimoCredit\",\"type\":\"address\"}],\"name\":\"DimoCreditSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dimoToken\",\"type\":\"address\"}],\"name\":\"DimoTokenSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"foundation\",\"type\":\"address\"}],\"name\":\"FoundationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manufacturerLicense\",\"type\":\"address\"}],\"name\":\"ManufacturerLicenseSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sacd\",\"type\":\"address\"}],\"name\":\"SacdSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getConnectionsManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"connectionsManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDimoCredit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"dimoCredit\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDimoToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"dimoToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFoundation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"foundation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getManufacturerLicense\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"manufacturerLicense\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSacd\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sacd\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"connectionsManager\",\"type\":\"address\"}],\"name\":\"setConnectionsManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dimoCredit\",\"type\":\"address\"}],\"name\":\"setDimoCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dimoToken\",\"type\":\"address\"}],\"name\":\"setDimoToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"foundation\",\"type\":\"address\"}],\"name\":\"setFoundation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manufacturerLicense\",\"type\":\"address\"}],\"name\":\"setManufacturerLicense\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sacd\",\"type\":\"address\"}],\"name\":\"setSacd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dimoStreamrEns\",\"type\":\"string\"}],\"name\":\"DimoStreamrEnsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"dimoStreamrNode\",\"type\":\"address\"}],\"name\":\"DimoStreamrNodeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"streamRegistry\",\"type\":\"address\"}],\"name\":\"StreamRegistrySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dimoStreamrEns\",\"type\":\"string\"}],\"name\":\"setDimoBaseStreamId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dimoStreamrNode\",\"type\":\"address\"}],\"name\":\"setDimoStreamrNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"streamRegistry\",\"type\":\"address\"}],\"name\":\"setStreamRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"enumIStreamRegistry.PermissionType\",\"name\":\"permissionType\",\"type\":\"uint8\"}],\"name\":\"NoStreamrPermission\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"StreamDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"VehicleStreamAlreadySet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"VehicleStreamNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"SubscribedToVehicleStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"VehicleStreamSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"VehicleStreamUnset\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"createVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"getVehicleStream\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"onBurnVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"onSetSubscribePrivilege\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"onTransferVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"setSubscriptionToVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"setVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"subscribeToVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"unsetVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainid\",\"type\":\"uint256\"}],\"name\":\"ChainNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InvalidManufacturerId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"TableAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"TableDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"DeviceDefinitionDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"model\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"year\",\"type\":\"uint256\"}],\"name\":\"DeviceDefinitionInserted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tableOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"DeviceDefinitionTableCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"DeviceDefinitionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"ManufacturerTableSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tableOwner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"createDeviceDefinitionTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tableOwner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"manufacturerIds\",\"type\":\"uint256[]\"}],\"name\":\"createDeviceDefinitionTableBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"deleteDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"getDeviceDefinitionTableId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"getDeviceDefinitionTableName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"tableName\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"model\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"year\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ksuid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"deviceType\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"imageURI\",\"type\":\"string\"}],\"internalType\":\"structDeviceDefinitionInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"insertDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"model\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"year\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ksuid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"deviceType\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"imageURI\",\"type\":\"string\"}],\"internalType\":\"structDeviceDefinitionInput[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"insertDeviceDefinitionBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"setDeviceDefinitionTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ksuid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"deviceType\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"imageURI\",\"type\":\"string\"}],\"internalType\":\"structDeviceDefinitionUpdateInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"updateDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getPolicy\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"allowInsert\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowUpdate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowDelete\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"whereClause\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"withCheck\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"updatableColumns\",\"type\":\"string[]\"}],\"internalType\":\"structTablelandPolicy\",\"name\":\"policy\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"operation\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"name\":\"OperationCostSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operation\",\"type\":\"bytes32\"}],\"name\":\"getDcxOperationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operation\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"name\":\"setDcxOperationCost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"storageNode\",\"type\":\"address\"}],\"name\":\"StorageNodeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getDefaultStorageNodeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"defaultStorageNodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageNode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"storageNode\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"setDefaultStorageNodeId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"storageNode\",\"type\":\"address\"}],\"name\":\"setStorageNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"setStorageNodeIdForVehicle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"vehicleIdToStorageNodeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"UintUtils__InsufficientHexLength\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"ModuleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"ModuleRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"oldSelectors\",\"type\":\"bytes4[]\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"newSelectors\",\"type\":\"bytes4[]\"}],\"name\":\"ModuleUpdated\",\"type\":\"event\"},{\"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\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"addModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"removeModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"oldSelectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"bytes4[]\",\"name\":\"newSelectors\",\"type\":\"bytes4[]\"}],\"name\":\"updateModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AdNotClaimed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AdPaired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InvalidNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"InvalidStorageNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"VehiclePaired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"AftermarketDeviceAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceNodeBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDevicePaired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"}],\"name\":\"AftermarketDeviceUnclaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceUnpaired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ddId\",\"type\":\"string\"}],\"name\":\"DeviceDefinitionIdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"SyntheticDeviceAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceNodeBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"VehicleNodeBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"VehicleStorageNodeIdSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnAftermarketDevices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnAftermarketDevicesAndDeletePairings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnSyntheticDevicesAndDeletePairings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnVehicles\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnVehiclesAndDeletePairings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"adminCacheDimoStreamrEns\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newParentNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"nodeIdList\",\"type\":\"uint256[]\"}],\"name\":\"adminChangeParentNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"}],\"name\":\"adminPairAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"vehicleIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"adminSetStorageNodeIdForVehicleIds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"}],\"internalType\":\"structDevAdmin.VehicleIdDeviceDefinitionId[]\",\"name\":\"vehicleIdDdId\",\"type\":\"tuple[]\"}],\"name\":\"adminSetVehicleDDs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structDevAdmin.IdManufacturerName[]\",\"name\":\"idManufacturerNames\",\"type\":\"tuple[]\"}],\"name\":\"renameManufacturers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferAftermarketDeviceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"aftermarketDeviceNodes\",\"type\":\"uint256[]\"}],\"name\":\"unclaimAftermarketDeviceNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"aftermarketDeviceNodes\",\"type\":\"uint256[]\"}],\"name\":\"unpairAftermarketDeviceByDeviceNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"vehicleNodes\",\"type\":\"uint256[]\"}],\"name\":\"unpairAftermarketDeviceByVehicleNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"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\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multiDelegateCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multiStaticCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AdNotPaired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attr\",\"type\":\"string\"}],\"name\":\"AttributeExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attr\",\"type\":\"string\"}],\"name\":\"AttributeNotWhitelisted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"DeviceAlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"DeviceAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAdSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLicense\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOwnerSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InvalidParentNode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnersDoNotMatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"VehicleNotPaired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aftermarketDeviceAddress\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceAddressReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"AftermarketDeviceAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aftermarketDeviceAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceNodeMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceUnclaimed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addAftermarketDeviceAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"}],\"name\":\"claimAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNodeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"internalType\":\"structAftermarketDeviceOwnerPair[]\",\"name\":\"adOwnerPair\",\"type\":\"tuple[]\"}],\"name\":\"claimAftermarketDeviceBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ownerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"}],\"name\":\"claimAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"getAftermarketDeviceAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getAftermarketDeviceIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"isAftermarketDeviceClaimed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isClaimed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairs\",\"type\":\"tuple[]\"}],\"internalType\":\"structAftermarketDeviceInfos[]\",\"name\":\"adInfos\",\"type\":\"tuple[]\"}],\"name\":\"mintAftermarketDeviceByManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"}],\"name\":\"pairAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"}],\"name\":\"pairAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"pairAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"}],\"name\":\"pairAftermarketDeviceWithAdSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"aftermarketDeviceNodeList\",\"type\":\"uint256[]\"}],\"name\":\"reprovisionAftermarketDeviceByManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNodeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"deviceAddress\",\"type\":\"address\"}],\"internalType\":\"structAftermarketDeviceIdAddressPair[]\",\"name\":\"adIdAddrs\",\"type\":\"tuple[]\"}],\"name\":\"resetAftermarketDeviceAddressByManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"}],\"name\":\"resetAftermarketDeviceForClaiming\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAftermarketDeviceIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"setAftermarketDeviceInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"}],\"name\":\"unpairAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"unpairAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"ControllerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"ManufacturerAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"ManufacturerAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ManufacturerIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ManufacturerNodeMinted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addManufacturerAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"getManufacturerIdByName\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getManufacturerNameById\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isAllowedToOwnManufacturerNode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isAllowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isController\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isManufacturerMinted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isManufacturerMinted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairList\",\"type\":\"tuple[]\"}],\"name\":\"mintManufacturer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"names\",\"type\":\"string[]\"}],\"name\":\"mintManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setManufacturerIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoList\",\"type\":\"tuple[]\"}],\"name\":\"setManufacturerInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"updateManufacturerMinted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"InvalidSdSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyNftProxy\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"SyntheticDeviceAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"syntheticDeviceAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceNodeMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"VehicleNodeMinted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addSyntheticDeviceAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ownerSig\",\"type\":\"bytes\"}],\"name\":\"burnSyntheticDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"getSyntheticDeviceAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getSyntheticDeviceIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairs\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintSyntheticDeviceBatchInput[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"mintSyntheticDeviceBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairs\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintSyntheticDeviceInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintSyntheticDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setSyntheticDeviceIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"setSyntheticDeviceInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"validateSdBurnAndResetNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"VehicleIdProxySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ownerSig\",\"type\":\"bytes\"}],\"name\":\"burnVehicleSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"getDeviceDefinitionIdByVehicleId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"ddId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"permissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"}],\"internalType\":\"structSacdInput\",\"name\":\"sacdInput\",\"type\":\"tuple\"}],\"name\":\"mintVehicle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"mintVehicle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"mintVehicleSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setVehicleIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"validateBurnAndResetNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"getInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getParentNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"parentNode\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"BeneficiarySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"getBeneficiary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceNode\",\"type\":\"uint256\"}],\"name\":\"getLink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"targetNode\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddressSource\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"idProxyAddressTarget\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceNode\",\"type\":\"uint256\"}],\"name\":\"getNodeLink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"targetNode\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"setAftermarketDeviceBeneficiary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdInputWithSnId\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdInputWithSnId\",\"name\":\"data\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"permissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"}],\"internalType\":\"structSacdInput\",\"name\":\"sacdInput\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdSignAndSacd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"connectionId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"permissions\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"source\",\"type\":\"string\"}],\"internalType\":\"structSacdInput\",\"name\":\"sacdInput\",\"type\":\"tuple\"}],\"internalType\":\"structMintVehicleAndSdInputWithSnIdBatch[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"mintVehicleAndSdSignBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"connectionsManager\",\"type\":\"address\"}],\"name\":\"ConnectionsManagerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dimoCredit\",\"type\":\"address\"}],\"name\":\"DimoCreditSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dimoToken\",\"type\":\"address\"}],\"name\":\"DimoTokenSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"foundation\",\"type\":\"address\"}],\"name\":\"FoundationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manufacturerLicense\",\"type\":\"address\"}],\"name\":\"ManufacturerLicenseSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sacd\",\"type\":\"address\"}],\"name\":\"SacdSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getConnectionsManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"connectionsManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDimoCredit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"dimoCredit\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDimoToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"dimoToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFoundation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"foundation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getManufacturerLicense\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"manufacturerLicense\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSacd\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sacd\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"connectionsManager\",\"type\":\"address\"}],\"name\":\"setConnectionsManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dimoCredit\",\"type\":\"address\"}],\"name\":\"setDimoCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dimoToken\",\"type\":\"address\"}],\"name\":\"setDimoToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"foundation\",\"type\":\"address\"}],\"name\":\"setFoundation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manufacturerLicense\",\"type\":\"address\"}],\"name\":\"setManufacturerLicense\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sacd\",\"type\":\"address\"}],\"name\":\"setSacd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dimoStreamrEns\",\"type\":\"string\"}],\"name\":\"DimoStreamrEnsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"dimoStreamrNode\",\"type\":\"address\"}],\"name\":\"DimoStreamrNodeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"streamRegistry\",\"type\":\"address\"}],\"name\":\"StreamRegistrySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dimoStreamrEns\",\"type\":\"string\"}],\"name\":\"setDimoBaseStreamId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dimoStreamrNode\",\"type\":\"address\"}],\"name\":\"setDimoStreamrNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"streamRegistry\",\"type\":\"address\"}],\"name\":\"setStreamRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"enumIStreamRegistry.PermissionType\",\"name\":\"permissionType\",\"type\":\"uint8\"}],\"name\":\"NoStreamrPermission\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"StreamDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"VehicleStreamAlreadySet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"VehicleStreamNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"SubscribedToVehicleStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"VehicleStreamSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"VehicleStreamUnset\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"createVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"getVehicleStream\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"onBurnVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"onSetSubscribePrivilege\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"onTransferVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"setSubscriptionToVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"setVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"subscribeToVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"unsetVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainid\",\"type\":\"uint256\"}],\"name\":\"ChainNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InvalidManufacturerId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"TableAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"TableDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"DeviceDefinitionDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"model\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"year\",\"type\":\"uint256\"}],\"name\":\"DeviceDefinitionInserted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tableOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"DeviceDefinitionTableCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"DeviceDefinitionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"ManufacturerTableSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tableOwner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"createDeviceDefinitionTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tableOwner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"manufacturerIds\",\"type\":\"uint256[]\"}],\"name\":\"createDeviceDefinitionTableBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"deleteDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"getDeviceDefinitionTableId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"getDeviceDefinitionTableName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"tableName\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"model\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"year\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ksuid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"deviceType\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"imageURI\",\"type\":\"string\"}],\"internalType\":\"structDeviceDefinitionInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"insertDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"model\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"year\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ksuid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"deviceType\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"imageURI\",\"type\":\"string\"}],\"internalType\":\"structDeviceDefinitionInput[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"insertDeviceDefinitionBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"setDeviceDefinitionTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ksuid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"deviceType\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"imageURI\",\"type\":\"string\"}],\"internalType\":\"structDeviceDefinitionUpdateInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"updateDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getPolicy\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"allowInsert\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowUpdate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowDelete\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"whereClause\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"withCheck\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"updatableColumns\",\"type\":\"string[]\"}],\"internalType\":\"structTablelandPolicy\",\"name\":\"policy\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"operation\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"name\":\"OperationCostSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operation\",\"type\":\"bytes32\"}],\"name\":\"getDcxOperationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operation\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"name\":\"setDcxOperationCost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"storageNode\",\"type\":\"address\"}],\"name\":\"StorageNodeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getDefaultStorageNodeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"defaultStorageNodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStorageNode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"storageNode\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"setDefaultStorageNodeId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"storageNode\",\"type\":\"address\"}],\"name\":\"setStorageNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"storageNodeId\",\"type\":\"uint256\"}],\"name\":\"setStorageNodeIdForVehicle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"vehicleIdToStorageNodeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // RegistryABI is the input ABI used to generate the binding from. @@ -1459,27 +1414,6 @@ func (_Registry *RegistryTransactorSession) AddSyntheticDeviceAttribute(attribut return _Registry.Contract.AddSyntheticDeviceAttribute(&_Registry.TransactOpts, attribute) } -// AddVehicleAttribute is a paid mutator transaction binding the contract method 0xf0d1a557. -// -// Solidity: function addVehicleAttribute(string attribute) returns() -func (_Registry *RegistryTransactor) AddVehicleAttribute(opts *bind.TransactOpts, attribute string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "addVehicleAttribute", attribute) -} - -// AddVehicleAttribute is a paid mutator transaction binding the contract method 0xf0d1a557. -// -// Solidity: function addVehicleAttribute(string attribute) returns() -func (_Registry *RegistrySession) AddVehicleAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddVehicleAttribute(&_Registry.TransactOpts, attribute) -} - -// AddVehicleAttribute is a paid mutator transaction binding the contract method 0xf0d1a557. -// -// Solidity: function addVehicleAttribute(string attribute) returns() -func (_Registry *RegistryTransactorSession) AddVehicleAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddVehicleAttribute(&_Registry.TransactOpts, attribute) -} - // AdminBurnAftermarketDevices is a paid mutator transaction binding the contract method 0xd7376bae. // // Solidity: function adminBurnAftermarketDevices(uint256[] tokenIds) returns() @@ -1648,27 +1582,6 @@ func (_Registry *RegistryTransactorSession) AdminPairAftermarketDevice(aftermark return _Registry.Contract.AdminPairAftermarketDevice(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode) } -// AdminRemoveVehicleAttribute is a paid mutator transaction binding the contract method 0x5f741f4d. -// -// Solidity: function adminRemoveVehicleAttribute(string attribute) returns() -func (_Registry *RegistryTransactor) AdminRemoveVehicleAttribute(opts *bind.TransactOpts, attribute string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminRemoveVehicleAttribute", attribute) -} - -// AdminRemoveVehicleAttribute is a paid mutator transaction binding the contract method 0x5f741f4d. -// -// Solidity: function adminRemoveVehicleAttribute(string attribute) returns() -func (_Registry *RegistrySession) AdminRemoveVehicleAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AdminRemoveVehicleAttribute(&_Registry.TransactOpts, attribute) -} - -// AdminRemoveVehicleAttribute is a paid mutator transaction binding the contract method 0x5f741f4d. -// -// Solidity: function adminRemoveVehicleAttribute(string attribute) returns() -func (_Registry *RegistryTransactorSession) AdminRemoveVehicleAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AdminRemoveVehicleAttribute(&_Registry.TransactOpts, attribute) -} - // AdminSetStorageNodeIdForVehicleIds is a paid mutator transaction binding the contract method 0x3d9cf004. // // Solidity: function adminSetStorageNodeIdForVehicleIds(uint256[] vehicleIds, uint256 storageNodeId) returns() @@ -2110,298 +2023,151 @@ func (_Registry *RegistryTransactorSession) MintSyntheticDeviceSign(data MintSyn return _Registry.Contract.MintSyntheticDeviceSign(&_Registry.TransactOpts, data) } -// MintVehicleAndSdSign is a paid mutator transaction binding the contract method 0x688ecea4. -// -// Solidity: function mintVehicleAndSdSign((uint256,address,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdSign(opts *bind.TransactOpts, data MintVehicleAndSdInputWithSnId) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdSign", data) -} - -// MintVehicleAndSdSign is a paid mutator transaction binding the contract method 0x688ecea4. -// -// Solidity: function mintVehicleAndSdSign((uint256,address,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistrySession) MintVehicleAndSdSign(data MintVehicleAndSdInputWithSnId) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdSign(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdSign is a paid mutator transaction binding the contract method 0x688ecea4. -// -// Solidity: function mintVehicleAndSdSign((uint256,address,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdSign(data MintVehicleAndSdInputWithSnId) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdSign(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdSign0 is a paid mutator transaction binding the contract method 0xfb1a28e8. -// -// Solidity: function mintVehicleAndSdSign((uint256,address,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdSign0(opts *bind.TransactOpts, data MintVehicleAndSdInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdSign0", data) -} - -// MintVehicleAndSdSign0 is a paid mutator transaction binding the contract method 0xfb1a28e8. -// -// Solidity: function mintVehicleAndSdSign((uint256,address,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistrySession) MintVehicleAndSdSign0(data MintVehicleAndSdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdSign0(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdSign0 is a paid mutator transaction binding the contract method 0xfb1a28e8. -// -// Solidity: function mintVehicleAndSdSign((uint256,address,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdSign0(data MintVehicleAndSdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdSign0(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0x484db0b3. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdWithDeviceDefinitionSign(opts *bind.TransactOpts, data MintVehicleAndSdWithDdInputWithSnId) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdWithDeviceDefinitionSign", data) -} - -// MintVehicleAndSdWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0x484db0b3. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistrySession) MintVehicleAndSdWithDeviceDefinitionSign(data MintVehicleAndSdWithDdInputWithSnId) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSign(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0x484db0b3. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdWithDeviceDefinitionSign(data MintVehicleAndSdWithDdInputWithSnId) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSign(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdWithDeviceDefinitionSign0 is a paid mutator transaction binding the contract method 0xd23965e3. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdWithDeviceDefinitionSign0(opts *bind.TransactOpts, data MintVehicleAndSdWithDdInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdWithDeviceDefinitionSign0", data) -} - -// MintVehicleAndSdWithDeviceDefinitionSign0 is a paid mutator transaction binding the contract method 0xd23965e3. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistrySession) MintVehicleAndSdWithDeviceDefinitionSign0(data MintVehicleAndSdWithDdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSign0(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdWithDeviceDefinitionSign0 is a paid mutator transaction binding the contract method 0xd23965e3. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdWithDeviceDefinitionSign0(data MintVehicleAndSdWithDdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSign0(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdWithDeviceDefinitionSignAndSacd is a paid mutator transaction binding the contract method 0x58657dcc. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignAndSacd((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdWithDeviceDefinitionSignAndSacd(opts *bind.TransactOpts, data MintVehicleAndSdWithDdInput, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdWithDeviceDefinitionSignAndSacd", data, sacdInput) -} - -// MintVehicleAndSdWithDeviceDefinitionSignAndSacd is a paid mutator transaction binding the contract method 0x58657dcc. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignAndSacd((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistrySession) MintVehicleAndSdWithDeviceDefinitionSignAndSacd(data MintVehicleAndSdWithDdInput, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSignAndSacd(&_Registry.TransactOpts, data, sacdInput) -} - -// MintVehicleAndSdWithDeviceDefinitionSignAndSacd is a paid mutator transaction binding the contract method 0x58657dcc. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignAndSacd((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdWithDeviceDefinitionSignAndSacd(data MintVehicleAndSdWithDdInput, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSignAndSacd(&_Registry.TransactOpts, data, sacdInput) -} - -// MintVehicleAndSdWithDeviceDefinitionSignAndSacd0 is a paid mutator transaction binding the contract method 0x788a2f48. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignAndSacd((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdWithDeviceDefinitionSignAndSacd0(opts *bind.TransactOpts, data MintVehicleAndSdWithDdInputWithSnId, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdWithDeviceDefinitionSignAndSacd0", data, sacdInput) -} - -// MintVehicleAndSdWithDeviceDefinitionSignAndSacd0 is a paid mutator transaction binding the contract method 0x788a2f48. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignAndSacd((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistrySession) MintVehicleAndSdWithDeviceDefinitionSignAndSacd0(data MintVehicleAndSdWithDdInputWithSnId, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSignAndSacd0(&_Registry.TransactOpts, data, sacdInput) -} - -// MintVehicleAndSdWithDeviceDefinitionSignAndSacd0 is a paid mutator transaction binding the contract method 0x788a2f48. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignAndSacd((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdWithDeviceDefinitionSignAndSacd0(data MintVehicleAndSdWithDdInputWithSnId, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSignAndSacd0(&_Registry.TransactOpts, data, sacdInput) -} - -// MintVehicleAndSdWithDeviceDefinitionSignBatch is a paid mutator transaction binding the contract method 0x1a5d15a1. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignBatch((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[] data) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdWithDeviceDefinitionSignBatch(opts *bind.TransactOpts, data []MintVehicleAndSdWithDdInputWithSnIdBatch) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdWithDeviceDefinitionSignBatch", data) -} - -// MintVehicleAndSdWithDeviceDefinitionSignBatch is a paid mutator transaction binding the contract method 0x1a5d15a1. +// MintVehicle is a paid mutator transaction binding the contract method 0x65f43d21. // -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignBatch((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[] data) returns() -func (_Registry *RegistrySession) MintVehicleAndSdWithDeviceDefinitionSignBatch(data []MintVehicleAndSdWithDdInputWithSnIdBatch) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSignBatch(&_Registry.TransactOpts, data) +// Solidity: function mintVehicle(uint256 manufacturerNode, address owner, uint256 storageNodeId, (address,uint256,uint256,string) sacdInput) returns() +func (_Registry *RegistryTransactor) MintVehicle(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, sacdInput SacdInput) (*types.Transaction, error) { + return _Registry.contract.Transact(opts, "mintVehicle", manufacturerNode, owner, storageNodeId, sacdInput) } -// MintVehicleAndSdWithDeviceDefinitionSignBatch is a paid mutator transaction binding the contract method 0x1a5d15a1. +// MintVehicle is a paid mutator transaction binding the contract method 0x65f43d21. // -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignBatch((uint256,address,string,uint256,(string,string)[],uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[] data) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdWithDeviceDefinitionSignBatch(data []MintVehicleAndSdWithDdInputWithSnIdBatch) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSignBatch(&_Registry.TransactOpts, data) +// Solidity: function mintVehicle(uint256 manufacturerNode, address owner, uint256 storageNodeId, (address,uint256,uint256,string) sacdInput) returns() +func (_Registry *RegistrySession) MintVehicle(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, sacdInput SacdInput) (*types.Transaction, error) { + return _Registry.Contract.MintVehicle(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, sacdInput) } -// MintVehicleAndSdWithDeviceDefinitionSignBatch0 is a paid mutator transaction binding the contract method 0x7ae7fe4e. +// MintVehicle is a paid mutator transaction binding the contract method 0x65f43d21. // -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignBatch((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[] data) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdWithDeviceDefinitionSignBatch0(opts *bind.TransactOpts, data []MintVehicleAndSdWithDdInputBatch) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdWithDeviceDefinitionSignBatch0", data) +// Solidity: function mintVehicle(uint256 manufacturerNode, address owner, uint256 storageNodeId, (address,uint256,uint256,string) sacdInput) returns() +func (_Registry *RegistryTransactorSession) MintVehicle(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, sacdInput SacdInput) (*types.Transaction, error) { + return _Registry.Contract.MintVehicle(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, sacdInput) } -// MintVehicleAndSdWithDeviceDefinitionSignBatch0 is a paid mutator transaction binding the contract method 0x7ae7fe4e. +// MintVehicle0 is a paid mutator transaction binding the contract method 0x7163864b. // -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignBatch((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[] data) returns() -func (_Registry *RegistrySession) MintVehicleAndSdWithDeviceDefinitionSignBatch0(data []MintVehicleAndSdWithDdInputBatch) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSignBatch0(&_Registry.TransactOpts, data) +// Solidity: function mintVehicle(uint256 manufacturerNode, address owner, uint256 storageNodeId) returns() +func (_Registry *RegistryTransactor) MintVehicle0(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int) (*types.Transaction, error) { + return _Registry.contract.Transact(opts, "mintVehicle0", manufacturerNode, owner, storageNodeId) } -// MintVehicleAndSdWithDeviceDefinitionSignBatch0 is a paid mutator transaction binding the contract method 0x7ae7fe4e. +// MintVehicle0 is a paid mutator transaction binding the contract method 0x7163864b. // -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSignBatch((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[] data) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdWithDeviceDefinitionSignBatch0(data []MintVehicleAndSdWithDdInputBatch) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSignBatch0(&_Registry.TransactOpts, data) +// Solidity: function mintVehicle(uint256 manufacturerNode, address owner, uint256 storageNodeId) returns() +func (_Registry *RegistrySession) MintVehicle0(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int) (*types.Transaction, error) { + return _Registry.Contract.MintVehicle0(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId) } -// MintVehicleWithDeviceDefinition is a paid mutator transaction binding the contract method 0x8b04a18b. +// MintVehicle0 is a paid mutator transaction binding the contract method 0x7163864b. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, uint256 storageNodeId, string deviceDefinitionId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactor) MintVehicleWithDeviceDefinition(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, deviceDefinitionId string, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleWithDeviceDefinition", manufacturerNode, owner, storageNodeId, deviceDefinitionId, attrInfo) +// Solidity: function mintVehicle(uint256 manufacturerNode, address owner, uint256 storageNodeId) returns() +func (_Registry *RegistryTransactorSession) MintVehicle0(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int) (*types.Transaction, error) { + return _Registry.Contract.MintVehicle0(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId) } -// MintVehicleWithDeviceDefinition is a paid mutator transaction binding the contract method 0x8b04a18b. +// MintVehicleAndSdSign is a paid mutator transaction binding the contract method 0x6a27b02f. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, uint256 storageNodeId, string deviceDefinitionId, (string,string)[] attrInfo) returns() -func (_Registry *RegistrySession) MintVehicleWithDeviceDefinition(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, deviceDefinitionId string, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, deviceDefinitionId, attrInfo) -} - -// MintVehicleWithDeviceDefinition is a paid mutator transaction binding the contract method 0x8b04a18b. -// -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, uint256 storageNodeId, string deviceDefinitionId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactorSession) MintVehicleWithDeviceDefinition(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, deviceDefinitionId string, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, deviceDefinitionId, attrInfo) -} - -// MintVehicleWithDeviceDefinition0 is a paid mutator transaction binding the contract method 0x8bf71ebc. -// -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, uint256 storageNodeId, string deviceDefinitionId, (string,string)[] attrInfo, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistryTransactor) MintVehicleWithDeviceDefinition0(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, deviceDefinitionId string, attrInfo []AttributeInfoPair, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleWithDeviceDefinition0", manufacturerNode, owner, storageNodeId, deviceDefinitionId, attrInfo, sacdInput) +// Solidity: function mintVehicleAndSdSign((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[]) data) returns() +func (_Registry *RegistryTransactor) MintVehicleAndSdSign(opts *bind.TransactOpts, data MintVehicleAndSdInputWithSnId) (*types.Transaction, error) { + return _Registry.contract.Transact(opts, "mintVehicleAndSdSign", data) } -// MintVehicleWithDeviceDefinition0 is a paid mutator transaction binding the contract method 0x8bf71ebc. +// MintVehicleAndSdSign is a paid mutator transaction binding the contract method 0x6a27b02f. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, uint256 storageNodeId, string deviceDefinitionId, (string,string)[] attrInfo, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistrySession) MintVehicleWithDeviceDefinition0(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, deviceDefinitionId string, attrInfo []AttributeInfoPair, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition0(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, deviceDefinitionId, attrInfo, sacdInput) +// Solidity: function mintVehicleAndSdSign((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[]) data) returns() +func (_Registry *RegistrySession) MintVehicleAndSdSign(data MintVehicleAndSdInputWithSnId) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleAndSdSign(&_Registry.TransactOpts, data) } -// MintVehicleWithDeviceDefinition0 is a paid mutator transaction binding the contract method 0x8bf71ebc. +// MintVehicleAndSdSign is a paid mutator transaction binding the contract method 0x6a27b02f. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, uint256 storageNodeId, string deviceDefinitionId, (string,string)[] attrInfo, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistryTransactorSession) MintVehicleWithDeviceDefinition0(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, deviceDefinitionId string, attrInfo []AttributeInfoPair, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition0(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, deviceDefinitionId, attrInfo, sacdInput) +// Solidity: function mintVehicleAndSdSign((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[]) data) returns() +func (_Registry *RegistryTransactorSession) MintVehicleAndSdSign(data MintVehicleAndSdInputWithSnId) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleAndSdSign(&_Registry.TransactOpts, data) } -// MintVehicleWithDeviceDefinition1 is a paid mutator transaction binding the contract method 0x97c95b2a. +// MintVehicleAndSdSign0 is a paid mutator transaction binding the contract method 0xec681b0f. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistryTransactor) MintVehicleWithDeviceDefinition1(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleWithDeviceDefinition1", manufacturerNode, owner, deviceDefinitionId, attrInfo, sacdInput) +// Solidity: function mintVehicleAndSdSign((uint256,address,uint256,bytes,bytes,address,(string,string)[]) data) returns() +func (_Registry *RegistryTransactor) MintVehicleAndSdSign0(opts *bind.TransactOpts, data MintVehicleAndSdInput) (*types.Transaction, error) { + return _Registry.contract.Transact(opts, "mintVehicleAndSdSign0", data) } -// MintVehicleWithDeviceDefinition1 is a paid mutator transaction binding the contract method 0x97c95b2a. +// MintVehicleAndSdSign0 is a paid mutator transaction binding the contract method 0xec681b0f. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistrySession) MintVehicleWithDeviceDefinition1(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition1(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo, sacdInput) +// Solidity: function mintVehicleAndSdSign((uint256,address,uint256,bytes,bytes,address,(string,string)[]) data) returns() +func (_Registry *RegistrySession) MintVehicleAndSdSign0(data MintVehicleAndSdInput) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleAndSdSign0(&_Registry.TransactOpts, data) } -// MintVehicleWithDeviceDefinition1 is a paid mutator transaction binding the contract method 0x97c95b2a. +// MintVehicleAndSdSign0 is a paid mutator transaction binding the contract method 0xec681b0f. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo, (address,uint256,uint256,string) sacdInput) returns() -func (_Registry *RegistryTransactorSession) MintVehicleWithDeviceDefinition1(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair, sacdInput SacdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition1(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo, sacdInput) +// Solidity: function mintVehicleAndSdSign((uint256,address,uint256,bytes,bytes,address,(string,string)[]) data) returns() +func (_Registry *RegistryTransactorSession) MintVehicleAndSdSign0(data MintVehicleAndSdInput) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleAndSdSign0(&_Registry.TransactOpts, data) } -// MintVehicleWithDeviceDefinition2 is a paid mutator transaction binding the contract method 0xd84baff1. +// MintVehicleAndSdSignAndSacd is a paid mutator transaction binding the contract method 0x8e8230b6. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactor) MintVehicleWithDeviceDefinition2(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleWithDeviceDefinition2", manufacturerNode, owner, deviceDefinitionId, attrInfo) +// Solidity: function mintVehicleAndSdSignAndSacd((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[]) data, (address,uint256,uint256,string) sacdInput) returns() +func (_Registry *RegistryTransactor) MintVehicleAndSdSignAndSacd(opts *bind.TransactOpts, data MintVehicleAndSdInputWithSnId, sacdInput SacdInput) (*types.Transaction, error) { + return _Registry.contract.Transact(opts, "mintVehicleAndSdSignAndSacd", data, sacdInput) } -// MintVehicleWithDeviceDefinition2 is a paid mutator transaction binding the contract method 0xd84baff1. +// MintVehicleAndSdSignAndSacd is a paid mutator transaction binding the contract method 0x8e8230b6. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo) returns() -func (_Registry *RegistrySession) MintVehicleWithDeviceDefinition2(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition2(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo) +// Solidity: function mintVehicleAndSdSignAndSacd((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[]) data, (address,uint256,uint256,string) sacdInput) returns() +func (_Registry *RegistrySession) MintVehicleAndSdSignAndSacd(data MintVehicleAndSdInputWithSnId, sacdInput SacdInput) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleAndSdSignAndSacd(&_Registry.TransactOpts, data, sacdInput) } -// MintVehicleWithDeviceDefinition2 is a paid mutator transaction binding the contract method 0xd84baff1. +// MintVehicleAndSdSignAndSacd is a paid mutator transaction binding the contract method 0x8e8230b6. // -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactorSession) MintVehicleWithDeviceDefinition2(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition2(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo) +// Solidity: function mintVehicleAndSdSignAndSacd((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[]) data, (address,uint256,uint256,string) sacdInput) returns() +func (_Registry *RegistryTransactorSession) MintVehicleAndSdSignAndSacd(data MintVehicleAndSdInputWithSnId, sacdInput SacdInput) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleAndSdSignAndSacd(&_Registry.TransactOpts, data, sacdInput) } -// MintVehicleWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0x592c0889. +// MintVehicleAndSdSignBatch is a paid mutator transaction binding the contract method 0x54d80641. // -// Solidity: function mintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode, address owner, uint256 storageNodeId, string deviceDefinitionId, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistryTransactor) MintVehicleWithDeviceDefinitionSign(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, deviceDefinitionId string, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleWithDeviceDefinitionSign", manufacturerNode, owner, storageNodeId, deviceDefinitionId, attrInfo, signature) +// Solidity: function mintVehicleAndSdSignBatch((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[] data) returns() +func (_Registry *RegistryTransactor) MintVehicleAndSdSignBatch(opts *bind.TransactOpts, data []MintVehicleAndSdInputWithSnIdBatch) (*types.Transaction, error) { + return _Registry.contract.Transact(opts, "mintVehicleAndSdSignBatch", data) } -// MintVehicleWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0x592c0889. +// MintVehicleAndSdSignBatch is a paid mutator transaction binding the contract method 0x54d80641. // -// Solidity: function mintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode, address owner, uint256 storageNodeId, string deviceDefinitionId, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistrySession) MintVehicleWithDeviceDefinitionSign(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, deviceDefinitionId string, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinitionSign(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, deviceDefinitionId, attrInfo, signature) +// Solidity: function mintVehicleAndSdSignBatch((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[] data) returns() +func (_Registry *RegistrySession) MintVehicleAndSdSignBatch(data []MintVehicleAndSdInputWithSnIdBatch) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleAndSdSignBatch(&_Registry.TransactOpts, data) } -// MintVehicleWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0x592c0889. +// MintVehicleAndSdSignBatch is a paid mutator transaction binding the contract method 0x54d80641. // -// Solidity: function mintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode, address owner, uint256 storageNodeId, string deviceDefinitionId, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistryTransactorSession) MintVehicleWithDeviceDefinitionSign(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, deviceDefinitionId string, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinitionSign(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, deviceDefinitionId, attrInfo, signature) +// Solidity: function mintVehicleAndSdSignBatch((uint256,address,uint256,uint256,bytes,bytes,address,(string,string)[],(address,uint256,uint256,string))[] data) returns() +func (_Registry *RegistryTransactorSession) MintVehicleAndSdSignBatch(data []MintVehicleAndSdInputWithSnIdBatch) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleAndSdSignBatch(&_Registry.TransactOpts, data) } -// MintVehicleWithDeviceDefinitionSign0 is a paid mutator transaction binding the contract method 0x8dca2b8e. +// MintVehicleSign is a paid mutator transaction binding the contract method 0x0410a326. // -// Solidity: function mintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistryTransactor) MintVehicleWithDeviceDefinitionSign0(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleWithDeviceDefinitionSign0", manufacturerNode, owner, deviceDefinitionId, attrInfo, signature) +// Solidity: function mintVehicleSign(uint256 manufacturerNode, address owner, uint256 storageNodeId, bytes signature) returns() +func (_Registry *RegistryTransactor) MintVehicleSign(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, signature []byte) (*types.Transaction, error) { + return _Registry.contract.Transact(opts, "mintVehicleSign", manufacturerNode, owner, storageNodeId, signature) } -// MintVehicleWithDeviceDefinitionSign0 is a paid mutator transaction binding the contract method 0x8dca2b8e. +// MintVehicleSign is a paid mutator transaction binding the contract method 0x0410a326. // -// Solidity: function mintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistrySession) MintVehicleWithDeviceDefinitionSign0(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinitionSign0(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo, signature) +// Solidity: function mintVehicleSign(uint256 manufacturerNode, address owner, uint256 storageNodeId, bytes signature) returns() +func (_Registry *RegistrySession) MintVehicleSign(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, signature []byte) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleSign(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, signature) } -// MintVehicleWithDeviceDefinitionSign0 is a paid mutator transaction binding the contract method 0x8dca2b8e. +// MintVehicleSign is a paid mutator transaction binding the contract method 0x0410a326. // -// Solidity: function mintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistryTransactorSession) MintVehicleWithDeviceDefinitionSign0(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinitionSign0(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo, signature) +// Solidity: function mintVehicleSign(uint256 manufacturerNode, address owner, uint256 storageNodeId, bytes signature) returns() +func (_Registry *RegistryTransactorSession) MintVehicleSign(manufacturerNode *big.Int, owner common.Address, storageNodeId *big.Int, signature []byte) (*types.Transaction, error) { + return _Registry.Contract.MintVehicleSign(&_Registry.TransactOpts, manufacturerNode, owner, storageNodeId, signature) } // MultiDelegateCall is a paid mutator transaction binding the contract method 0x415c2d96. @@ -3223,27 +2989,6 @@ func (_Registry *RegistryTransactorSession) SetVehicleIdProxyAddress(addr common return _Registry.Contract.SetVehicleIdProxyAddress(&_Registry.TransactOpts, addr) } -// SetVehicleInfo is a paid mutator transaction binding the contract method 0xd9c3ae61. -// -// Solidity: function setVehicleInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactor) SetVehicleInfo(opts *bind.TransactOpts, tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setVehicleInfo", tokenId, attrInfo) -} - -// SetVehicleInfo is a paid mutator transaction binding the contract method 0xd9c3ae61. -// -// Solidity: function setVehicleInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistrySession) SetVehicleInfo(tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetVehicleInfo(&_Registry.TransactOpts, tokenId, attrInfo) -} - -// SetVehicleInfo is a paid mutator transaction binding the contract method 0xd9c3ae61. -// -// Solidity: function setVehicleInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactorSession) SetVehicleInfo(tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetVehicleInfo(&_Registry.TransactOpts, tokenId, attrInfo) -} - // SetVehicleStream is a paid mutator transaction binding the contract method 0x6f58f093. // // Solidity: function setVehicleStream(uint256 vehicleId, string streamId) returns() @@ -10474,9 +10219,9 @@ func (_Registry *RegistryFilterer) ParseSyntheticDeviceNodeMinted(log types.Log) return event, nil } -// RegistryVehicleAttributeAddedIterator is returned from FilterVehicleAttributeAdded and is used to iterate over the raw logs and unpacked data for VehicleAttributeAdded events raised by the Registry contract. -type RegistryVehicleAttributeAddedIterator struct { - Event *RegistryVehicleAttributeAdded // Event containing the contract specifics and raw log +// RegistryVehicleIdProxySetIterator is returned from FilterVehicleIdProxySet and is used to iterate over the raw logs and unpacked data for VehicleIdProxySet events raised by the Registry contract. +type RegistryVehicleIdProxySetIterator struct { + Event *RegistryVehicleIdProxySet // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -10490,7 +10235,7 @@ type RegistryVehicleAttributeAddedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleAttributeAddedIterator) Next() bool { +func (it *RegistryVehicleIdProxySetIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -10499,7 +10244,7 @@ func (it *RegistryVehicleAttributeAddedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeAdded) + it.Event = new(RegistryVehicleIdProxySet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -10514,7 +10259,7 @@ func (it *RegistryVehicleAttributeAddedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeAdded) + it.Event = new(RegistryVehicleIdProxySet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -10530,41 +10275,51 @@ func (it *RegistryVehicleAttributeAddedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleAttributeAddedIterator) Error() error { +func (it *RegistryVehicleIdProxySetIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RegistryVehicleAttributeAddedIterator) Close() error { +func (it *RegistryVehicleIdProxySetIterator) Close() error { it.sub.Unsubscribe() return nil } -// RegistryVehicleAttributeAdded represents a VehicleAttributeAdded event raised by the Registry contract. -type RegistryVehicleAttributeAdded struct { - Attribute string - Raw types.Log // Blockchain specific contextual infos +// RegistryVehicleIdProxySet represents a VehicleIdProxySet event raised by the Registry contract. +type RegistryVehicleIdProxySet struct { + Proxy common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterVehicleAttributeAdded is a free log retrieval operation binding the contract event 0x2b7d41dc33ffd58029f53ebfc3232e4f343480b078458bc17c527583e0172c1a. +// FilterVehicleIdProxySet is a free log retrieval operation binding the contract event 0x3e7484c4e57f7d92e9f02eba6cd805d89112e48db8c21aeb8485fcf0020e479d. // -// Solidity: event VehicleAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) FilterVehicleAttributeAdded(opts *bind.FilterOpts) (*RegistryVehicleAttributeAddedIterator, error) { +// Solidity: event VehicleIdProxySet(address indexed proxy) +func (_Registry *RegistryFilterer) FilterVehicleIdProxySet(opts *bind.FilterOpts, proxy []common.Address) (*RegistryVehicleIdProxySetIterator, error) { + + var proxyRule []interface{} + for _, proxyItem := range proxy { + proxyRule = append(proxyRule, proxyItem) + } - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleAttributeAdded") + logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleIdProxySet", proxyRule) if err != nil { return nil, err } - return &RegistryVehicleAttributeAddedIterator{contract: _Registry.contract, event: "VehicleAttributeAdded", logs: logs, sub: sub}, nil + return &RegistryVehicleIdProxySetIterator{contract: _Registry.contract, event: "VehicleIdProxySet", logs: logs, sub: sub}, nil } -// WatchVehicleAttributeAdded is a free log subscription operation binding the contract event 0x2b7d41dc33ffd58029f53ebfc3232e4f343480b078458bc17c527583e0172c1a. +// WatchVehicleIdProxySet is a free log subscription operation binding the contract event 0x3e7484c4e57f7d92e9f02eba6cd805d89112e48db8c21aeb8485fcf0020e479d. // -// Solidity: event VehicleAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) WatchVehicleAttributeAdded(opts *bind.WatchOpts, sink chan<- *RegistryVehicleAttributeAdded) (event.Subscription, error) { +// Solidity: event VehicleIdProxySet(address indexed proxy) +func (_Registry *RegistryFilterer) WatchVehicleIdProxySet(opts *bind.WatchOpts, sink chan<- *RegistryVehicleIdProxySet, proxy []common.Address) (event.Subscription, error) { + + var proxyRule []interface{} + for _, proxyItem := range proxy { + proxyRule = append(proxyRule, proxyItem) + } - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleAttributeAdded") + logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleIdProxySet", proxyRule) if err != nil { return nil, err } @@ -10574,8 +10329,8 @@ func (_Registry *RegistryFilterer) WatchVehicleAttributeAdded(opts *bind.WatchOp select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeAdded", log); err != nil { + event := new(RegistryVehicleIdProxySet) + if err := _Registry.contract.UnpackLog(event, "VehicleIdProxySet", log); err != nil { return err } event.Raw = log @@ -10596,21 +10351,21 @@ func (_Registry *RegistryFilterer) WatchVehicleAttributeAdded(opts *bind.WatchOp }), nil } -// ParseVehicleAttributeAdded is a log parse operation binding the contract event 0x2b7d41dc33ffd58029f53ebfc3232e4f343480b078458bc17c527583e0172c1a. +// ParseVehicleIdProxySet is a log parse operation binding the contract event 0x3e7484c4e57f7d92e9f02eba6cd805d89112e48db8c21aeb8485fcf0020e479d. // -// Solidity: event VehicleAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) ParseVehicleAttributeAdded(log types.Log) (*RegistryVehicleAttributeAdded, error) { - event := new(RegistryVehicleAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeAdded", log); err != nil { +// Solidity: event VehicleIdProxySet(address indexed proxy) +func (_Registry *RegistryFilterer) ParseVehicleIdProxySet(log types.Log) (*RegistryVehicleIdProxySet, error) { + event := new(RegistryVehicleIdProxySet) + if err := _Registry.contract.UnpackLog(event, "VehicleIdProxySet", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RegistryVehicleAttributeRemovedIterator is returned from FilterVehicleAttributeRemoved and is used to iterate over the raw logs and unpacked data for VehicleAttributeRemoved events raised by the Registry contract. -type RegistryVehicleAttributeRemovedIterator struct { - Event *RegistryVehicleAttributeRemoved // Event containing the contract specifics and raw log +// RegistryVehicleNodeBurnedIterator is returned from FilterVehicleNodeBurned and is used to iterate over the raw logs and unpacked data for VehicleNodeBurned events raised by the Registry contract. +type RegistryVehicleNodeBurnedIterator struct { + Event *RegistryVehicleNodeBurned // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -10624,7 +10379,7 @@ type RegistryVehicleAttributeRemovedIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleAttributeRemovedIterator) Next() bool { +func (it *RegistryVehicleNodeBurnedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -10633,7 +10388,7 @@ func (it *RegistryVehicleAttributeRemovedIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeRemoved) + it.Event = new(RegistryVehicleNodeBurned) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -10648,7 +10403,7 @@ func (it *RegistryVehicleAttributeRemovedIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeRemoved) + it.Event = new(RegistryVehicleNodeBurned) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -10664,41 +10419,60 @@ func (it *RegistryVehicleAttributeRemovedIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleAttributeRemovedIterator) Error() error { +func (it *RegistryVehicleNodeBurnedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RegistryVehicleAttributeRemovedIterator) Close() error { +func (it *RegistryVehicleNodeBurnedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RegistryVehicleAttributeRemoved represents a VehicleAttributeRemoved event raised by the Registry contract. -type RegistryVehicleAttributeRemoved struct { - Attribute string - Raw types.Log // Blockchain specific contextual infos +// RegistryVehicleNodeBurned represents a VehicleNodeBurned event raised by the Registry contract. +type RegistryVehicleNodeBurned struct { + VehicleNode *big.Int + Owner common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterVehicleAttributeRemoved is a free log retrieval operation binding the contract event 0x9b4bf3774d4e97d237196fc2a2d3f0764f4a7987c5a5db94f029cc8357f72b45. +// FilterVehicleNodeBurned is a free log retrieval operation binding the contract event 0x7b36384f0fcf18da09247269a4716eecbcbc475a5b2bc7aa371fc1164789508d. // -// Solidity: event VehicleAttributeRemoved(string attribute) -func (_Registry *RegistryFilterer) FilterVehicleAttributeRemoved(opts *bind.FilterOpts) (*RegistryVehicleAttributeRemovedIterator, error) { +// Solidity: event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner) +func (_Registry *RegistryFilterer) FilterVehicleNodeBurned(opts *bind.FilterOpts, vehicleNode []*big.Int, owner []common.Address) (*RegistryVehicleNodeBurnedIterator, error) { + + var vehicleNodeRule []interface{} + for _, vehicleNodeItem := range vehicleNode { + vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) + } + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleAttributeRemoved") + logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleNodeBurned", vehicleNodeRule, ownerRule) if err != nil { return nil, err } - return &RegistryVehicleAttributeRemovedIterator{contract: _Registry.contract, event: "VehicleAttributeRemoved", logs: logs, sub: sub}, nil + return &RegistryVehicleNodeBurnedIterator{contract: _Registry.contract, event: "VehicleNodeBurned", logs: logs, sub: sub}, nil } -// WatchVehicleAttributeRemoved is a free log subscription operation binding the contract event 0x9b4bf3774d4e97d237196fc2a2d3f0764f4a7987c5a5db94f029cc8357f72b45. +// WatchVehicleNodeBurned is a free log subscription operation binding the contract event 0x7b36384f0fcf18da09247269a4716eecbcbc475a5b2bc7aa371fc1164789508d. // -// Solidity: event VehicleAttributeRemoved(string attribute) -func (_Registry *RegistryFilterer) WatchVehicleAttributeRemoved(opts *bind.WatchOpts, sink chan<- *RegistryVehicleAttributeRemoved) (event.Subscription, error) { +// Solidity: event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner) +func (_Registry *RegistryFilterer) WatchVehicleNodeBurned(opts *bind.WatchOpts, sink chan<- *RegistryVehicleNodeBurned, vehicleNode []*big.Int, owner []common.Address) (event.Subscription, error) { + + var vehicleNodeRule []interface{} + for _, vehicleNodeItem := range vehicleNode { + vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) + } + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleAttributeRemoved") + logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleNodeBurned", vehicleNodeRule, ownerRule) if err != nil { return nil, err } @@ -10708,8 +10482,8 @@ func (_Registry *RegistryFilterer) WatchVehicleAttributeRemoved(opts *bind.Watch select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleAttributeRemoved) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeRemoved", log); err != nil { + event := new(RegistryVehicleNodeBurned) + if err := _Registry.contract.UnpackLog(event, "VehicleNodeBurned", log); err != nil { return err } event.Raw = log @@ -10730,21 +10504,21 @@ func (_Registry *RegistryFilterer) WatchVehicleAttributeRemoved(opts *bind.Watch }), nil } -// ParseVehicleAttributeRemoved is a log parse operation binding the contract event 0x9b4bf3774d4e97d237196fc2a2d3f0764f4a7987c5a5db94f029cc8357f72b45. +// ParseVehicleNodeBurned is a log parse operation binding the contract event 0x7b36384f0fcf18da09247269a4716eecbcbc475a5b2bc7aa371fc1164789508d. // -// Solidity: event VehicleAttributeRemoved(string attribute) -func (_Registry *RegistryFilterer) ParseVehicleAttributeRemoved(log types.Log) (*RegistryVehicleAttributeRemoved, error) { - event := new(RegistryVehicleAttributeRemoved) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeRemoved", log); err != nil { +// Solidity: event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner) +func (_Registry *RegistryFilterer) ParseVehicleNodeBurned(log types.Log) (*RegistryVehicleNodeBurned, error) { + event := new(RegistryVehicleNodeBurned) + if err := _Registry.contract.UnpackLog(event, "VehicleNodeBurned", log); err != nil { return nil, err } event.Raw = log return event, nil } -// RegistryVehicleAttributeSetIterator is returned from FilterVehicleAttributeSet and is used to iterate over the raw logs and unpacked data for VehicleAttributeSet events raised by the Registry contract. -type RegistryVehicleAttributeSetIterator struct { - Event *RegistryVehicleAttributeSet // Event containing the contract specifics and raw log +// RegistryVehicleNodeMintedIterator is returned from FilterVehicleNodeMinted and is used to iterate over the raw logs and unpacked data for VehicleNodeMinted events raised by the Registry contract. +type RegistryVehicleNodeMintedIterator struct { + Event *RegistryVehicleNodeMinted // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -10758,7 +10532,7 @@ type RegistryVehicleAttributeSetIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleAttributeSetIterator) Next() bool { +func (it *RegistryVehicleNodeMintedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -10767,7 +10541,7 @@ func (it *RegistryVehicleAttributeSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeSet) + it.Event = new(RegistryVehicleNodeMinted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -10782,7 +10556,7 @@ func (it *RegistryVehicleAttributeSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeSet) + it.Event = new(RegistryVehicleNodeMinted) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -10798,43 +10572,43 @@ func (it *RegistryVehicleAttributeSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleAttributeSetIterator) Error() error { +func (it *RegistryVehicleNodeMintedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RegistryVehicleAttributeSetIterator) Close() error { +func (it *RegistryVehicleNodeMintedIterator) Close() error { it.sub.Unsubscribe() return nil } -// RegistryVehicleAttributeSet represents a VehicleAttributeSet event raised by the Registry contract. -type RegistryVehicleAttributeSet struct { - TokenId *big.Int - Attribute string - Info string - Raw types.Log // Blockchain specific contextual infos +// RegistryVehicleNodeMinted represents a VehicleNodeMinted event raised by the Registry contract. +type RegistryVehicleNodeMinted struct { + ManufacturerNode *big.Int + TokenId *big.Int + Owner common.Address + Raw types.Log // Blockchain specific contextual infos } -// FilterVehicleAttributeSet is a free log retrieval operation binding the contract event 0x3a259e5d4c53f11c343582a8291a82a8cc0b36ec211d5ab48c2f29ebb068e5fb. +// FilterVehicleNodeMinted is a free log retrieval operation binding the contract event 0xd471ae8ab3c01edc986909c344bb50f982b21772fcac173103ef8b9924375ec6. // -// Solidity: event VehicleAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) FilterVehicleAttributeSet(opts *bind.FilterOpts) (*RegistryVehicleAttributeSetIterator, error) { +// Solidity: event VehicleNodeMinted(uint256 manufacturerNode, uint256 tokenId, address owner) +func (_Registry *RegistryFilterer) FilterVehicleNodeMinted(opts *bind.FilterOpts) (*RegistryVehicleNodeMintedIterator, error) { - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleAttributeSet") + logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleNodeMinted") if err != nil { return nil, err } - return &RegistryVehicleAttributeSetIterator{contract: _Registry.contract, event: "VehicleAttributeSet", logs: logs, sub: sub}, nil + return &RegistryVehicleNodeMintedIterator{contract: _Registry.contract, event: "VehicleNodeMinted", logs: logs, sub: sub}, nil } -// WatchVehicleAttributeSet is a free log subscription operation binding the contract event 0x3a259e5d4c53f11c343582a8291a82a8cc0b36ec211d5ab48c2f29ebb068e5fb. +// WatchVehicleNodeMinted is a free log subscription operation binding the contract event 0xd471ae8ab3c01edc986909c344bb50f982b21772fcac173103ef8b9924375ec6. // -// Solidity: event VehicleAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) WatchVehicleAttributeSet(opts *bind.WatchOpts, sink chan<- *RegistryVehicleAttributeSet) (event.Subscription, error) { +// Solidity: event VehicleNodeMinted(uint256 manufacturerNode, uint256 tokenId, address owner) +func (_Registry *RegistryFilterer) WatchVehicleNodeMinted(opts *bind.WatchOpts, sink chan<- *RegistryVehicleNodeMinted) (event.Subscription, error) { - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleAttributeSet") + logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleNodeMinted") if err != nil { return nil, err } @@ -10844,8 +10618,8 @@ func (_Registry *RegistryFilterer) WatchVehicleAttributeSet(opts *bind.WatchOpts select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleAttributeSet) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeSet", log); err != nil { + event := new(RegistryVehicleNodeMinted) + if err := _Registry.contract.UnpackLog(event, "VehicleNodeMinted", log); err != nil { return err } event.Raw = log @@ -10866,440 +10640,7 @@ func (_Registry *RegistryFilterer) WatchVehicleAttributeSet(opts *bind.WatchOpts }), nil } -// ParseVehicleAttributeSet is a log parse operation binding the contract event 0x3a259e5d4c53f11c343582a8291a82a8cc0b36ec211d5ab48c2f29ebb068e5fb. -// -// Solidity: event VehicleAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) ParseVehicleAttributeSet(log types.Log) (*RegistryVehicleAttributeSet, error) { - event := new(RegistryVehicleAttributeSet) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleIdProxySetIterator is returned from FilterVehicleIdProxySet and is used to iterate over the raw logs and unpacked data for VehicleIdProxySet events raised by the Registry contract. -type RegistryVehicleIdProxySetIterator struct { - Event *RegistryVehicleIdProxySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleIdProxySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleIdProxySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleIdProxySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleIdProxySet represents a VehicleIdProxySet event raised by the Registry contract. -type RegistryVehicleIdProxySet struct { - Proxy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleIdProxySet is a free log retrieval operation binding the contract event 0x3e7484c4e57f7d92e9f02eba6cd805d89112e48db8c21aeb8485fcf0020e479d. -// -// Solidity: event VehicleIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) FilterVehicleIdProxySet(opts *bind.FilterOpts, proxy []common.Address) (*RegistryVehicleIdProxySetIterator, error) { - - var proxyRule []interface{} - for _, proxyItem := range proxy { - proxyRule = append(proxyRule, proxyItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleIdProxySet", proxyRule) - if err != nil { - return nil, err - } - return &RegistryVehicleIdProxySetIterator{contract: _Registry.contract, event: "VehicleIdProxySet", logs: logs, sub: sub}, nil -} - -// WatchVehicleIdProxySet is a free log subscription operation binding the contract event 0x3e7484c4e57f7d92e9f02eba6cd805d89112e48db8c21aeb8485fcf0020e479d. -// -// Solidity: event VehicleIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) WatchVehicleIdProxySet(opts *bind.WatchOpts, sink chan<- *RegistryVehicleIdProxySet, proxy []common.Address) (event.Subscription, error) { - - var proxyRule []interface{} - for _, proxyItem := range proxy { - proxyRule = append(proxyRule, proxyItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleIdProxySet", proxyRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleIdProxySet) - if err := _Registry.contract.UnpackLog(event, "VehicleIdProxySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleIdProxySet is a log parse operation binding the contract event 0x3e7484c4e57f7d92e9f02eba6cd805d89112e48db8c21aeb8485fcf0020e479d. -// -// Solidity: event VehicleIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) ParseVehicleIdProxySet(log types.Log) (*RegistryVehicleIdProxySet, error) { - event := new(RegistryVehicleIdProxySet) - if err := _Registry.contract.UnpackLog(event, "VehicleIdProxySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleNodeBurnedIterator is returned from FilterVehicleNodeBurned and is used to iterate over the raw logs and unpacked data for VehicleNodeBurned events raised by the Registry contract. -type RegistryVehicleNodeBurnedIterator struct { - Event *RegistryVehicleNodeBurned // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleNodeBurnedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeBurned) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeBurned) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleNodeBurnedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleNodeBurnedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleNodeBurned represents a VehicleNodeBurned event raised by the Registry contract. -type RegistryVehicleNodeBurned struct { - VehicleNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleNodeBurned is a free log retrieval operation binding the contract event 0x7b36384f0fcf18da09247269a4716eecbcbc475a5b2bc7aa371fc1164789508d. -// -// Solidity: event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterVehicleNodeBurned(opts *bind.FilterOpts, vehicleNode []*big.Int, owner []common.Address) (*RegistryVehicleNodeBurnedIterator, error) { - - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleNodeBurned", vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryVehicleNodeBurnedIterator{contract: _Registry.contract, event: "VehicleNodeBurned", logs: logs, sub: sub}, nil -} - -// WatchVehicleNodeBurned is a free log subscription operation binding the contract event 0x7b36384f0fcf18da09247269a4716eecbcbc475a5b2bc7aa371fc1164789508d. -// -// Solidity: event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchVehicleNodeBurned(opts *bind.WatchOpts, sink chan<- *RegistryVehicleNodeBurned, vehicleNode []*big.Int, owner []common.Address) (event.Subscription, error) { - - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleNodeBurned", vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleNodeBurned) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeBurned", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleNodeBurned is a log parse operation binding the contract event 0x7b36384f0fcf18da09247269a4716eecbcbc475a5b2bc7aa371fc1164789508d. -// -// Solidity: event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseVehicleNodeBurned(log types.Log) (*RegistryVehicleNodeBurned, error) { - event := new(RegistryVehicleNodeBurned) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeBurned", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleNodeMintedIterator is returned from FilterVehicleNodeMinted and is used to iterate over the raw logs and unpacked data for VehicleNodeMinted events raised by the Registry contract. -type RegistryVehicleNodeMintedIterator struct { - Event *RegistryVehicleNodeMinted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleNodeMintedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleNodeMintedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleNodeMintedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleNodeMinted represents a VehicleNodeMinted event raised by the Registry contract. -type RegistryVehicleNodeMinted struct { - ManufacturerNode *big.Int - TokenId *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleNodeMinted is a free log retrieval operation binding the contract event 0xd471ae8ab3c01edc986909c344bb50f982b21772fcac173103ef8b9924375ec6. -// -// Solidity: event VehicleNodeMinted(uint256 manufacturerNode, uint256 tokenId, address owner) -func (_Registry *RegistryFilterer) FilterVehicleNodeMinted(opts *bind.FilterOpts) (*RegistryVehicleNodeMintedIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleNodeMinted") - if err != nil { - return nil, err - } - return &RegistryVehicleNodeMintedIterator{contract: _Registry.contract, event: "VehicleNodeMinted", logs: logs, sub: sub}, nil -} - -// WatchVehicleNodeMinted is a free log subscription operation binding the contract event 0xd471ae8ab3c01edc986909c344bb50f982b21772fcac173103ef8b9924375ec6. -// -// Solidity: event VehicleNodeMinted(uint256 manufacturerNode, uint256 tokenId, address owner) -func (_Registry *RegistryFilterer) WatchVehicleNodeMinted(opts *bind.WatchOpts, sink chan<- *RegistryVehicleNodeMinted) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleNodeMinted") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleNodeMinted) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeMinted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleNodeMinted is a log parse operation binding the contract event 0xd471ae8ab3c01edc986909c344bb50f982b21772fcac173103ef8b9924375ec6. +// ParseVehicleNodeMinted is a log parse operation binding the contract event 0xd471ae8ab3c01edc986909c344bb50f982b21772fcac173103ef8b9924375ec6. // // Solidity: event VehicleNodeMinted(uint256 manufacturerNode, uint256 tokenId, address owner) func (_Registry *RegistryFilterer) ParseVehicleNodeMinted(log types.Log) (*RegistryVehicleNodeMinted, error) { @@ -11311,169 +10652,6 @@ func (_Registry *RegistryFilterer) ParseVehicleNodeMinted(log types.Log) (*Regis return event, nil } -// RegistryVehicleNodeMintedWithDeviceDefinitionIterator is returned from FilterVehicleNodeMintedWithDeviceDefinition and is used to iterate over the raw logs and unpacked data for VehicleNodeMintedWithDeviceDefinition events raised by the Registry contract. -type RegistryVehicleNodeMintedWithDeviceDefinitionIterator struct { - Event *RegistryVehicleNodeMintedWithDeviceDefinition // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleNodeMintedWithDeviceDefinitionIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeMintedWithDeviceDefinition) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeMintedWithDeviceDefinition) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleNodeMintedWithDeviceDefinitionIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleNodeMintedWithDeviceDefinitionIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleNodeMintedWithDeviceDefinition represents a VehicleNodeMintedWithDeviceDefinition event raised by the Registry contract. -type RegistryVehicleNodeMintedWithDeviceDefinition struct { - ManufacturerId *big.Int - VehicleId *big.Int - Owner common.Address - DeviceDefinitionId string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleNodeMintedWithDeviceDefinition is a free log retrieval operation binding the contract event 0xc7c7d9ac150ee7eff1ae17be6e6c250d9f574d019d47cd741f693feb1929496c. -// -// Solidity: event VehicleNodeMintedWithDeviceDefinition(uint256 indexed manufacturerId, uint256 indexed vehicleId, address indexed owner, string deviceDefinitionId) -func (_Registry *RegistryFilterer) FilterVehicleNodeMintedWithDeviceDefinition(opts *bind.FilterOpts, manufacturerId []*big.Int, vehicleId []*big.Int, owner []common.Address) (*RegistryVehicleNodeMintedWithDeviceDefinitionIterator, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleNodeMintedWithDeviceDefinition", manufacturerIdRule, vehicleIdRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryVehicleNodeMintedWithDeviceDefinitionIterator{contract: _Registry.contract, event: "VehicleNodeMintedWithDeviceDefinition", logs: logs, sub: sub}, nil -} - -// WatchVehicleNodeMintedWithDeviceDefinition is a free log subscription operation binding the contract event 0xc7c7d9ac150ee7eff1ae17be6e6c250d9f574d019d47cd741f693feb1929496c. -// -// Solidity: event VehicleNodeMintedWithDeviceDefinition(uint256 indexed manufacturerId, uint256 indexed vehicleId, address indexed owner, string deviceDefinitionId) -func (_Registry *RegistryFilterer) WatchVehicleNodeMintedWithDeviceDefinition(opts *bind.WatchOpts, sink chan<- *RegistryVehicleNodeMintedWithDeviceDefinition, manufacturerId []*big.Int, vehicleId []*big.Int, owner []common.Address) (event.Subscription, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleNodeMintedWithDeviceDefinition", manufacturerIdRule, vehicleIdRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleNodeMintedWithDeviceDefinition) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeMintedWithDeviceDefinition", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleNodeMintedWithDeviceDefinition is a log parse operation binding the contract event 0xc7c7d9ac150ee7eff1ae17be6e6c250d9f574d019d47cd741f693feb1929496c. -// -// Solidity: event VehicleNodeMintedWithDeviceDefinition(uint256 indexed manufacturerId, uint256 indexed vehicleId, address indexed owner, string deviceDefinitionId) -func (_Registry *RegistryFilterer) ParseVehicleNodeMintedWithDeviceDefinition(log types.Log) (*RegistryVehicleNodeMintedWithDeviceDefinition, error) { - event := new(RegistryVehicleNodeMintedWithDeviceDefinition) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeMintedWithDeviceDefinition", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // RegistryVehicleStorageNodeIdSetIterator is returned from FilterVehicleStorageNodeIdSet and is used to iterate over the raw logs and unpacked data for VehicleStorageNodeIdSet events raised by the Registry contract. type RegistryVehicleStorageNodeIdSetIterator struct { Event *RegistryVehicleStorageNodeIdSet // Event containing the contract specifics and raw log diff --git a/scripts/generate-bindings.sh b/scripts/generate-bindings.sh new file mode 100644 index 00000000..b67f7968 --- /dev/null +++ b/scripts/generate-bindings.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# Exit on error +set -e + +# Check if abigen is installed +if ! command -v abigen &> /dev/null +then + echo "⚠️ abigen not found, skipping Go bindings generation" + echo "To generate Go bindings, install abigen: https://geth.ethereum.org/docs/tools/abigen" + exit 0 +fi + +echo "Generating Go bindings..." + +# Create bindings directory if it doesn't exist +mkdir -p bindings/registry +mkdir -p bindings/dimoForwarder +mkdir -p bindings/aftermarketDeviceId +mkdir -p bindings/integrationId +mkdir -p bindings/manufacturerId +mkdir -p bindings/syntheticDeviceId +mkdir -p bindings/vehicleId + +abigen --abi abis/DimoRegistry.json --out bindings/registry/registry.go --pkg registry --type Registry --v2 +echo "✅ DIMORegistry bindings generated" + +abigen --abi abis/contracts/DimoForwarder.sol/DimoForwarder.json --out bindings/dimoForwarder/dimoForwarder.go --pkg dimoForwarder --type DimoForwarder --v2 +echo "✅ DimoForwarder bindings generated" + +abigen --abi abis/contracts/NFTs/AftermarketDeviceId.sol/AftermarketDeviceId.json --out bindings/aftermarketDeviceId/aftermarketDeviceId.go --pkg aftermarketDeviceId --type AftermarketDeviceId --v2 +echo "✅ AftermarketDeviceId bindings generated" + +abigen --abi abis/contracts/NFTs/IntegrationId.sol/IntegrationId.json --out bindings/integrationId/integrationId.go --pkg integrationId --type IntegrationId --v2 +echo "✅ IntegrationId bindings generated" + +abigen --abi abis/contracts/NFTs/ManufacturerId.sol/ManufacturerId.json --out bindings/manufacturerId/manufacturerId.go --pkg manufacturerId --type ManufacturerId --v2 +echo "✅ ManufacturerId bindings generated" + +abigen --abi abis/contracts/NFTs/SyntheticDeviceId.sol/SyntheticDeviceId.json --out bindings/syntheticDeviceId/syntheticDeviceId.go --pkg syntheticDeviceId --type SyntheticDeviceId --v2 +echo "✅ SyntheticDeviceId bindings generated" + +abigen --abi abis/contracts/NFTs/VehicleId.sol/VehicleId.json --out bindings/vehicleId/vehicleId.go --pkg vehicleId --type VehicleId --v2 +echo "✅ VehicleId bindings generated" + +echo "✅ Go bindings generated successfully in bindings/" \ No newline at end of file diff --git a/scripts/tasks.ts b/scripts/tasks.ts index 2c761b58..e279ff0b 100644 --- a/scripts/tasks.ts +++ b/scripts/tasks.ts @@ -40,24 +40,10 @@ task('mint-vehicle', 'Mints a new Vehicle') const tx = await vehicleInstance .connect(signer) - ['mintVehicleWithDeviceDefinition(uint256,address,string,(string,string)[],(address,uint256,uint256,string))']( + ['mintVehicle(uint256,address,uint256,(address,uint256,uint256,string))']( 131, owner, - 'toyota_4runner_2024', - [ - { - attribute: 'Make', - info: 'Toyota' - }, - { - attribute: 'Model', - info: '4Runner' - }, - { - attribute: 'Year', - info: '2024' - } - ], + 0, { grantee: signer.address, permissions: '16332', diff --git a/utils/types.ts b/utils/types.ts index 9444fdea..a3ed6e5d 100644 --- a/utils/types.ts +++ b/utils/types.ts @@ -49,7 +49,6 @@ export type MintSyntheticDeviceInput = { export type MintVehicleAndSdInput = { manufacturerNode: string, owner: string, - attrInfoPairsVehicle: AttributeInfoPair[], connectionId: string, vehicleOwnerSig: string, syntheticDeviceSig: string, @@ -61,7 +60,6 @@ export type MintVehicleAndSdInputWithSdId = { manufacturerNode: string, owner: string, storageNodeId: string, - attrInfoPairsVehicle: AttributeInfoPair[], connectionId: string, vehicleOwnerSig: string, syntheticDeviceSig: string, @@ -87,36 +85,11 @@ export type DeviceDefinitionUpdateInput = { imageURI: string; }; -export type MintVehicleAndSdWithDdInput = { - manufacturerNode: string, - owner: string, - deviceDefinitionId: string, - attrInfoPairsVehicle: AttributeInfoPair[], - connectionId: string, - vehicleOwnerSig: string, - syntheticDeviceSig: string, - syntheticDeviceAddr: string, - attrInfoPairsDevice: AttributeInfoPair[] -}; - -export type MintVehicleAndSdWithDdInputWithSnId = { - manufacturerNode: string, - owner: string, - deviceDefinitionId: string, - storageNodeId: string, - attrInfoPairsVehicle: AttributeInfoPair[], - connectionId: string, - vehicleOwnerSig: string, - syntheticDeviceSig: string, - syntheticDeviceAddr: string, - attrInfoPairsDevice: AttributeInfoPair[] -}; - -export type MintVehicleAndSdWithDdInputBatch = MintVehicleAndSdWithDdInput & { +export type MintVehicleAndSdInputBatch = MintVehicleAndSdInput & { sacdInput: SacdInput } -export type MintVehicleAndSdWithDdInputWithSnIdBatch = MintVehicleAndSdWithDdInputWithSnId & { +export type MintVehicleAndSdInputWithSnIdBatch = MintVehicleAndSdInputWithSdId & { sacdInput: SacdInput }