[IMAGE: https://images.ecency.com/DQmPzFBMxBKq9pWnkMRCo9mwbpDojBTZdw1tjsWSoWJEyyx/security.jpeg]source
Here is a sample smart contract for token distribution on the Ethereum blockchain using the Solidity programming language. Then I explain each line.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract TokenDistribution {
address public owner;
mapping(address => uint256) public balances;
event TokensDistributed(address indexed to, uint256 amount);
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can execute this function");
_;
}
function distributeTokens(address[] memory recipients, uint256[] memory amounts) public onlyOwner {
require(recipients.length == amounts.length, "Recipients and amounts arrays must have the same length");
for (uint256 i = 0; i < recipients.length; i++) {
balances[recipients[i]] += amounts[i];
emit TokensDistributed(recipients[i], amounts[i]);
}
}
function getBalance(address account) public view returns (uint256) {
return balances[account];
}
}
-
// SPDX-License-Identifier: MIT
- This line specifies the license under which the contract is released. Here, it is the MIT license. -
pragma solidity ^0.8.0;
- This line specifies the version of the Solidity compiler to be used. It ensures compatibility with Solidity version 0.8.0 or higher. -
contract TokenDistribution {
- This line declares a new contract namedTokenDistribution. -
address public owner;
- This line declares a public variableownerof typeaddressto store the address of the contract owner. -
mapping(address => uint256) public balances;
- This line declares a public mapping namedbalancesthat maps addresses to their token balances. -
event TokensDistributed(address indexed to, uint256 amount);
- This line declares an event namedTokensDistributedthat logs the distribution of tokens. -
constructor() {
- This line declares a constructor function that is executed once when the contract is deployed. -
owner = msg.sender;
- This line sets theownervariable to the address that deployed the contract. -
modifier onlyOwner() {
- This line declares a modifier namedonlyOwnerto restrict access to certain functions. -
require(msg.sender == owner, "Only the owner can execute this function");- This line checks if the caller of the function is the owner. If not, it throws an error.
-
_- This line is a placeholder for the function body that uses the
onlyOwnermodifier.
- This line is a placeholder for the function body that uses the
-
function distributeTokens(address[] memory recipients, uint256[] memory amounts) public onlyOwner {- This line declares a public function named
distributeTokensthat takes two arrays as parameters:recipientsandamounts.
- This line declares a public function named
-
require(recipients.length == amounts.length, "Recipients and amounts arrays must have the same length");- This line checks if the lengths of the
recipientsandamountsarrays are equal. If not, it throws an error.
- This line checks if the lengths of the
-
for (uint256 i = 0; i < recipients.length; i++) {- This line starts a for loop to iterate over the
recipientsarray.
- This line starts a for loop to iterate over the
-
balances[recipients[i]] += amounts[i];- This line updates the balance of each recipient by adding the corresponding amount.
-
emit TokensDistributed(recipients[i], amounts[i]);- This line emits the
TokensDistributedevent for each recipient.
- This line emits the
-
function getBalance(address account) public view returns (uint256) {- This line declares a public view function named
getBalancethat returns the token balance of a given account.
- This line declares a public view function named
-
return balances[account];- This line returns the balance of the specified account.