Repository navigation
Expand file tree
/
Copy pathAssetRegistry.sol
More file actions
48 lines (42 loc) · 1.95 KB
/
Copy pathAssetRegistry.sol
File metadata and controls
48 lines (42 loc) · 1.95 KB
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
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
/// @title AssetRegistry (Prototype)
/// @notice Simple on-chain registry that allows a user to opt-in and register a set of public addresses
/// This is a minimal demonstration contract. Do NOT use as-is in production without audits.
contract AssetRegistry {
event AddressesRegistered(address indexed owner, address[] addresses);
event AddressesRemoved(address indexed owner, address[] addresses);
// Mapping of owner => list (stored as mapping to bool for simple checks)
mapping(address => mapping(address => bool)) private registered;
mapping(address => address[]) private ownerIndex;
/// @notice Register a list of addresses to watch (opt-in)
function registerAddresses(address[] calldata _addrs) external {
for (uint i = 0; i < _addrs.length; i++) {
address a = _addrs[i];
if (!registered[msg.sender][a]) {
registered[msg.sender][a] = true;
ownerIndex[msg.sender].push(a);
}
}
emit AddressesRegistered(msg.sender, _addrs);
}
/// @notice Remove a list of addresses from your registry
function removeAddresses(address[] calldata _addrs) external {
for (uint i = 0; i < _addrs.length; i++) {
address a = _addrs[i];
if (registered[msg.sender][a]) {
registered[msg.sender][a] = false;
// Note: ownerIndex is not compacted to keep this simple
}
}
emit AddressesRemoved(msg.sender, _addrs);
}
/// @notice Check if an owner registered an address
function isRegistered(address owner, address addr) external view returns (bool) {
return registered[owner][addr];
}
/// @notice Get full list (prototype) - may include addresses removed (simple implementation)
function getRegistered(address owner) external view returns (address[] memory) {
return ownerIndex[owner];
}
}