spot_img

Marketplace | NEAR Documentation

Must read

Openlivenft
Openlivenfthttps://openlivenft.info/
Trang tổng hợp thông tin nhanh - mới nhất về NFT, COIN, Metaverse, tài chính, crypto của OpenliveNFT

Marketplace

Trong hướng dẫn này, bạn sẽ tìm hiểu và khám phá những điều cơ bản của một NFT marketplace contract, nơi bạn hoàn toàn có thể mua và bán những non-fungible token bằng $ NEAR. Trong những hướng dẫn trước, bạn đã đi qua và tạo một NFT contract hoàn hảo rất đầy đủ phối hợp tổng thể những tiêu chuẩn có trong tiêu chuẩn NFT .Thông qua hướng dẫn này, bạn sẽ học cách một marketplace contract sẽ thao tác trên NEAR. Đây được xem là một ví dụ và không có tiến hành chính tắc nào. Vui lòng tách branch và sửa đổi contract này để cung ứng nhu yếu đơn cử của bạn .

Sử dụng cùng repository giống như các hướng dẫn trước, nếu bạn checkout branch 8.marketplace, bạn sẽ có những file cần thiết để hoàn thành hướng dẫn này.

Bạn đang đọc: Marketplace | NEAR Documentation

gitcheckout8. marketplace

Những thay đổi được tạo ra bao gồm một thư mục gốc mới gọi là market-contract. Nó chứa cả build script, các dependency cũng như các contract code thực tế được phác thảo bên dưới đây.

market-contract

├ ─ ─ Cargo. lock

├ ─ ─ Cargo. toml

├ ─ ─ README.md

├ ─ ─ build.sh

└ ─ ─ src

├ ─ ─ external.rs

├ ─ ─ internal.rs

├ ─ ─ lib.rs

├ ─ ─ nft_callbacks. rs

├ ─ ─ sale.rs

└ ─ ─ sale_views. rs

Thông thường, khi làm việc trên nhiều smart contract mà tất cả điều liên quan đến cùng một repository, một ý tưởng hay là cấu trúc chúng trong các thư mục riêng giống như đã được thực hiện trong hướng dẫn này. Để giúp công việc của bạn dễ hơn khi build các smart contract, chúng tôi đã sửa file package.json của repository, do vậy build cả hai smart contract có thể dễ dàng thực hiện bằng cách chạy command bên dưới.

yarnbuild

Nó sẽ cài đặt các dependency cho cả hai contract và compile chúng thành các file wasm được lưu trữ trong các thư mục dưới đây.

nft-tutorial

└ ─ ─ out

├ ─ ─ main.wasm

└ ─ ─ market.wasm

Lúc đầu, contract hoàn toàn có thể khá choáng ngợp nhưng nếu bạn vô hiệu toàn bộ những thứ không thiết yếu và đào sâu vào những function cốt lõi, nó thực sự khá đơn thuần. Contract này đã được phong cách thiết kế chỉ cho một điều duy nhất – được cho phép mọi người mua và bán những NFT cho NEAR. Nó gồm có việc tương hỗ thanh toán giao dịch royalty, update giá cả của bạn, vô hiệu marketing và giao dịch thanh toán cho storage .Hãy xem qua những file, ghi chú lại 1 số ít function quan trọng và công dụng của chúng là gì .File này phác thảo thông tin nào được tàng trữ trên contract cũng như 1 số ít function quan trọng khác mà bạn sẽ tìm hiểu và khám phá bên dưới .

Function đầu tiên bạn sẽ xem là initialization function. Nó lấy một owner_id làm tham số duy nhất và sẽ mặc định tất cả các storage collection bằng giá trị mặc định của chúng.

market-contract / src / lib.rs

loading ...

See full example on GitHub

Tiếp theo, hãy nói về model quản lý storage được chọn cho contract này. Trên NFT contract, user đã đính kèm $NEAR với các call cần thanh toán cho storage. Ví dụ, nếu ai đó đang mint NFT, họ sẽ cần đính kèm một lượng x NEAR để trang trải chi phí lưu trữ data trên contract.

Tuy nhiên, trên marketplace contract này, storage Model có một chút ít độc lạ. User sẽ cần nạp $ NEAR vào trong marketplace để giàn trải ngân sách storage. Bất cứ khi nào ai đó đặt NFT để bán, marketplace cần tàng trữ thông tin đó với giá $ NEAR. User hoàn toàn có thể nạp bao nhiêu NEAR tùy thích để không khi nào phải lo ngại về storage thêm nữa hoặc họ hoàn toàn có thể nạp số tiền tối thiểu để chi trả cho 1 lần marketing khi thiết yếu .Bạn hoàn toàn có thể đang nghĩ về trường hợp khi một loại sản phẩm được mua. Điều gì xảy ra với storage hiện đang được phát hành trên contract ? Đây là nguyên do tại sao chúng tôi đã trình làng một storage withdrawal function. Nó được cho phép người dùng rút bất kể storage dư thừa không được sử dụng đến. Hãy xem qua vài trường hợp để hiểu về logic này. Storage nhu yếu một lần marketing là 0.01 NEAR trên marketplace contract .

Tình huống A

  • Benji muốn đưa NFT lên marketplace nhưng anh ấy chưa bao giờ trả tiền cho storage.
  • Anh ấy nạp chính xác 0.01 NEAR sử dụng method storage_deposit. Nó sẽ thanh toán cho 1 lần bán.
  • Anh ấy đưa NFT lên marketplace và bây giờ đang sử dụng hết 1 trong số 1 lần sale đã được thanh toán trước và không còn storage. Nếu anh ấy call storage_withdraw, sẽ không có gì xảy ra.
  • Dorian thích NFT của anh ấy và nhanh chóng mua nó trước bất cứ ai. Điều này có nghĩa rằng đơn hàng của Benji bây giờ đã bị gỡ xuống (kể từ khi nó được mua) và Benji đã sử dụng 0 trong số 1 lần sale đã thanh toán trước. Nói cách khác, anh ấy đang thừa 1 lần sale hay 0.01 NEAR.
  • Benji bây giờ có thể call storage_withdraw và sẽ được chuyển lại 0.01 NEAR cho anh ấy. Về phía contract, sau khi rút tiền, anh ấy sẽ có 0 lần sale được thanh toán sẽ cần phải nạp tiền storage trước khi niêm yết thêm NFT.

Tình huống B

  • Dorian sở hữu một trăm NFT rất đẹp và anh ta muốn niêm yết toàn bộ.
  • Để tránh phải gọi storage_deposit mỗi khi muốn niêm yết một NFT, anh ấy sẽ gọi nó một lần. Vì Dorian là một người có tiền, anh đã đã đính kèm 10 NEAR đủ để thanh toán cho 1000 lần sale. Bây giờ anh ấy thừa 9 NEAR hay 900 lần sale.
  • Dorian cần 9 NEAR để để làm gì đó nhưng anh ấy không muốn gỡ 100 NFT đang niêm yết. Bởi vì anh ấy có thừa 9 NEAR, anh ấy có thể dễ dàng rút và vẫn có 100 NFT đang niêm yết. Sau khi call storage_withdraw và được chuyển 9 NEAR, anh ấy có 0 lần sale đang thừa.

Suy nghĩ về hành vi này, hai function dưới đây phác thảo logic .market-contract / src / lib.rs

loading ...

See full example on GitHub

Trong contract này, storage yêu cầu 0.01 NEAR cho mỗi lần sale nhưng bạn có thể truy vấn thông tin đó sử dụng function storage_minimum_balance. Ngoài ra, bạn có thể truy vấn function storage_balance_of để kiểm tra một tài khoản nào đó đã thanh toán bao nhiêu storage.

Không còn cách nào khác, đã đến lúc chuyển sang file nft_callbacks.rs, nơi bạn sẽ xem cách các NFT được bán.

File này chịu trách nhiệm về logic được sử dụng để bán các NFT. Nếu bạn nhớ phần marketplace của hướng dẫn approval, khi user gọi nft_approve và truyền vào một message, nó sẽ tiến hành một cross-contract call tới contract của receiver_id và gọi method nft_on_approve. File nft_callbacks.rs này sẽ triển khai function đó.

Điều quan trọng đầu tiên cần chú ý là cấu trúc SaleArgs. Đây là những gì market contract mong đợi message mà user truyền vào nft_approve trên NFT contract. Cấu trúc này phác thảo giá bán bằng yoctoNEAR cho NFT đã được niêm yết.

market-contract / src / nft_callbacks. rs

loading ...

See full example on GitHub

Tiếp theo, chúng ta hãy xem function nft_on_approve được gọi thông qua một cross-contract call bởi NFT contract. Việc này sẽ đảm bảo rằng người ký có đủ storage để trả thêm cho lần sale khác. Sau đó, nó sẽ cố gắng lấy SaleArgs từ message và tạo niêm yết.

market-contract / src / nft_callbacks. rs

loading ...

See full example on GitHub

Bây giờ chúng ta đã quen với quy trình thêm storage và niêm yết các NFT trên marketplace, hãy xem những gì bạn có thể làm gì sau khi một sale đã được niêm yết. File sale.rs phác thảo các function cho việc cập nhật giá, xóa, và mua các NFT.

Điều quan trọng là phải hiểu contract đang tàng trữ thông tin gì của mỗi marketing object. Bởi vì marketplace có nhiều NFT được niêm yết đến từ những NFT contract khác nhau, chỉ tàng trữ token ID sẽ không đủ để phân biệt giữa những NFT khác nhau. Đây là nguyên do bạn cần theo dõi cả token ID và contract mà NFT đến từ đó. Ngoài ra, với mỗi niêm yết, contract phải theo dõi approval ID mà nó đã được cấp để transfer NFT. Cuối cùng, chủ sở hữu và những điều kiện kèm theo marketing là thiết yếu .market-contract / src / sale.rs

loading ...

See full example on GitHub

Để xóa một niêm yết, chủ sở hữu phải call function remove_sale và truyền vào NFT contract cùng với token ID. Phía đằng sau, hàm này call function internal_remove_sale mà bạn có thể tìm thấy trong file internal.rs. Điều này sẽ yêu cầu một yoctoNEAR vì lý do bảo mật.

market-contract / src / sale.rs

loading ...

See full example on GitHub

Để cập nhật giá niêm yết của token, chủ sở hữu phải call function update_price và truyền vào contract, token ID, và giá mong muốn. Việc này sẽ lấy sale object, thay đổi các điều kiện sale và chèn nó trở lại. Vì lý do bảo mật, function này sẽ yêu cầu một yoctoNEAR.

market-contract / src / sale.rs

loading ...

See full example on GitHub

Để mua các NFT, bạn phải call function offer. Nó nhận nft_contract_idtoken_id làm tham số. Bạn phải đính kèm đúng lượng NEAR vào call này để thanh toán. Phía đằng sau, việc này sẽ đảm bảo khoản tiền gửi của bạn lớn hơn giá niêm yết và call một private method process_purchase sẽ thực hiện một cross-contract call tới NFT contract để gọi function nft_transfer_payout. Điều này sẽ transfer NFT sử dụng tiêu chuẩn approval management mà bạn đã học và nó sẽ trả về Payout object bao gồm các royalty.

Sau đó marketplace sẽ call resolve_purchase, nơi nó sẽ kiểm tra các payout object độc hại và sau đó nếu mọi thứ đều tốt, nó sẽ thanh toán cho đúng cho các account.

market-contract / src / sale.rs

loading ...

See full example on GitHub

File cuối chúng ta sẽ xem qua là sale_view.rs. Đây là nơi một vài method enumeration được phác thảo. Nó cho phép user truy vấn các thông tin quan trọng liên quan đến sale.

Để truy vấn cho tổng lượng cung của các NFT được niêm yết trên marketplace, bạn có thể call function get_supply_sales. Có thể xem ví dụ dưới đây.

near viewUSD MARKETPLACE_CONTRACT_IDget_supply_sales

Để truy vấn tổng lượng cung của các NFT được niêm yết bởi một chủ sở hữu được chỉ định trên marketplace, bạn có thể call function get_supply_by_owner_id. Có thể xem ví dụ dưới đây.

near viewUSD MARKETPLACE_CONTRACT_IDget_supply_by_owner_id' { " account_id " : " benji.testnet " } '

Để truy vấn tổng lượng cung các NFT thuộc về một contract chỉ định nào đó, bạn có thể call function get_supply_by_nft_contract_id. Có thể xem ví dụ dưới đây.

near viewUSD MARKETPLACE_CONTRACT_IDget_supply_by_nft_contract_id' { " nft_contract_id " : " fayyr-nft.testnet " } '

Để truy vấn thông tin quan trọng của một niêm yết được chỉ định, bạn có thể call function get_sale. Nó yêu cầu bạn truyền vào nft_contract_token. Đây thực chất là định danh duy nhất cho việc sale trên market contract giống như đã giải thích trước đó. Định danh này bao gồm NFT contract, theo sau là một DELIMITER và sau nữa là token ID. Trong contract này, DELIMITER đơn giản là một dấu: . mà thôi. Dưới đây là một ví dụ về truy vấn này.

near viewUSD MARKETPLACE_CONTRACT_IDget_sale' { " nft_contract_token " : " fayyr-nft.testnet.token - 42 " } '

Ngoài ra, bạn có thể truy vấn thông tin về niêm yết được phân trang của một chủ sở hữu nhất định bằng cách gọi function get_sales_by_owner_id.

near viewUSD MARKETPLACE_CONTRACT_IDget_sales_by_owner_id' { " account_id " : " benji.testnet ", " from_index " : " 5 ", " limit " : 10 } '

Cuối cùng, bạn có thể truy vấn thông tin về niêm yết được phân trang bắt đầu từ một NFT contract nhất định bằng cách gọi function get_sales_by_nft_contract_id.

near viewUSD MARKETPLACE_CONTRACT_IDget_sales_by_nft_contract_id' { " nft_contract_id " : " fayyr-nft.testnet, " from_index " : " 5 ", " limit " : 10 } '

Trong hướng dẫn này, bạn đã học về những thứ cơ bản của một marketplace contract và nó làm việc như thế nào. Bạn đã xem qua file lib.rs và đã tìm hiểu về initialization function, thêm nữa là storage management model.

Sau đó, bạn đã xem qua file nft_callbacks để hiểu cách niêm yết những NFT. Ngoài ra, bạn đã xem qua một số ít function quan trọng thiết yếu sau khi bạn đã niêm yết một NFT. Nó gồm có xóa marketing, update giá, và mua những NFT .

Cuối cùng, bạn xem qua các enumaration method trong file sale_view. Chúng cho phép bạn truy vấn thông tin quan trọng được tìm thấy