paint-brush
আসুন একটি Web3 টিকেটিং সিস্টেম তৈরি করে টিকিটমাস্টারকে ব্যাহত করিদ্বারা@MichaelB
2,225 পড়া
2,225 পড়া

আসুন একটি Web3 টিকেটিং সিস্টেম তৈরি করে টিকিটমাস্টারকে ব্যাহত করি

দ্বারা Michael17m2023/04/29
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

NFT-এর জন্য একটি জনপ্রিয় এবং ব্যবহারিক ব্যবহারের ক্ষেত্রে লাইভ ইভেন্টের টিকিট তৈরি করা হচ্ছে। আমরা একটি স্মার্ট চুক্তি স্থাপন করব যা একটি টিকিট পরিষেবা হিসাবে কাজ করে এবং ERC-20 নন-ফাঞ্জিবল টোকেন (NFTs) হিসাবে টিকিট তৈরি করে স্মার্ট চুক্তি এবং N FTs ব্যবহার করে এমনকি রয়্যালটি পেমেন্ট এবং রাজস্ব ভাগাভাগির মতো নতুন রাজস্ব স্ট্রিমগুলির জন্যও অনুমতি দেয়৷
featured image - আসুন একটি Web3 টিকেটিং সিস্টেম তৈরি করে টিকিটমাস্টারকে ব্যাহত করি
Michael HackerNoon profile picture
0-item
1-item
2-item

NFT-এর জন্য একটি জনপ্রিয় এবং ব্যবহারিক ব্যবহারের ক্ষেত্রে লাইভ ইভেন্টের টিকিট তৈরি করা হচ্ছে। ইথেরিয়ামের মতো ব্লকচেইনগুলি একটি ডিজিটাল আইটেমের মালিকানা, প্রবর্তক এবং সত্যতা নিশ্চিত করতে পারে, কার্যকরভাবে জাল টিকিটের সমস্যা সমাধান করে। যদিও টিকিটমাস্টারের মতো বড় খেলোয়াড়রা স্ক্যালপারগুলিকে প্রশমিত করার জন্য লড়াই করে (কে টিকিট, কোথায় এবং কতের জন্য পুনরায় বিক্রি করতে পারে তা নিয়ন্ত্রণ করার জন্য মরিয়া চেষ্টা করছে) এবং টিকিট জালিয়াতি— ওয়েব3 এর ইতিমধ্যে একটি সমাধান রয়েছে। টিকিট শিল্প ব্যাহত হওয়ার জন্য পাকা।


এই টিউটোরিয়ালে, আমরা ConsenSys Truffle , Infura , এবং Infura NFT API ব্যবহার করে কীভাবে এমন একটি টিকিটিং সমাধান তৈরি করতে হয় তা দেখব। আমরা একটি স্মার্ট চুক্তি স্থাপন করব যা একটি টিকিট পরিষেবা হিসাবে কাজ করে এবং ERC-20 নন-ফাঞ্জিবল টোকেন (NFTs) হিসাবে টিকিট তৈরি করে৷ আমরা সম্ভাব্য ফ্রন্টএন্ডের কয়েকটি আর্কিটেকচারের মাধ্যমেও হাঁটব যা চুক্তির সাথে ইন্টারফেস করতে পারে এবং একসাথে একটি সমন্বিত, ফুল-স্ট্যাক, ওয়েব3 টিকিটিং সিস্টেম হিসাবে কাজ করতে পারে।


চল বিল্ডিং পেতে!

Ethereum-এ একটি NFT টিকিটিং সিস্টেম তৈরি করুন

আমাদের সিস্টেমের মৌলিক আর্কিটেকচারটি একটি স্মার্ট চুক্তি তৈরি করার উদ্দেশ্যে তৈরি করা হয়েছে যা আমাদের টিকিটগুলিকে নন-ফাঞ্জিবল টোকেন (NFTs) হিসাবে ইস্যু করে। আমরা যা তৈরি করতে চাই তার জন্য এনএফটি নিখুঁত । এগুলি প্রমাণিতভাবে অনন্য ডিজিটাল টোকেন যা আমাদের নিশ্চিত করতে দেয় যে প্রতিটি টিকিট অনন্য এবং কপি বা জাল করা যাবে না। এটি শুধুমাত্র কনসার্টে যাওয়ার জন্য একটি নিরাপদ টিকিটিংয়ের অভিজ্ঞতার নিশ্চয়তা দেয় না, টিকিট বিতরণ, মূল্য নির্ধারণ এবং পুনরায় বিক্রয়ের উপর অধিক নিয়ন্ত্রণের সাথে শিল্পীদের (এবং ইভেন্ট সংগঠকদের) ক্ষমতায়ন করে। স্মার্ট চুক্তি এবং এনএফটি ব্যবহার করা এমনকি রয়্যালটি পেমেন্ট এবং রাজস্ব ভাগাভাগির মতো নতুন রাজস্ব স্ট্রিমের জন্যও অনুমতি দেয়!


(যদি আপনার এই শর্তাবলী, ব্লকচেইন প্রযুক্তি বা ওয়েব3 সাধারণভাবে পটভূমির তথ্যের প্রয়োজন হয়, তাহলে Web3 স্ট্যাক কে অন্বেষণ করে ওয়েব3 বিকাশকারী হতে শেখার বিষয়ে এই নিবন্ধটি দেখুন)।

ধাপ 1: মেটামাস্ক ইনস্টল করুন

আমরা প্রথমে যা করতে যাচ্ছি তা হল একটি মেটামাস্ক ওয়ালেট সেট আপ করা এবং এতে সেপোলিয়া টেস্ট নেটওয়ার্ক যোগ করা। মেটামাস্ক হল বিশ্বের সবচেয়ে জনপ্রিয়, সুরক্ষিত এবং ব্যবহার করা সহজ স্ব-কাস্টোডিয়াল ডিজিটাল ওয়ালেট।

প্রথমে মেটামাস্ক এক্সটেনশনটি ডাউনলোড করুন । আপনি এক্সটেনশন ইনস্টল করার পরে, মেটামাস্ক আপনার জন্য ওয়ালেট সেট আপ করবে। প্রক্রিয়ায়, আপনাকে একটি গোপন বাক্যাংশ দেওয়া হবে। এটিকে সুরক্ষিত রাখুন এবং কোনো অবস্থাতেই আপনি এটিকে সর্বজনীন করবেন না।


একবার আপনি মেটামাস্ক সেট আপ করার পরে, উপরের ডানদিকে নেটওয়ার্ক ট্যাবে ক্লিক করুন। আপনি পরীক্ষা নেটওয়ার্কগুলি দেখানো/লুকাতে একটি বিকল্প দেখতে পাবেন।


একবার আপনি পরীক্ষা নেটওয়ার্কগুলি চালু করলে, আপনি ড্রপ-ডাউন মেনুতে সেপোলিয়া পরীক্ষা নেটওয়ার্ক দেখতে সক্ষম হবেন। আমরা সেপোলিয়া নেটওয়ার্ক ব্যবহার করতে চাই যাতে আমরা কোনো প্রকৃত অর্থ ব্যয় না করেই আমাদের সিস্টেম স্থাপন ও পরীক্ষা করতে পারি।

ধাপ 2: কিছু পরীক্ষা ETH পান

আমাদের স্মার্ট চুক্তি স্থাপন করার জন্য এবং এটির সাথে ইন্টারঅ্যাক্ট করার জন্য, আমাদের কিছু বিনামূল্যের ETH পরীক্ষার প্রয়োজন হবে। আপনি সেপোলিয়া কল থেকে বিনামূল্যে সেপোলিয়া ইটিএইচ পেতে পারেন।


একবার আপনি আপনার ওয়ালেটে তহবিল জমা করলে, আপনি যখন মেটামাস্কে সেপোলিয়া টেস্ট নেটওয়ার্কে স্যুইচ করবেন তখন আপনার একটি শূন্য শূন্য ব্যালেন্স দেখতে হবে।



ধাপ 3: NPM এবং নোড ইনস্টল করুন

সমস্ত ইথেরিয়াম ড্যাপের মতো, আমরা নোড এবং এনপিএম ব্যবহার করে আমাদের প্রকল্প তৈরি করব। আপনার স্থানীয় মেশিনে এগুলি ইনস্টল না থাকলে, আপনি এখানে তা করতে পারেন।


সবকিছু সঠিকভাবে কাজ করছে তা নিশ্চিত করতে, নিম্নলিখিত কমান্ডটি চালান:

 $ node -v


সব ঠিকঠাক থাকলে, আপনি নোডের জন্য একটি সংস্করণ নম্বর দেখতে পাবেন।

ধাপ 4: একটি Infura অ্যাকাউন্টের জন্য সাইন আপ করুন

সেপোলিয়া নেটওয়ার্কে আমাদের চুক্তি স্থাপন করার জন্য, আমাদের একটি ইনফুরা অ্যাকাউন্টের প্রয়োজন হবে। Infura আমাদের RPC এন্ডপয়েন্টগুলিতে অ্যাক্সেস দেয় যা আমাদের পছন্দের ব্লকচেইনে দ্রুত, নির্ভরযোগ্য এবং সহজ অ্যাক্সেসের অনুমতি দেয়।


একটি বিনামূল্যে অ্যাকাউন্টের জন্য সাইন আপ করুন . একবার আপনি আপনার অ্যাকাউন্ট তৈরি করলে, ড্যাশবোর্ডে নেভিগেট করুন এবং নতুন কী তৈরি করুন নির্বাচন করুন।



নেটওয়ার্কের জন্য, Web3 API নির্বাচন করুন এবং এটির নাম দিন টিকেটিং সিস্টেম বা আপনার পছন্দের কিছু।


একবার আপনি Create এ ক্লিক করলে, Infura আপনার জন্য একটি API কী তৈরি করবে এবং আপনাকে Ethereum, Goerli, Sepolia, L2s, এবং non-EVM L1s (এবং তাদের সংশ্লিষ্ট টেস্টনেট) স্বয়ংক্রিয়ভাবে RPC এন্ডপয়েন্ট দেবে।

এই টিউটোরিয়ালের জন্য, আমরা শুধুমাত্র সেপোলিয়া RPC এন্ডপয়েন্টে আগ্রহী। এই URLটি হল https://sepolia.infura.io/v3/←API KEY→

ধাপ 5: একটি নোড প্রকল্প তৈরি করুন এবং প্রয়োজনীয় প্যাকেজ ইনস্টল করুন

আসুন নিম্নলিখিত কমান্ডগুলি চালিয়ে একটি খালি প্রকল্প সংগ্রহস্থল সেট আপ করি:

 $ mkdir nft-ticketing && cd nft-ticketing $ npm init -y


আমরা আমাদের ক্রিপ্টোকারেন্সি স্মার্ট কন্ট্রাক্ট তৈরি এবং স্থাপন করতে ট্রাফল, একটি বিশ্ব-মানের উন্নয়ন পরিবেশ এবং ইভিএম স্মার্ট চুক্তির জন্য পরীক্ষার কাঠামো ব্যবহার করব। রান করে ট্রাফল ইনস্টল করুন:

 $ npm install —save truffle


আমরা এখন নিম্নলিখিত কমান্ডটি চালিয়ে একটি বেয়ারবোনস ট্রাফল প্রকল্প তৈরি করতে পারি:

 $ npx truffle init


সবকিছু সঠিকভাবে কাজ করে কিনা তা পরীক্ষা করতে, চালান:

 $ npx truffle test


আমরা এখন Truffle সফলভাবে কনফিগার করেছি। আসুন আমরা পরবর্তীতে OpenZeppelin চুক্তি প্যাকেজ ইনস্টল করি। এই প্যাকেজটি আমাদেরকে ERC-721 বেস ইমপ্লিমেন্টেশন (নন-ফাঞ্জিবল টোকেনের জন্য স্ট্যান্ডার্ড) এবং সেইসাথে কিছু সহায়ক অতিরিক্ত কার্যকারিতায় অ্যাক্সেস দেবে।

 $ npm install @openzeppelin/contracts


ট্রাফলকে আমাদের মেটামাস্ক ওয়ালেট ব্যবহার করতে, লেনদেন স্বাক্ষর করতে এবং আমাদের পক্ষ থেকে গ্যাস পরিশোধ করার অনুমতি দিতে, আমাদের hdwalletprovider নামে আরেকটি প্যাকেজের প্রয়োজন হবে। নিম্নলিখিত কমান্ড ব্যবহার করে এটি ইনস্টল করুন:

 $ npm install @truffle/hdwallet-provider


পরিশেষে, আমাদের সংবেদনশীল ওয়ালেটের তথ্য সুরক্ষিত রাখার জন্য, আমরা dotenv প্যাকেজটি ব্যবহার করব।

 $ npm install dotenv

ধাপ 6: NFT-এর জন্য টিকিটিং স্মার্ট চুক্তি তৈরি করুন

একটি কোড সম্পাদকে প্রকল্প সংগ্রহস্থল খুলুন (উদাহরণস্বরূপ: VS কোড)। contracts ফোল্ডারে, NftTicketing.sol নামে একটি নতুন ফাইল তৈরি করুন।


আমাদের টিকিট চুক্তিটি ওপেনজেপেলিনের ERC721Enumerable বাস্তবায়নের দ্বারা প্রদত্ত সমস্ত কার্যকারিতার উত্তরাধিকারী হবে। এর মধ্যে রয়েছে স্থানান্তর, মেটাডেটা ট্র্যাকিং, মালিকানা ডেটা ইত্যাদি।


আমরা স্ক্র্যাচ থেকে নিম্নলিখিত বৈশিষ্ট্যগুলি বাস্তবায়ন করব:

  1. সর্বজনীন প্রাথমিক বিক্রয় : আমাদের চুক্তি তার মালিককে একটি নির্দিষ্ট মূল্যে টিকিট বিক্রি করার ক্ষমতা দেবে। মালিকের কাছে বিক্রয় খোলা এবং বন্ধ করার, টিকিটের দাম আপডেট করার এবং টিকিট কেনার জন্য চুক্তিতে প্রেরিত যে কোনও অর্থ প্রত্যাহার করার ক্ষমতা থাকবে। যখনই বিক্রয় খোলা থাকে এবং টিকিট সরবরাহে থাকে তখন জনসাধারণ বিক্রয় মূল্যে টিকেট মিন্ট করার সুযোগ পাবে।
  2. এয়ারড্রপিং : মালিক ওয়ালেট ঠিকানার একটি তালিকায় টিকিট এয়ারড্রপ করতে সক্ষম হবেন।
  3. সংরক্ষণ : মালিক জনসাধারণের বিক্রয় মূল্য পরিশোধ না করেও নিজের জন্য টিকিট সংরক্ষণ করতে সক্ষম হবেন।


NftTicketing.sol এ নিম্নলিখিত কোড যোগ করুন।

 //SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; import "@openzeppelin/contracts/utils/Base64.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; contract NftTicketing is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIds; // Total number of tickets available for the event uint public constant MAX_SUPPLY = 10000; // Number of tickets you can book at a time; prevents spamming uint public constant MAX_PER_MINT = 5; string public baseTokenURI; // Price of a single ticket uint public price = 0.05 ether; // Flag to turn sales on and off bool public saleIsActive = false; // Give collection a name and a ticker constructor() ERC721("My NFT Tickets", "MNT") {} // Generate NFT metadata function generateMetadata(uint tokenId) public pure returns (string memory) { string memory svg = string(abi.encodePacked( "<svg xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='xMinyMin meet' viewBox='0 0 350 350'>", "<style>.base { fill: white; font-family: serif; font-size: 25px; }</style>", "<rect width='100%' height='100%' fill='red' />", "<text x='50%' y='40%' class='base' dominant-baseline='middle' text-anchor='middle'>", "<tspan y='50%' x='50%'>NFT Ticket #", Strings.toString(tokenId), "</tspan></text></svg>" )); string memory json = Base64.encode( bytes( string( abi.encodePacked( '{"name": "NFT Ticket #', Strings.toString(tokenId), '", "description": "A ticket that gives you access to a cool event!", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(svg)), '", "attributes": [{"trait_type": "Type", "value": "Base Ticket"}]}' ) ) ) ); string memory metadata = string( abi.encodePacked("data:application/json;base64,", json) ); return metadata; } // Reserve tickets to creator wallet function reserveNfts(uint _count) public onlyOwner { uint nextId = _tokenIds.current(); require(nextId + _count < MAX_SUPPLY, "Not enough NFTs left to reserve"); for (uint i = 0; i < _count; i++) { string memory metadata = generateMetadata(nextId + i); _mintSingleNft(msg.sender, metadata); } } // Airdrop NFTs function airDropNfts(address[] calldata _wAddresses) public onlyOwner { uint nextId = _tokenIds.current(); uint count = _wAddresses.length; require(nextId + count < MAX_SUPPLY, "Not enough NFTs left to reserve"); for (uint i = 0; i < count; i++) { string memory metadata = generateMetadata(nextId + i); _mintSingleNft(_wAddresses[i], metadata); } } // Set Sale state function setSaleState(bool _activeState) public onlyOwner { saleIsActive = _activeState; } // Allow public to mint NFTs function mintNfts(uint _count) public payable { uint nextId = _tokenIds.current(); require(nextId + _count < MAX_SUPPLY, "Not enough NFT tickets left!"); require(_count > 0 && _count <= MAX_PER_MINT, "Cannot mint specified number of NFT tickets."); require(saleIsActive, "Sale is not currently active!"); require(msg.value >= price * _count, "Not enough ether to purchase NFTs."); for (uint i = 0; i < _count; i++) { string memory metadata = generateMetadata(nextId + i); _mintSingleNft(msg.sender, metadata); } } // Mint a single NFT ticket function _mintSingleNft(address _wAddress, string memory _tokenURI) private { // Sanity check for absolute worst case scenario require(totalSupply() == _tokenIds.current(), "Indexing has broken down!"); uint newTokenID = _tokenIds.current(); _safeMint(_wAddress, newTokenID); _setTokenURI(newTokenID, _tokenURI); _tokenIds.increment(); } // Update price function updatePrice(uint _newPrice) public onlyOwner { price = _newPrice; } // Withdraw ether function withdraw() public payable onlyOwner { uint balance = address(this).balance; require(balance > 0, "No ether left to withdraw"); (bool success, ) = (msg.sender).call{value: balance}(""); require(success, "Transfer failed."); } // Get tokens of an owner function tokensOfOwner(address _owner) external view returns (uint[] memory) { uint tokenCount = balanceOf(_owner); uint[] memory tokensId = new uint256[](tokenCount); for (uint i = 0; i < tokenCount; i++) { tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId, uint256 batchSize) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId, batchSize); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }


নিশ্চিত করুন যে চুক্তিটি চালানোর মাধ্যমে সঠিকভাবে কম্পাইল হচ্ছে:

 npx truffle compile


আমাদের চুক্তি ইতিমধ্যেই বেশ জটিল, কিন্তু আপনি মানানসই কিছু অতিরিক্ত বৈশিষ্ট্য যোগ করা সম্ভব।


উদাহরণস্বরূপ, আপনি আপনার চুক্তির মধ্যে একটি অ্যান্টি-স্ক্যালপিং প্রক্রিয়া প্রয়োগ করতে পারেন। এটি করার পদক্ষেপগুলি নিম্নরূপ হবে:


  1. একটি সলিডিটি ম্যাপিং সংজ্ঞায়িত করুন যা একাধিক টিকিট রাখতে পারে এমন ওয়ালেটগুলির জন্য একটি অনুমোদিত তালিকা হিসাবে কাজ করে৷
  2. একটি ফাংশন তৈরি করুন যা মালিককে এই অনুমোদন তালিকায় ঠিকানা যোগ করতে দেয়।
  3. টোকেন ট্রান্সফারের আগে _ একটি চেক প্রবর্তন করুন যা টিকিট ধারণ করা একটি ওয়ালেটে মিন্ট বা স্থানান্তর করার অনুমতি দেয় শুধুমাত্র যদি এটি অনুমোদিত তালিকায় থাকে।


চুক্তির কন্সট্রাক্টরের নীচে নিম্নলিখিত স্নিপেট যোগ করুন:

 mapping(address => bool) canMintMultiple; // Function that allowlists addresses to hold multiple NFTs. function addToAllowlist(address[] calldata _wAddresses) public onlyOwner { for (uint i = 0; i < _wAddresses.length; i++) { canMintMultiple[_wAddresses[i]] = true; } }


পরিশেষে, _ beforeTokenTranfer ফাংশনটি নিম্নলিখিতটিতে পরিবর্তন করুন:

 // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId, uint256 batchSize) internal override(ERC721, ERC721Enumerable) { if (balanceOf(to) > 0) { require(to == owner() || canMintMultiple[to], "Not authorized to hold more than one ticket"); } super._beforeTokenTransfer(from, to, tokenId, batchSize); }


উপরের Truffle কমান্ড ব্যবহার করে আবার চুক্তি কম্পাইল করুন।

ধাপ 7: Truffle কনফিগারেশন আপডেট করুন এবং একটি .env ফাইল তৈরি করুন

.env নামে প্রকল্পের রুট ডিরেক্টরিতে একটি নতুন ফাইল তৈরি করুন এবং নিম্নলিখিত বিষয়বস্তু যোগ করুন:

 INFURA_API_KEY = "https://sepolia.infura.io/v3/<Your-API-Key>" MNEMONIC = "<Your-MetaMask-Secret-Recovery-Phrase>"


এর পরে, আমাদের ট্রাফল কনফিগারেশন ফাইলে আমাদের ওয়ালেট, ইনফুরা আরপিসি এন্ডপয়েন্ট এবং সেপোলিয়া নেটওয়ার্ক সম্পর্কে তথ্য যোগ করা যাক। truffle.config.js এর বিষয়বস্তুগুলিকে নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন:

 require('dotenv').config(); const HDWalletProvider = require('@truffle/hdwallet-provider'); const { INFURA_API_KEY, MNEMONIC } = process.env; module.exports = { networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*" }, sepolia: { provider: () => new HDWalletProvider(MNEMONIC, INFURA_API_KEY), network_id: '5', } } };

ধাপ 8: NFT স্মার্ট চুক্তি স্থাপন করুন

আসুন এখন সেপোলিয়া ব্লকচেইনে আমাদের চুক্তি স্থাপন করার জন্য একটি স্ক্রিপ্ট লিখি।


migrations ফোল্ডারে, 1_deploy_contract.js নামে একটি নতুন ফাইল তৈরি করুন এবং নিম্নলিখিত কোড যোগ করুন:

 // Get instance of the NFT contract const nftContract = artifacts.require("NftTicketing"); module.exports = async function (deployer) { // Deploy the contract await deployer.deploy(nftContract); const contract = await nftContract.deployed(); // Mint 5 tickets await contract.reserveNfts(5); console.log("5 NFT Tickets have been minted!") };


আমরা সব প্রস্তুত! নিম্নলিখিত কমান্ড চালানোর মাধ্যমে চুক্তি স্থাপন করুন:

 truffle migrate --network sepolia


সবকিছু ঠিকঠাক থাকলে, আপনি আউটপুট (চুক্তির ঠিকানা সমন্বিত) দেখতে পাবেন যা দেখতে এইরকম কিছু দেখায়:

 Starting migrations... ====================== > Network name: 'sepolia' > Network id: 5 > Block gas limit: 30000000 (0x1c9c380) 1_deploy_contract.js ==================== Deploying 'NftTicketing' ----------------------- > transaction hash: … > Blocks: 2 Seconds: 23 … > Saving artifacts ------------------------------------- > Total cost: 0.1201 ETH Summary ======= > Total deployments: 1 > Final cost: 0.1201 ETH


আপনি Sepolia etherscan-এ আপনার চুক্তির ঠিকানা অনুসন্ধান করতে পারেন এবং এটি লাইভ দেখতে পারেন।

অভিনন্দন! আপনি সফলভাবে সেপোলিয়াতে চুক্তি স্থাপন করেছেন।


ধাপ 9: স্মার্ট চুক্তির সাথে ইন্টারফেস


আমরা আমাদের স্মার্ট চুক্তি আছে! পরবর্তী ধাপ হল চুক্তির সাথে ইন্টারফেসের ফ্রন্টএন্ড স্থাপন করা এবং যে কাউকে দান করার জন্য মিন্ট ফাংশন কল করার অনুমতি দেওয়া এবং নিজেদের জন্য একটি টিকিট মিন্ট করা।


একটি সম্পূর্ণ কার্যকরী টিকিট পরিষেবার জন্য, আপনার সাধারণত নিম্নলিখিত ফ্রন্টএন্ডগুলির প্রয়োজন হবে:

  1. একটি ওয়েবসাইট (একটি দুর্দান্ত ব্যবহারকারীর অভিজ্ঞতা সহ) যেখানে সর্বজনীন ব্যবহারকারীরা তাদের টিকিট পরিশোধ করতে এবং মিন্ট করতে পারে।
  2. একটি অ্যাডমিন পোর্টাল যেখানে মালিক টিকিট রিজার্ভ এবং এয়ারড্রপ করতে পারেন, মূল্য আপডেট করতে পারেন, প্রশাসকের ভূমিকা অন্য ওয়ালেটে স্থানান্তর করতে পারেন, বিক্রয় রাজস্ব উত্তোলন করতে পারেন, বিক্রয় খোলা এবং বন্ধ করতে পারেন ইত্যাদি।
  3. একটি টুল যা যাচাই করে যে একজন ব্যক্তির অনলাইন এবং আইআরএল উভয় ক্ষেত্রেই একটি নির্দিষ্ট টিকিট আছে।


স্ক্র্যাচ থেকে এই সিস্টেমগুলি তৈরি করা এই টিউটোরিয়ালের সুযোগের বাইরে, তবে আমরা আপনাকে কয়েকটি সংস্থান এবং টিপস দিয়ে দেব।

  1. ফ্রন্টএন্ড মিন্টিং ওয়েবসাইটের জন্য, আমি থ্যাঙ্ক ইউ এনএফটি টিউটোরিয়ালে স্টার্টিং পয়েন্ট হিসেবে তৈরি ফ্রন্টএন্ডটি দেখুন।

  2. আপনি যদি ইথারস্ক্যানে আপনার চুক্তি যাচাই করেন, তাহলে এটি স্বয়ংক্রিয়ভাবে আপনাকে একটি অ্যাডমিন পোর্টাল দেবে যেখানে আপনি আপনার চুক্তির যেকোনো ফাংশন কল করতে পারবেন। আপনি একটি কাস্টম সমাধান তৈরি করার সিদ্ধান্ত নেওয়ার আগে এটি একটি ভাল প্রথম পদক্ষেপ।

  3. balanceOf ফাংশন ব্যবহার করে একটি ওয়ালেটে আপনার সংগ্রহ থেকে একটি টিকিট আছে কিনা তা যাচাই করা খুবই সহজ। যদি কেউ প্রমাণ করতে পারে যে তারা আমাদের একটি টিকেট সম্বলিত একটি ওয়ালেটের মালিক, এটি মূলত প্রমাণ যে তাদের একটি টিকিট আছে। এটি ডিজিটাল স্বাক্ষর ব্যবহার করে অর্জন করা যেতে পারে।


Infura NFT API ব্যবহার করে যাচাইকরণ

আরও একটি ইঙ্গিত: একবার আপনার স্মার্ট চুক্তি এবং ফ্রন্টএন্ড হয়ে গেলে (অথবা আপনার ফ্রন্টএন্ড সম্পূর্ণ হওয়ার আগেই এবং আপনি প্রমাণ করতে চান যে সবকিছু কাজ করে), আপনি আপনার নতুন NFT বিদ্যমান আছে কিনা তা যাচাই করতে Infura NFT API ব্যবহার করতে পারেন। Infura NFT API হল একটি একক API কলের মাধ্যমে প্রচুর NFT-সম্পর্কিত কোড প্রতিস্থাপন করার একটি দ্রুত উপায়।


উদাহরণ স্বরূপ, আমাদের NFT-এর মালিকানা দেখানোর জন্য যে তথ্য প্রয়োজন তা API-এর মাধ্যমে আমাদের কাছে সহজলভ্য। আমাদের যা সরবরাহ করতে হবে তা হল ওয়ালেট ঠিকানা। কোড এই মত কিছু দেখতে হবে:

 const walletAddress = <your wallet address> const chainId = "1" const baseUrl = "https://nft.api.infura.io" const url = `${baseUrl}/networks/${chainId}/accounts/${walletAddress}/assets/nfts` // API request const config = { method: 'get', url: url, auth: { username: '<-- INFURA_API_KEY –>', password: '<-- INFURA_API_SECRET –>', } }; // API Request axios(config) .then(response => { console.log(response['data']) }) .catch(error => console.log('error', error));


চালাও এটা …

 $ node <filename>.js


এবং আপনি এই মত কিছু দেখতে হবে:

 { total: 1, pageNumber: 1, pageSize: 100, network: 'ETHEREUM', account: <account address>, cursor: null, assets: [ { contract: <NFT contract address>, tokenId: '0', supply: '1', type: 'ERC20', metadata: [Object] }, … ] }

উপসংহার

এই টিউটোরিয়ালে, আমরা Truffle , Infura , এবং Infura NFT API ব্যবহার করে একটি সম্পূর্ণ কার্যকরী NFT টিকিটিং পরিষেবা স্থাপন করেছি৷


টিকিটমাস্টারকে ব্যাহত করার জন্য আপনার যা প্রয়োজন হবে তা স্পষ্টতই নয়—কিন্তু এটি একটি কঠিন শুরু এবং ধারণার একটি দুর্দান্ত প্রমাণ! এমনকি যদি আপনি এই কোডটি গ্রহণ না করেন এবং আপনার নিজস্ব NFT টিকিটিং প্ল্যাটফর্ম শুরু করেন, আশা করি আপনি প্রক্রিয়াটিতে ওয়েব3 সম্পর্কে কিছুটা শিখেছেন।


এই নিবন্ধের প্রধান চিত্রটি হ্যাকারনুনেরএআই ইমেজ জেনারেটর দ্বারা "একটি বড় স্টেডিয়ামে একটি রক কনসার্ট" প্রম্পটের মাধ্যমে তৈরি করা হয়েছে।