(Tiểu luận) đề tài xây dựng ứng dụng marketplace bán tranh nft

56 9 0
(Tiểu luận) đề tài  xây dựng ứng dụng marketplace bán tranh nft

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Xem lại các collection của mình và danh sách các NFT tương ứng với collection.+ Và các UI khác như UI modal, thêm xoá sửa.+ Có sử dụng các kỹ thuật tối ưu như lazy loading, splitting cod

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG CƠ SỞ TẠI THÀNH PHỐ HỒ CHÍ MINH KHOA CƠNG NGHỆ THƠNG TIN BÁO CÁO ĐỀ TÀI MÔN PHÁT TRIỂN PHẦN MỀM HƯỚNG DỊCH VỤ Đề tài : XÂY DỰNG ỨNG DỤNG MARKETPLACE BÁN TRANH NFT Chuyên ngành: CÔNG NGHỆ PHẦN MỀM Giảng viên: Th.S Huỳnh Trung Trụ Lớp : D19CQCNPM02-N SV thực hiện: 1.PHẠM VĂN THUẬN TẠ QUANG LINH 3.LÊ HỒI NHÂN 4.NGUYỄN TRỌNG TÍN 5.LÊ QUANG PHỤC N19DCCN204 N19DCCN099 N19DCCN126 N19DCCN170 N19DCCN208 TP HỒ CHÍ MINH - 06/2023 NHẬN XÉT CỦA GIẢNG VIÊN LỜI CẢM ƠN Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến “Học viện Cơng nghệ Bưu viễn thơng” đưa môn học Phát triển phần mềm hướng dịch vụ vào chương trình giảng dạy Đặc biệt, chúng em xin gửi lời cảm ơn sâu sắc đến giáo viên môn - thầy giáo Huỳnh Trung Trụ dạy dỗ, truyền đạt kiến thức quý báu cho chúng em suốt thời gian học tập vừa qua Trong thời gian tham gia lớp học Phát triển phần mềm hướng dịch vụ, chúng em có thêm cho nhiều kiến thức bổ ích, tinh thần học tập hiệu quả, nghiêm túc Đây chắn kiến thức quý báu, hành trang để chúng em vững bước sau Bộ môn Phát triển phần mềm hướng dịch vụ môn học thú vị, vô bổ ích có tính thực tế cao Đảm bảo cung cấp đủ kiến thức, gắn liền với nhu cầu thực tiễn sinh viên Tuy nhiên, vốn kiến thức nhiều hạn chế khả tiếp thu thực tế nhiều bỡ ngỡ Mặc dù chúng em cố gắng chắn báo cáo khó tránh khỏi thiếu sót nhiều chỗ cịn chưa xác, kính mong thầy xem xét góp ý để báo cáo nhóm chúng em hoàn thiện Chúng em xin chân thành cảm ơn! NHÓM MỤC LỤC MỤC LỤC CHƯƠNG : MÔ TẢ HỆ THỐNG Mô tả business logic Sơ đồ usecase a Wallet b Statistics c Collection Sơ đồ diagram Kiến trúc REST API Kiến trúc Microservices Kiến trúc Flux CHƯƠNG : CÔNG NGHỆ ÁP DỤNG Front-end a ReactJs b Redux Toolkit c Material UI Mobile a React Native b React Query c Expo CLI Back-end a NodeJs b Express.js Database Cloud a Firebase b Render.com CHƯƠNG : CÁC CLIENT , APPLICATION TRUY CẬP API Ứng dụng Android Ứng dụng Web CHƯƠNG : REST API Overview Error Codes Xác thực Document a Wallet b Collection c NFT d Pricing e Statistics NHẬN XÉT CỦA GIẢNG VIÊN BẢNG PHÂN CHIA CÔNG VIỆC STT Họ tên - MSSV Công việc Phạm Văn Thuận N19DCCN204 Phát triển ứng dụng tảng mobile (React Native): - Phát triển UI với hình: + Đăng nhập, đăng ký, quên mật + Trang chủ (danh sách collection tìm kiếm) + Chi tiết collection danh sách NFT collection tương ứng) + Chi tiết NFT, biểu đồ thống kê giá, thống kê lịch sử mua bán NFT + Profile với chức đổi password, withdraw, deposit (USD), transfer (USD or GOR) Thêm collection Xem lại collection danh sách NFT tương ứng với collection + Và UI khác UI modal, thêm xố sửa + Có sử dụng kỹ thuật tối ưu lazy loading, splitting code - Xử lý logic liên quan đến business: + Xử lý đăng nhập, đăng ký quên mật + Xử lý thêm, sửa collection NFT + Xử lý mua NFT, listing NFT de-listing NFT + Xử lý withdraw, deposit, thay đổi mật + Lấy danh sách collection, NFT với pagination + Lấy thông tin chi tiết collection, NFT + Lấy thông tin user lưu accessToken để call API với private request (request cần định danh) - Xử lý upload image (collection NFT) lên firebase storage -> BE lưu url image firebase trả Tạ Quang Linh - Xây dựng hệ thống backend: + Viết API collection: thêm, sửa, xoá, get 1, get all, get by category, get by user, xác nhận giao dịch + Viết API pricing: cơng thức tính giá Document continues below Discover more from:triển dịch Phát vụ giá trị gia… MUL1450 Học viện Công ng… 59 documents Go to course 6183.2105.02-01 147 VCS-4G 6.0… Phát triển dịch vụ gi… 100% (2) Hoc lap trinh cung 92 Clover Block cô… Phát triển dịch vụ gi… 100% (1) Hệ thống tưới tự 16 động Phát triển dịch vụ gi… 100% (1) Other Screen Note For game Phát triển dịch vụ giá t… None HD Gigafone - BHA - Lê Hoài Nhân N19DCCN126 Nguyễn Trọng Tín Phát triển dịch vụ giá t… None cho NFT dựa theo số lượng giao dịch + Viết hash function cho password, transaction Ptudtt-CUỐI-KỲ-II Viết API documentation Swagger UI sửa thêm - Xây dựng business logic: 14 + Xây dựng business logic như:triển address, Phát wallet, nft, collection, token balance, fiatgiá t… dịch vụ balance, chuyển đổi tiền + Xây dựng chế tính giá token: mơ số chế tính giá cách đếm số lượng giao dịch khoảng thời gian + Xây dựng quy định cách xác định transaction cách sử dụng - Thiết kế database: + Thiết kế database collection gồm: wallet, nft, transaction, collection - Xây dựng hệ thống backend: + Xây dựng service backend core: database client, asset type, transaction type, error code, status code… + Sử dụng JWT để xác minh tài khoản private API + Viết API assets: nạp tiền, rút tiền, chuyển tiền, chuyển NFT, đổi tiền từ GOR sang USD ngược lại + Viết API pricing: tính tỉ lệ quy đổi GOR sang USD + Viết API function transaction, history: Tạo transaction sau lượt giao dịch, thống kê, lịch sử giao dịch NFT, collection - Triển khai hệ thống lên cloud: + Triển khai hệ thống render.com: giới hạn request/s + Trỏ tới github, auto deploy latest commit + Thiết kế nghiệp vụ + Định nghĩa entity hệ thống: wallet, nft, collection, transaction + Thiết kế kiến trúc hệ thống web + Thiết kế triển khai giao diện web: + Trang đăng nhập, đăng ký, đổi mật + Trang Chủ + Trang Collection + Trang NFT None + + + + + Lê Quang Phục + Trang Profile + Form tạo Collection + Form Mint NFT + Form nạp tiền + Form đổi tiền + Form chuyển tiền Xác thực tài khoản với JWT Phân quyền tài khoản, chủ sở hữu tài sản hệ thống web Lưu ảnh từ web lên Firebase Call API đổ liệu vào trang có web Xử lý logic nghiệp vụ Web Frontend - Xây dựng hệ thống backend: + Viết API NFT: thêm sửa, xoá, mua bán, list sàn, delist, thay đổi giá + Viết API đăng nhập, đăng ký, quên mật khẩu, đổi mật Xây dựng database: + Tạo database mongodb gồm: wallet, nft, transaction, collection - Viết báo cáo, vẽ sơ đồ, schema database CHƯƠNG : MƠ TẢ HỆ THỐNG Mơ tả business logic Mơ số tính năng, chế blockchain, NFT, Defi…phù hợp với mục đích mơn học - Address: chuỗi có độ dài 42 ký tự hexa (hệ thập lục phân), bao gồm chữ số từ 0-9 chữ từ a-z (ví dụ 0x51bae3a470825c24e3c7aecb31574f8bd5d69e35) - NFT (non-fungible token): dạng tài sản bị thay thế, đặc trưng address Mỗi NFT nhất, khác với fungible token Ví dụ: tờ dollar fungible token, có nhiều tờ dollar, chúng có giá trị ngang (1 ngang đơ) hồn cảnh, thời điểm thay Còn nhà NFT, nhà nhất, xác định địa Giá trị nhà phải dựa vào hệ quy chiếu cụ thể, so sánh giá trị trực tiếp hai nhà mà phải thông qua hệ quy chiếu tiền tệ (USD) - Wallet: địa ví ẩn danh, đặc trưng address Mỗi địa ví kèm với private key private key khơng thể thay đổi hồn cảnh, cung cấp lần, dùng để định danh wallet Địa ví cơng khai khơng cơng khai chủ sở hữu Ngồi cịn có số trường khác nickname, password, token balance, fiat balance… - GOR Token (Token balance): tiền tệ mô sàn Tỷ giá GOR token so với USD biến động theo thời gian, dựa số lượng giao dịch NFT sàn Mọi hoạt động mua bán NFT sàn sử dụng GOR để giao dịch Giá NFT tính theo GOR Giá GOR token tính theo USD - USD (Fiat balance): mơ USD ngồi đời thật, sử dụng để nạp, rút tiền sàn, chuyển đổi từ USD sang GOR để thực giao dịch sàn - Collection: sưu tập chứa nhiều NFT theo chủ đề Mỗi Collection đặc trưng address Mỗi NFT thuộc collection - Tính giá token (cách tính mơ phỏng, mục đích phục vụ việc học tập, không áp dụng vào thực tế): Đếm số lượng giao dịch mua bán sàn khoảng thời gian 1h trở lại tính từ thời điểm tính giá Lấy số lượng giao dịch làm biến số, tính giá dựa theo công thức: y = + log Error code mơ tả tình trạng request tới server, khơng mơ tả logic hay response request Xác thực Sau đăng nhập thành công nhận đoạn token (JWT) Các private API bắt buộc cần phải có JWT để xác thực hành vi, cịn public API khơng cần Một số public API như: logic, forgot_password, history_nft, price Một số private API như: transfer, withdraw, delete_nft, trade Document Swagger document: https://be-node.onrender.com/docs/ a Wallet - create: POST /wallet/create API tạo địa ví Địa ví sinh tự động trả với private key Body request: { "username": "string", "password": "string" } Response: { "status": "OK", "message": "Create new wallet successfully!", "data": { "address": "string", "private_key": "string", "username": "string", "fiat_balance": 0, "token_balance": - - - } } login: POST /wallet/login API đăng nhập Body request: { "address": "string", "password": "string" } Response: { "status": "OK", "message": "Login successfully!", "data": { "jwt": "string", "address": "string", "fiat_balance": 0, "token_balance": 0, "username": "string" } } forgot password: POST /wallet/forgot_password API lấy lại mật sử dụng private key Body request: { "private_key": "string", "new_password": "string" } Response: { "status": "OK", "message": "Password has been reset!" } transfer: POST /wallet/transfer API chuyển tiền, NFT Với type(Fiat, Token, NFT) yêu cầu trường tương ứng, trường không cần thiết tự động bỏ qua - - - Body request: { "from": "string", "to": "string", "type": "string", "nft_address": "string", "amount": float } Response: { "status": "OK", "message": "Transferred successfully!" } withdraw: POST /wallet/withdraw API rút tiền (USD/Fiat_balance) Body request: { "address": "string", "amount": float } Response: { "status": "OK", "message": "Withdraw successfully!" } deposit: POST /wallet/deposit API nạp tiền (USD/Fiat_balance) Body request: { "address": "string", "amount": float } Response: { "status": "OK", "message": "Deposited successfully!" } exchange: POST /wallet/exchange API đổi tiền từ GOR (Token) sang USD (Fiat) ngược lại Body request: { "address": "string", "exchange_to": "string", "amount": float } Response: { "status": "OK", "message": "Exchanged successfully!" } b Collection - create: POST collection/create API tạo collection Body request: { "creator": "string", "thumbnail": "string", "description": "string", "title": "string", "category": "string", "rate": float } Response: { "status_code": 200, "status": "OK", "message": "Create new collection successfully!" } - get collection by address : GET /collection/:address API lấy thông tin collection theo address Parameters: address: address collection Response: { "status_code": 200, "status": "OK", "message": "Get collection successfully!", "data": { "_id": "string", "address": "string", "creator": "string", "created": 1683976114853, "updated": 1683976114853, "title": "string", "thumbnail": "urlstring", "description": "string", "category": "string", "rate": 0, "txn_history": [], "username": "string" - - } } update: PUT /collection/:address API cập nhật thông tin collection Parameter: address: địa collection Body request: { "thumbnail": "string", "description": "string", "title": "string", "category": "string", "rate": float } Response: { "status_code": 200, "status": "OK", "message": "Update collection successfully!" } delete: DELETE /collection/:address API xoá collection Parameter: address: địa collection Response: { "status_code": 200, "status": "OK", "message": "Delete collection successfully!" } - - get list collection: GET /collection/ API lấy danh sách collection (có phân trang) Parameter: page: số trang limit: số lượng collection trang Response: { "status_code": 200, "status": "OK", "message": "Get collections successfully!", "data": [ { "_id": "string", "address": "string", "creator": "string", "created": 1683976114853, "updated": 1683976114853, "title": "string", "thumbnail": "urlstring", "description": "string", "category": "string", "rate": 0, "txn_history": [], "username": "string" } ] } list collection by user: GET /collection/user/:user API lấy danh sách collection user (có phân trang) Parameter: user: địa user page: số trang limit: số lượng collection trang Response: { "status_code": 200, "status": "OK", "message": "Get collections successfully!", "data": [ { "_id": "string", "address": "string", "creator": "string", "created": 1683976114853, "updated": 1683976114853, "title": "string", "thumbnail": "urlstring", "description": "string", "category": "string", "rate": 0, "txn_history": [], "username": "string" } ] - } list collection by category: GET /collection/category/:category API lấy danh sách collection theo danh mục Parameter: category: danh mục page: số trang limit: số lượng collection trang Response: { "status_code": 200, "status": "OK", "message": "Get collections successfully!", "data": [ { "_id": "string", "address": "string", "creator": "string", "created": 1683976114853, "updated": 1683976114853, "title": "string", "thumbnail": "urlstring", "description": "string", "category": "string", "rate": 0, "txn_history": [], "username": "string" } ] } - list NFTs of collection: GET /collection/:collection/list_nft API lấy danh sách NFTs collection Parameter: collection: địa collection page: số trang limit: số lượng collection trang Response: { "status_code": 200, "status": "OK", "message": "Get collections successfully!", "data": [ { "_id": "string", "address": "string", "owner": "string", "creator": "string", "collection": "string", "created": 1683976114853, "updated": 1683976114853, "url": "urlstring", "description": "string", "price": } ] } c NFT - create: POST /nft/create API tạo nft Body request: { "owner": "string", "creator": "string", "collection": "string", "name": "string", "url" :"string", "description": "string", "price": float - } Response: { "status": "OK", "message": "Create new nft successfully!", "data": { "address": "string", "owner": "string", "creator": "string", "collection": "string", "name": "string", "url": "urlstring", "description": "string", "price": 10, "listed": true, "created": 1683976114853, "updated": 1683976114853 } } update: PUT /nft/update_price API cập nhật giá nft Body request: { "wallet_address": "string", "nft_address": "string", "price": float } Response: { "status": "OK", "message": "Update price nft successfully!", "data": { "address": "string", "price": float } } - - - delete: DELETE /nft/delete API xoá nft Body request: { "nft_address": "string", "owner_address": "string" } Response: { "status": "OK", "message": "Delete nft successfully!" } trade: POST /nft/trade API trade NFT Body request: { "buyer": "string", "seller": "string", "nft_address": "string” } Response: { "status": "OK", "message": "Buy NFT successfully" } listing: PUT /nft/listing API listing NFT Body request: { "nft_address": "string", "owner_address": "string" } Response: { "status": "OK", "message": "NFT listing status updated successfully!", "data": { "nft_address": "string", "listed": true - - } } de-listing: PUT /nft/delist API de-listing NFT Body request: { "nft_address": "string", "owner_address": "string" } Response: { "status": "OK", "message": "NFT listing status updated successfully!", "data": { "nft_address": "string", "listed": false } } information : GET /nft/information/:address API get information NFT Parameter: nft_address : địa NFT Response: { "status": "OK", "message": "Get NFT information successfully!", "data": { "_id": "string", "address": "string", "owner": "string", "creator": "string", "collection": "string", "name": "string", "url": "urlstring", "description": "string", "price": 10, "listed": true, "created": 1683976114853, "updated": 1683976114853 } } bought: GET /nft/:owner/bought API get NFTs buy information Parameter: owner : owner of NFT page : number of page limit : limit item of page Response: { "status": "OK", "message": "Retrieve bought NFTs successfully!", "data": { "_id": "string", "address": "string", "owner": "string", "creator": "string", "collection": "string", "name": "string", "url": "urlstring", "description": "string", "price": 10, "listed": true, "created": 1683976114853, "updated": 1683976114853 } } d Pricing - get price: GET /price API lấy giá quy đổi GOR sang USD Response: { "status": "OK", "message": "Get price successfully!", "data": } - price 24h: GET /price/list API lấy danh sách giá quy đổi vòng 24h Response: { "status": "OK", - "message": "Get list price successfully!", "data": [ 1.5, 1.2, 1.223, 1.255, 1.523, 1.25, 1.021, 1.0232, 1.221, 1.232, 1.443, 1.442, 1.556, 1.345, 1.334, 1.677, 1.322, 1.455, 1.42, 1.22, 1.55, 1.86, 1.22, ] - } nft price change: POST /price/nft API trả danh sách thay đổi giá gần NFT Body request: { "nft_address": "string" } Response: { "status": "OK", "message": "Get nft list price successfully!", "data": [ 12, 14, 17 ] } - - e Statistics Trading history NFT: POST /history/nft API trả lịch sử giao dịch NFT Body request: { "nft_address": "string", "page": int, "limit": int } Response: { "status": "OK", "message": "Get history successfully!", "data": [ { "_id": "string", "txn_type": "Purchase", "buyer": "string", "seller": "string", "time": 1684824540516, "details": { "at_price": 0, "nft_address": "string" }, "txn_hash": "string" } ] } trending collections: GET /trending/collection API trả top trending collection Response: { "status": "OK", "message": "Get trending collections successfully!", "data": [ { "_id": "string", "address": "string", "creator": "string", "created": 1683976114853, "updated": 1683976114853, "title": "string", "thumbnail": "urlstring", "description": "string", "category": "string", "rate": 0, "txn_history": [ "string", "string", "string" ], "username": "string" } ] }

Ngày đăng: 28/12/2023, 18:58