NFT를 판매하기 위해서는 먼저 판매등록을 할 것인데, 가격을 설정하여 서버에게 권한을 부여해주며, 상태를 판매가능한 상태로 변경하여 교환소에 노출 시켰다
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
으로 구현하다 보니 힘들었는데 이번에는 중앙 서버를 사용해서 구현하다보니 확실히 편하다는 느낌이 들기도했고
속도 부분도 체감이 되었다 😀😀
마지막 부분이었던 구매부분을 마무리 하러 넘어가쟈 😀😀