Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 33 additions & 16 deletions contracts/src/DeviceRegistry.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";

/**
* @title DeviceRegistry
* @dev Manages registration and activation of camera devices
*/
contract DeviceRegistry {
contract DeviceRegistry is Ownable {
constructor() Ownable(msg.sender) {}

struct DeviceInfo {
address deviceAddress;
string publicKey;
Expand All @@ -21,38 +25,41 @@ contract DeviceRegistry {
mapping(address => DeviceInfo) public devices;
mapping(string => address) public deviceIdToAddress;
address[] public registeredDevices;

event DeviceRegistered(
address indexed deviceAddress,
string deviceId,
string publicKey,
address indexed registeredBy
);

event DeviceUpdated(
address indexed deviceAddress,
string deviceId,
bool isActive
);

event DeviceDeactivated(
address indexed deviceAddress,
string deviceId
);

event DeviceDeactivated(address indexed deviceAddress, string deviceId);
function registerDevice(
address _deviceAddress,
string memory _publicKey,
string memory _deviceId,
string memory _cameraId,
string memory _model,
string memory _firmwareVersion
) external {
) external onlyOwner {
require(_deviceAddress != address(0), "Invalid device address");
require(bytes(_publicKey).length > 0, "Public key required");
require(bytes(_deviceId).length > 0, "Device ID required");
require(bytes(_cameraId).length > 0, "Camera ID required");
require(devices[_deviceAddress].deviceAddress == address(0), "Device already registered");
require(deviceIdToAddress[_deviceId] == address(0), "Device ID already in use");
require(
devices[_deviceAddress].deviceAddress == address(0),
"Device already registered"
);
require(
deviceIdToAddress[_deviceId] == address(0),
"Device ID already in use"
);

DeviceInfo memory newDevice = DeviceInfo({
deviceAddress: _deviceAddress,
Expand All @@ -70,7 +77,12 @@ contract DeviceRegistry {
deviceIdToAddress[_deviceId] = _deviceAddress;
registeredDevices.push(_deviceAddress);

emit DeviceRegistered(_deviceAddress, _deviceId, _publicKey, msg.sender);
emit DeviceRegistered(
_deviceAddress,
_deviceId,
_publicKey,
msg.sender
);
}

function updateDevice(
Expand Down Expand Up @@ -104,15 +116,21 @@ contract DeviceRegistry {
emit DeviceDeactivated(_deviceAddress, device.deviceId);
}

function getDevice(address _deviceAddress) external view returns (DeviceInfo memory) {
function getDevice(
address _deviceAddress
) external view returns (DeviceInfo memory) {
return devices[_deviceAddress];
}

function getDeviceByDeviceId(string memory _deviceId) external view returns (address) {
function getDeviceByDeviceId(
string memory _deviceId
) external view returns (address) {
return deviceIdToAddress[_deviceId];
}

function isDeviceActive(address _deviceAddress) external view returns (bool) {
function isDeviceActive(
address _deviceAddress
) external view returns (bool) {
DeviceInfo memory device = devices[_deviceAddress];
return device.deviceAddress != address(0) && device.isActive;
}
Expand All @@ -125,4 +143,3 @@ contract DeviceRegistry {
return registeredDevices;
}
}