Explore Phi

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.
We aim to create pixel art that can effectively represent each service.
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 Name
Quest 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
ENS Quest Object

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.


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);


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;
Philand (Guild.xyz)

Achieved Quests

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

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.
Backend Path for creating coupon


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.
Land Power

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.
Our Quest make a lot of transactions on Uniswap V3
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.