Lazy Minting

2814 ワード

💡 Lazy Mintingは?


売り手のミントのnftが市場で売れない場合、売り手の立場から見ると、ミント価格だけが支払われている.このような状況を避けるためにlazy mintingを導入した.名前から分かるように、ミントの過程が延期された.
これはnftが実際に購入する際にnftを売り手にダンプし、売り手がnftを買い手にダンプする方法である.つまり、購入が完了するまで、市場のnftは実はnftではなく、簡単なイメージだったということです.
lazy mintingを使用して、minting価格は買い手が支払う.
注-https://nftschool.dev/tutorial/lazy-minting/#how-it-works

💡 プログラム

  • 作成者(販売者)
  • 出品者が市場に品物を並べた場合,署名者としてEIP 712を介して署名を生成する.
    → signer._signTypedData(domain、types、資格証明)を実行するとmetamaskが開き署名し、結果をsignalとして保存します
    →この署名は売り手が当該物品をNFTを生成することを許可することを証明する
  • 署名0xd849585d6e93ac0089cb21f2d7001a57a4361ce7e4f26794222e336ad4713dcc6549aac8f3~~~~~~~b48e1d8039c85142aae5c62ce0ab64fd471cこのようにして生成され、タイプはバイトです.これには、後で購入者が購入した場合(購入した場合、nftに印刷される)に呼び出された償還関数に渡される証明書が含まれます.
  • を買い戻すためには、物品情報(id、price、uriなど)と署名が必要であるため、物品の発売時に生成される物品情報と署名は、ある場所に格納されなければならない.(ex. database)
  • 買い手(買い手)
  • を購入すると、契約の償還関数が実行され、買い手の住所が償還者として償還関数に渡される.
  • はまずnftを印刷するので、mint関数にverify関数から得られた署名者アドレス(買い手アドレス)を渡してnftを印刷する.
  • その後、ミントのnftを買い手、すなわち買い戻し側に譲渡する.
  • function redeem(address redeemer, NFTVoucher calldata voucher) public payable returns (uint256) {
        // make sure signature is valid and get the address of the signer
        address signer = _verify(voucher);
    
        // make sure that the redeemer is paying enough to cover the buyer's cost
        require(msg.value >= voucher.minPrice, "Insufficient funds to redeem");
    
        // first assign the token to the signer, to establish provenance on-chain
        _mint(signer, voucher.tokenId);
        _setTokenURI(voucher.tokenId, voucher.uri);
        
        // transfer the token to the redeemer
        _transfer(signer, redeemer, voucher.tokenId);
    
        return voucher.tokenId;
      }
  • verify関数は、hash関数の署名情報以外の資格証明情報を用いてタイプデータを生成し、要約変数に格納する.そして,ECDSAアルゴリズム(楕円曲線デジタル署名アルゴリズム)により,要約と署名情報から署名者アドレスを復元する.(ECDSAのrecover関数を使用します.)
  • function _verify(NFTVoucher calldata voucher) internal view returns (address) {
        bytes32 digest = _hash(voucher);
        return ECDSA.recover(digest, voucher.signature);
      }
    function _hash(NFTVoucher calldata voucher) internal view returns (bytes32) {
        return _hashTypedDataV4(keccak256(abi.encode(
          keccak256("NFTVoucher(uint256 tokenId,uint256 minPrice,string uri)"),
          voucher.tokenId,
          voucher.minPrice,
          keccak256(bytes(voucher.uri))
        )));
      }

    n/a.結論


    lazy mintingを使用すれば、売り手の立場から見ると、minting価格の制限により、市場には複数のnftが登録できる.しかしminting以前にはmintingのための情報(image,signatureなど)がどこかに格納されなければならないため,多少は脱中央の価値に反する.