Cara Menerapkan Kontrak Pintar NFT di Shardeum Testnet (Liberty)
Apa itu NFT?
NFT adalah token individu dengan informasi berharga yang tersimpan di dalamnya. Karena mereka memegang nilai yang terutama ditentukan oleh pasar dan permintaan, mereka dapat dibeli dan dijual seperti jenis seni fisik lainnya. Data abadi NFT yang disimpan pada teknologi seperti blockchain memudahkan untuk menetapkan/memvalidasi kepemilikannya dan transfer token antara dua pihak secara transparan tanpa perantara.
NFT adalah aset digital virtual yang biasanya unik dan langka mirip dengan lukisan Mona Lisa. NFT adalah bukti unik kepemilikan aset digital virtual. Anda dapat membaca lebih lanjut tentang kasus penggunaan NFT seperti ‘NFT for Causes’ dan ‘Private Club Memberships’ di sini. Dan, kontrak pintar adalah salah satu kasus penggunaan/inovasi terbaik dari teknologi blockchain. Ini adalah penyelesaian virtual antara dua pihak yang dilaksanakan melalui program komputer (kode) bukan pihak ketiga. Anda dapat menemukan lebih banyak tentang kontrak pintar dan penerapannya di Shardeum menggunakan Hardhat di sini yang akan memiliki pengkodean serupa seperti di bawah ini karena kami akan menggunakan Hardhat untuk dokumentasi penerapan kontrak pintar NFT ini juga.
Penerapan Kontrak Pintar NFT Menggunakan Hardhat
Langkah 1: Inisialisasi Proyek Kami
Pertama, kita perlu membuat folder untuk proyek kita. Arahkan ke baris perintah Anda dan ketik perintah berikut.
mkdir shardeum-nft-dapp
cd shardeum-nft-dapp
Sekarang kita berada di dalam folder proyek kita, kita akan menggunakan ‘npm init’ untuk menginisialisasi proyek. Jika Anda belum menginstal npm, unduh dari sini Node
npm init
Perintah ini akan membuat package.json file. Tidak masalah bagaimana Anda menjawab pertanyaan penginstalan, inilah cara kami melakukannya untuk referensi.
package name: (shardeum-nft-dapp)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to G:shardeum-nft-dapppackage.json:
{
“name”: “shardeum-nft-dapp”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.js”,
“scripts”: {
“test”: “echo “Error: no test specified” && exit 1"
},
“author”: “”,
“license”: “ISC”
}
Is this OK? (yes) yes
Langkah 2: Unduh Hardhat
Hardhat adalah lingkungan pengembangan untuk mengkompilasi, menyebarkan, menguji, dan men-debug perangkat lunak Ethereum Anda. Ini membantu pengembang saat membangun kontrak pintar dan dApps secara lokal sebelum menerapkan ke rantai langsung.
Di dalam shardeum-nft-dapp proyek kami, jalankan:
npm install — save-dev hardhat
Langkah 3: Buat Proyek Hardhat
Di dalam shardeum-nft-dapp proyek kami, jalankan:
npx hardhat
Anda kemudian akan melihat pesan selamat datang dan opsi untuk memilih apa yang ingin Anda lakukan. Pilih “buat hardhat.config.js kosong”:
G:shardeum-nft-dapp>npx hardhat
888 888 888 888 888
888 888 888 888 888
888 888 888 888 888
8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
888 888 “88b 888P” d88" 888 888 “88b “88b 888
888 888 .d888888 888 888 888 888 888 .d888888 888
888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
888 888 “Y888888 888 “Y88888 888 888 “Y888888 “Y888
Welcome to Hardhat v2.9.5
? What do you want to do? …
> Create a basic sample project
Create an advanced sample project
Create an advanced sample project that uses TypeScript
Create an empty hardhat.config.js
Quit
Ini akan menghasilkan hardhat.config.js file untuk kita, di mana kita akan menentukan semua pengaturan untuk proyek kita.
Langkah 4: Folder Proyek
Agar proyek kami tetap teratur, Hardhat membuat dua folder baru. Arahkan ke direktori root s Anda shardeum-nft-dapp
- contracts/ adalah tempat kami menyimpan file kode kontrak pintar hello world kami
- scripts/ adalah tempat kami menyimpan skrip untuk digunakan dan berinteraksi dengan kontrak kami
Langkah 5: Tulis Kontrak Kami
Buka shardeum-nft-dapp proyek di editor favorit Anda. Kontrak pintar ditulis dalam bahasa yang disebut Soliditas yang akan kami gunakan untuk menulis Domains.sol kontrak pintar kami
- Arahkan ke folder “contracts” dan buat file baru bernama Domains.sol
- Di bawah ini adalah Domains kontrak pintar dari nft.shardeum.us yang akan kita gunakan untuk tutorial ini. Salin dan tempel konten di bawah ini ke Domains.sol file Anda.
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.10;
import “@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol”;
import “@openzeppelin/contracts/utils/Counters.sol”;
import {Base64} from “./libraries/Base64.sol”;
import “hardhat/console.sol”;
import “./libraries/StringUtils.sol”;
contract Domains is ERC721URIStorage {
error Unauthorized();
error AlreadyRegistered();
error InvalidName(string name);
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
string public tld;
mapping(string => address) public domains;
mapping(string => string) public records;
mapping(uint => string) public names;
address payable public owner;
string svgPartOne = ‘<svg xmlns=”http://www.w3.org/2000/svg" width=”270" height=”270" fill=”none”><path fill=”url(#a)” d=”M0 0h270v270H0z”/><defs><filter id=”b” color-interpolation-filters=”sRGB” filterUnits=”userSpaceOnUse” height=”270" width=”270"><feDropShadow dx=”0" dy=”1" stdDeviation=”2" flood-opacity=”.225" width=”200%” height=”200%”/></filter></defs><svg x=”15" y=”15" width=”120" height=”108" viewBox=”0 0 120 108" fill=”none” xmlns=”http://www.w3.org/2000/svg"><path d=”M29.4358 77.2888L16.7213 100H103.279L90.5643 77.2888H29.4358Z” fill=”white”/><path d=”M60 22.7112L47.2856 0L4 77.2889H29.4358L60 22.7112Z” fill=”white”/><path d=”M90.5642 77.2889H116L72.7145 -3.05176e-05L60 22.7111L90.5642 77.2889Z” fill=”white”/><path d=”M60 73.3853C67.6037 73.3853 73.7677 67.0303 73.7677 59.1909C73.7677 51.3515 67.6037 44.9964 60 44.9964C52.3964 44.9964 46.2324 51.3515 46.2324 59.1909C46.2324 67.0303 52.3964 73.3853 60 73.3853Z” fill=”white”/></svg><defs><linearGradient id=”a” x1=”0" y1=”0" x2=”270" y2=”270" gradientUnits=”userSpaceOnUse”><stop stop-color=”#cb5eee”/><stop offset=”1" stop-color=”#0cd7e4" stop-opacity=”.99"/></linearGradient></defs><text x=”32.5" y=”231" font-size=”27" fill=”#fff” filter=”url(#b)” font-family=”Plus Jakarta Sans,DejaVu Sans,Noto Color Emoji,Apple Color Emoji,sans-serif” font-weight=”bold”>’;
string svgPartTwo = ‘</text></svg>’;
constructor(string memory _tld) ERC721(“Web3 user name NFT on shardeum | SHM”, “Web3 User Name”) payable {
owner = payable(msg.sender);
tld = _tld;
console.log(“%s name services deployed”, _tld);
}
function price(string calldata name) public pure returns(uint){
uint len = StringUtils.strlen(name);
require(len > 2);
if(len == 3){
return 90 * 10**17;
}else if(len == 4){
return 50 * 10**17;
}else if(len == 5){
return 30 * 10**17;
}else{
return 10 * 10**17;
}
}
function registers(string calldata name) public payable {
// require(domains[name] == address(0));
if(domains[name] != address(0)) revert AlreadyRegistered();
if(!valid(name)) revert InvalidName(name);
uint _price = price(name);
require(msg.value >= _price, “not enough SHM paid”);
string memory _name = string(abi.encodePacked(name, “.”, tld));
console.log(“_name”, _name);
string memory finalSvg = string(abi.encodePacked(svgPartOne, _name, svgPartTwo));
uint256 newRecordId = _tokenIds.current();
uint256 length = StringUtils.strlen(name);
string memory strLen = Strings.toString(length);
console.log(“Registering %s on the contract with tokenId %d”, name, newRecordId);
string memory json = Base64.encode(
bytes(
string(
abi.encodePacked(
‘{“name”:”’,
_name,
‘“,”description”:”Web3 user name NFT on shardeum | SHM”,”image”:”data:image/svg+xml;base64,’,
Base64.encode(bytes(finalSvg)),
‘“,”length”:”’,
strLen,
‘“}’
)
)
)
);
string memory finalTokenUri = string(abi.encodePacked(“data:application/json;base64,”, json));
console.log(“\n — — — — — — — — — — — — — — — — — — — — — — — — — — — — “);
console.log(“Final tokenURI”, finalTokenUri);
console.log(“ — — — — — — — — — — — — — — — — — — — — — — — — — — — — \n”);
_safeMint(msg.sender, newRecordId);
_setTokenURI(newRecordId, finalTokenUri);
domains[name] = msg.sender;
console.log(“%s has registred a domain”, msg.sender);
names[newRecordId] = name;
_tokenIds.increment();
}
function getAddress(string calldata name) public view returns (address){
return domains[name];
}
function setRecord(string calldata name ,string calldata record) public {
// require(domains[name] == msg.sender);
if(msg.sender != domains[name]) revert Unauthorized();
records[name] = record;
}
function getRecord(string calldata name) public view returns(string memory){
return records[name];
}
modifier onlyOwner(){
require(isOwner());
_;
}
function isOwner() public view returns (bool){
return msg.sender == owner;
}
function withdraw() public onlyOwner{
uint amount = address(this).balance;
(bool success, ) = msg.sender.call{value: amount}(“”);
require(success, “failed to withdraw SHM”);
}
function getAllNames() public view returns(string[] memory){
string[] memory allNames = new string[](_tokenIds.current());
for(uint i = 0; i < _tokenIds.current(); i++){
console.log(“iteration i names[i] “, names[i]);
console.log(“iteration i allNames[i] “, allNames[i]);
allNames[i] = names[i];
}
return allNames;
}
function valid(string calldata name) public pure returns(bool){
return StringUtils.strlen(name) >= 3 && StringUtils.strlen(name) <= 10;
}
}
Ini adalah kontrak pintar yang membuat .shm Domain Shardeum dengan memanggil registers fungsi dengan nama yang Anda inginkan.
Kami menggunakan Kontrak OpenZeppelin yang membantu Anda meminimalkan risiko dengan menggunakan perpustakaan kontrak pintar yang telah teruji pertempuran untuk Ethereum dan blockchain lainnya. Ini termasuk implementasi standar ERC yang paling banyak digunakan.
npm install @openzeppelin/contracts
Sekarang kita telah membuat kontrak pintar, kita perlu menerapkan kontrak pintar ini ke alphanet kebebasan Shardeum
Langkah 6: Tambahkan Jaringan Shardeum ke Metamask/Klaim Token
MetaMask memungkinkan pengguna untuk menyimpan dan mengelola kunci akun, menyiarkan transaksi, mengirim dan menerima cryptocurrency dan token berbasis Ethereum, dan terhubung dengan aman ke aplikasi terdesentralisasi melalui browser web yang kompatibel atau browser bawaan aplikasi seluler. Klik di sini untuk menginstal ekstensi MetaMask di browser Anda.
Dan ikuti instruksi ini untuk menambahkan Shardeum ke dompet MetaMask dan mengklaim uji 100 token $SHM dari faucet Liberty (alphanet).
Langkah 7: Hubungkan MetaMask ke Proyek Anda
Kami telah membuat dompet MetaMask dan menulis kontrak pintar kami, dan sekarang saatnya untuk menghubungkan keduanya!
Setiap transaksi yang dikirim dari dompet virtual Anda memerlukan tanda tangan menggunakan kunci pribadi unik Anda. Untuk memberikan izin ini kepada program kami, kami dapat dengan aman menyimpan kunci pribadi kami di file lingkungan.
Pertama, instal paket dotenv di direktori proyek Anda:
npm install dotenv — save
.env
- Your environment file must be named .env or it won’t be recognized as an environment file. Do not name it process.env or .env-custom or anything else.
.env Anda akan terlihat seperti ini:
SHARDEUM_RPC= https://liberty10.shardeum.org/
PRIVATE_KEY= Your_Metamask_Private_Key
Untuk benar-benar menghubungkan ini ke kode kami, kami akan mereferensikan variabel-variabel ini di hardhat.config.js file kami
Langkah 8: Instal Ethers.js
Ethers.js adalah library yang memudahkan untuk berinteraksi dan membuat permintaan ke Ethereum dengan menggabungkan metode JSON-RPC standar dengan metode yang lebih ramah pengguna.
Hardhat membuatnya sangat mudah untuk mengintegrasikan Plugin untuk perkakas tambahan dan fungsionalitas yang diperluas. Kami akan memanfaatkan plugin Ethers untuk penerapan kontrak ( Ethers.js memiliki beberapa metode penerapan kontrak yang sangat bersih).
Dalam jenis direktori proyek Anda:
npm install — save-dev @nomiclabs/hardhat-ethers “ethers@⁵.0.0”
npm install — save-dev @nomiclabs/hardhat-waffle ‘ethereum-waffle@³.0.0’
Kami juga akan membutuhkan eter dalam hardhat.config.js langkah kami berikutnya.
Langkah 9: Perbarui hardhat.config.js
Kami telah menambahkan beberapa dependensi dan plugin sejauh ini, sekarang kami perlu memperbarui hardhat.config.js sehingga proyek kami mengetahui semuanya.
Perbarui Anda hardhat.config.js agar terlihat seperti ini:
require(“@nomiclabs/hardhat-waffle”);
require(“@nomiclabs/hardhat-ethers”);
require(“dotenv”).config();
const SHARDEUM_RPC = process.env.SHARDEUM_RPC;
const privateKey = process.env.PRIVATE_KEY;
/**
* @type import(‘hardhat/config’).HardhatUserConfig
*/
module.exports = {
defaultNetwork: “hardhat”,
solidity: {
version: “0.8.10”,
},
networks: {
shardeum: {
url: SHARDEUM_RPC,
accounts: [privateKey],
chainId: 8080,
}
},
};
Langkah 10: Kompilasi Kontrak Kami
Untuk memastikan semuanya berjalan sejauh ini, mari kita susun kontrak kita. Tugas kompilasi adalah salah satu tugas hardhat bawaan.
Dari baris perintah jalankan:
npx hardhat compile
Jika tidak ada kesalahan, itu akan berhasil dikompilasi.
Compiled 16 Solidity files successfully
Langkah 11: Tulis Script Deploy Kami
Sekarang setelah kontrak kami ditulis dan file konfigurasi kami siap digunakan, saatnya untuk menulis skrip penerapan kontrak kami.
Arahkan ke /scripts folder dan buat file baru bernama deploy.js, tambahkan konten berikut ke dalamnya:
const hre = require(“hardhat”);
const main = async ()=>{
const domainContractFactory = await hre.ethers.getContractFactory(“Domains”);
const domainContract = await domainContractFactory.deploy(“shm”)
await domainContract.deployed()
console.log(“contract depolyed to : “, domainContract.address)
}
const runMain = async ()=>{
try {
await main()
process.exit(0);
} catch (error) {
console.log(“error: “,error)
process.exit(1)
}
}
runMain();
Hardhat melakukan pekerjaan luar biasa dalam menjelaskan apa yang dilakukan setiap baris kode ini dalam tutorial kontrak mereka. Kami telah mengadopsi penjelasan mereka di sini.
const domainContractFactory = await hre.ethers.getContractFactory(“Domains”);
A ContractFactory di ethers.js adalah abstraksi yang digunakan untuk menerapkan kontrak pintar baru, jadi Disperse ini adalah pabrik untuk instance Disperse kontrak kami. Saat menggunakan hardhat-ethers plugin ContractFactory dan Contract, instance terhubung ke penandatangan pertama (pemilik) secara default.
await domainContract.deployed()
Memanggil deploy() a ContractFactory akan memulai penyebaran, dan mengembalikan Janji yang memutuskan ke objek Kontrak. Ini adalah objek yang memiliki metode untuk setiap fungsi kontrak pintar kami.
Langkah 12 : Terapkan Lingkungan Hardhat Lokal Kontrak Kami
Sebelum kami menerapkan kontrak pintar kami ke jaringan Shardeum, mari uji ini sekali di lingkungan hardhat lokal untuk memeriksa bagaimana NFT Shardeum yang dihasilkan terlihat seperti:
buat di est-deploy.js file di scripts/ dan salin tempel kode di bawah ini
const hre = require(“hardhat”);
const main = async ()=>{
// const [owner, superCoder] = await hre.ethers.getSigners();
const domainContractFactory = await hre.ethers.getContractFactory(“Domains”);
const domainContract = await domainContractFactory.deploy(“shm”)
await domainContract.deployed()
console.log(“contract depolyed to : “, domainContract.address)
let setDR = await domainContract.registers(“contract”,{value: hre.ethers.utils.parseEther(“1”)});
await setDR.wait();
console.log(“Minted domain contract.shm”)
const addr = await domainContract.getAddress(“contract”);
console.log(“owner of contract domain : “, addr);
}
const runMain = async ()=>{
try {
await main()
process.exit(0);
} catch (error) {
console.log(“error: “,error)
process.exit(1)
}
}
runMain();
Jalankan perintah ini di command prompt
node scripts/test-deploy.js
Anda kemudian akan melihat sesuatu seperti ini:
G:\shardeum-nft-dapp>node scripts/deploy-domains.jsshm name services deployed
contract depolyed to : 0x5FbDB2315678afecb367f032d93F642f64180aa3
_name contract.shm
Registering contract on the contract with tokenId 0
— — — — — — — — — — — — — — — — — — — — — — — — — — — —
Final tokenURI data:application/json;base64,eyJuYW1lIjoiY29udHJhY3Quc2htIiwiZGVzY3JpcHRpb24iOiJXZWIzIHVzZXIgbmFtZSBORlQgb24gc2hhcmRldW0gfCBTSE0iLCJpbWFnZSI6ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJeU56QWlJR2hsYVdkb2REMGlNamN3SWlCbWFXeHNQU0p1YjI1bElqNDhjR0YwYUNCbWFXeHNQU0oxY213b0kyRXBJaUJrUFNKTk1DQXdhREkzTUhZeU56QklNSG9pTHo0OFpHVm1jejQ4Wm1sc2RHVnlJR2xrUFNKaUlpQmpiMnh2Y2kxcGJuUmxjbkJ2YkdGMGFXOXVMV1pwYkhSbGNuTTlJbk5TUjBJaUlHWnBiSFJsY2xWdWFYUnpQU0oxYzJWeVUzQmhZMlZQYmxWelpTSWdhR1ZwWjJoMFBTSXlOekFpSUhkcFpIUm9QU0l5TnpBaVBqeG1aVVJ5YjNCVGFHRmtiM2NnWkhnOUlqQWlJR1I1UFNJeElpQnpkR1JFWlhacFlYUnBiMjQ5SWpJaUlHWnNiMjlrTFc5d1lXTnBkSGs5SWk0eU1qVWlJSGRwWkhSb1BTSXlNREFsSWlCb1pXbG5hSFE5SWpJd01DVWlMejQ4TDJacGJIUmxjajQ4TDJSbFpuTStQSE4yWnlCNFBTSXhOU0lnZVQwaU1UVWlJSGRwWkhSb1BTSXhNakFpSUdobGFXZG9kRDBpTVRBNElpQjJhV1YzUW05NFBTSXdJREFnTVRJd0lERXdPQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0OGNHRjBhQ0JrUFNKTk1qa3VORE0xT0NBM055NHlPRGc0VERFMkxqY3lNVE1nTVRBd1NERXdNeTR5TnpsTU9UQXVOVFkwTXlBM055NHlPRGc0U0RJNUxqUXpOVGhhSWlCbWFXeHNQU0ozYUdsMFpTSXZQanh3WVhSb0lHUTlJazAyTUNBeU1pNDNNVEV5VERRM0xqSTROVFlnTUV3MElEYzNMakk0T0RsSU1qa3VORE0xT0V3Mk1DQXlNaTQzTVRFeVdpSWdabWxzYkQwaWQyaHBkR1VpTHo0OGNHRjBhQ0JrUFNKTk9UQXVOVFkwTWlBM055NHlPRGc1U0RFeE5rdzNNaTQzTVRRMUlDMHpMakExTVRjMlpTMHdOVXcyTUNBeU1pNDNNVEV4VERrd0xqVTJORElnTnpjdU1qZzRPVm9pSUdacGJHdzlJbmRvYVhSbElpOCtQSEJoZEdnZ1pEMGlUVFl3SURjekxqTTROVE5ETmpjdU5qQXpOeUEzTXk0ek9EVXpJRGN6TGpjMk56Y2dOamN1TURNd015QTNNeTQzTmpjM0lEVTVMakU1TURsRE56TXVOelkzTnlBMU1TNHpOVEUxSURZM0xqWXdNemNnTkRRdU9UazJOQ0EyTUNBME5DNDVPVFkwUXpVeUxqTTVOalFnTkRRdU9UazJOQ0EwTmk0eU16STBJRFV4TGpNMU1UVWdORFl1TWpNeU5DQTFPUzR4T1RBNVF6UTJMakl6TWpRZ05qY3VNRE13TXlBMU1pNHpPVFkwSURjekxqTTROVE1nTmpBZ056TXVNemcxTTFvaUlHWnBiR3c5SW5kb2FYUmxJaTgrUEM5emRtYytQR1JsWm5NK1BHeHBibVZoY2tkeVlXUnBaVzUwSUdsa1BTSmhJaUI0TVQwaU1DSWdlVEU5SWpBaUlIZ3lQU0l5TnpBaUlIa3lQU0l5TnpBaUlHZHlZV1JwWlc1MFZXNXBkSE05SW5WelpYSlRjR0ZqWlU5dVZYTmxJajQ4YzNSdmNDQnpkRzl3TFdOdmJHOXlQU0lqWTJJMVpXVmxJaTgrUEhOMGIzQWdiMlptYzJWMFBTSXhJaUJ6ZEc5d0xXTnZiRzl5UFNJak1HTmtOMlUwSWlCemRHOXdMVzl3WVdOcGRIazlJaTQ1T1NJdlBqd3ZiR2x1WldGeVIzSmhaR2xsYm5RK1BDOWtaV1p6UGp4MFpYaDBJSGc5SWpNeUxqVWlJSGs5SWpJek1TSWdabTl1ZEMxemFYcGxQU0l5TnlJZ1ptbHNiRDBpSTJabVppSWdabWxzZEdWeVBTSjFjbXdvSTJJcElpQm1iMjUwTFdaaGJXbHNlVDBpVUd4MWN5QktZV3RoY25SaElGTmhibk1zUkdWcVlWWjFJRk5oYm5Nc1RtOTBieUJEYjJ4dmNpQkZiVzlxYVN4QmNIQnNaU0JEYjJ4dmNpQkZiVzlxYVN4ellXNXpMWE5sY21sbUlpQm1iMjUwTFhkbGFXZG9kRDBpWW05c1pDSStZMjl1ZEhKaFkzUXVjMmh0UEM5MFpYaDBQand2YzNablBnPT0iLCJsZW5ndGgiOiI4In0=
— — — — — — — — — — — — — — — — — — — — — — — — — — — —
0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 has registred a domain
Minted domain contract.shm
owner of contract domain : 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
Salin Final tokenURI dan tempel di tab baru browser yang akan terlihat seperti ini:
Sekarang salin data seperti pilihan yang ditunjukkan di atas dari json dan tempel di tab browser baru. Ini adalah bagaimana hal itu mungkin muncul:
Langkah 13: Terapkan ke Shardeum Liberty Testnet
Di baris berikutnya kami menjalankan *(langkah 11) untuk disebarkan ke Jaringan Shardeum.
npx hardhat run scripts/deploy.js — network shardeum
Jika kita pergi ke penjelajah Shardeum dan mencari alamat kontrak kita, kita akan dapat melihat bahwa itu telah berhasil digunakan. Transaksi akan terlihat seperti ini: https://explorer.liberty10.shardeum.org/account/0xf0940aeA091DBE7aA5F295a19A2862e35E619FE4
Klik hash Transaksi untuk melihat detail lengkap pembuatan kontrak: https://explorer.liberty10.shardeum.org/transaction/0x7c050807a166fc9afdc32a4e58af4fbf9c2a02da1342bacf8f8ac4bdf82b6379
Selamat! Anda baru saja menerapkan kontrak pintar NFT ke Shardeum Liberty Alpha Testnet!!
Untuk mempelajari lebih lanjut tentang Shardeum, silakan kunjungi shardeum.org
Pendapat yang diungkapkan dalam publikasi ini adalah dari penulis. Mereka tidak selalu dimaksudkan untuk mencerminkan pendapat atau pandangan Shardeum Foundation.
Tentang Penulis Naresh Golla adalah pengembang Web 3.0 front end dengan pengalaman di Vue, React, web3.js, Ethers.js, Hardhat dan Alchemy. Dia adalah salah satu pengembang pertama yang menerapkan kontrak pintar dan proyek NFT di Shardeum. Anda dapat mengikutinya di LinkedIn.