-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTraceability.sol
66 lines (41 loc) · 1.64 KB
/
Traceability.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// SPDX-License-Identifier: MIT
pragma solidity >= 0.8.0;
contract Traceability {
struct Device {
bytes32 idDevice;
address deviceAddress;
}
mapping(bytes32 => bytes[]) private productsForDevice;
mapping(address => bool) private devices;
mapping(address => bytes32) private idOfDevice;
Device[] private devicesAdded;
bytes[] private allProducts;
event Track(bytes jsonData);
event AddDevice(bytes32 _idDevice, address _deviceAddress);
function addDevice(bytes32 _idDevice, address _deviceAddress) public {
require(msg.sender == /* wallet address of admin */, "Only admin can add addresses");
require(devices[_deviceAddress] == false, "This device already exist");
devices[_deviceAddress] = true;
idOfDevice[_deviceAddress] = _idDevice;
Device memory device;
device.idDevice = _idDevice;
device.deviceAddress = _deviceAddress;
devicesAdded.push(device);
emit AddDevice(_idDevice, _deviceAddress);
}
function trackProduct(bytes calldata jsonData) public {
require(devices[msg.sender] == true, "Address not authorized!");
productsForDevice[idOfDevice[msg.sender]].push(jsonData);
allProducts.push(jsonData);
emit Track(jsonData);
}
function getAllDevices() public view returns(Device[] memory) {
return devicesAdded;
}
function getProductsByDevice(bytes32 _idDevice) public view returns(bytes[] memory) {
return productsForDevice[_idDevice];
}
function getAllProductsTracked() public view returns(bytes[] memory) {
return allProducts;
}
}