OpenTransfer
美術作品を買ったとき、あなたはいつ、それを所有していると感じるだろうか。
その作品を所有しているという感覚と、NFT アートを購入したときの感覚とのあいだに、違いを感じるだろうか。それとも、あなたにとって違いはないだろうか。
ほとんどの NFT は、その NFT に結びついたウォレットにしか NFT の転送を許さない。あるいは、そのウォレットが承認した第三者にしか転送を許さない。NFT の「所有」は、技術的にはこうして成り立っている。

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

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 でも動かせる。

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
Exhibitions
Proof of X - NFT as New Media Art3331 Arts Chiyoda、東京2022-04-22 – 2022-05-01

展示風景、Proof of X - NFT as New Media Art、2022