Appearance
Changelog
A record of changes to the deployed protocol — the contracts, their parameters, and the permissions over them. It is not a product blog: new pages, copy edits, and interface work do not appear here.
Entries are newest first.
What gets an entry
Every one of these is logged here, without exception:
| Change | Why it is logged |
|---|---|
| A UUPS upgrade of LootSkins or LootMarket | The code behind an address you have already approved is different afterwards. |
| A fee change — platform fee, fee recipient, withdrawal fee | It changes what a trade or a redemption costs you. |
| A royalty change — receiver or basis points | It changes the split on every sale. |
| An allow-list change — collections or payment currencies | It changes what LootMarket will settle. |
A baseURI change | It changes where every token's metadata is served from. |
| A minter change on LootSkins | It changes who can create tokens. |
| An ownership transfer of either contract | It changes who holds every power above. |
| A pause or unpause of LootMarket | It changes whether orders can be filled at all. |
Each entry carries:
- the date (UTC),
- the transaction hash of the change,
- what changed, in terms of the before and after values, and
- a how to verify line, so you can confirm it on-chain instead of trusting this page.
Verify, don't trust this page
This is a website. It can be wrong, stale, or edited. Every entry below names a transaction and a call you can make yourself against https://rpc.mainnet.chain.robinhood.com, or a page you can open on the explorer at https://robinhoodchain.blockscout.com.
If this page and the chain disagree, the chain is right and this page is a bug.
2026-08-11 — Security upgrade (UUPS)
Both contracts were upgraded in place. The addresses did not change, no token moved, no balance changed, and the EIP-712 domain separator is identical — every order signed before the upgrade is still valid.
| LootSkins proxy | 0xcDc669a4A2EE3C01C0B269c990B4F0ae6BdCDA2E (unchanged) |
| New LootSkins implementation | 0xd59bCB099927c8393d49e9b3F9247C25fFC5fBDa |
| Upgrade tx | 0xbbde4f771b6ddf2d393d2de52bc85c587b4ab76443e190a60a3ffac8a14c8c9a |
| LootMarket proxy | 0xb455Da2D860FabCe8ee6B0DA96398c4CACf14229 (unchanged) |
| New LootMarket implementation | 0x9E754adCEEAb0d08d039c44ECe71d5EA114a9Ecd |
| Upgrade tx | 0xb66a980dabb0ac6b6106ec7b3c2e7604a98d67a5c8d8be48bbd3c5566661cf6d |
What changed
- Self-purchase is now rejected.
fulfillOrderreverts withSelfPurchasewhen the buyer is the maker. Previously it succeeded: the price returned to the maker while the royalty and platform fee did not, which made it a fixed-percentage way to manufacture trading volume. - The creator royalty is capped at 1000 bps (10%), enforced in both
initializeandsetDefaultRoyalty, reverting withRoyaltyTooHigh. Together with the existing 10% platform-fee cap this guarantees a seller keeps at least 80% of any fill. Before this, ERC-2981 permitted up to 100%, so the owner could have raised the royalty after a maker signed and settled that maker at zero on a successful sale. setMinimumNonceis now a one-way ratchet. Lowering the watermark reverts withNonceBelowMinimum. Previously it could be lowered, which revived signatures that had been bulk-cancelled — while LootFi's own records continued to treat them as dead, so they existed on chain and nowhere in the interface.
Unchanged and verified after the upgrade: owner, baseURI, royalty receiver and 500 bps rate, withdrawFee 0, platform fee 200 bps, fee recipient, pause state, collection allow-list, and every minted token's owner and tokenURI.
How to verify
bash
# the proxies still point at the same addresses, with new implementations behind them
cast call 0xcDc669a4A2EE3C01C0B269c990B4F0ae6BdCDA2E "MAX_ROYALTY_BPS()(uint96)" --rpc-url <rpc> # 1000
cast call 0xb455Da2D860FabCe8ee6B0DA96398c4CACf14229 "domainSeparator()(bytes32)" --rpc-url <rpc> # unchanged2026-07-25 — Initial deployment
The protocol contracts were deployed to Robinhood Chain (chain id 4663) and went live at block 19419826.
What changed
LootSkins(ERC-721, UUPS) deployed and initialized: nameLootFi Skins, symbolLOOT, default ERC-2981 royalty set,baseURIset, minter allow-list configured.LootMarket(UUPS) deployed and initialized: platform fee 200 bps (2%), fee recipient set, LootSkins added to the collection allow-list.LootToken(ERC-20) deployed.withdrawFeeon LootSkins left at 0 — redemption costs gas only.
Addresses are not restated here. There is one source of truth for them: Deployments.
How to verify
- Open Deployments and take the three addresses.
- On the explorer, open each address and confirm the contract creation is at or before block
19419826. - Read the live parameters directly and compare them with Fees & royalties:
LootMarket.platformFeeBps()→200LootMarket.feeRecipient()LootSkins.withdrawFee()→0LootSkins.royaltyInfo(<tokenId>, 10000)→ receiver and500
- Confirm LootSkins is allow-listed on the marketplace:
LootMarket.allowedCollection(<LootSkins address>)→true.
Indexing note
Block 19419826 is the first block at which protocol state exists. An indexer built against this deployment should start there; earlier blocks contain nothing relevant to it. See Indexing and Events & indexing.
An earlier deployment exists and is superseded
An earlier set of contracts was deployed at a lower block and is not in use. Those addresses are not listed anywhere on this site, and any token or order associated with them is unrelated to the live protocol. Take addresses only from Deployments — never from an old link, a screenshot, or a third party.
Related
- Deployments — the addresses, and the only place they are stated
- Admin & upgrades — which powers exist and who holds them
- Fees & royalties — current values and how to read them on-chain
- Trust & security — what an operator can and cannot do