MoonCat​Acclimator

TL;DR

MoonCat Acclimation Basics

(Everything you ever wanted to know about MoonCat Acclimation)

Why should I wrap my MoonCats?

  1. So that they can interact with the world!
    • The official wrapping contract at 0xc3f733ca98E0daD0386979Eb96fb1722A1A05E69 allows your MoonCats to interact with wallets and marketplaces that use the ERC-721 Non-Fungible Token Standard. ERC-721 is the standard that many marketplaces (e.g. OpenSea) use for NFTs. MoonCat​Rescue was created before the original draft this standard was even submitted(!), and that's why the MoonCats need to be brought up to date.
  2. So that they can own things!
    • The wrapping contract also implements a new, proposed standard: the ERC-998 Composable Non-Fungible Token Standard. ERC-998 is a standard that allows ERC-721 tokens to own other tokens directly (rather than just being owned by the same address), and therefore allow transferring ownership of whole collections of ERC-721s together take just a single transaction.
  3. So you can support continued MoonCat development!
    • If you use the official wrapping contract's collection on OpenSea, a fraction of each sale goes to the ponderware development team. So, if you appreciate what work that team has done, and wish to support further development of the MoonCat ecosystem of applications, and you're wanting to buy/sell MoonCats on OpenSea, doing it via the official collection helps contribute to that cause.

Is wrapping permanent?

Nope! It's not a permanent process; if you wish, you can "unwrap" your MoonCat and return it to its original state at any time.

But wait, isn't there already a wrapper?

Yes, a lot of community members have been using the existing "unofficial" ERC-721 wrapper (located at 0x7c40c393dc0f283f318791d746d894ddd3693572). This wrapper was expeditiously put together so that the new community was able to use platforms like OpenSea and NFT20 as soon as possible. Unfortunately, that wrapper doesn't contain tokenURI metadata and doesn't preserve the "rescue order" (mint order) of MoonCats, which has caused some confusion about what different IDs mean. Besides using official metadata, using the original mint order, and allowing batch-wrapping, the official wrapping contract will also implement ERC-998 functionality (think accessories!).

Do I have to wrap or re-wrap my MoonCats?

No, your existing MoonCats wrapped with the 0x7c40c3... wrapping contract will continue to work as ERC-721 tokens, and projects that wish to support them can choose to do so. Future tooling and applications created by ponderware will focus on supporting MoonCats wrapped with the new wrapper, so if you choose to not re-wrap your MoonCats, they may not be able to play fully with their other brethren.

Deeper Down the MoonCat Crater

(Everything else you ever wanted to know about MoonCat Acclimation)

(For those who wish to engage the contract directly)

Do I have to re-wrap my MoonCats NOW?

No, the 0x7c40c3... wrapping contract has an unwrap function that is not time-dependent, so you can do that at any time in the future. The ponderware team has not found any security vulnerabilities in the 0x7c40c3... wrapping contract, so there's very little risk in having your MoonCats stay wrapped with that contract longer-term.

Why is Metamask setting the gas limits so high?

When using the Acclimator web UI, your browser popup for Metamask will auto-compute how much the gas limit is needing to be. But if you compare that "gas limit" value to completed transactions on the blockchain from who have acclimated before you, you may notice that the actual gas charged for those transactions is a lot less. And so the overall final price paid for the transaction's gas looks like it will be much higher, but ends up being lower. This is especially evident when doing batched actions. Why is that?

It has to do with how the Ethereum EVM refunds gas when state is freed/deleted from the blockchain. When doing a "re-wrap" action on a formerly-wrapped MoonCat, the old token's state is deleted in the process, and that earns a refund, but that refund only gets applied at the very end of the transaction's execution. So what you see in completed transactions is really the net gas cost (the gross total gas needed to run all the smart contract actions, minus the gas refunded by state-freeing actions). If you set the "gas limit" of your transaction to be just at that "net gas cost", the transaction will fail, because it needs to first do the actions up to the "gross gas cost" first, before getting the refund.

Final gas units that get used for the various actions are:

Using those figures you can estimate what the final costs will be, even though the transaction must be submitted with higher gas limits to be successful.

How do I wrap my MoonCats with the new wrapping contract myself?

The MoonCat Acclimator web application is a community tool that structures the interaction transactions for you, but if you want to craft the transactions yourself (or just want to peek under the hood and see what it's doing), the next few questions detail which functions on the smart contracts are available for different situations.

How do I wrap my MoonCats who have never been wrapped before?

You must first make an adoption offer to the wrapping contract to adopt your MoonCat for zero ETH (makeAdoptionOfferToAddress function on the MoonCatRescue contract, targeting address 0xc3f733ca98E0daD0386979Eb96fb1722A1A05E69, which is the official wrapping contract. You'll need the MoonCat's five-byte hexadecimal ID for this call). Once that has succeeded, call the wrap function on the official wrapping contract, passing in the MoonCat's rescue order as the function's parameter. If you have many MoonCats you'd like to wrap this way, you'll still need to call the makeAdoptionOfferToAddress function once for each MoonCat, but then you can use the batchWrap function to submit multiple rescue order numbers at once, and wrap them all, using just one transaction. (m + 1 transactions needed, for m MoonCats)

How do I re-wrap my MoonCats who have been wrapped with the 0x7c40c3... wrapping contract?

To transition these MoonCats, they will need to be unwrapped from the old contract and re-wrapped into the new one. To use these methods, you'll need to know the token ID of the wrapped MoonCat in the 0x7c40c3... wrapping contract, as well as the rescue order for each of your MoonCats. There's a few options built into the official wrapping contract to support different needs for different users: