OpenTransfer

年
2022
作家
Toshi / wildmouse
媒体
Ethereum mainnet、ERC-721、Solidity
契約
0x93fcdc063e118e0c57d678416849a3443a56bc97 — Etherscan で見る

美術作品を買ったとき、あなたはいつ、それを所有していると感じるだろうか。

その作品を所有しているという感覚と、NFT アートを購入したときの感覚とのあいだに、違いを感じるだろうか。それとも、あなたにとって違いはないだろうか。

ほとんどの NFT は、その NFT に結びついたウォレットにしか NFT の転送を許さない。あるいは、そのウォレットが承認した第三者にしか転送を許さない。NFT の「所有」は、技術的にはこうして成り立っている。

OpenTransfer

しかし、私たちがつくったこの NFT には OpenTransfer という考え方がある。OpenTransfer は、ある NFT を「誰でも」転送できるようにする。そう、誰でも、である。NFT の世界ではまず起こらないことだが、現実の世界での物と持ち主の関係を見れば、これはごく普通のことだとわかるだろう。

誰でも転送できるこの NFT を、あなたは「所有している」と言えるだろうか。

Etherscan の Write Contract で mint(0.01 ETH, quantity 1)を呼ぶ画面(2022-03-09)

Etherscan の Write Contract で mint(0.01 ETH, quantity 1)を呼ぶ画面(2022-03-09)

ちなみに、OpenTransfer の NFT は 100 点だけで、Etherscan から 0.01 ETH で発行できる。発行する人は、自分の NFT が、誰でも転送できるトークンになることを承知しておいてほしい。また、発行で生じた ETH はすべて、自動的に INTERNET ARCHIVE に寄付される。

INTERNET ARCHIVE のアドレス: 0xFA8E3920daF271daB92Be9B87d9998DDd94FEF08

そして、ほかのアカウントが持っている OpenTransfer の NFT も、自由に動かすことができる。 Etherscan で、誰から(from)誰へ(to)どのトークンを(tokenId)動かすかを指定して「Write」を実行すれば、いつでも誰の NFT でも動かせる。

Etherscan の Write Contract で safeTransferFrom(from / to / tokenId)を呼ぶ画面(2022-03-10)

Etherscan の Write Contract で safeTransferFrom(from / to / tokenId)を呼ぶ画面(2022-03-10)

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

Contract

// 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);
    }
}

Read / Write

Ethereum mainnet の契約を直接読み、自分のウォレットから呼び出せる。読むだけならウォレットは要らない。

OpenTransfer0x93fCdc063e118e0c57d678416849A3443a56bc97

Etherscan の Read ContractEtherscan の Write Contract

Exhibitions

Texts

  1. Bound Baw

    NFTアートを取り巻く現況を徹底解説。「Proof of X展」マニフェスト

    hasaquiJA

    元のサイトは閉鎖。アーカイブ版。

Links

作品一覧へ戻る