-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
77 lines (74 loc) · 2.74 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const express = require('express');
const multer = require('multer');
const cors = require('cors');
const axios = require('axios');
const app = express();
const port = process.env.PORT || 5000;
app.use(express.json());
////file size must be less than 1000000 bytes
const upload = multer({
limits: {
fileSize: 100000000
}
});
////api of starton
const starton = axios.create({
baseURL: "https://api.starton.io/v3",
headers: {
"x-api-key": "sk_live_0fc5a74d-ae12-4269-be20-a7faacf5489a",
},
})
app.post('/upload',cors({
origin: "https://nft-minter-mu-nine.vercel.app",
methods:["GET" , "POST","PUT","DELETE"],
credentials: true,
}),upload.single('file'),async(req,res)=>{
let data = new FormData();
const blob = new Blob([req.file.buffer],{type:req.file.mimetype});
data.append("file",blob,{filename:req.file.originalnam})
data.append("isSync","true");
////upload image on ipfs
async function uploadImageOnIpfs(){
const ipfsImg = await starton.post("/ipfs/file", data, {
headers: { "Content-Type": `multipart/form-data; boundary=${data._boundary}` },
})
return ipfsImg.data;
}
async function uploadMetadataOnIpfs(imgCid){
const metadataJson = {
name: `A Wonderful NFT`,
description: `Probably the most awesome NFT ever created !`,
image: `ipfs://ipfs/${imgCid}`,
}
const ipfsMetadata = await starton.post("/ipfs/json", {
name: "My NFT metadata Json",
content: metadataJson,
isSync: true,
})
return ipfsMetadata.data;
}
const SMART_CONTRACT_NETWORK="polygon-mumbai"
const SMART_CONTRACT_ADDRESS="0x2238c05D9C187ec7B2Cb38E65E277ea5D0E40094"
const WALLET_IMPORTED_ON_STARTON="0x2f49E06BAdA73091D44B476AEDe3bdE796A52288";
async function mintNFT(receiverAddress,metadataCid){
const nft = await starton.post(`/smart-contract/${SMART_CONTRACT_NETWORK}/${SMART_CONTRACT_ADDRESS}/call`, {
functionName: "mint",
signerWallet: WALLET_IMPORTED_ON_STARTON,
speed: "low",
params: [receiverAddress, metadataCid],
})
return nft.data;
}
const RECEIVER_ADDRESS = "0xFD5Dacd7Bc961c2d74Af10A65F9A4E137d423779"
const ipfsImgData = await uploadImageOnIpfs();
const ipfsMetadata = await uploadMetadataOnIpfs(ipfsImgData.cid);
const nft = await mintNFT(RECEIVER_ADDRESS,ipfsMetadata.cid)
console.log(nft)
res.status(201).json({
transactionHash:nft.transactionHash,
cid:ipfsImgData.cid
})
})
app.listen(port,()=>{
console.log('Server is running on port '+ port);
})