When you buy a piece of art, when do you feel you own it?

Do you feel any difference between the feeling of owning that piece and the feeling you get when you purchase NFT Art? Or no difference for you?

Most NFTs allow only wallets that are tied to that NFT to transfer the NFTs. Or only third parties approved by that wallet are allowed to transfer. This is how the "ownership" of NFTs is technically achieved.


But this NFT that we made has the concept of OpenTransfer. The concept is that OpenTransfer allows “anyone” to transfer a given NFT. Yes, anyone. This would never happen in the NFT space, but if you see the relationship between things and their owners in the real world, you will see that this is a normal thing.

Would you say that you “own” this NFT that anyone can transfer?


By the way, we have only 100 of the OpenTransfer NFTs that can be minted from Etherscan for 0.01 ETH. For those who mint, please be aware that your NFT will be a transferable token that anyone can transfer. And also, all the ETH that occurred from the minting will automatically be donated to the INTERNET ARCHIVE.

INTERNET ARCHIVE Address: 0xFA8E3920daF271daB92Be9B87d9998DDd94FEF08

And you can freely move OpenTransfer NFTs owned by other accounts. You can move anyone's NFTs at any time by specifying from whom(from) to whom(to) and which token(tokenId) to move in Etherscan and executing a “Write”.


NFT Overview

Network: Ethereum Mainnet
Standard: ERC721
Contract Address: 0x93fcdc063e118e0c57d678416849a3443a56bc97
Name: OpenTransfer
Symbol: OT
Price per token: 0.01 ETH
Max Total Supply: 100
Contract Owner: Owner of opentransfer.eth
Metadata of NFT: Nouns


// SPDX-License-Identifier: MIT

pragma solidity 0.8.6;

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

contract OpenTransfer is ERC721 {

    event OpenTransfer(address indexed by, address indexed from, address indexed to, uint256 tokenId);
    event Mint(address indexed buyer, uint256 indexed tokenId);

    uint256 public totalSupply;

    constructor() ERC721("OpenTransfer", "OT") {}

    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        // require(_isApprovedOrOwner(_msgSender(), tokenId), "OpenTransfer: transfer caller is not owner nor approved");
        _checkOpenTransfer(from, to, tokenId);
        _transfer(from, to, tokenId);

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        // require(_isApprovedOrOwner(_msgSender(), tokenId), "OpenTransfer: transfer caller is not owner nor approved");
        _checkOpenTransfer(from, to, tokenId);
        _safeTransfer(from, to, tokenId, _data);

    function _checkOpenTransfer(address from, address to, uint256 tokenId) internal {
        if (_isApprovedOrOwner(_msgSender(), tokenId)) { return; }
        emit OpenTransfer(msg.sender, from, to, tokenId);

    function owner() public view returns (address) {
        return IERC721(0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85).ownerOf(9724528409280397360129153152005364550111598890501967246845225370105154660239);

    function mint(uint256 quantity) public payable {
        require(totalSupply + quantity <= 100, "OpenTransfer: Invalid quantity");
        require(msg.value == 0.01 ether * quantity, "OpenTransfer: Invalid value");
        for (uint256 i; i < quantity; i++) { _mint(msg.sender, totalSupply); emit Mint(msg.sender, totalSupply++); }
        (bool success, ) = payable(0xFA8E3920daF271daB92Be9B87d9998DDd94FEF08).call{value: msg.value}("");
        require(success, "OpenTransfer: Unable to send");

    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        require(_exists(tokenId), "OpenTransfer: URI query for nonexistent token");
        return ERC721(0x9C8fF314C9Bc7F6e59A9d9225Fb22946427eDC03).tokenURI(tokenId);


Toshi / wildmouse



© 2021 by TART K.K.