rustvital-amd / contracts /RustVitalAudit.sol
brainworm2024's picture
Final live AMD GPU integration, audit fix
74f2b46
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract RustVitalAudit {
struct Record {
bytes32 cidHash;
bytes32 proofHash;
uint256 attestations;
address submitter;
uint256 timestamp;
}
address public owner;
mapping(bytes32 => Record) public records;
mapping(bytes32 => mapping(address => bool)) public attested;
event RecordAnchored(bytes32 indexed recordId, bytes32 cidHash, bytes32 proofHash, uint256 attestations, address submitter);
event Attested(bytes32 indexed recordId, address indexed hospital, bytes32 attestationHash);
modifier onlyOwner() {
require(msg.sender == owner, "not owner");
_;
}
constructor() {
owner = msg.sender;
}
function anchorRecord(bytes32 recordId, bytes32 cidHash, bytes32 proofHash) external {
require(records[recordId].timestamp == 0, "already anchored");
records[recordId] = Record({
cidHash: cidHash,
proofHash: proofHash,
attestations: 0,
submitter: msg.sender,
timestamp: block.timestamp
});
emit RecordAnchored(recordId, cidHash, proofHash, 0, msg.sender);
}
function attest(bytes32 recordId) external {
Record storage record = records[recordId];
require(record.timestamp != 0, "unknown record");
require(!attested[recordId][msg.sender], "already attested");
attested[recordId][msg.sender] = true;
record.attestations += 1;
bytes32 attestationHash = keccak256(abi.encodePacked(recordId, msg.sender, record.cidHash, record.proofHash, block.timestamp));
emit Attested(recordId, msg.sender, attestationHash);
}
}