September 13th, 2022

What does it take to build an NFT project? How does it work end-to-end, from an idea to collectibles in the user's wallet? How much does it cost?

Rings (for Loot)

Rings (for Loot) is the first and largest 3D interpretation of an entire category in Loot. Adventurers, builders, and artists are encouraged to reference Rings (for Loot) to further expand on the imagination of Loot.

The Rings project is Jeremy Goldberg's idea. Jeremy made all the stunning artwork, 0xHab helped shape tokenomics and project direction and I (w1nt3r.eth) built the contract and website.

August 16th, 2022

Here are a few reasons why you should always use a burner wallet to deploy new contracts. In the end, I also have an example of how I do this for my own projects.

1. Security

Every time someone asks you for your private key, you should get very suspicious. Even if it's a developer tool for deploying smart contracts. Malicious software and browser extensions can monitor your keyboard or clipboard and steal your private key as you are typing it. Vendor attacks are becoming more popular.

The developers might not have malicious intentions, but the software is complex and bugs happen. In 2022 a wallet named Slope accidentally logged users' seed phrases to a log aggregation service. The result: millions of funds drained.

July 28th, 2022

Here’s the simplest NFT contract:

import '@openzeppelin/contracts/token/ERC721/ERC721.sol';

contract SimplestNFT is ERC721 {
    function mint(uint256 tokenId) external {
        _safeMint(msg.sender, tokenId);

It delegates the heavy lifting to the base contract implementation (in this case, OpenZeppelin). _safeMint is responsible for matching the ERC721 spec: it does some checks, stores data about ownership, emits events and calls callbacks.

But you don’t want to allow anyone to call this function without any limitations. Here are the 5 most common things that developers add to their mint function:

June 22nd, 2022

You mint or buy things, and they show up in your wallet — you see them in MetaMask, Rainbow, whatever you have. "Wallet" is a useful concept when explaining web3 to people.

But if you look under the hood, it's not at all how it works.

Your wallet is just an address: a 160-bit number that looks like 0x123a…c8f9. It doesn't really store anything.

The things you have "in your wallet" are actually defined by the contracts.