mirror of
https://github.com/autistic-symposium/web3-starter-sol.git
synced 2025-04-27 11:09:08 -04:00
59 lines
2.8 KiB
Solidity
59 lines
2.8 KiB
Solidity
pragma solidity ^0.5.10;
|
|
|
|
contract Token {
|
|
// An `address` is comparable to an email address - it's used to identify an account on Ethereum.
|
|
// Addresses can represent a smart contract or an external (user) accounts.
|
|
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/types.html#address
|
|
address public owner;
|
|
|
|
// A `mapping` is essentially a hash table data structure.
|
|
// This `mapping` assigns an unsigned integer (the token balance) to an address (the token holder).
|
|
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/types.html#mapping-types
|
|
mapping (address => uint) public balances;
|
|
|
|
// Events allow for logging of activity on the blockchain.
|
|
// Ethereum clients can listen for events in order to react to contract state changes.
|
|
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#events
|
|
event Transfer(address from, address to, uint amount);
|
|
|
|
// Initializes the contract's data, setting the `owner`
|
|
// to the address of the contract creator.
|
|
constructor() public {
|
|
// All smart contracts rely on external transactions to trigger its functions.
|
|
// `msg` is a global variable that includes relevant data on the given transaction,
|
|
// such as the address of the sender and the ETH value included in the transaction.
|
|
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties
|
|
owner = msg.sender;
|
|
}
|
|
|
|
// Creates an amount of new tokens and sends them to an address.
|
|
function mint(address receiver, uint amount) public {
|
|
// `require` is a control structure used to enforce certain conditions.
|
|
// If a `require` statement evaluates to `false`, an exception is triggered,
|
|
// which reverts all changes made to the state during the current call.
|
|
// Learn more: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions
|
|
|
|
// Only the contract owner can call this function
|
|
require(msg.sender == owner, "You are not the owner.");
|
|
|
|
// Enforces a maximum amount of tokens
|
|
require(amount < 1e60, "Maximum issuance exceeded");
|
|
|
|
// Increases the balance of `receiver` by `amount`
|
|
balances[receiver] += amount;
|
|
}
|
|
|
|
// Sends an amount of existing tokens from any caller to an address.
|
|
function transfer(address receiver, uint amount) public {
|
|
// The sender must have enough tokens to send
|
|
require(amount <= balances[msg.sender], "Insufficient balance.");
|
|
|
|
// Adjusts token balances of the two addresses
|
|
balances[msg.sender] -= amount;
|
|
balances[receiver] += amount;
|
|
|
|
// Emits the event defined earlier
|
|
emit Transfer(msg.sender, receiver, amount);
|
|
}
|
|
}
|