//SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "../utilities/Moderatable.sol"; /* * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR*+++++*@@RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR@++++++++*RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR+++++++++@RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR*++++++++*RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR*+++++++++RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR+++++++++RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR+R++++++++++RRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR*+RR*+++++++++RRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR+++++++RRRRRR++RRR*+++++++++RRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR++++++++RRRR+++RRRR******+++*RRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR++++++RRRR**+RRRRRR*******++RRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR***+++RRR****RRRRRR********+*RRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR****++@RR****RRRRRRR********+*RRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR****++R##***RRRRRRRRR*********RRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR#****+R###**RRRRRRRRRR*********@RRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR##****R###**RRRRRRRRRRR**********RRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR###***####**RRRRRRRRRRRR**********RRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR#####**####**RRRRRRRRRRRRR**********RRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR######*#####**RRRRRRRRRRRRRR*********RRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR@######*#####*RRRRRRRRRRRRRRRR*********RRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR@##############RRRRRRRRRRRRRRRRR*********RRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR###############RRRRRRRRRRRRRRRRRRR*********RRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR@+++++RRRR*RR################RRRRRRRRRRRRRRRRRRR**********RRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRR*++++++++++++*RR####################RRRRRRRRRRRRRRRRR*********RRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRR+++++++++++++**RRR#######################RRRRRRRRRRRRRRRR*********RRRRRR * RRRRRRRRRRRRRRRRRRRRRR+++++++++++++**RRRR#######**################RRRRRRRRRRRRRRR**********RRRRR * RRRRRRRRRRRRRRRRRRRR+++++++++++++***RRRR######*********############*RRRRRRRRRRRRRR*********RRRRR * RRRRRRRRRRRRRRRRRRR++++++++++++****RRRR**####R++***+***###########***RRRRRRRRRRRRR**********RRRR * RRRRRRRRRRRRRRRRR+++++++++++++***RRRRRR***##R++++++++***##*#######**++RRRRRRRRRRRRR*********RRRR * RRRRRRRRRRRRRRRR+++*************RRRRRR*****RR+++*****++++++++++++++++++RRRRRRRRRRRRR*********RRR * RRRRRRRRRRRRRR@****************RRRRRRR++**RRR+********+++*********++++++RRRRRRRRRRRR*********RRR * RRRRRRRRRRRRR******************RRRRRRR+++RRR#####******+************++++*RRRRRRRRRRR*********RRR * RRRRRRRRRRRR******************RRRRRRRR++*R#########*******************++RRRRRRRRRRRRR*********RR * RRRRRRRRRRR******************RRRRRRRRR++*############******************+RR+RRRRRRRRRR*********RR * RRRRRRRRRRR*****************RRRRRRRRRR+*##############**********##*******R@@RRRRRRRRR#********RR * RRRR*RRRRR**********#*******RRRRRRRRRR*###############***********##*****+RR+RRRRRRRRRR*********R * RRRR*RRRR********####******RRRRRRRRRR*#####******######**********###*****RR+RRRRRRRRRR*********R * RRR*RRRR******######*******RRRRRRRRR**###****##****####***********###*****RR+RRRRRRRRR#********R * RRR+RRRR*****######*******RRRRRRRRRR**##**#RRRR###**###************###****RR+RRRRRRRRR#********R * RR*+RRR*****#######*******RRRRRRRRRR**#**#RRRRRRR##**##*************##****RR+*RRRRRRRRR#*******R * RR++RRR****#######********RRRRRRRRRR**#**RRRRRRRRRR#**#***#*********###***RR++RRRRRRRRR#******** * RR++RR****#######********RRRRRRRRRRR****RRRRRRRRRRR##*****##***#****###***RR++RRRRRRRRR#******** * R*++RR***########********RRRRRRRRRRR***RRRRRRRRRRRRR#*****##***#*****##***RR*+RRRRRRRRR##******* * R+++R****#######******+**RRRRRRRRRRR***RRRRRRRRRRRRRR****####**#*****##***RRR++RRRRRRRR#******** * R+++R***########******+**RRRRRRRRRRRR*RRRRRRRRRRRRRRR****####***#****##***RRR++RRRRRRRR#******** * R+++R**#########*****#***RRRRRRRRRRRR*RRRRRRRRRRRRRRRR***####***#*****#***RRR++RRRRRRRR##******* * @+++***########*****#****RRRRRRRRRRRRRRRRRRRRRRRRRRRRR***####***#********RRRR++RRRRRRRR##******* * ++++**#########*****#****RRRRRRRRRRRRRRRRRRRRRRRRRRRRR**#####***#********RRR*++RRRRRRRR##******* * ++++**#########*****#****RRRRRRRRRRRRRRRRRRRRRRRRRRRRR*+#####***#********RRR*++RRRRRRRR##******* * ++++**########*****##*****RRRRRRRRRRRRRRRRRRRRRRRRRRR*++#####**##*******RRRR*+++RRRRRRR##******* * ++++**########*****###****RRRRRRRRRRRRRRRRRRRRRRRRRRR++R#####**##*******RRRR*+++RRRRRRR##******* * ++++*#########*****###****RRRRRRRRRRRRRRRRRRRRRRRRRR+++R####***##*******RRRR*+++RRRRRRR##******* * ++++*#########*****###*****RRRRRRRRRRRRRRRRRRRRRRRRR++RR####***#*******RRRR**+++RRRRRRR##******* * ++++*#########*****###*****RRRRRRRRRRRRRRRRRRRRRRRR*+RR####***##*******RRRR**+++RRRRRRR#******** * ++++*#########*****###*****RRRRRRRRRRRRRRRRRRRRRRRRRRRR###****#*******RRRR@**+++RRRRRRR#******** * ++++*#########*****####*****RRRRRRRRRRRRRRRRRRRRRRRRRRR##***********+@RRRR***++RRRRRRR##******** * ++++*#########******###******RRRRRRRRRRRRRRRRRRRRRRRRR##*****#*****++RRRRR**+++RRRRRRR##******** * +++++*########******###******RRRRRRRRRRRRRRRRRRRRRRRRR************++RRRRR***+++RRRRRRR#********R * @++++*########******####******RRRRRRRRRRRRRRRRRRRRRRR*************+RRRRR****+++RRRRRRR#********R * @++++*#########*****####*******RRRRRRRRRRRRRRRRRRRRR*************+RRRRRR***++++RRRRRRR#********R * R++++**########******####*******RRRRRRRRRRRRRRRRRRR*************+RRRRRR****++++RRRRRR#*********R * R+++++*########******####********RRRRRRRRRRRRRRRR*****++*******+RRRRRR****++++*RRRRRR#*********R * R+++++*#########*****#####*******#RRR++RRRRRRRR+*+++++*******++RRRRRR*****++++RRRRRRR#********RR * RR++++**########******#####*******#RRR@+++++++++++++*******+++RRRRRR******++++RRRRRR#*********RR * RR++++***#######******#####********#RRRRR++++++++******+++++RRRRRR*******+++++RRRRRR#*********RR * RR++++****#######******#####********#RRRRRR@++++++++++++++RRRRRRR*******+++++@RRRRRR*********RRR * RRR+++*****######*******#####*********#RRRRRRRRR*++*++RRRRRRRRR********++++++RRRRRR**********RRR * RRR+++*******#####******######*********##RRRRRRRRRRRRRRRRRRRR**********++++++RRRRRR**********RRR * RRRR++*********###********#####**********###RRRRRRRRRRRRRR************++++++RRRRRR**********RRRR * RRRR++*********************#####************######RR####*************+++++++RRRRRR**********RRRR * RRRR@+**********************#####***************#*******************+++++++@RRRRR**********RRRRR * RRRRR+***********************######********************************++++++++RRRRRR**********RRRRR * RRRRRR+************************#####*****************************+++**++++RRRRRR***********RRRRR * RRRRRR**********#****************####***************************+++**+++++RRRRRR**********RRRRRR * RRRRRRR*********##*******************##***********************++++***++++RRRRRR**********RRRRRRR * RRRRRRRR*********###**+++***********************************++++****+++++RRRRR***********RRRRRRR * RRRRRRRRR*********####*+++*******************************++++++*****++++RRRRRR**********RRRRRRRR * RRRRRRRRR*********######*++*******************************++++******+++RRRRRR***********RRRRRRRR * RRRRRRRRRR*********#######*++****************************+++*******+++RRRRRR***********RRRRRRRRR * RRRRRRRRRRR********##########++***********************++++*********++@RRRRR***********RRRRRRRRRR * RRRRRRRRRRRR********###########*********************++++**********++RRRRRR***********@RRRRRRRRRR * RRRRRRRRRRRRR********#############***************++++************++@RRRRRR***********RRRRRRRRRRR * RRRRRRRRRRRRRR*********###############********+++**##***********++RRRRRRR***********RRRRRRRRRRRR * RRRRRRRRRRRRRRR*********###########################**************RRRRRRR**********+RRRRRRRRRRRRR * RRRRRRRRRRRRRRRRR********########################***************RRRRRRR*********++RRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRR*********#####################**************RRRRRRRR*********++RRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRR*********################****************RRRRRRR*********+++RRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRR*************########*****************RRRRRRRR*********+++@RRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRR**********************************RRRRRRRRR*******+++++RRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRR****************************RRRRRRRRRR*******++++++RRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRR************************RRRRRRRRRRR*****+++++++*RRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR*****************RRRRRRRRRRRRR*++*+++++++++*RRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR*+++++++++++++RRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR*++++++++++++++RRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR+++++++++++++++RRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRR**RRRRRRRRRRRRRRRRRRRRRRRRRRR*+++++++++++++++RRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRR+++@RRRRRRRRRRRRRRRRR@++++++++++++++++++RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRR@++++++++++*++++++++++++++++++++++++RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR++++++++++++++++++++++++++++*RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR@++++++++++++++++++++*RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR * KODEX BYTE STORE */ contract ByteStore is Moderatable { event DataEvent( string action, address moderator, bytes current, bytes parent, uint index, uint time ); bytes private _empty; bytes private _manifest; uint private _dataHeight = 0; mapping(uint256 => bytes) public _data; string public name; uint256 public deployedBlock = block.number; uint public createDate = block.timestamp; constructor(string memory _name) Moderatable() { name = _name; } function setManifest( bytes memory manifest ) public onlyRole(ROLE_MODERATOR) { bytes memory oldManifest = _manifest; _manifest = manifest; // emit Manifest(manifest, block.timestamp); emit DataEvent( "manifest", _msgSender(), _manifest, oldManifest, 0, block.timestamp ); } function getManifest() public view returns (bytes memory manifest) { return _manifest; } function getDataHeight() public view returns (uint256 dataHeight) { return _dataHeight; } function hasData(bytes memory _hash) public view returns (bool, uint256) { for (uint256 i = 0; i < _dataHeight; i++) { bytes memory candidate = _data[i]; if (keccak256(candidate) == keccak256(_hash)) { return (true, i); } } return (false, 0); } function getData(uint256 index) public view returns (bytes memory data) { return _data[index]; } function addData( bytes memory _hash ) public onlyRole(ROLE_MODERATOR) returns (bool, uint256) { (bool dataFound, ) = hasData(_hash); if (!dataFound) { _data[_dataHeight] = _hash; uint256 index = _dataHeight; _dataHeight++; emit DataEvent( "added", _msgSender(), _hash, _empty, index, block.timestamp ); return (dataFound, index); } return (dataFound, _dataHeight); } function addMultiple( bytes[] memory _hashes ) public onlyRole(ROLE_MODERATOR) { for (uint256 i = 0; i < _hashes.length; i++) { bytes memory candidate = _hashes[i]; (bool dataFound, ) = hasData(candidate); if (!dataFound) { addData(candidate); } } } function updateData( uint256 index, bytes memory _hash ) public onlyRole(ROLE_MODERATOR) { bytes memory parent = _data[index]; _data[index] = _hash; emit DataEvent( "udpated", _msgSender(), _hash, parent, index, block.timestamp ); } function removeData(uint256 index) public onlyRole(ROLE_MODERATOR) { if (keccak256(_data[index]) != keccak256(abi.encode(0x0))) { emit DataEvent( "removed", _msgSender(), _data[index], _empty, index, block.timestamp ); delete _data[index]; } } }