# What is the difference?

I noticed some smart contracts have the wallet address of the creator in the smart contract to send the tokens to the wallet like example #1:

Example #1:

``````constructor() public {
symbol = "0PUCKS";
name = "0 Pucks Token";
decimals = 18;
_totalSupply = 100000000000000000000000000;
balances[0x5A86f0cafD4ef3ba4f0344C138afcC84bd1ED222] = _totalSupply;
``````

But below example #2 there is is no visble wallet address for the creator within the smart contract code:

Example: #2

``````contract BTClite is StandardToken, Ownable {

string public constant name = "BTC LITE";
string public constant symbol = "BTCL";
uint8 public constant decimals = 8;

uint256 public constant SUPPLY_CAP = 21000000 * (10 ** uint256(decimals));

``````

When the smart contract for example #2 was created/ deployed, did they just send the tokens to the wallet that deployed and verified the contract? Or did they set it up another way?

The tokens are just numbers on a variable. On the contract #1 he sets the variable `_totalSupply` as equal to the integer the integer `100000000000000000000000000`. Then he makes the integer value on the array `balances[0x5A86f0cafD4ef3ba4f0344C138afcC84bd1ED222]` equals to the value that is on the `_totalSupply`

On the contract #2 he does the same to the variable `SUPPLY_CAP`, but he is not creating variables that say how much any user has.

The total supply is just a variable to make easier for people to know how many "numbers" are out there, not necessary, so much that you can for example put the value of the supply less than the amount you give to the owner. They are just variables with a value on them.

Tokens lose it's magic once you understand that they are just numbers, not "real", they do not necessarily need to come or go to or from anywhere. It is all just logical.

• Agreed. Tokens are just numbers mapped to addresses. Bank accounts are pretty much the same thing. Just numbers in someones database. :) – Christopher Franko Feb 12 '19 at 17:09

Its an optional thing to do.

In the first Example they are giving themselves a premine by using the special constructor function. The constructor function creates the initial state of the contract.

In the second example they could do the same thing in the constructor function if they wanted but not everyone does.

• If they don't set it up like example #1, what are the other options? Do they do an airdrop? When they don't put the creators wallet address in the smart contract, do the tokens just go to the wallet that deployed the contract automatically? – Trapkang Feb 11 '19 at 21:11
• The sky is the limit here but nothing is really automatic. You would have to set balances[some_address] = someValue either in the constructor, or create a new method like function giveMeCoins(uint _amt) isAbleToMintCoins { balances[msg.sender]+= _amt;} – Christopher Franko Feb 12 '19 at 17:05
• isAbleToMintCoins is a "modifier" (middleware) function that you would create to check if the person trying to mint coins has that ability. Also if you make a function like that you would want to make sure to increase the totalSupply also and maybe put in checks to make sure you dont go over a max supply. – Christopher Franko Feb 12 '19 at 17:07