# How do we set the price of our token? In the contract, itself or after deploying it?

Is this the function where I enter buy price? And, if so, how and where and how in the contract?

I want the token exchangeable for ETH and am trying to understand how the price is set so it goes up in exchanges..? Do we need to set the price inside the contract before deploying?

``````/// @notice Allow users to buy tokens for `newBuyPrice` eth

function setPrices(uint256 newBuyPrice) onlyOwner public {

}

/// @notice Buy tokens from contract by sending ether
uint amount = msg.value / buyPrice;               // calculates the amount
_transfer(this, msg.sender, amount);              // makes the transfers
}
``````

ENTIRE CONTRACT:

``````pragma solidity ^0.4.16;

contract owned {

function owned() public {
owner = msg.sender;
}

modifier onlyOwner {
require(msg.sender == owner);
_;
}

function transferOwnership(address newOwner) onlyOwner public {
owner = newOwner;
}
}

/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {

/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}

/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}

/**
* @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}

/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}

contract xxxxxx {

// Public variables of the token
string public name = 'xxxxxx';
string public symbol = 'xx';
uint8 public decimals = 18;
// 18 decimals is the strongly suggested default, avoid changing it
uint256 public totalSupply = 100000000000000000000000000;
uint256 public unitsOneEthCanBuy = 9500;     // How many units of your coin can be bought by 1 ETH?
address public fundsWallet = msg.sender;           // Where should the raised ETH go?

// This creates an array with all balances
mapping (address => uint256) public balanceOf;

// This generates a public event on the blockchain that will notify clients

// This notifies clients about the amount burnt
event Burn(address indexed from, uint256 value);

/**
* Constrctor function
*
* Initializes contract with initial supply tokens to the creator of the contract
*/
function xxxxxx (
uint256 initialSupply,
string tokenName,
string tokenSymbol

) public {
totalSupply = 100000000000000000000000000; initialSupply = 75000000000000000000000000 * 10 ** uint256(decimals);  // Update total supply with the decimal amount
balanceOf[msg.sender] = totalSupply;                // Give the creator all initial tokens
name = tokenName;                                   // Set the name for display purposes
symbol = tokenSymbol;                               // Set the symbol for display purposes

}

/**
* Internal transfer, only can be called by this contract
*/
require(_to != 0x0);
// Check if the sender has enough
require(balanceOf[_from] >= _value);
// Check for overflows
require(balanceOf[_to] + _value > balanceOf[_to]);
// Save this for an assertion in the future
uint previousBalances = balanceOf[_from] + balanceOf[_to];
// Subtract from the sender
balanceOf[_from] -= _value;
// Add the same to the recipient
balanceOf[_to] += _value;
Transfer(_from, _to, _value);
// Asserts are used to use static analysis to find bugs in your code. They should never fail
assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
}

/**
* Transfer tokens
*
* Send `_value` tokens to `_to` from your account
*
* @param _to The address of the recipient
* @param _value the amount to send
*/
function transfer(address _to, uint256 _value) public {
_transfer(msg.sender, _to, _value);
}

/**
* Transfer tokens from other address
*
* Send `_value` tokens to `_to` in behalf of `_from`
*
* @param _from The address of the sender
* @param _to The address of the recipient
* @param _value the amount to send
*/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
require(_value <= allowance[_from][msg.sender]);     // Check allowance
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}

/**
* Set allowance for other address
*
* Allows `_spender` to spend no more than `_value` tokens in your behalf
*
* @param _spender The address authorized to spend
* @param _value the max amount they can spend
*/

function approve(address _spender, uint256 _value) public
returns (bool success) {
allowance[msg.sender][_spender] = _value;
return true;
}

/**
* Set allowance for other address and notify
*
* Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it
*
* @param _spender The address authorized to spend
* @param _value the max amount they can spend
* @param _extraData some extra information to send to the approved contract
*/
public
returns (bool success) {
tokenRecipient spender = tokenRecipient(_spender);
if (approve(_spender, _value)) {
return true;
}
}

/**
* Destroy tokens
*
* Remove `_value` tokens from the system irreversibly
*
* @param _value the amount of money to burn
*/

function burn(uint256 _value) public returns (bool success) {
require(balanceOf[msg.sender] >= _value);   // Check if the sender has enough
balanceOf[msg.sender] -= _value;            // Subtract from the sender
totalSupply -= _value;                      // Updates totalSupply
Burn(msg.sender, _value);
return true;
}

/**
* Destroy tokens from other account
*
* Remove `_value` tokens from the system irreversibly on behalf of `_from`.
*
* @param _from the address of the sender
* @param _value the amount of money to burn
*/
function burnFrom(address _from, uint256 _value) public returns (bool success) {
require(balanceOf[_from] >= _value);                // Check if the targeted balance is enough
require(_value <= allowance[_from][msg.sender]);    // Check allowance
balanceOf[_from] -= _value;                         // Subtract from the targeted balance
allowance[_from][msg.sender] -= _value;             // Subtract from the sender's allowance
totalSupply -= _value;                              // Update totalSupply
Burn(_from, _value);
return true;
}

}

/******************************************/
/*       ADVANCED TOKEN STARTS HERE       */
/******************************************/

contract MyAdvancedToken is owned, xxxxxx {

uint256 public sellPrice;

mapping (address => bool) public frozenAccount;

/* This generates a public event on the blockchain that will notify clients */

/* Initializes contract with initial supply tokens to the creator of the contract */
uint256 initialSupply,
string tokenName,
string tokenSymbol
) xxxxxx (initialSupply, tokenName, tokenSymbol) public {}

/* Internal transfer, only can be called by this contract */
require (_to != 0x0);                               // Prevent transfer to 0x0 address. Use burn() instead
require (balanceOf[_from] >= _value);               // Check if the sender has enough
require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows
require(!frozenAccount[_from]);                     // Check if sender is frozen
require(!frozenAccount[_to]);                       // Check if recipient is frozen
balanceOf[_from] -= _value;                         // Subtract from the sender
balanceOf[_to] += _value;                           // Add the same to the recipient
Transfer(_from, _to, _value);
}

/// @notice Create `mintedAmount` tokens and send it to `target`
/// @param mintedAmount the amount of tokens it will receive
function mintToken(address target, uint256 mintedAmount) onlyOwner public {
balanceOf[target] += mintedAmount;
totalSupply += mintedAmount;
Transfer(0, this, mintedAmount);
Transfer(this, target, mintedAmount);
}

/// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens
/// @param target Address to be frozen
/// @param freeze either to freeze it or not
function freezeAccount(address target, bool freeze) onlyOwner public {
frozenAccount[target] = freeze;
FrozenFunds(target, freeze);
}

function setPrices(uint256 newBuyPrice) onlyOwner public {

}

/// @notice Buy tokens from contract by sending ether
uint amount = msg.value / buyPrice;               // calculates the amount
_transfer(this, msg.sender, amount);              // makes the transfers
}

function giveBlockReward() public {
balanceOf[block.coinbase] += 1;
}
}
``````

Distinguish between `price` and `rate.` Call `rate` the value inside your smart contact. The rate should not be adjustable. By making it non-adjustable, anyone who is interested in your ICO knows what they are getting before buying. They don't have to trust anyone or anything. They "see" the exact exchange rate in the code. Because the code is immutable (and the purveyor of the software does not have the ability to change the rate), the ICO participant is able to trust that they will get exactly what they are expecting.

I think of `price` as what the token trades at relative to other currencies off-chain. The `price` is also out of the token purveyor's control. People buying and selling tokens determine the `price` through simple market forces and supply/demand.

Note: I said above that `exchange rate` should be not adjustable. To anyone reading this--never buy into a smart contract with an adjustable rate. I don't mean a rate that changes over time--I mean a rate that the owner of the contract can change at will. They could start the ICO, wait a few seconds until the FOMO picks up, change the rate, and take tons more money than people expect in exchange for tons fewer tokens.

Note 2: I'm not sure `exchange rate` is the right word. If someone suggests a better word, I'll change it.

Note 3: I would definitely not buy into this ICO given the OP's obvious lack of understanding of what he/she is doing. That's me speaking personally, not intended in any way as advice.

The price displayed, for example, by etherscan, is not the price used by exchanges. Moreover, the price used by exchanges is not the price of your token.

You can set/change the value of your token in your contract, but the price used by exchanges is based on the market.

• Thank you. Where do I add the price into my contract? – Health is Wealth Jan 24 '18 at 9:13
• You already did it => buyPrice and sellPrice. Do you know what you are doing? – Florian Castelain Jan 24 '18 at 10:19
• Thank you, lol. I am learning! I see those codes, what I am asking is what format do I add the actual prices into those fields? Thanks again. – Health is Wealth Jan 24 '18 at 12:04

Prices are based on simple economis of demand and supply on the crypto exchanges

• They're referring to buying them from the contract itself, likely during an ICO or similar. – flygoing Jan 25 '18 at 19:05