-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVehicleData.sol
96 lines (83 loc) · 2.89 KB
/
VehicleData.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
pragma solidity ^0.5.9;
contract SecretLog {
address owner;
constructor () public {
owner = msg.sender;
}
modifier onlyOwner() {
require(owner == msg.sender);
_;
}
struct vehicleInfo {
bytes32[] Logs;
uint256 index; // 1-based
}
bytes32[] private vehicleIndexes;
mapping(bytes32 => vehicleInfo) private registerVehicles;
function vehicleExisted(bytes32 _vehicle) public view returns (bool) {
require(_vehicle != "");
if (vehicleIndexes.length == 0) {
return false;
}
return (vehicleIndexes[registerVehicles[_vehicle].index - 1] == _vehicle);
}
/**
* @param _index Starting from 1
*/
function getvehicleHashbyIndex(uint256 _index) public view onlyOwner returns (bytes32) {
require(_index > 0);
return vehicleIndexes[_index - 1];
}
function getVehicleCount() public view onlyOwner returns (uint256) {
return vehicleIndexes.length;
}
function getAllLogsCount() public view onlyOwner returns (uint256) {
uint256 counter = 0;
for (uint i = 0; i < vehicleIndexes.length; i++) {
counter += registerVehicles[vehicleIndexes[i]].Logs.length;
}
return counter;
}
function getLogbyVehicle(bytes32 _vehicle,uint256 _index) public view returns (bytes32) {
require(_vehicle != "");
require(_index >= 0);
return registerVehicles[_vehicle].Logs[_index];
}
function getLogsCountbyVehicle(bytes32 _vehicle) public view returns (uint256) {
require(_vehicle != "");
return registerVehicles[_vehicle].Logs.length;
}
/**
* @dev For owner to store vehicle log
* @param _vehicle The hash of vehicle
* @param _log_hash The hash of log
*/
function setLog(bytes32 _vehicle, bytes32 _log_hash) public onlyOwner payable {
require(_vehicle != "");
require(_log_hash != "");
vehicleInfo storage vehicle = registerVehicles[_vehicle];
vehicle.Logs.push(_log_hash);
if (vehicle.index == 0) {
vehicleIndexes.push(_vehicle);
vehicle.index = vehicleIndexes.length;
}
}
/**
* @dev Destroy one vehicle
*/
function destroyVehicle(bytes32 _vehicle) public onlyOwner returns (bool) {
require(vehicleExisted(_vehicle));
uint indexToDel = registerVehicles[_vehicle].index;
bytes32 lastVehicle = vehicleIndexes[vehicleIndexes.length - 1];
if (lastVehicle == _vehicle) {
delete(registerVehicles[_vehicle]);
vehicleIndexes.length = 0;
return true;
}
vehicleIndexes[indexToDel - 1] = lastVehicle;
vehicleIndexes.length--;
registerVehicles[lastVehicle].index = indexToDel;
delete(registerVehicles[_vehicle]);
return true;
}
}