Blockmunity (4)

이민기·2022년 3월 7일
0

Blockmunity

목록 보기
5/7
post-thumbnail

Blockmunity

6. ✓ NFT 판매

NFT를 판매하기 위해서는 먼저 판매등록을 할 것인데, 가격을 설정하여 서버에게 권한을 부여해주며, 상태를 판매가능한 상태로 변경하여 교환소에 노출 시켰다


Code🖋

const server = process.env.TOKEN_ADDRESS;
  const serverPK = process.env.TOKEN_PRIVATEKEY;
  const tokenId = req.body.tokenId;
  const ownerAddress = req.body.ownerAddress;
  const ownerPK = req.body.ownerPK;
  const price = req.body.price;
  var erc721contractABI = erc721Abi;
  var erc721contract = new Contract(erc721contractABI, process.env.ERC721ADDR);
  const nftData = erc721contract.methods.approve(server, parseInt(tokenId)).encodeABI();
  const rawTransaction = {
    from: server,
    to: process.env.ERC721ADDR,
    gas: 5000000,
    data: nftData,
  };
  web3.eth.accounts.signTransaction(rawTransaction, ownerPK).then((signTx) => {
    web3.eth.sendSignedTransaction(signTx.rawTransaction, async (err, req) => {
      if (err) {
        console.log("apporve err :", err);
      } else {
        db.collection("nfts").updateOne({ _id: parseInt(tokenId) }, { $set: { price: price, buyable: "ok" } }, (err, result) => {
          if (err) {
            console.log("db수정 에러 : ", err);
          } else {
            console.log("판매 등록 완료!!");
            res.json({ message: "판매 등록 완료!!" });
          }
        });
      }
    });
  });
});
  • 원리는 간단하다 ERC721컨트랙트의 approve함수를 이용해서 서버에게 NFT에 대한 권한을 넘겨주며 DB에는 가격과 판매 가능상태를 설정해 준다

실제 실행 화면



마치며

저번 OpenSea 클론을 할 때는 OpenSea를 Web 3.0으로 구현하다 보니 힘들었는데 이번에는 중앙 서버를 사용해서 구현하다보니 확실히 편하다는 느낌이 들기도했고
속도 부분도 체감이 되었다
😀😀
마지막 부분이었던 구매부분을 마무리 하러 넘어가쟈 😀😀

profile
블로그를 옮기는 중입니다. https://min71.dev

0개의 댓글