Artiesten en creators hebben de mogelijkheid om met behulp van blockchain-technologie, met name NFT’s, uniek potentieel te benutten en geld te verdienen met hun werk. Kunstenaars zijn niet langer afhankelijk van galeries of veilinghuizen om hun kunst te verkopen. In plaats daarvan kunnen ze rechtstreeks aan de consument verkopen als een NFT, waardoor ze een groter deel van de winst kunnen behouden. Dit artikel leidt ons door het bouwen en implementeren van een slim contract op de NFT-witte lijst, waarmee we een gebruiker kunnen toevoegen, verwijderen, valideren en verifiëren of hij deel uitmaakt van de witte lijst van een project.
Vereisten
Zorg ervoor dat u Node.js of npm op uw computer heeft geïnstalleerd. Indien niet, klik dan hier.
Projectopzet en installatie
Laten we een nieuwe map/directory voor ons project maken, whitelist-project in de terminal. We zullen in deze map werken tijdens deze zelfstudie. Voer in de map die we zojuist hebben gemaakt de volgende opdrachten uit:
npm init -y
npm install –save-dev hardhat
Laten we een voorbeeldproject gebruiken door de onderstaande opdracht uit te voeren:
npx hardhat
We gaan voor de volgende opties:
Een voorbeeldproject.
Accepteer alle andere verzoeken.
Het is vereist om hardhat-waffle en hardhat-ethers geïnstalleerd te hebben voor het voorbeeldproject. Indien niet automatisch geïnstalleerd, zullen we het handmatig installeren met de volgende opdracht:
npm install –save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers
Voer de volgende code uit om te controleren of alles werkt:
npx hardhat test
Als alles naar behoren werkt, ziet u een geslaagd testresultaat in uw console.
Implementatie
Verwijder sample-test.js uit de testmap, sample-script.js van de scripts map, en Greeter.sol van de contracts map. De mappen zelf mogen niet worden verwijderd. We maken een Whitelist.sol bestand in de contracts map. Bij het gebruik van Hardhat is de bestandsindeling cruciaal, let hier dus op. We beginnen met de meest elementaire structuur van elk contract.
pragma solidity ^0.8.0;
import “hardhat/console.sol”;
contract Whitelist {
constructor() {
console.log(“Hello! from Whitelist Contract”);
}
}
Om ons slimme contract te bouwen en te implementeren, navigeren we naar de scripts map, maken een nieuwe run.js bestand en werken deze bij met het volgende codefragment:
const main = async () => {
const whitelistContractFactory = await hre.ethers.getContractFactory(
“Whitelist”
);
const whitelistContract = await whitelistContractFactory.deploy();
await whitelistContract.deployed();
console.log(“Whitelist Contract deployed to: “, whitelistContract.address);
};
const runMain = async () => {
try {
await main();
process.exit(0);
} catch (error) {
console.log(error);
process.exit(1);
}
};
runMain();
In het bovenstaande codefragment hebben we een script waarmee we het slimme contract kunnen implementeren dat we eerder hebben geschreven. Laten we het uitvoeren met de volgende opdracht:
npx hardhat run scripts/run.js
Nu hebben we een werkend slim contract. Laten we het implementeren op ons lokale netwerk. In de scripts map, maken we een deploy.js bestand en kopiëren en plakken we de onderstaande code:
const main = async () => {
const {deployer} = await hre.ethers.getSigners();
const accountBalance = await deployer.getBalance();
console.log(“Deploying contracts with account: “, deployer.address);
console.log(“Account balance: “, accountBalance.toString());
const Token = await hre.ethers.getContractFactory(“Whitelist”);
const portal = await Token.deploy(5);
await portal.deployed();
console.log(“Whitelist address: “, portal.address);
};
const runMain = async () => {
try {
await main();
process.exit(0);
} catch (error) {
console.error(error);
process.exit(1);
}
};
runMain();
Voordat we gaan implementeren, moeten we ervoor zorgen dat ons lokale blockchain-knooppunt in een aparte terminal draait met de volgende opdracht:
npx hardhat node
Vervolgens implementeren we ons slimme contract:
npx hardhat run scripts/deploy.js –network localhost
We zouden zoiets als dit moeten hebben:
Een witte lijst opbouwen
In dit gedeelte werken we het slimme contract bij in de bestanden Whitelist.sol en deploy.js, respectievelijk. Update het Whitelist.sol bestand met het volgende codefragment:
pragma solidity ^0.8.0;
contract Whitelist {
uint256 public maxNumberOfWhitelistedAddresses;
uint256 public numberOfAddressesWhitelisted;
address owner;
mapping(address => bool) whitelistedAddresses;
constructor(uint256 _maxWhitelistedAddresses) {
owner = msg.sender;
maxNumberOfWhitelistedAddresses = _maxWhitelistedAddresses;
}
modifier onlyOwner() {
require(msg.sender == owner, “Error: Caller is not the owner”);
_;
}
function addUserAddressToWhitelist(address _addressToWhitelist) public onlyOwner {
require(
!whitelistedAddresses(_addressToWhitelist