💰 Introduction
INFILTRATION is a blockchain-based Player vs Player (PvP) survival game, combining the world of NFTs with strategic gameplay on the Ethereum blockchain. The contract employs Chainlink's Verifiable Random Function (VRF) to generate a provably fair random number to determine each round’s outcome. This ensures that the process is fair, transparent, and tamper-proof.
For more details, see the Chainlink VRF Documentation.
In INFILTRATION, players mint and manage NFTs known as Agents. The game begins with a minting phase, where a limited number of 10,000 Agents are available for players to acquire at a fixed price of 0.05 ETH.
Once the minting phase concludes, the game transitions into its main action phase. Here, the dynamics of the game come to life. Every round (35 Ethereum blocks / 7 minutes), a percentage (0.3%) of all active agents are randomly marked as wounded. Players will have 48 rounds to attempt to heal their wounded agents using the LOOKS token, although the healing process itself does not always guarantee the player’s agent will heal. There is a likelihood that a healing request fails, and this % will increase with each round that the agent remains wounded (starting at 1% and maxing out at 20%). If a healing request fails, the agent dies. Each round can accommodate at most 30 total healing requests across all wounded agents. Additionally, 25% of all LOOKS tokens used to heal agents will be immediately burned.
Players are also able to escape with their agents at any time, leaving with a small portion of the existing ETH rewards pool. The amount that agents can escape with will start off low, but will increase as the game goes on.
As the game progresses, the field narrows, with each player’s agents either dying from wounds or permanently escaping. This continues until only 50 active agents remain. In this final Endgame phase, an agent dies every round until a winner is declared. During this phase, players will be rewarded with a mix of bonus ETH and LOOKS based on the position that they died or left the game. The longer an agent remains, the more rewards they will be able to claim. Players can continue to escape their agents during this final phase. The last surviving agent will win a much larger additional ETH pot.
Game Phases
The game is divided into three main phases outlined below:
Phase I - Minting
This minting phase ends lasts 24 hours or earlier if the mint sells out. After that, that game will be put into a short idle phase until the official game’s start time. This pause between the mint and the beginning of the game allows the players to familiarize themselves with the game, strategize, and buy/sell agents prior to the game beginning.
Phase II - Breach
The main action of the game occurs in this phase. The players can view game progress, including the prize pot, number of active and wounded agents, current round actions and more. A player’s agents can be managed through the Squad page or by interacting directly with the contract. Agents have the option of escaping from the game to receive an ETH reward based on the number of agents left. Wounded agents can also be healed using LOOKS or ETH. If the ETH option is selected, the contract will buy the required LOOKS amount in the same transaction to use for healing.
Phase III - Endgame
This final phase starts when only 50 active agents are left. In this phase, one agent dies each round. Agents are still able to escape if they wish, however healing is disabled. All agents within the top 50 will win a secondary prize. Meanwhile, the last agent remaining wins both a secondary prize and a significant primary prize.
Deployed Contracts
Here’s a list of all the LooksRare deployed contracts used for the INFILTRATION game:
Contract | Ethereum Mainnet |
---|---|
Infiltration | TBD |
InfiltrationPeriphery | TBD |
TransferManager | 0x00000000000ea4af05656C17b90f4d64AdD29e1d (view on Etherscan) |
LOOKS | 0xf4d2888d29D722226FafA5d9B24F9164c092421E (view on Etherscan) |
Contracts Interactions
There are a few actions players can take during the game, all of which can be executed directly by calling the contract on-chain programmatically. Here is an overview of each of the possible player interactions:
Most player actions are blocked during the round transition (while we wait for Chainlink to fulfil the randomness request). Here’s how to verify if the player actions are currently blocked:
- Call the
gameInfo
view function to get thecurrentRoundBlockNumber
- Get the current block number via your provider, let’s call it
currentBlockNumber
- If
currentBlockNumber >= currentRoundBlockNumber + 35
, player actions could be blocked.
Mint
This action can be performed by calling the mint
function on the contract and specifying the amount of tokens to mint. The caller must take care to send the correct amount of ETH; this can be calculated using the value defined in the PRICE
constant multiplied by the number of agents to mint.
Infiltration
contract:
function mint(uint256 quantity) external payable;
Escape
Players can escape agents via the contract by calling the escape
function on the contract and providing the agents' IDs as an array. This function can only be called during a round, after the game has begun, and not within a round transitions period.
The
msg.sender
must own the agents.The player will a receive a reward based on the number of agents left.
Infiltration
contract:
function escape(uint256[] calldata agentIds) external;
Heal
Players can request healing for their wounded agents via the contract by calling the heal
function either on the main game contract (if paid in LOOKS) or via the InfiltrationPeriphery
contract (if paid in ETH) and providing the agents' IDs as an array. This function can only be called during a round, not during round transitions.
The amount of LOOKS/ETH required to heal can be obtained by calling costToHeal
. When paying in ETH, the excess amount is refunded, while with LOOKS, only the right amount is taken by the contract.
The contract burns 25% of the LOOKS used to pay for the healing request, while the remaining 75% is added to the secondary LOOKS prize pool used to reward the top 50 agents.
Infiltration
contract:
function costToHeal(uint256[] calldata agentIds) external view returns (uint256 cost); // Cost in LOOKS
function heal(uint256[] calldata agentIds) external; // LOOKS version
InfiltrationPeriphery
contract:
function costToHeal(uint256[] calldata agentIds) external returns (uint256 costToHealInETH); // Cost in ETH
function heal(uint256[] calldata agentIds) external payable // ETH version
Heal Approvals
Approvals are required to pay directly in LOOKS. These can be sorted by calling grantApprovals
on the TransferManager
contract, and then the standard approve
function on the LOOKS contract with the operator set to the TransferManager
.
These approvals are required only once per wallet.
TransferManager
contract:
function grantApprovals(address[] calldata operators) external; // The operator is the Infiltration contract.
LOOKS
contract:
function approve(address spender, uint256 amount) external; // The spender is the TransferManager contract.
Audit Report and Security Assurance
At LooksRare, security is a top priority. The Infiltration smart contract has been rigorously audited by a group of third-party auditors via a public contest using the Sherlock protocol to ensure the highest level of safety and reliability. The audit assesses the contract for potential vulnerabilities and compliance with best practices in the blockchain industry.
We are committed to maintaining the highest security standards and to continuously improving our smart contract infrastructure responsibly; below is the audit report for the LooksRare INFILTRATION game:
Sherlock
Audit Report: here