- make rating logic
/////////////////////////////////////////////////////////////////////////////////
/ /
/ ↓Do not change↓ /
/ /
/////////////////////////////////////////////////////////////////////////////////
pragma solidity ^0.8.9;
import "./IRatingStorage.sol";
import "./IEAS.sol";
import "./ISchemaRegistry.sol";
contract Rating {
IRatingStorage private ratingstorage = IRatingStorage(0x8ABF2979De2FeA109FD20b359AA7a2582339d64e);
// About eas
IEAS public eas = IEAS(0xC2679fBD37d54388Ce493F1DB75320D236e1815e);
bytes32 public SCHEMA_ID = 0x20ca2425687955822f30d1ac5b10992477298abd6f10e5e14c493025395056d6;
mapping ( address => bytes32 ) private easUsers;
struct Rating {
uint256 ratingValue;
address EOAAddress;
}
event RatingUpdated(address userAddress, address attester, uint256 newRating);
function update(address winner, address loser) public {
uint256 winnerRating = getRatingFromEAS(winner);
uint256 loserRating = getRatingFromEAS(loser);
(uint256 newWinnerRating, uint256 newLoserRating) = recalculateRatings(winnerRating, loserRating);
setRatingFor(winner, newWinnerRating);
setRatingFor(loser, newLoserRating);
}
function convertRatingToBytes(address user, uint256 ratingValue) public pure returns (bytes memory) {
Rating memory rating = Rating({ratingValue: ratingValue, EOAAddress: user}); // 順番守る必要ある
bytes memory ratingBytes = abi.encode(rating);
return ratingBytes;
}
function getRatingFromEAS(address userAddress) private view returns(uint256) {
if (ratingstorage.getUserRating(address(this), userAddress) == 0){
return 1500;
}
return ratingstorage.getUserRating(address(this), userAddress);
}
function setRatingFor(address user,uint256 ratingValue) public {
ratingstorage.postRating(address(this), user, ratingValue);
bytes memory rating = convertRatingToBytes(user,ratingValue);
bytes32 uId = eas.attest(
AttestationRequest(
{
schema: SCHEMA_ID,
data: AttestationRequestData({
recipient: address(user),
expirationTime: uint64(0),
revocable: false,
refUID: bytes32(0x0000000000000000000000000000000000000000000000000000000000000000),
data: rating,
value: uint256(0)
})
})
);
emit RatingUpdated(user, address(this), ratingValue);
}
/////////////////////////////////////////////////////////////////////////////////
/ /
/ ↑Do not change↑ /
/ /
/////////////////////////////////////////////////////////////////////////////////
function recalculateRatings(uint256 winnerRating,uint256 loserRating) public view returns(uint256,uint256){
// this change
}
}
- code to bytes code
- append rating register
pragma solidity ^0.8.9;
strct IRatingRegister {
function createRating(string memory logicName) public returns (address);
// this function
function registerLogic(string memory name, bytes memory byteCode) public;
function getLogicList() view public returns(string[] memory);
}