1. 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
    }
}
  1. code to bytes code
  2. 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);
}