Created
July 31, 2017 13:26
-
-
Save anonymous/13659224e889e9bf51fbf6229100258a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// To specify what version of compiler this code will compile with | |
pragma solidity ^0.4.11; | |
contract tokensale { | |
// Declaring the maximum number of tokens available for sale. | |
uint public maxTokens = 10000; | |
// The number of tokens you can buy for one wei (Solidity converts all unitless values from ethers to wei). | |
// We will keep the default currency to be wei. It will get clearer. | |
uint public tokenSwap = 10; | |
// This variable, initially set to zero, stores the number of tokens that have been bought, i.e it will | |
// get incremented each time someone buys tokens. | |
uint public supply = 0; | |
// mapping is an equivalent to associative array. We store token balances corresponding | |
// to each address that buys tokens in this mapping. | |
mapping (address => uint) balance; | |
// A modifier checks if a condition is met before executing a function. | |
// This modifer checks if there are tokens available before the buyTokens function is called. | |
modifier isTokenAvailable () { | |
require (msg.value*tokenSwap + supply <= maxTokens); // require checks the condition and the function that | |
_; // follows, denoted by the '_', is only run if the condition | |
} // is satisfied. | |
// A function to check the ether balance of any address. | |
function checkBalance (address addr) external returns (uint) { | |
return addr.balance; // The address.balance call returns the ether balance of the given address. | |
} | |
// To check the token balance of any address. The external keyword allows the function | |
// to be called from outside the contract. If no keyword is specified, all functions are external | |
// by default.. | |
function balanceOf (address tokenHolder) external constant returns (uint) { | |
return balance[tokenHolder]; | |
} | |
// A function to buy tokens accesible by any address | |
// The payable keyword allows the contract to accept ethers | |
// from the transactor. The ethers to be deposited is entered as msg.value | |
// (which will get clearer when we will call the functions in browser-solidity) | |
// and the corresponding tokens are stored in balance[msg.sender] mapping. | |
// underflows and overflows are security consideration which are | |
// not checked in the process. But lets not worry about them for now. | |
function buyTokens () external | |
payable | |
isTokenAvailable { | |
uint tokensAmount = msg.value * tokenSwap; // At this point, msg.value is in wei. | |
balance [msg.sender] += tokensAmount; | |
supply += tokensAmount; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment