Comment on page
⛓
Quest Object
"quest object" : how it relates to "on-chain activity"
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.
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
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.

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:
- QuestObject: '0x3D8C06e65ebf06A9d40F313a35353be06BD46038'
- PhiClaim: '0x754e78bC0f7B487D304552810A5254497084970C' https://polygonscan.com/address/0x754e78bC0f7B487D304552810A5254497084970C
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.
//User claimed tokenId status is here
mapping(address => mapping(address => mapping(uint256 => uint256))) public phiClaimedLists;

Phi
guildxyz
Philand (Guild.xyz)
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.
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
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 are planning to gradually decentralize the creation of our QuestObject in future updates.
Please look forward to these updates.
Last modified 11mo ago