| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
interface IOnlyTraitsUpgradeableCollectionV2 {
function ownerOf(uint256 tokenId) external view returns (address);
function powerOf(uint256 tokenId) external view returns (uint256);
function executeUpgradeAction(address holder, uint256 tokenId, bool burnAction) external returns (uint256 power);
}
interface IOnlyTraitsLegacyUpgradeModule {
function upgradePower(uint256 tokenId) external view returns (uint256);
}
interface IOnlyTraitsMagicPencil {
function balanceOf(address account) external view returns (uint256);
function mint(address to) external returns (uint256 tokenId);
}
interface IOnlyTraitsAlternateBurnAdapter {
function burnForPencil(address holder) external;
}
/// @notice Upgrade module V2: preserves legacy Burn for Power and adds atomic Pencil minting.
/// @dev Configure this as the collection upgradeModule only after Pencil minter points here.
contract OnlyTraitsUpgradeModuleV2 {
uint256 public constant FULL_EPIC_REQUIRED_POWER = 40;
IOnlyTraitsUpgradeableCollectionV2 public immutable collection;
IOnlyTraitsLegacyUpgradeModule public immutable legacyModule;
IOnlyTraitsMagicPencil public immutable magicPencil;
address public owner;
address public alternateBurnAdapter;
bool public alternateBurnEnabled;
bool public enabled;
bool private entered;
mapping(uint256 => uint256) private _storedUpgradePower;
mapping(uint256 => bool) private _legacyImported;
event EnabledChanged(bool enabled);
event UpgradePowerAdded(address indexed holder, uint256 indexed targetTokenId, uint256 addedPower, uint256 storedPower);
event FullEpicClaimed(address indexed holder, uint256 indexed targetTokenId);
event MagicPencilMinted(address indexed holder, uint256 indexed burnedTokenId, uint256 indexed pencilTokenId, uint256 burnedPower);
event AlternateBurnConfigured(address indexed adapter, bool enabled);
event AlternateMagicPencilMinted(address indexed holder, uint256 indexed pencilTokenId);
event OwnershipTransferred(address indexed previousOwner, address indexed nextOwner);
error Unauthorized();
error Disabled();
error InvalidTarget();
error InsufficientPower();
error AlreadyHasPencil();
error AlternateBurnUnavailable();
error Reentrancy();
constructor(address collectionAddress, address legacyModuleAddress, address magicPencilAddress) {
if (collectionAddress == address(0) || magicPencilAddress == address(0)) revert InvalidTarget();
collection = IOnlyTraitsUpgradeableCollectionV2(collectionAddress);
legacyModule = IOnlyTraitsLegacyUpgradeModule(legacyModuleAddress);
magicPencil = IOnlyTraitsMagicPencil(magicPencilAddress);
owner = msg.sender;
emit OwnershipTransferred(address(0), msg.sender);
}
modifier onlyOwner() {
if (msg.sender != owner) revert Unauthorized();
_;
}
modifier lock() {
if (entered) revert Reentrancy();
entered = true;
_;
entered = false;
}
function setEnabled(bool nextEnabled) external onlyOwner {
enabled = nextEnabled;
emit EnabledChanged(nextEnabled);
}
function setAlternateBurnAdapter(address adapter, bool nextEnabled) external onlyOwner {
if (nextEnabled && adapter == address(0)) revert InvalidTarget();
alternateBurnAdapter = adapter;
alternateBurnEnabled = nextEnabled;
emit AlternateBurnConfigured(adapter, nextEnabled);
}
function transferOwnership(address nextOwner) external onlyOwner {
if (nextOwner == address(0)) revert InvalidTarget();
address previousOwner = owner;
owner = nextOwner;
emit OwnershipTransferred(previousOwner, nextOwner);
}
function upgradePower(uint256 tokenId) public view returns (uint256) {
if (_legacyImported[tokenId] || address(legacyModule) == address(0)) return _storedUpgradePower[tokenId];
try legacyModule.upgradePower(tokenId) returns (uint256 legacyPower) {
return legacyPower;
} catch {
return _storedUpgradePower[tokenId];
}
}
function upgradeProgressOf(uint256 tokenId) public view returns (uint256) {
return collection.powerOf(tokenId) + upgradePower(tokenId);
}
function addUpgradePower(uint256 targetTokenId, uint256[] calldata burnTokenIds) external lock {
if (!enabled) revert Disabled();
if (collection.ownerOf(targetTokenId) != msg.sender || burnTokenIds.length == 0) revert InvalidTarget();
_importLegacy(targetTokenId);
uint256 addedPower;
for (uint256 i = 0; i < burnTokenIds.length; i++) {
uint256 burnTokenId = burnTokenIds[i];
if (burnTokenId == targetTokenId || collection.ownerOf(burnTokenId) != msg.sender) revert InvalidTarget();
_importLegacy(burnTokenId);
uint256 inheritedPower = _storedUpgradePower[burnTokenId];
uint256 basePower = collection.executeUpgradeAction(msg.sender, burnTokenId, true);
addedPower += basePower + inheritedPower;
delete _storedUpgradePower[burnTokenId];
}
_storedUpgradePower[targetTokenId] += addedPower;
emit UpgradePowerAdded(msg.sender, targetTokenId, addedPower, _storedUpgradePower[targetTokenId]);
}
function claimUpgrade(uint256 targetTokenId, uint8 upgradeKind) external lock {
if (!enabled) revert Disabled();
if (upgradeKind != 0 || collection.ownerOf(targetTokenId) != msg.sender) revert InvalidTarget();
_importLegacy(targetTokenId);
uint256 currentPower = collection.powerOf(targetTokenId);
uint256 progress = currentPower + _storedUpgradePower[targetTokenId];
if (progress < FULL_EPIC_REQUIRED_POWER) revert InsufficientPower();
uint256 consumed = FULL_EPIC_REQUIRED_POWER > currentPower ? FULL_EPIC_REQUIRED_POWER - currentPower : 0;
_storedUpgradePower[targetTokenId] -= consumed;
collection.executeUpgradeAction(msg.sender, targetTokenId, false);
emit FullEpicClaimed(msg.sender, targetTokenId);
}
function mintPencilByBurn(uint256 burnTokenId) external lock returns (uint256 pencilTokenId) {
if (!enabled) revert Disabled();
if (magicPencil.balanceOf(msg.sender) != 0) revert AlreadyHasPencil();
if (collection.ownerOf(burnTokenId) != msg.sender) revert InvalidTarget();
_importLegacy(burnTokenId);
uint256 burnedPower = collection.executeUpgradeAction(msg.sender, burnTokenId, true)
+ _storedUpgradePower[burnTokenId];
delete _storedUpgradePower[burnTokenId];
pencilTokenId = magicPencil.mint(msg.sender);
emit MagicPencilMinted(msg.sender, burnTokenId, pencilTokenId, burnedPower);
}
function mintPencilByAlternateBurn() external lock returns (uint256 pencilTokenId) {
if (!enabled) revert Disabled();
if (!alternateBurnEnabled || alternateBurnAdapter == address(0)) revert AlternateBurnUnavailable();
if (magicPencil.balanceOf(msg.sender) != 0) revert AlreadyHasPencil();
IOnlyTraitsAlternateBurnAdapter(alternateBurnAdapter).burnForPencil(msg.sender);
pencilTokenId = magicPencil.mint(msg.sender);
emit AlternateMagicPencilMinted(msg.sender, pencilTokenId);
}
function _importLegacy(uint256 tokenId) private {
if (_legacyImported[tokenId]) return;
_legacyImported[tokenId] = true;
if (address(legacyModule) == address(0)) return;
try legacyModule.upgradePower(tokenId) returns (uint256 legacyPower) {
_storedUpgradePower[tokenId] = legacyPower;
} catch {}
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "collectionAddress",
"type": "address",
"internalType": "address"
},
{
"name": "legacyModuleAddress",
"type": "address",
"internalType": "address"
},
{
"name": "magicPencilAddress",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyHasPencil",
"type": "error",
"inputs": []
},
{
"name": "AlternateBurnUnavailable",
"type": "error",
"inputs": []
},
{
"name": "Disabled",
"type": "error",
"inputs": []
},
{
"name": "InsufficientPower",
"type": "error",
"inputs": []
},
{
"name": "InvalidTarget",
"type": "error",
"inputs": []
},
{
"name": "Reentrancy",
"type": "error",
"inputs": []
},
{
"name": "Unauthorized",
"type": "error",
"inputs": []
},
{
"name": "AlternateBurnConfigured",
"type": "event",
"inputs": [
{
"name": "adapter",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "enabled",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "AlternateMagicPencilMinted",
"type": "event",
"inputs": [
{
"name": "holder",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "pencilTokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "EnabledChanged",
"type": "event",
"inputs": [
{
"name": "enabled",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "FullEpicClaimed",
"type": "event",
"inputs": [
{
"name": "holder",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "targetTokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MagicPencilMinted",
"type": "event",
"inputs": [
{
"name": "holder",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "burnedTokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "pencilTokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "burnedPower",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "nextOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "UpgradePowerAdded",
"type": "event",
"inputs": [
{
"name": "holder",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "targetTokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "addedPower",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "storedPower",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FULL_EPIC_REQUIRED_POWER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "addUpgradePower",
"type": "function",
"inputs": [
{
"name": "targetTokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "burnTokenIds",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "alternateBurnAdapter",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "alternateBurnEnabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "claimUpgrade",
"type": "function",
"inputs": [
{
"name": "targetTokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "upgradeKind",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "collection",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IOnlyTraitsUpgradeableCollectionV2"
}
],
"stateMutability": "view"
},
{
"name": "enabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "legacyModule",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IOnlyTraitsLegacyUpgradeModule"
}
],
"stateMutability": "view"
},
{
"name": "magicPencil",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IOnlyTraitsMagicPencil"
}
],
"stateMutability": "view"
},
{
"name": "mintPencilByAlternateBurn",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "pencilTokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "mintPencilByBurn",
"type": "function",
"inputs": [
{
"name": "burnTokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "pencilTokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "setAlternateBurnAdapter",
"type": "function",
"inputs": [
{
"name": "adapter",
"type": "address",
"internalType": "address"
},
{
"name": "nextEnabled",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setEnabled",
"type": "function",
"inputs": [
{
"name": "nextEnabled",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "nextOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "upgradePower",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "upgradeProgressOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
}
]0x60e03461015757601f6113fe38819003918201601f19168301916001600160401b0383118484101761015c578084926060946040528339810103126101575761004781610172565b90610060604061005960208401610172565b9201610172565b916001600160a01b031680158015610146575b610135576080526001600160a01b0390811660a0521660c052600080546001600160a01b031916339081178255604051917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a361127790816101878239608051818181610230015281816105130152818161066c0152818161094801528181610b130152610d70015260a051818181610f84015281816110a1015281816111380152611197015260c051818181610601015281816107010152610d150152f35b63416aebb560e11b60005260046000fd5b506001600160a01b03831615610073565b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036101575756fe608080604052600436101561001357600080fd5b600090813560e01c908163238dafe014610fb3575080632dc705f414610f6e578063311a8abd14610cc0578063328d8f7214610c3a578063370ab8b414610b8b57806343ca3367146108ce57806366149f6d1461069b5780637de1e536146106565780638079c8c414610630578063849e3493146105eb5780638da5cb5b146105c45780639c5004ad146105a5578063d85c8d28146104e0578063dd000d8d146104c4578063e49b6e3b14610199578063f1b5e876146101705763f2fde38b146100dc57600080fd5b3461016d57602036600319011261016d576100f5610fd7565b8154906001600160a01b038216903382900361015f576001600160a01b0316918215610150576001600160a01b031916821783557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b63416aebb560e11b8452600484fd5b6282b42960e81b8452600484fd5b80fd5b503461016d578060031936011261016d576001546040516001600160a01b039091168152602090f35b503461016d57604036600319011261016d5760243590600435906001600160401b03831161016d573660238401121561016d576004830135916001600160401b0383116104c0573660248460051b860101116104c05760015460ff8160b01c166104b15760ff60b01b1916600160b01b17600181905560a81c60ff16156104a2576040516331a9108f60e11b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610497578491610478575b506001600160a01b03163314801590610470575b6104615761029182611166565b8294835b858110156103f65760248160051b8301013596848814801561037f575b610370576102bf88611166565b87865260026020526040862054604051635520947760e01b8152336004820152896024820152600160448201526020816064818b8a5af1908115610365578891610330575b509161031661031c9260019594611045565b90611045565b978652600260205285604081205501610295565b905060203d811161035e575b6103468183610fed565b6020826000928101031261016d575051610316610304565b503d61033c565b6040513d8a823e3d90fd5b63416aebb560e11b8652600486fd5b506040516331a9108f60e11b815260048101899052602081602481885afa9081156103eb5787916103bd575b506001600160a01b03163314156102b2565b6103de915060203d81116103e4575b6103d68183610fed565b810190611026565b386103ab565b503d6103cc565b6040513d89823e3d90fd5b50505083818352600260205260408320610411828254611045565b90558183526002602052604083205460405191825260208201527f205457b07a3a3b146fe8f30c02cda403db5e1e674d574514d1e5dde5acf81c5b60403392a36001805460ff60b01b1916905580f35b63416aebb560e11b8352600483fd5b508315610284565b610491915060203d6020116103e4576103d68183610fed565b38610270565b6040513d86823e3d90fd5b633ac4266d60e11b8252600482fd5b63558a1e0360e11b8352600483fd5b5080fd5b503461016d578060031936011261016d57602060405160288152f35b503461016d57602036600319011261016d576040516304eaa11360e01b81526004803590820181905291906020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9182156105995791610561575b60206105598361031686611068565b604051908152f35b90506020813d602011610591575b8161057c60209383610fed565b8101031261058c5751602061054a565b600080fd5b3d915061056f565b604051903d90823e3d90fd5b503461016d57602036600319011261016d576020610559600435611068565b503461016d578060031936011261016d57546040516001600160a01b039091168152602090f35b503461016d578060031936011261016d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461016d578060031936011261016d57602060ff60015460a01c166040519015158152f35b503461016d578060031936011261016d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461016d578060031936011261016d5760015460ff8160b01c166108bf5760ff60b01b198116600160b01b17600181905560a881901c60ff16156108b05760a01c60ff1615801561089f575b610890576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190602081602481865afa90811561049757849161085a575b5061084b5782906001600160a01b0316803b156104c057819060246040518094819363ec66498f60e01b83523360048401525af180156108405761082d575b50602082916024604051809581936335313c2160e11b83523360048401525af180156108205781906107ed575b6020925080604051927faf7624ec4c2e80c176336722b70fc6ea07edcc30f64c2890fdcadd57fc890e60339180a36001805460ff60b01b191690558152f35b506020823d602011610818575b8161080760209383610fed565b8101031261058c57602091516107ae565b3d91506107fa565b50604051903d90823e3d90fd5b9161083a81602094610fed565b91610781565b6040513d85823e3d90fd5b637ad3edfb60e01b8352600483fd5b90506020813d602011610888575b8161087560209383610fed565b81010312610884575138610742565b8380fd5b3d9150610868565b631f207ed560e01b8252600482fd5b506001600160a01b038116156106e8565b633ac4266d60e11b8352600483fd5b63558a1e0360e11b8252600482fd5b503461016d57604036600319011261016d5760043560243560ff8116809103610a6b5760015460ff8160b01c16610b7c5760ff60b01b1916600160b01b17600181905560a81c60ff16156108b05715801590610af6575b610ae75761093281611166565b6040516304eaa11360e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610497578491610ab5575b50828452600260205260286109a1604086205483611045565b10610aa65780602811600014610a9f5760280360288111610a8b575b8284526002602052604084208054918203918211610a775791602091859355606460405180948193635520947760e01b83523360048401528760248401528160448401525af1801561084057610a44575b50337f23771f079e5a700686ed8afe522acf1745ec7888783d2d4b22b338f490eb3d6d8380a36001805460ff60b01b1916905580f35b6020813d602011610a6f575b81610a5d60209383610fed565b81010312610a6b5751610a0e565b8280fd5b3d9150610a50565b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b84526011600452602484fd5b50826109bd565b631aa7cc5f60e21b8452600484fd5b90506020813d602011610adf575b81610ad060209383610fed565b81010312610884575138610988565b3d9150610ac3565b63416aebb560e11b8252600482fd5b506040516331a9108f60e11b8152600481018290526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610840578391610b5d575b506001600160a01b0316331415610925565b610b76915060203d6020116103e4576103d68183610fed565b38610b4b565b63558a1e0360e11b8452600484fd5b503461016d57604036600319011261016d57610ba5610fd7565b60243590811515918281036108845783546001600160a01b0316330361015f5780610c29575b61046157600180546001600160a81b0319166001600160a01b0390921691821760a084901b60ff60a01b16179055604051918252907f8ade12f738a6fdd389817f8ed8e69bd6eb2f0fe3d46d76a557bcbf259f981f7b90602090a280f35b506001600160a01b03811615610bcb565b503461016d57602036600319011261016d576004358015158091036104c05781546001600160a01b03163303610cb2576001805460ff60a81b191660a883901b60ff60a81b161790556040519081527f771a7aa6908240b30698825129cb3d6dfa4308b3ac33cf77f17889143e29346d90602090a180f35b6282b42960e81b8252600482fd5b503461016d57602036600319011261016d5760043560015460ff8160b01c166104b15760ff60b01b1916600160b01b17600181905560a81c60ff16156104a2576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610497578491610f3c575b5061084b576040516331a9108f60e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610f31578591610f12575b50336001600160a01b0390911603610150578360208192610dd086611166565b606460405180948193635520947760e01b8352336004840152896024840152600160448401525af1908115610f07578291610ed3575b50610e1f60209185845260028352604084205490611045565b92848352600282528260408120556024604051809781936335313c2160e11b83523360048401525af1938415610820578194610e9c575b6020858086866040519081527f2327515bfc2bec4e388625bedf1480899f6adee0a8dafcca3c91970596d7a34c853392a46001805460ff60b01b19169055604051908152f35b9093506020813d602011610ecb575b81610eb860209383610fed565b8101031261088457519250602038610e56565b3d9150610eab565b90506020813d602011610eff575b81610eee60209383610fed565b810103126104c05751610e1f610e06565b3d9150610ee1565b6040513d84823e3d90fd5b610f2b915060203d6020116103e4576103d68183610fed565b38610db0565b6040513d87823e3d90fd5b90506020813d602011610f66575b81610f5760209383610fed565b81010312610884575138610d55565b3d9150610f4a565b503461016d578060031936011261016d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9050346104c057816003193601126104c05760209060ff60015460a81c1615158152f35b600435906001600160a01b038216820361058c57565b601f909101601f19168101906001600160401b0382119082101761101057604052565b634e487b7160e01b600052604160045260246000fd5b9081602091031261058c57516001600160a01b038116810361058c5790565b9190820180921161105257565b634e487b7160e01b600052601160045260246000fd5b80600052600360205260ff604060002054168015611135575b61112457604051639c5004ad60e01b8152600481018290526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa600091816110f0575b506110eb5750600052600260205260406000205490565b905090565b9091506020813d60201161111c575b8161110c60209383610fed565b8101031261058c575190386110d4565b3d91506110ff565b600052600260205260406000205490565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615611081565b80600052600360205260ff6040600020541661123e576000818152600360205260409020805460ff191660011790557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690811561123a57602060249260405193848092639c5004ad60e01b82528560048301525afa60009281611206575b506111f6575050565b6000526002602052604060002055565b9092506020813d602011611232575b8161122260209383610fed565b8101031261058c575191386111ed565b3d9150611215565b5050565b5056fea264697066735822122065bc9fa973cf07aa1024634eadcf1f829da68961c92113a14e8da69ef522d5c664736f6c6343000824003300000000000000000000000085d6cb7a8625a00be90db1f28b74278c381735b1000000000000000000000000b1fef093886bea075339b20970608cf92d3bd07700000000000000000000000088a69ce3f677adf76d459c98a4e45be3796ba2f8
0x608080604052600436101561001357600080fd5b600090813560e01c908163238dafe014610fb3575080632dc705f414610f6e578063311a8abd14610cc0578063328d8f7214610c3a578063370ab8b414610b8b57806343ca3367146108ce57806366149f6d1461069b5780637de1e536146106565780638079c8c414610630578063849e3493146105eb5780638da5cb5b146105c45780639c5004ad146105a5578063d85c8d28146104e0578063dd000d8d146104c4578063e49b6e3b14610199578063f1b5e876146101705763f2fde38b146100dc57600080fd5b3461016d57602036600319011261016d576100f5610fd7565b8154906001600160a01b038216903382900361015f576001600160a01b0316918215610150576001600160a01b031916821783557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b63416aebb560e11b8452600484fd5b6282b42960e81b8452600484fd5b80fd5b503461016d578060031936011261016d576001546040516001600160a01b039091168152602090f35b503461016d57604036600319011261016d5760243590600435906001600160401b03831161016d573660238401121561016d576004830135916001600160401b0383116104c0573660248460051b860101116104c05760015460ff8160b01c166104b15760ff60b01b1916600160b01b17600181905560a81c60ff16156104a2576040516331a9108f60e11b8152600481018290527f00000000000000000000000085d6cb7a8625a00be90db1f28b74278c381735b16001600160a01b031690602081602481855afa908115610497578491610478575b506001600160a01b03163314801590610470575b6104615761029182611166565b8294835b858110156103f65760248160051b8301013596848814801561037f575b610370576102bf88611166565b87865260026020526040862054604051635520947760e01b8152336004820152896024820152600160448201526020816064818b8a5af1908115610365578891610330575b509161031661031c9260019594611045565b90611045565b978652600260205285604081205501610295565b905060203d811161035e575b6103468183610fed565b6020826000928101031261016d575051610316610304565b503d61033c565b6040513d8a823e3d90fd5b63416aebb560e11b8652600486fd5b506040516331a9108f60e11b815260048101899052602081602481885afa9081156103eb5787916103bd575b506001600160a01b03163314156102b2565b6103de915060203d81116103e4575b6103d68183610fed565b810190611026565b386103ab565b503d6103cc565b6040513d89823e3d90fd5b50505083818352600260205260408320610411828254611045565b90558183526002602052604083205460405191825260208201527f205457b07a3a3b146fe8f30c02cda403db5e1e674d574514d1e5dde5acf81c5b60403392a36001805460ff60b01b1916905580f35b63416aebb560e11b8352600483fd5b508315610284565b610491915060203d6020116103e4576103d68183610fed565b38610270565b6040513d86823e3d90fd5b633ac4266d60e11b8252600482fd5b63558a1e0360e11b8352600483fd5b5080fd5b503461016d578060031936011261016d57602060405160288152f35b503461016d57602036600319011261016d576040516304eaa11360e01b81526004803590820181905291906020816024817f00000000000000000000000085d6cb7a8625a00be90db1f28b74278c381735b16001600160a01b03165afa9182156105995791610561575b60206105598361031686611068565b604051908152f35b90506020813d602011610591575b8161057c60209383610fed565b8101031261058c5751602061054a565b600080fd5b3d915061056f565b604051903d90823e3d90fd5b503461016d57602036600319011261016d576020610559600435611068565b503461016d578060031936011261016d57546040516001600160a01b039091168152602090f35b503461016d578060031936011261016d576040517f00000000000000000000000088a69ce3f677adf76d459c98a4e45be3796ba2f86001600160a01b03168152602090f35b503461016d578060031936011261016d57602060ff60015460a01c166040519015158152f35b503461016d578060031936011261016d576040517f00000000000000000000000085d6cb7a8625a00be90db1f28b74278c381735b16001600160a01b03168152602090f35b503461016d578060031936011261016d5760015460ff8160b01c166108bf5760ff60b01b198116600160b01b17600181905560a881901c60ff16156108b05760a01c60ff1615801561089f575b610890576040516370a0823160e01b81523360048201527f00000000000000000000000088a69ce3f677adf76d459c98a4e45be3796ba2f86001600160a01b03169190602081602481865afa90811561049757849161085a575b5061084b5782906001600160a01b0316803b156104c057819060246040518094819363ec66498f60e01b83523360048401525af180156108405761082d575b50602082916024604051809581936335313c2160e11b83523360048401525af180156108205781906107ed575b6020925080604051927faf7624ec4c2e80c176336722b70fc6ea07edcc30f64c2890fdcadd57fc890e60339180a36001805460ff60b01b191690558152f35b506020823d602011610818575b8161080760209383610fed565b8101031261058c57602091516107ae565b3d91506107fa565b50604051903d90823e3d90fd5b9161083a81602094610fed565b91610781565b6040513d85823e3d90fd5b637ad3edfb60e01b8352600483fd5b90506020813d602011610888575b8161087560209383610fed565b81010312610884575138610742565b8380fd5b3d9150610868565b631f207ed560e01b8252600482fd5b506001600160a01b038116156106e8565b633ac4266d60e11b8352600483fd5b63558a1e0360e11b8252600482fd5b503461016d57604036600319011261016d5760043560243560ff8116809103610a6b5760015460ff8160b01c16610b7c5760ff60b01b1916600160b01b17600181905560a81c60ff16156108b05715801590610af6575b610ae75761093281611166565b6040516304eaa11360e01b8152600481018290527f00000000000000000000000085d6cb7a8625a00be90db1f28b74278c381735b16001600160a01b031690602081602481855afa908115610497578491610ab5575b50828452600260205260286109a1604086205483611045565b10610aa65780602811600014610a9f5760280360288111610a8b575b8284526002602052604084208054918203918211610a775791602091859355606460405180948193635520947760e01b83523360048401528760248401528160448401525af1801561084057610a44575b50337f23771f079e5a700686ed8afe522acf1745ec7888783d2d4b22b338f490eb3d6d8380a36001805460ff60b01b1916905580f35b6020813d602011610a6f575b81610a5d60209383610fed565b81010312610a6b5751610a0e565b8280fd5b3d9150610a50565b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b84526011600452602484fd5b50826109bd565b631aa7cc5f60e21b8452600484fd5b90506020813d602011610adf575b81610ad060209383610fed565b81010312610884575138610988565b3d9150610ac3565b63416aebb560e11b8252600482fd5b506040516331a9108f60e11b8152600481018290526020816024817f00000000000000000000000085d6cb7a8625a00be90db1f28b74278c381735b16001600160a01b03165afa908115610840578391610b5d575b506001600160a01b0316331415610925565b610b76915060203d6020116103e4576103d68183610fed565b38610b4b565b63558a1e0360e11b8452600484fd5b503461016d57604036600319011261016d57610ba5610fd7565b60243590811515918281036108845783546001600160a01b0316330361015f5780610c29575b61046157600180546001600160a81b0319166001600160a01b0390921691821760a084901b60ff60a01b16179055604051918252907f8ade12f738a6fdd389817f8ed8e69bd6eb2f0fe3d46d76a557bcbf259f981f7b90602090a280f35b506001600160a01b03811615610bcb565b503461016d57602036600319011261016d576004358015158091036104c05781546001600160a01b03163303610cb2576001805460ff60a81b191660a883901b60ff60a81b161790556040519081527f771a7aa6908240b30698825129cb3d6dfa4308b3ac33cf77f17889143e29346d90602090a180f35b6282b42960e81b8252600482fd5b503461016d57602036600319011261016d5760043560015460ff8160b01c166104b15760ff60b01b1916600160b01b17600181905560a81c60ff16156104a2576040516370a0823160e01b81523360048201527f00000000000000000000000088a69ce3f677adf76d459c98a4e45be3796ba2f86001600160a01b031690602081602481855afa908115610497578491610f3c575b5061084b576040516331a9108f60e11b8152600481018390527f00000000000000000000000085d6cb7a8625a00be90db1f28b74278c381735b16001600160a01b031690602081602481855afa908115610f31578591610f12575b50336001600160a01b0390911603610150578360208192610dd086611166565b606460405180948193635520947760e01b8352336004840152896024840152600160448401525af1908115610f07578291610ed3575b50610e1f60209185845260028352604084205490611045565b92848352600282528260408120556024604051809781936335313c2160e11b83523360048401525af1938415610820578194610e9c575b6020858086866040519081527f2327515bfc2bec4e388625bedf1480899f6adee0a8dafcca3c91970596d7a34c853392a46001805460ff60b01b19169055604051908152f35b9093506020813d602011610ecb575b81610eb860209383610fed565b8101031261088457519250602038610e56565b3d9150610eab565b90506020813d602011610eff575b81610eee60209383610fed565b810103126104c05751610e1f610e06565b3d9150610ee1565b6040513d84823e3d90fd5b610f2b915060203d6020116103e4576103d68183610fed565b38610db0565b6040513d87823e3d90fd5b90506020813d602011610f66575b81610f5760209383610fed565b81010312610884575138610d55565b3d9150610f4a565b503461016d578060031936011261016d576040517f000000000000000000000000b1fef093886bea075339b20970608cf92d3bd0776001600160a01b03168152602090f35b9050346104c057816003193601126104c05760209060ff60015460a81c1615158152f35b600435906001600160a01b038216820361058c57565b601f909101601f19168101906001600160401b0382119082101761101057604052565b634e487b7160e01b600052604160045260246000fd5b9081602091031261058c57516001600160a01b038116810361058c5790565b9190820180921161105257565b634e487b7160e01b600052601160045260246000fd5b80600052600360205260ff604060002054168015611135575b61112457604051639c5004ad60e01b8152600481018290526020816024817f000000000000000000000000b1fef093886bea075339b20970608cf92d3bd0776001600160a01b03165afa600091816110f0575b506110eb5750600052600260205260406000205490565b905090565b9091506020813d60201161111c575b8161110c60209383610fed565b8101031261058c575190386110d4565b3d91506110ff565b600052600260205260406000205490565b507f000000000000000000000000b1fef093886bea075339b20970608cf92d3bd0776001600160a01b031615611081565b80600052600360205260ff6040600020541661123e576000818152600360205260409020805460ff191660011790557f000000000000000000000000b1fef093886bea075339b20970608cf92d3bd0776001600160a01b031690811561123a57602060249260405193848092639c5004ad60e01b82528560048301525afa60009281611206575b506111f6575050565b6000526002602052604060002055565b9092506020813d602011611232575b8161122260209383610fed565b8101031261058c575191386111ed565b3d9150611215565b5050565b5056fea264697066735822122065bc9fa973cf07aa1024634eadcf1f829da68961c92113a14e8da69ef522d5c664736f6c63430008240033
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x00c777…b047b3 | 7 hrs agoMon, 17 Aug 2026 21:16:52 UTC | 0x232751…a34c | [0] 0x000000000000…0a5f5cf0 [1] 0x000000000000…00000cf1 [2] 0x000000000000…00000001 data: 0x000000000000000000…0000002a |
| 0x8c122a…1cea91 | 8 hrs agoMon, 17 Aug 2026 20:37:17 UTC | 0x771a7a…346d | data: 0x000000000000000000…00000001 |
| 0x8248dd…d2b241 | 9 hrs agoMon, 17 Aug 2026 20:05:19 UTC | 0x8ade12…1f7b | [0] 0x000000000000…974acfdc data: 0x000000000000000000…00000000 |
| 0xa6dfcb…d421cf | 9 hrs agoMon, 17 Aug 2026 20:05:01 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…0a5f5cf0 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x00c777…b047b3 | mintPencilByBurn | 39,152,971 | 7 hrs agoMon, 17 Aug 2026 21:16:52 UTC | 0x9f66…5cf0 | IN | OnlyTraitsUpgradeModuleV2 | $0.000 ETH | 0.00000612 | |
| 0x8c122a…1cea91 | setEnabled | 39,129,285 | 8 hrs agoMon, 17 Aug 2026 20:37:17 UTC | 0x9f66…5cf0 | IN | OnlyTraitsUpgradeModuleV2 | $0.000 ETH | 0.00000059 | |
| 0x8248dd…d2b241 | setAlternateBurnAdapter | 39,110,157 | 9 hrs agoMon, 17 Aug 2026 20:05:19 UTC | 0x9f66…5cf0 | IN | OnlyTraitsUpgradeModuleV2 | $0.000 ETH | 0.00000095 |