Source Code
Overview
ETH Balance
0.01 ETH
Eth Value
$29.26 (@ $2,925.66/ETH)Latest 25 from a total of 95 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Enter Queue | 23784067 | 73 days ago | IN | 0.005 ETH | 0.00027282 | ||||
| Enter Queue | 23735263 | 80 days ago | IN | 0.005 ETH | 0.00024412 | ||||
| Reveal Match Res... | 23734467 | 80 days ago | IN | 0 ETH | 0.0003966 | ||||
| Match Players | 23734457 | 80 days ago | IN | 0 ETH | 0.00023185 | ||||
| Enter Queue | 23734453 | 80 days ago | IN | 0.005 ETH | 0.00039412 | ||||
| Enter Queue | 23734412 | 80 days ago | IN | 0.005 ETH | 0.0003471 | ||||
| Reveal Match Res... | 23734403 | 80 days ago | IN | 0 ETH | 0.00015869 | ||||
| Match Players | 23734392 | 80 days ago | IN | 0 ETH | 0.00012664 | ||||
| Enter Queue | 23734388 | 80 days ago | IN | 0.005 ETH | 0.00013209 | ||||
| Enter Queue | 23734366 | 80 days ago | IN | 0.005 ETH | 0.00026732 | ||||
| Reveal Match Res... | 23734337 | 80 days ago | IN | 0 ETH | 0.00010255 | ||||
| Reveal Match Res... | 23734336 | 80 days ago | IN | 0 ETH | 0.00012806 | ||||
| Match Players | 23734330 | 80 days ago | IN | 0 ETH | 0.00010192 | ||||
| Enter Queue | 23734325 | 80 days ago | IN | 0.005 ETH | 0.00010585 | ||||
| Enter Queue | 23734293 | 80 days ago | IN | 0.005 ETH | 0.00026417 | ||||
| Reveal Match Res... | 23734283 | 80 days ago | IN | 0 ETH | 0.00027189 | ||||
| Match Players | 23734279 | 80 days ago | IN | 0 ETH | 0.00011067 | ||||
| Enter Queue | 23734274 | 80 days ago | IN | 0.005 ETH | 0.00031571 | ||||
| Enter Queue | 23734263 | 80 days ago | IN | 0.005 ETH | 0.00027634 | ||||
| Reveal Match Res... | 23734250 | 80 days ago | IN | 0 ETH | 0.00012262 | ||||
| Leave Queue | 23734248 | 80 days ago | IN | 0 ETH | 0.00011701 | ||||
| Match Players | 23734244 | 80 days ago | IN | 0 ETH | 0.00009731 | ||||
| Enter Queue | 23734241 | 80 days ago | IN | 0.005 ETH | 0.00026322 | ||||
| Enter Queue | 23734240 | 80 days ago | IN | 0.005 ETH | 0.00011469 | ||||
| Reveal Match Res... | 23734225 | 80 days ago | IN | 0 ETH | 0.00027318 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 23734467 | 80 days ago | 0.0096 ETH | ||||
| Transfer | 23734467 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734467 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734467 | 80 days ago | 0.0002 ETH | ||||
| Transfer | 23734403 | 80 days ago | 0.0096 ETH | ||||
| Transfer | 23734403 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734403 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734403 | 80 days ago | 0.0002 ETH | ||||
| Transfer | 23734336 | 80 days ago | 0.0096 ETH | ||||
| Transfer | 23734336 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734336 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734336 | 80 days ago | 0.0002 ETH | ||||
| Transfer | 23734283 | 80 days ago | 0.0096 ETH | ||||
| Transfer | 23734283 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734283 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734283 | 80 days ago | 0.0002 ETH | ||||
| Transfer | 23734250 | 80 days ago | 0.0096 ETH | ||||
| Transfer | 23734250 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734250 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734250 | 80 days ago | 0.0002 ETH | ||||
| Transfer | 23734248 | 80 days ago | 0.005 ETH | ||||
| Transfer | 23734225 | 80 days ago | 0.0096 ETH | ||||
| Transfer | 23734225 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734225 | 80 days ago | 0.0001 ETH | ||||
| Transfer | 23734225 | 80 days ago | 0.0002 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Arena
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
/// @title Arena
/// @notice Commit-reveal RPS wagering with authorized matching
contract Arena {
enum WeaponType {
Rock,
Paper,
Scissors
}
struct Entry {
uint96 wager;
bytes32 commitHash;
uint64 commitBlock;
address opponent;
uint64 matchBlock;
bool revealed; // AW-C-01: Track reveal status
}
mapping(address => Entry) public queue;
mapping(address => uint256) public credits;
mapping(address => uint256) public lastCreditedAt; // AW-L-01: Track credit timestamps
address public owner;
address public matcher;
address public feeProtocol;
address public feeSeasonCurrent;
address public feeSeasonNext;
uint64 public constant REVEAL_DEADLINE_BLOCKS = 1_800;
uint256 public constant CREDIT_RECOVERY_DELAY = 365 days; // AW-L-01: Stale credit recovery delay
uint256 private locked = 1;
event Entered(address indexed player, uint96 wager, bytes32 commitHash);
event Left(address indexed player);
event Matched(address indexed a, address indexed b, uint64 matchBlock);
event Resolved(address indexed a, address indexed b, address winner, bool gunA, bool gunB, bool tiebreak);
event Forfeited(address indexed winner, address indexed loser);
event Credited(address indexed to, uint256 amount);
event CreditsRecovered(address indexed from, address indexed to, uint256 amount); // AW-L-01: Credit recovery event
event IndividualReveal(address indexed player, address indexed opponent);
event FeeRecipientsSet(address protocol, address seasonCurrent, address seasonNext);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event MatcherSet(address indexed previousMatcher, address indexed newMatcher);
error ActiveEntry();
error InactiveEntry();
error ValueMismatch();
error TierInvalid();
error OpponentRequired();
error NotAfterCommit();
error PastDeadline();
error BadCommit();
error NotMatched();
error WagerMismatch();
error NoCredits();
error TransferFailed();
error Unauthorized();
error InvalidAddress();
error ReentrancyGuard();
error InvalidWeapon();
error AlreadyMatched();
error NotPastDeadline();
error LoserAlreadyRevealed(); // AW-C-01: Prevent forfeit of revealed player
error RecoveryTooEarly(); // AW-L-01: Recovery delay not met
modifier onlyOwner() {
if (msg.sender != owner) revert Unauthorized();
_;
}
modifier onlyMatcher() {
if (msg.sender != matcher) revert Unauthorized();
_;
}
modifier nonReentrant() {
if (locked != 1) revert ReentrancyGuard();
locked = 2;
_;
locked = 1;
}
constructor() {
owner = msg.sender;
matcher = msg.sender;
feeProtocol = msg.sender;
feeSeasonCurrent = msg.sender;
feeSeasonNext = msg.sender;
emit OwnershipTransferred(address(0), msg.sender);
}
function enterQueue(uint8 tier, bytes32 commitHash) external payable nonReentrant {
if (tier > 3) revert TierInvalid();
if (queue[msg.sender].wager != 0) revert ActiveEntry();
uint96 requiredWager = wagerForTier(tier);
if (msg.value != requiredWager) revert ValueMismatch();
queue[msg.sender] = Entry({
wager: requiredWager,
commitHash: commitHash,
commitBlock: uint64(block.number),
opponent: address(0),
matchBlock: 0,
revealed: false
});
emit Entered(msg.sender, requiredWager, commitHash);
}
function leaveQueue() external nonReentrant {
Entry storage entry = queue[msg.sender];
if (entry.wager == 0) revert InactiveEntry();
if (entry.opponent != address(0)) revert AlreadyMatched();
uint96 refundAmount = entry.wager;
delete queue[msg.sender];
_safeSend(msg.sender, refundAmount);
emit Left(msg.sender);
}
/// @notice Allow individual reveal to protect against griefing
/// @dev AW-C-01: Players can independently reveal their commits onchain
/// @param weapons The player's weapon choices
/// @param salt The player's salt used in commitment
function revealIndividual(WeaponType[3] calldata weapons, bytes32 salt) external nonReentrant {
Entry storage entry = queue[msg.sender];
if (entry.opponent == address(0)) revert NotMatched();
if (entry.wager == 0) revert InactiveEntry();
uint64 matchBlock = entry.matchBlock;
if (block.number <= matchBlock + 1) revert NotAfterCommit();
if (block.number > matchBlock + REVEAL_DEADLINE_BLOCKS) revert PastDeadline();
// Validate the player's commitment
_validateWeapons(weapons);
_validateCommit(msg.sender, weapons, salt, entry.commitHash);
// Mark as revealed
entry.revealed = true;
emit IndividualReveal(msg.sender, entry.opponent);
}
function matchPlayers(address a, address b) external onlyMatcher nonReentrant {
if (a == b) revert OpponentRequired();
Entry storage entryA = queue[a];
Entry storage entryB = queue[b];
if (entryA.wager == 0 || entryB.wager == 0) revert InactiveEntry();
if (entryA.wager != entryB.wager) revert WagerMismatch();
if (entryA.opponent != address(0) || entryB.opponent != address(0)) revert AlreadyMatched();
uint64 currentBlock = uint64(block.number);
entryA.opponent = b;
entryA.matchBlock = currentBlock;
entryB.opponent = a;
entryB.matchBlock = currentBlock;
emit Matched(a, b, currentBlock);
}
function revealMatchResult(
address a,
address b,
WeaponType[3] calldata aW,
bytes32 aSalt,
WeaponType[3] calldata bW,
bytes32 bSalt
) external nonReentrant {
if (a == b) revert OpponentRequired();
Entry storage entryA = queue[a];
Entry storage entryB = queue[b];
if (entryA.opponent != b || entryB.opponent != a) revert NotMatched();
if (entryA.wager != entryB.wager) revert WagerMismatch();
uint64 matchBlock = entryA.matchBlock;
if (block.number <= matchBlock + 1) revert NotAfterCommit();
if (block.number > matchBlock + REVEAL_DEADLINE_BLOCKS) revert PastDeadline();
_validateWeapons(aW);
_validateWeapons(bW);
_validateCommit(a, aW, aSalt, entryA.commitHash);
_validateCommit(b, bW, bSalt, entryB.commitHash);
// AW-C-01: Mark both players as revealed
entryA.revealed = true;
entryB.revealed = true;
bytes32 seedBlock = blockhash(matchBlock + 1);
if (seedBlock == 0 && block.number > matchBlock + 257) {
seedBlock = keccak256(abi.encodePacked(matchBlock));
}
address lo = a < b ? a : b;
address hi = a < b ? b : a;
bytes32 seed = keccak256(
abi.encodePacked(
lo,
hi,
lo == a ? entryA.commitHash : entryB.commitHash,
lo == a ? entryB.commitHash : entryA.commitHash,
lo == a ? aSalt : bSalt,
lo == a ? bSalt : aSalt,
seedBlock
)
);
address winner = _determineWinner(a, b, aW, bW, seed);
uint256 pot = uint256(entryA.wager) + uint256(entryB.wager);
delete queue[a];
delete queue[b];
_distributePayout(winner, pot);
bool gunA = uint256(keccak256(abi.encodePacked(seed, "A"))) % 100 == 0;
bool gunB = uint256(keccak256(abi.encodePacked(seed, "B"))) % 100 == 0;
bool tiebreak = !gunA && !gunB && _scoreBestOfThree(aW, bW) == 0;
emit Resolved(a, b, winner, gunA, gunB, tiebreak);
}
function forfeitUnrevealed(address winner, address loser, WeaponType[3] calldata winnerWeapons, bytes32 winnerSalt)
external
nonReentrant
{
if (winner == loser) revert OpponentRequired();
Entry storage entryW = queue[winner];
Entry storage entryL = queue[loser];
if (entryW.opponent != loser || entryL.opponent != winner) revert NotMatched();
if (entryW.wager != entryL.wager) revert WagerMismatch();
uint64 matchBlock = entryW.matchBlock;
if (block.number <= matchBlock + REVEAL_DEADLINE_BLOCKS) revert NotPastDeadline();
// AW-C-01: Prevent forfeit if loser has already revealed
if (entryL.revealed) revert LoserAlreadyRevealed();
_validateWeapons(winnerWeapons);
_validateCommit(winner, winnerWeapons, winnerSalt, entryW.commitHash);
uint256 pot = uint256(entryW.wager) + uint256(entryL.wager);
delete queue[winner];
delete queue[loser];
_distributePayout(winner, pot);
emit Forfeited(winner, loser);
}
function claim() external nonReentrant {
uint256 amount = credits[msg.sender];
if (amount == 0) revert NoCredits();
credits[msg.sender] = 0;
(bool success,) = msg.sender.call{ value: amount }("");
if (!success) revert TransferFailed();
}
function setFeeRecipients(address protocol, address seasonCurr, address seasonNext) external onlyOwner {
if (protocol == address(0) || seasonCurr == address(0) || seasonNext == address(0)) {
revert InvalidAddress();
}
if (protocol == address(this) || seasonCurr == address(this) || seasonNext == address(this)) {
revert InvalidAddress();
}
feeProtocol = protocol;
feeSeasonCurrent = seasonCurr;
feeSeasonNext = seasonNext;
emit FeeRecipientsSet(protocol, seasonCurr, seasonNext);
}
function setMatcher(address newMatcher) external onlyOwner {
if (newMatcher == address(0)) revert InvalidAddress();
address oldMatcher = matcher;
matcher = newMatcher;
emit MatcherSet(oldMatcher, newMatcher);
}
function transferOwnership(address newOwner) external onlyOwner {
if (newOwner == address(0)) revert InvalidAddress();
address oldOwner = owner;
owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
function wagerForTier(uint8 tier) public pure returns (uint96) {
if (tier == 0) return 0.005 ether;
if (tier == 1) return 0.05 ether;
if (tier == 2) return 0.5 ether;
if (tier == 3) return 2.5 ether;
revert TierInvalid();
}
function _validateWeapons(WeaponType[3] calldata weapons) private pure {
for (uint256 i = 0; i < 3; i++) {
if (uint8(weapons[i]) > 2) revert InvalidWeapon();
}
}
function _validateCommit(address player, WeaponType[3] calldata weapons, bytes32 salt, bytes32 expectedHash)
private
view
{
bytes32 actualHash = keccak256(
abi.encodePacked(
uint8(weapons[0]), uint8(weapons[1]), uint8(weapons[2]), salt, player, address(this), block.chainid
)
);
if (actualHash != expectedHash) revert BadCommit();
}
function _determineWinner(address a, address b, WeaponType[3] calldata aW, WeaponType[3] calldata bW, bytes32 seed)
private
pure
returns (address)
{
bool gunA = uint256(keccak256(abi.encodePacked(seed, "A"))) % 100 == 0;
bool gunB = uint256(keccak256(abi.encodePacked(seed, "B"))) % 100 == 0;
if (gunA && !gunB) return a;
if (!gunA && gunB) return b;
int8 score = _scoreBestOfThree(aW, bW);
if (score > 0) return a;
if (score < 0) return b;
return (uint256(keccak256(abi.encodePacked(seed, "T"))) & 1) == 0 ? a : b;
}
function _scoreBestOfThree(WeaponType[3] calldata aW, WeaponType[3] calldata bW) private pure returns (int8) {
int8 score = 0;
for (uint256 i = 0; i < 3; i++) {
score += _playRPS(aW[i], bW[i]);
}
return score;
}
function _playRPS(WeaponType a, WeaponType b) private pure returns (int8) {
if (a == b) return 0;
if (a == WeaponType.Rock && b == WeaponType.Scissors) return 1;
if (a == WeaponType.Scissors && b == WeaponType.Paper) return 1;
if (a == WeaponType.Paper && b == WeaponType.Rock) return 1;
return -1;
}
function _distributePayout(address winner, uint256 pot) private {
uint256 feeP = pot * 200 / 10_000;
uint256 feeSC = pot * 100 / 10_000;
uint256 feeSN = pot * 100 / 10_000;
uint256 winnerAmount = pot - feeP - feeSC - feeSN;
_safeSend(feeProtocol, feeP);
_safeSend(feeSeasonCurrent, feeSC);
_safeSend(feeSeasonNext, feeSN);
_safeSend(winner, winnerAmount);
}
function _safeSend(address to, uint256 amount) private {
if (amount == 0) return;
(bool success,) = to.call{ value: amount, gas: 100000 }(""); // AW-L-02: Increased gas for smart wallets
if (!success) {
credits[to] += amount;
lastCreditedAt[to] = block.timestamp; // AW-L-01: Track credit timestamp
emit Credited(to, amount);
}
}
/// @notice Recover stale credits that cannot be claimed
/// @dev AW-L-01: Owner-only recovery after conservative delay
/// @param from Address with unclaimed credits
/// @param to Recovery recipient address
function recoverStaleCredits(address from, address to) external onlyOwner nonReentrant {
uint256 amount = credits[from];
if (amount == 0) revert NoCredits();
// Enforce recovery delay since last credit
if (block.timestamp < lastCreditedAt[from] + CREDIT_RECOVERY_DELAY) {
revert RecoveryTooEarly();
}
credits[from] = 0;
emit CreditsRecovered(from, to, amount);
(bool success,) = to.call{ value: amount }("");
if (!success) revert TransferFailed();
}
receive() external payable { }
}{
"remappings": [
"forge-std/=lib/forge-std/src/",
"@openzeppelin/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": true
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ActiveEntry","type":"error"},{"inputs":[],"name":"AlreadyMatched","type":"error"},{"inputs":[],"name":"BadCommit","type":"error"},{"inputs":[],"name":"InactiveEntry","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidWeapon","type":"error"},{"inputs":[],"name":"LoserAlreadyRevealed","type":"error"},{"inputs":[],"name":"NoCredits","type":"error"},{"inputs":[],"name":"NotAfterCommit","type":"error"},{"inputs":[],"name":"NotMatched","type":"error"},{"inputs":[],"name":"NotPastDeadline","type":"error"},{"inputs":[],"name":"OpponentRequired","type":"error"},{"inputs":[],"name":"PastDeadline","type":"error"},{"inputs":[],"name":"RecoveryTooEarly","type":"error"},{"inputs":[],"name":"ReentrancyGuard","type":"error"},{"inputs":[],"name":"TierInvalid","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"ValueMismatch","type":"error"},{"inputs":[],"name":"WagerMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Credited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CreditsRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint96","name":"wager","type":"uint96"},{"indexed":false,"internalType":"bytes32","name":"commitHash","type":"bytes32"}],"name":"Entered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"protocol","type":"address"},{"indexed":false,"internalType":"address","name":"seasonCurrent","type":"address"},{"indexed":false,"internalType":"address","name":"seasonNext","type":"address"}],"name":"FeeRecipientsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":true,"internalType":"address","name":"loser","type":"address"}],"name":"Forfeited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"address","name":"opponent","type":"address"}],"name":"IndividualReveal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"}],"name":"Left","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"a","type":"address"},{"indexed":true,"internalType":"address","name":"b","type":"address"},{"indexed":false,"internalType":"uint64","name":"matchBlock","type":"uint64"}],"name":"Matched","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousMatcher","type":"address"},{"indexed":true,"internalType":"address","name":"newMatcher","type":"address"}],"name":"MatcherSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"a","type":"address"},{"indexed":true,"internalType":"address","name":"b","type":"address"},{"indexed":false,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"bool","name":"gunA","type":"bool"},{"indexed":false,"internalType":"bool","name":"gunB","type":"bool"},{"indexed":false,"internalType":"bool","name":"tiebreak","type":"bool"}],"name":"Resolved","type":"event"},{"inputs":[],"name":"CREDIT_RECOVERY_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEAL_DEADLINE_BLOCKS","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"credits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"bytes32","name":"commitHash","type":"bytes32"}],"name":"enterQueue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feeProtocol","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSeasonCurrent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSeasonNext","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"winner","type":"address"},{"internalType":"address","name":"loser","type":"address"},{"internalType":"enum Arena.WeaponType[3]","name":"winnerWeapons","type":"uint8[3]"},{"internalType":"bytes32","name":"winnerSalt","type":"bytes32"}],"name":"forfeitUnrevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastCreditedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leaveQueue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"address","name":"b","type":"address"}],"name":"matchPlayers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"matcher","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"queue","outputs":[{"internalType":"uint96","name":"wager","type":"uint96"},{"internalType":"bytes32","name":"commitHash","type":"bytes32"},{"internalType":"uint64","name":"commitBlock","type":"uint64"},{"internalType":"address","name":"opponent","type":"address"},{"internalType":"uint64","name":"matchBlock","type":"uint64"},{"internalType":"bool","name":"revealed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverStaleCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Arena.WeaponType[3]","name":"weapons","type":"uint8[3]"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"revealIndividual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"address","name":"b","type":"address"},{"internalType":"enum Arena.WeaponType[3]","name":"aW","type":"uint8[3]"},{"internalType":"bytes32","name":"aSalt","type":"bytes32"},{"internalType":"enum Arena.WeaponType[3]","name":"bW","type":"uint8[3]"},{"internalType":"bytes32","name":"bSalt","type":"bytes32"}],"name":"revealMatchResult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"protocol","type":"address"},{"internalType":"address","name":"seasonCurr","type":"address"},{"internalType":"address","name":"seasonNext","type":"address"}],"name":"setFeeRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMatcher","type":"address"}],"name":"setMatcher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"tier","type":"uint8"}],"name":"wagerForTier","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080806040523461007b57600160085560018060a01b03193381600354161760035533816004541617600455338160055416176005553381600654161760065533906007541617600755335f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36118d190816100808239f35b5f80fdfe608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c908163038ee1cb146112d557508063087310d114610d935780630e2a5d7b14610d6b5780630ed4461314610d4d578063166bae0d14610b725780632e2a778c14610b3e5780633a214f8814610a4c5780634e71d92d146109cb578063527eb4bc146109a357806358af0f631461086d57806359c280f8146106d05780636d0331ef146106a85780637b27e2f2146104d95780637e7e66b2146104b15780638465de04146103d05780638da5cb5b146103a8578063963ddbe914610335578063cd96893914610319578063e40b8ddd1461021f578063f2fde38b1461018e578063f3234ff7146101565763fe5ff4681461011a575f61000f565b34610152576020366003190112610152576001600160a01b0361013b611358565b165f526001602052602060405f2054604051908152f35b5f80fd5b34610152576020366003190112610152576001600160a01b03610177611358565b165f526002602052602060405f2054604051908152f35b34610152576020366003190112610152576101a7611358565b600354906001600160a01b03808316913383900361020e57169182156101fc576001600160a01b03191682176003557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60405163e6c4247b60e01b8152600490fd5b6040516282b42960e81b8152600490fd5b3461015257606036600319011261015257610238611358565b61024061136e565b906001600160a01b03906044358281169190829003610152578260035416330361020e578216908115801561030f575b8015610307575b6101fc5730821480156102fc575b80156102f3575b6101fc577f4beef1cd5b575cf3f1fa23efa219e13b8394ff2a91168c27aec27d3b0b8c292893816060946001600160601b0360a01b9285846005541617600555169182816006541617600655600754161760075560405192835260208301526040820152a1005b5030811461028c565b503083851614610285565b508015610277565b5082841615610270565b34610152575f3660031901126101525760206040516107088152f35b346101525760203660031901126101525761034e611358565b6003546001600160a01b0391908216330361020e5781169081156101fc57600454826001600160601b0360a01b821617600455167fb8318c9ddedc5598fedf2ac65b9976d47bff5df18e1be2a3966f0a44cfedfe395f80a3005b34610152575f366003190112610152576003546040516001600160a01b039091168152602090f35b34610152575f3660031901126101525760016008540361049f576002600855335f525f60205260405f206001600160601b0381541690811561048d576002015460401c6001600160a01b031661047b5761044f90335f525f60205261044960405f2060035f918281558260018201558260028201550155565b3361177c565b337fc97a8bf3a3af557fe56cca51d77eeb41b7c07ea6f2d28390ba9d1841a0bf466d5f80a26001600855005b60405163e4b2139b60e01b8152600490fd5b604051636b18643d60e01b8152600490fd5b6040516345f5ce8b60e11b8152600490fd5b34610152575f366003190112610152576004546040516001600160a01b039091168152602090f35b346101525760c0366003190112610152576104f2611358565b6104fa61136e565b903660a4116101525760016008540361049f5760026008556001600160a01b03918216918181169182841461069657825f525f60205260405f20845f5260405f2092848682600285015460401c161491821592610682575b5050610670576001600160601b039283825416938154169081850361065e576001600160401b03610588816003860154166113ac565b1643111561064c576003015460401c60ff1661063a5761060f936105be60016105c3946105b36114e7565b015460a4358661151a565b6113fb565b90835f525f6020526105e960405f2060035f918281558260018201558260028201550155565b845f5261060a60405f2060035f918281558260018201558260028201550155565b6116f4565b7f8ba67859d9dd6a0f3339ca0fe02b06fa4760f056b20b6bf1599923c3124c14355f80a36001600855005b60405163263ffc4560e11b8152600490fd5b604051630817fa1560e01b8152600490fd5b604051633d912f8960e11b8152600490fd5b604051630955091b60e21b8152600490fd5b600286015460401c16141590508487610552565b604051630bd3c62160e41b8152600490fd5b34610152575f366003190112610152576006546040516001600160a01b039091168152602090f35b6040366003190112610152576106e4611384565b60243560016008540361049f576002600855600360ff83161161085b57335f525f6020526001600160601b03918260405f205416610849576107268391611408565b169182340361083757604051906001600160401b0360c083018181118482101761082357604052848352600360208401938585526107c7604082018443168152606083015f815260808401975f895260a08501975f8952335f525f60205260405f209551166001600160601b031986541617855551600185015585600285019251166001600160401b031983541617825560018060a01b03905116906114b4565b0192511660ff60401b83549251151560401b169168ffffffffffffffffff19161717905560405191825260208201527fcbe4c827b72e4d8dbf711b27843f71faeeece06a131ba83a5f95681b2cb99e6160403392a26001600855005b634e487b7160e01b5f52604160045260245ffd5b60405163dd8e4af760e01b8152600490fd5b604051630a1f18e160e31b8152600490fd5b604051631812c34560e01b8152600490fd5b3461015257604036600319011261015257610886611358565b61088e61136e565b6004546001600160a01b0392908316330361020e5760016008540361049f576002600855828216928082169284841461069657835f525f60205260405f2092855f5260405f20926001600160601b03808654169081158015610998575b61048d578554160361065e57600285019080825460401c161590811591610985575b5061047b57600360209461096f827fe8da39d5ab9af3f2f988c17386b5626d4086d7baa1a92c89c6bfbcb110b884ac986109526001600160401b0343169889976114b4565b01946001600160401b0319958587825416179055600283016114b4565b0191825416179055604051908152a36001600855005b9050600285015460401c1615158861090d565b5080865416156108eb565b34610152575f366003190112610152576005546040516001600160a01b039091168152602090f35b34610152575f3660031901126101525760016008540361049f576002600855335f52600160205260405f20548015610a3a575f808080933382526001602052816040812055335af1610a1b61146b565b5015610a28576001600855005b6040516312171d8360e31b8152600490fd5b604051633eb2179560e01b8152600490fd5b3461015257604036600319011261015257610a65611358565b610a6d61136e565b6003546001600160a01b0392908316330361020e5760016008540361049f57829060026008551691825f52600160205260405f2054928315610a3a57805f52600260205260405f20546301e133808101809111610b2a574210610b18575f9384938493838594855260016020528460408120557fe36732d215d756dcc3917e7c8614b14dd4a8fd5f5a0f71f2959089b529bf285c602060405193868552851693a35af1610a1b61146b565b604051631bf8599f60e01b8152600490fd5b634e487b7160e01b5f52601160045260245ffd5b34610152576020366003190112610152576020610b61610b5c611384565b611408565b6001600160601b0360405191168152f35b346101525760803660031901126101525736606411610152576001806008540361049f576002906002600855335f525f60205260405f209160018060a01b03600284015460401c16928315610670576001600160601b038154161561048d57600390818101938454936001600160401b0380861681610bf082611394565b16431115610d3b57610c01906113ac565b164311610d29575f5b848110610cf65750505060010154906004359080821015610152576024358181101561015257604435918210156101525760405191602083019360ff60f81b9283809260f81b16865260f81b16602184015260f81b16602282015260643560238201526001600160601b03193360601b1660438201523060601b605782015246606b820152606b8152610c9c816113c5565b51902003610ce45768ff00000000000000001916600160401b179055337fc72ac7feacb06f1e8a6b6905a3e601f8469e398b4d459aab1a219c407e7b77a75f80a36001600855005b60405163016df56960e11b8152600490fd5b8060051b60040135858110156101525760ff83911611610d17578201610c0a565b604051632165e62d60e21b8152600490fd5b6040516381efbd8d60e01b8152600490fd5b60405163de6ab06f60e01b8152600490fd5b34610152575f3660031901126101525760206040516301e133808152f35b34610152575f366003190112610152576007546040516001600160a01b039091168152602090f35b346101525761014036600319011261015257610dad611358565b610db561136e565b3660a41161015257610124903682116101525760016008540361049f5760026008556001600160a01b0383811690821614610696576001600160a01b038381165f908152602081905260408082208484168084529282902060028201549196909490939190921c909116148015906112b7575b610670576001600160601b038454166001600160601b038354160361065e5760038401546001600160401b03610e5f818316611394565b16431115610d3b576001600160401b03610e7a8183166113ac565b164311610d2957610e896114e7565b5f5b600381106112935750610ea5600186015460a4358861151a565b600183015460c43560038110156101525760e435600381101561015257610104359060038210156101525760405191602083019360ff60f81b9283809260f81b16865260f81b16602184015260f81b166022820152843560238201526001600160601b03198760601b1660438201523060601b605782015246606b820152606b8152610f30816113c5565b51902003610ce457600160401b60ff60401b19908082841617600388015560038501918254161790556001600160401b03610f6c818316611394565b164090811580611267575b61121c575b506001600160a01b03848116908716109081156112155786915b1561120e5784925b6001600160a01b03838116908916148015611203576001880154915b81156111f8576001870154905b82156111f05760a435925b156111e65735925b6040519660208801966001600160601b03199060601b1687526001600160601b03199060601b16603488015260488701526068860152608885015260a884015260c883015260c882526101008201908282106001600160401b03831117610823576110c39261106a92604052519020926001600160601b038061105e86888b6115aa565b975416915416906113fb565b6001600160a01b0386165f9081526020819052604081208181556001810182905560028101829055600301556001600160a01b0384165f90815260408120818155600181018290556002810182905560030155846116f4565b6064806040516020810190848252604160f81b6040820152602181526110e8816113e0565b51902006159160405160208101918252602160f91b60408201526021815261110f816113e0565b5190200615811591826111dd575b8261117f575b604080516001600160a01b0396871681526020810192909252810191909152901515606082015290821692909116907f28c65b95915e62abf3e1d37d801dbf82a282cf3197e93212b28cf68d4033010e90608090a36001600855005b91505f805b6003811061119657505f0b1591611123565b908160051b80604401359060038210156101525760c401356003811015610152576111c0916117fa565b5f0b905f0b01607f198112607f821317610b2a5790600101611184565b8115925061111d565b5060a43592610fda565b803592610fd2565b600189015490610fc7565b600186015491610fba565b8692610f9e565b8491610f96565b9050604051906001600160401b0360c01b9060c01b166020820152600881528060408101106001600160401b0360408301111761082357604081016040526020815191012086610f7c565b506001600160401b036101018183160111610b2a576001600160401b0361010181831601164311610f77565b8060051b60c4013560038110156101525760ff6002911611610d1757600101610e8b565b50600282015460401c6001600160a01b039081169086161415610e28565b346101525760203660031901126101525760c09060ff6001600160a01b03806112fc611358565b165f525f60205260405f206001600160601b0381541691600182015460028301549060036001600160401b039401549487526020870152828116604087015260401c1660608501528116608084015260401c16151560a0820152f35b600435906001600160a01b038216820361015257565b602435906001600160a01b038216820361015257565b6004359060ff8216820361015257565b9060016001600160401b0380931601918211610b2a57565b906107086001600160401b0380931601918211610b2a57565b60a081019081106001600160401b0382111761082357604052565b606081019081106001600160401b0382111761082357604052565b91908201809211610b2a57565b60ff16801561145f576001811461145357600281146114465760031461143a57604051631812c34560e01b8152600490fd5b6722b1c8c1227a000090565b506706f05b59d3b2000090565b5066b1a2bc2ec5000090565b506611c37937e0800090565b3d156114af576001600160401b03903d8281116108235760405192601f8201601f19908116603f01168401908111848210176108235760405282523d5f602084013e565b606090565b805468010000000000000000600160e01b03191660409290921b68010000000000000000600160e01b0316919091179055565b5f5b600380821015611516578160051b60440135908110156101525760ff6002911611610d17576001016114e9565b5050565b9060443591600383101561015257606435916003831015610152576084359260038410156101525760405193602085019560ff60f81b9283809260f81b16885260f81b16602186015260f81b16602284015260238301526001600160601b03199060601b1660438201523060601b605782015246606b820152606b81526115a0816113c5565b51902003610ce457565b909192604091606483516020810190878252604160f81b86820152602181526115d2816113e0565b5190200615606484516020810190888252602160f91b87820152602181526115f9816113e0565b51902006159080806116df575b6116d5571590816116cd575b506116c6575f93845b60038087101561166c578660051b90816044013591818310156101525760c40135908110156101525761164d916117fa565b5f0b905f0b01607f198112607f821317610b2a5760019095019461161b565b5090939194509491945f0b5f81136116bf575f136116b8579081601560fa1b600193519160208301938452820152602181526116a7816113e0565b519020166116b3575090565b905090565b5050905090565b5050505090565b5092505090565b90505f611612565b5050925092505090565b508115611606565b91908203918211610b2a57565b60c882029082159183810460c814831715610b2a576127108091049260648502908582046064141715610b2a576117448461173f61177a976117759561173f950494859384926116e7565b6116e7565b60055490946001600160a01b039161175e9190831661177c565b61176c82826006541661177c565b6007541661177c565b61177c565b565b8115611516575f8080808585620186a0f161179561146b565b501561179f575050565b60207f9c9e0cdb1670e88302408e5b941dc636f63a3293204694bb68910fcf3d9305f39160018060a01b031692835f526001825260405f206117e28282546113fb565b9055835f52600282524260405f2055604051908152a2565b906003811015918261185b57600381101561185b5781811461189457801580611887575b61186f57600281148381611877575b5061186f57600114918261184c575b5050611847575f1990565b600190565b90915061185b57155f8061183c565b634e487b7160e01b5f52602160045260245ffd5b505050600190565b905061185b57600182148361182d565b505f92506002821461181e565b5050505f9056fea26469706673582212204ac93a439c070ec35494209b8180f0f4af0bd759309464f6448656b43501c67764736f6c63430008180033
Deployed Bytecode
0x608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c908163038ee1cb146112d557508063087310d114610d935780630e2a5d7b14610d6b5780630ed4461314610d4d578063166bae0d14610b725780632e2a778c14610b3e5780633a214f8814610a4c5780634e71d92d146109cb578063527eb4bc146109a357806358af0f631461086d57806359c280f8146106d05780636d0331ef146106a85780637b27e2f2146104d95780637e7e66b2146104b15780638465de04146103d05780638da5cb5b146103a8578063963ddbe914610335578063cd96893914610319578063e40b8ddd1461021f578063f2fde38b1461018e578063f3234ff7146101565763fe5ff4681461011a575f61000f565b34610152576020366003190112610152576001600160a01b0361013b611358565b165f526001602052602060405f2054604051908152f35b5f80fd5b34610152576020366003190112610152576001600160a01b03610177611358565b165f526002602052602060405f2054604051908152f35b34610152576020366003190112610152576101a7611358565b600354906001600160a01b03808316913383900361020e57169182156101fc576001600160a01b03191682176003557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60405163e6c4247b60e01b8152600490fd5b6040516282b42960e81b8152600490fd5b3461015257606036600319011261015257610238611358565b61024061136e565b906001600160a01b03906044358281169190829003610152578260035416330361020e578216908115801561030f575b8015610307575b6101fc5730821480156102fc575b80156102f3575b6101fc577f4beef1cd5b575cf3f1fa23efa219e13b8394ff2a91168c27aec27d3b0b8c292893816060946001600160601b0360a01b9285846005541617600555169182816006541617600655600754161760075560405192835260208301526040820152a1005b5030811461028c565b503083851614610285565b508015610277565b5082841615610270565b34610152575f3660031901126101525760206040516107088152f35b346101525760203660031901126101525761034e611358565b6003546001600160a01b0391908216330361020e5781169081156101fc57600454826001600160601b0360a01b821617600455167fb8318c9ddedc5598fedf2ac65b9976d47bff5df18e1be2a3966f0a44cfedfe395f80a3005b34610152575f366003190112610152576003546040516001600160a01b039091168152602090f35b34610152575f3660031901126101525760016008540361049f576002600855335f525f60205260405f206001600160601b0381541690811561048d576002015460401c6001600160a01b031661047b5761044f90335f525f60205261044960405f2060035f918281558260018201558260028201550155565b3361177c565b337fc97a8bf3a3af557fe56cca51d77eeb41b7c07ea6f2d28390ba9d1841a0bf466d5f80a26001600855005b60405163e4b2139b60e01b8152600490fd5b604051636b18643d60e01b8152600490fd5b6040516345f5ce8b60e11b8152600490fd5b34610152575f366003190112610152576004546040516001600160a01b039091168152602090f35b346101525760c0366003190112610152576104f2611358565b6104fa61136e565b903660a4116101525760016008540361049f5760026008556001600160a01b03918216918181169182841461069657825f525f60205260405f20845f5260405f2092848682600285015460401c161491821592610682575b5050610670576001600160601b039283825416938154169081850361065e576001600160401b03610588816003860154166113ac565b1643111561064c576003015460401c60ff1661063a5761060f936105be60016105c3946105b36114e7565b015460a4358661151a565b6113fb565b90835f525f6020526105e960405f2060035f918281558260018201558260028201550155565b845f5261060a60405f2060035f918281558260018201558260028201550155565b6116f4565b7f8ba67859d9dd6a0f3339ca0fe02b06fa4760f056b20b6bf1599923c3124c14355f80a36001600855005b60405163263ffc4560e11b8152600490fd5b604051630817fa1560e01b8152600490fd5b604051633d912f8960e11b8152600490fd5b604051630955091b60e21b8152600490fd5b600286015460401c16141590508487610552565b604051630bd3c62160e41b8152600490fd5b34610152575f366003190112610152576006546040516001600160a01b039091168152602090f35b6040366003190112610152576106e4611384565b60243560016008540361049f576002600855600360ff83161161085b57335f525f6020526001600160601b03918260405f205416610849576107268391611408565b169182340361083757604051906001600160401b0360c083018181118482101761082357604052848352600360208401938585526107c7604082018443168152606083015f815260808401975f895260a08501975f8952335f525f60205260405f209551166001600160601b031986541617855551600185015585600285019251166001600160401b031983541617825560018060a01b03905116906114b4565b0192511660ff60401b83549251151560401b169168ffffffffffffffffff19161717905560405191825260208201527fcbe4c827b72e4d8dbf711b27843f71faeeece06a131ba83a5f95681b2cb99e6160403392a26001600855005b634e487b7160e01b5f52604160045260245ffd5b60405163dd8e4af760e01b8152600490fd5b604051630a1f18e160e31b8152600490fd5b604051631812c34560e01b8152600490fd5b3461015257604036600319011261015257610886611358565b61088e61136e565b6004546001600160a01b0392908316330361020e5760016008540361049f576002600855828216928082169284841461069657835f525f60205260405f2092855f5260405f20926001600160601b03808654169081158015610998575b61048d578554160361065e57600285019080825460401c161590811591610985575b5061047b57600360209461096f827fe8da39d5ab9af3f2f988c17386b5626d4086d7baa1a92c89c6bfbcb110b884ac986109526001600160401b0343169889976114b4565b01946001600160401b0319958587825416179055600283016114b4565b0191825416179055604051908152a36001600855005b9050600285015460401c1615158861090d565b5080865416156108eb565b34610152575f366003190112610152576005546040516001600160a01b039091168152602090f35b34610152575f3660031901126101525760016008540361049f576002600855335f52600160205260405f20548015610a3a575f808080933382526001602052816040812055335af1610a1b61146b565b5015610a28576001600855005b6040516312171d8360e31b8152600490fd5b604051633eb2179560e01b8152600490fd5b3461015257604036600319011261015257610a65611358565b610a6d61136e565b6003546001600160a01b0392908316330361020e5760016008540361049f57829060026008551691825f52600160205260405f2054928315610a3a57805f52600260205260405f20546301e133808101809111610b2a574210610b18575f9384938493838594855260016020528460408120557fe36732d215d756dcc3917e7c8614b14dd4a8fd5f5a0f71f2959089b529bf285c602060405193868552851693a35af1610a1b61146b565b604051631bf8599f60e01b8152600490fd5b634e487b7160e01b5f52601160045260245ffd5b34610152576020366003190112610152576020610b61610b5c611384565b611408565b6001600160601b0360405191168152f35b346101525760803660031901126101525736606411610152576001806008540361049f576002906002600855335f525f60205260405f209160018060a01b03600284015460401c16928315610670576001600160601b038154161561048d57600390818101938454936001600160401b0380861681610bf082611394565b16431115610d3b57610c01906113ac565b164311610d29575f5b848110610cf65750505060010154906004359080821015610152576024358181101561015257604435918210156101525760405191602083019360ff60f81b9283809260f81b16865260f81b16602184015260f81b16602282015260643560238201526001600160601b03193360601b1660438201523060601b605782015246606b820152606b8152610c9c816113c5565b51902003610ce45768ff00000000000000001916600160401b179055337fc72ac7feacb06f1e8a6b6905a3e601f8469e398b4d459aab1a219c407e7b77a75f80a36001600855005b60405163016df56960e11b8152600490fd5b8060051b60040135858110156101525760ff83911611610d17578201610c0a565b604051632165e62d60e21b8152600490fd5b6040516381efbd8d60e01b8152600490fd5b60405163de6ab06f60e01b8152600490fd5b34610152575f3660031901126101525760206040516301e133808152f35b34610152575f366003190112610152576007546040516001600160a01b039091168152602090f35b346101525761014036600319011261015257610dad611358565b610db561136e565b3660a41161015257610124903682116101525760016008540361049f5760026008556001600160a01b0383811690821614610696576001600160a01b038381165f908152602081905260408082208484168084529282902060028201549196909490939190921c909116148015906112b7575b610670576001600160601b038454166001600160601b038354160361065e5760038401546001600160401b03610e5f818316611394565b16431115610d3b576001600160401b03610e7a8183166113ac565b164311610d2957610e896114e7565b5f5b600381106112935750610ea5600186015460a4358861151a565b600183015460c43560038110156101525760e435600381101561015257610104359060038210156101525760405191602083019360ff60f81b9283809260f81b16865260f81b16602184015260f81b166022820152843560238201526001600160601b03198760601b1660438201523060601b605782015246606b820152606b8152610f30816113c5565b51902003610ce457600160401b60ff60401b19908082841617600388015560038501918254161790556001600160401b03610f6c818316611394565b164090811580611267575b61121c575b506001600160a01b03848116908716109081156112155786915b1561120e5784925b6001600160a01b03838116908916148015611203576001880154915b81156111f8576001870154905b82156111f05760a435925b156111e65735925b6040519660208801966001600160601b03199060601b1687526001600160601b03199060601b16603488015260488701526068860152608885015260a884015260c883015260c882526101008201908282106001600160401b03831117610823576110c39261106a92604052519020926001600160601b038061105e86888b6115aa565b975416915416906113fb565b6001600160a01b0386165f9081526020819052604081208181556001810182905560028101829055600301556001600160a01b0384165f90815260408120818155600181018290556002810182905560030155846116f4565b6064806040516020810190848252604160f81b6040820152602181526110e8816113e0565b51902006159160405160208101918252602160f91b60408201526021815261110f816113e0565b5190200615811591826111dd575b8261117f575b604080516001600160a01b0396871681526020810192909252810191909152901515606082015290821692909116907f28c65b95915e62abf3e1d37d801dbf82a282cf3197e93212b28cf68d4033010e90608090a36001600855005b91505f805b6003811061119657505f0b1591611123565b908160051b80604401359060038210156101525760c401356003811015610152576111c0916117fa565b5f0b905f0b01607f198112607f821317610b2a5790600101611184565b8115925061111d565b5060a43592610fda565b803592610fd2565b600189015490610fc7565b600186015491610fba565b8692610f9e565b8491610f96565b9050604051906001600160401b0360c01b9060c01b166020820152600881528060408101106001600160401b0360408301111761082357604081016040526020815191012086610f7c565b506001600160401b036101018183160111610b2a576001600160401b0361010181831601164311610f77565b8060051b60c4013560038110156101525760ff6002911611610d1757600101610e8b565b50600282015460401c6001600160a01b039081169086161415610e28565b346101525760203660031901126101525760c09060ff6001600160a01b03806112fc611358565b165f525f60205260405f206001600160601b0381541691600182015460028301549060036001600160401b039401549487526020870152828116604087015260401c1660608501528116608084015260401c16151560a0820152f35b600435906001600160a01b038216820361015257565b602435906001600160a01b038216820361015257565b6004359060ff8216820361015257565b9060016001600160401b0380931601918211610b2a57565b906107086001600160401b0380931601918211610b2a57565b60a081019081106001600160401b0382111761082357604052565b606081019081106001600160401b0382111761082357604052565b91908201809211610b2a57565b60ff16801561145f576001811461145357600281146114465760031461143a57604051631812c34560e01b8152600490fd5b6722b1c8c1227a000090565b506706f05b59d3b2000090565b5066b1a2bc2ec5000090565b506611c37937e0800090565b3d156114af576001600160401b03903d8281116108235760405192601f8201601f19908116603f01168401908111848210176108235760405282523d5f602084013e565b606090565b805468010000000000000000600160e01b03191660409290921b68010000000000000000600160e01b0316919091179055565b5f5b600380821015611516578160051b60440135908110156101525760ff6002911611610d17576001016114e9565b5050565b9060443591600383101561015257606435916003831015610152576084359260038410156101525760405193602085019560ff60f81b9283809260f81b16885260f81b16602186015260f81b16602284015260238301526001600160601b03199060601b1660438201523060601b605782015246606b820152606b81526115a0816113c5565b51902003610ce457565b909192604091606483516020810190878252604160f81b86820152602181526115d2816113e0565b5190200615606484516020810190888252602160f91b87820152602181526115f9816113e0565b51902006159080806116df575b6116d5571590816116cd575b506116c6575f93845b60038087101561166c578660051b90816044013591818310156101525760c40135908110156101525761164d916117fa565b5f0b905f0b01607f198112607f821317610b2a5760019095019461161b565b5090939194509491945f0b5f81136116bf575f136116b8579081601560fa1b600193519160208301938452820152602181526116a7816113e0565b519020166116b3575090565b905090565b5050905090565b5050505090565b5092505090565b90505f611612565b5050925092505090565b508115611606565b91908203918211610b2a57565b60c882029082159183810460c814831715610b2a576127108091049260648502908582046064141715610b2a576117448461173f61177a976117759561173f950494859384926116e7565b6116e7565b60055490946001600160a01b039161175e9190831661177c565b61176c82826006541661177c565b6007541661177c565b61177c565b565b8115611516575f8080808585620186a0f161179561146b565b501561179f575050565b60207f9c9e0cdb1670e88302408e5b941dc636f63a3293204694bb68910fcf3d9305f39160018060a01b031692835f526001825260405f206117e28282546113fb565b9055835f52600282524260405f2055604051908152a2565b906003811015918261185b57600381101561185b5781811461189457801580611887575b61186f57600281148381611877575b5061186f57600114918261184c575b5050611847575f1990565b600190565b90915061185b57155f8061183c565b634e487b7160e01b5f52602160045260245ffd5b505050600190565b905061185b57600182148361182d565b505f92506002821461181e565b5050505f9056fea26469706673582212204ac93a439c070ec35494209b8180f0f4af0bd759309464f6448656b43501c67764736f6c63430008180033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$29.26
Net Worth in ETH
0.01
Token Allocations
ETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,925.66 | 0.01 | $29.26 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.