โ›“๏ธQuest Object

"quest object" : how it relates to "on-chain activity"

Quests are at the center of Phi.

Our quests cover a variety of on-chain activities, such as viewing a user's past gas fees, checking liquidity on Uniswap, viewing token balances, and reviewing gitcoin contribution history.

Each object is carefully designed to represent its associated activity.

Example of ENS Quest

Quest objects can be minted when the user meets certain conditions.

Quest NameQuest Condition

Web3 ENS Owner

Own an ENS domain

Web3 ENS Lookup

Configured ENS Reverse Record to current address

Web3 ENS Avatar

Configured the 'avatar' record in your primary ENS

Web3 ENS Website

Configured the 'url' record in your primary ENS with your philand URL

Web3 ENS Subdomain

Setup an ENS subdomain

Silver $ENS Hodler

Hold at least 100 $ENS

Gold $ENS Hodler

Hold at least 1000 $ENS

๐Ÿง‘โ€๐ŸซpageHow to Verify your transaction

Network info

Quest has Network info. Uniswap Quest is Ethereum Quest. it means that if you create a tx, in Polygon, you can't claim this quest Object.

Quest Object is not Soul-bound-Token

Initially, we planned to implement quest objects as non-transferable tokens that would be bound to a specific user (like SBT, Soulbound Token), but in the current implementation, quest objects can be transferred. You can also buy and sell on Opensea.

https://opensea.io/collection/phi-quest-object

Contract

Two smart contracts related to Quest Object:

In PhiClaim's claimQuestObject, ECDSA signatures are used. (This mechanism is similar to creating a Philand.)

    /*
     * @title claimPhiObject
     * @notice Send create Message to PhiObject
     * @param contractAddress : object contractAddress
     * @param tokenId : object nft token_id
     * @param condition : object related name.
     * @param coupon : coupon api response (ECDSAใ€€signature format)
     * @dev check that the coupon sent was signed by the admin signer
     */
    function claimQuestObject(
        address contractAddress,
        uint256 tokenId,
        string calldata condition,
        Coupon memory coupon
    ) external onlyIfAllreadyClaimedObject(contractAddress, tokenId) {
        // to prevent bots minting from a contract
        require(msg.sender == tx.origin);
        IQuestObject _questObject = IQuestObject(contractAddress);
        // Check that the coupon sent was signed by the admin signer
        bytes32 digest = keccak256(abi.encode(contractAddress, couponType[condition], msg.sender));
        require(isVerifiedCoupon(digest, coupon), "Invalid coupon");
        // Register as an already CLAIMED ADDRESS
        phiClaimedLists[msg.sender][contractAddress][tokenId] = _CLAIMED;
        _questObject.getObject(msg.sender, tokenId);
        emit LogClaimObject(msg.sender, tokenId);
    }
    
   
    /// @dev get object conditon and number (related with offcahin validation)
    function getCouponType(string memory condition) external view returns (uint256) {
        return couponType[condition];
    }

    /// @dev set object conditon and number (related with offcahin validation)
    function setCouponType(string memory condition, uint256 tokenId) external onlyOwner {
        couponType[condition] = tokenId;
        emit SetCoupon(condition, tokenId);
    }

Guild.xyz

The PhiClaim contract records user's address user who has claimed each token.

Using this information, we grant some roles on Discord for guild.xyz.

//User claimed tokenId status is here
mapping(address => mapping(address => mapping(uint256 => uint256))) public phiClaimedLists;

Achieved Quests

This phiClaimedLists is used to track completed quest information. You can check quickly by the account page.

System WorkFlow

When a user claims a quest object, the frontend sends a request for a coupon to the backend. Next, the backend checks the user's balance of USDC, and if it is sufficient, the system creates a token using an admin private key.

If the coupon is successfully created, the user can obtain the quest object by calling the 'claimQuestObject' function from the frontend using the PhiClaim contract.

EXP

As a unique feature, all quest objects have the concept of "exp." Currently, there is no significant utility to the exp value, but quest objects can be placed in a "philand" to increase the "Landpower." The exp value is determined when the quest object is created.

The Power of Quest:

As demonstrated in the tweet example, our quest can drive the growth of the Ethereum ecosystem by collaboration with other web3 services. By using these other services, we can expand and enhance services, which will be beneficial for users, service providers, and PHI.

Collaboration with other web3 services will continue to be a crucial issue to address in the future

We will open Quest creation process...

We are planning to gradually decentralize the creation of our QuestObject in future updates.

Please look forward to these updates.

Last updated