Благодарю за помощь и примеры!!!про оформление как в форках-альткойнах загружать иконки но это сейчас позже,я ошибся код токена как я понял мне неподходит там как я понял вся эмиссия токены создателю токена принадлежат ,ещё с англоязычного перевода видео про токен-фабрику на ютубе 18 нулей при создание ставят,потому что самый маленький блок при добыче-загрузке ефириума с 18нулями ,ставил 18 человек,но на счету видны 8 как обычно,но лучше тебя послушаю поставлю 8 ,теперь другой код токена нашел в котором часть эмиссии монет может принадлежать создателю,теперь в нем буду разбираться.Поможешь пожалуйста?Это хороший код?
https://etherscan.io/address/0x7b52427cec68182C74d0b5f9Dec57ddD8f727DE9#codepragma solidity ^0.4.4;
/**
* @title Contract for object that have an owner
*/
contract Owned {
/**
* Contract owner address
*/
address public owner;
/**
* @dev Delegate contract to another person
* @param _owner New owner address
*/
function setOwner(address _owner) onlyOwner
{ owner = _owner; }
/**
* @dev Owner check modifier
*/
modifier onlyOwner { if (msg.sender != owner) throw; _; }
}
/**
* @title Common pattern for destroyable contracts
*/
contract Destroyable {
address public hammer;
/**
* @dev Hammer setter
* @param _hammer New hammer address
*/
function setHammer(address _hammer) onlyHammer
{ hammer = _hammer; }
/**
* @dev Destroy contract and scrub a data
* @notice Only hammer can call it
*/
function destroy() onlyHammer
{ suicide(msg.sender); }
/**
* @dev Hammer check modifier
*/
modifier onlyHammer { if (msg.sender != hammer) throw; _; }
}
/**
* @title Generic owned destroyable contract
*/
contract Object is Owned, Destroyable {
function Object() {
owner = msg.sender;
hammer = msg.sender;
}
}
// Standard token interface (ERC 20)
//
https://github.com/ethereum/EIPs/issues/20contract ERC20
{
// Functions:
/// @return total amount of tokens
uint256 public totalSupply;
/// @param _owner The address from which the balance will be retrieved
/// @return The balance
function balanceOf(address _owner) constant returns (uint256);
/// @notice send `_value` token to `_to` from `msg.sender`
/// @param _to The address of the recipient
/// @param _value The amount of token to be transferred
/// @return Whether the transfer was successful or not
function transfer(address _to, uint256 _value) returns (bool);
/// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
/// @param _from The address of the sender
/// @param _to The address of the recipient
/// @param _value The amount of token to be transferred
/// @return Whether the transfer was successful or not
function transferFrom(address _from, address _to, uint256 _value) returns (bool);
/// @notice `msg.sender` approves `_addr` to spend `_value` tokens
/// @param _spender The address of the account able to transfer the tokens
/// @param _value The amount of wei to be approved for transfer
/// @return Whether the approval was successful or not
function approve(address _spender, uint256 _value) returns (bool);
/// @param _owner The address of the account owning tokens
/// @param _spender The address of the account able to transfer the tokens
/// @return Amount of remaining tokens allowed to spent
function allowance(address _owner, address _spender) constant returns (uint256);
// Events:
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
/**
* @title Token contract represents any asset in digital economy
*/
contract Token is Object, ERC20 {
/* Short description of token */
string public name;
string public symbol;
/* Total count of tokens exist */
uint public totalSupply;
/* Fixed point position */
uint8 public decimals;
/* Token approvement system */
mapping(address => uint) balances;
mapping(address => mapping(address => uint)) allowances;
/**
* @dev Get balance of plain address
* @param _owner is a target address
* @return amount of tokens on balance
*/
function balanceOf(address _owner) constant returns (uint256)
{ return balances[_owner]; }
/**
* @dev Take allowed tokens
* @param _owner The address of the account owning tokens
* @param _spender The address of the account able to transfer the tokens
* @return Amount of remaining tokens allowed to spent
*/
function allowance(address _owner, address _spender) constant returns (uint256)
{ return allowances[_owner][_spender]; }
/* Token constructor */
function Token(string _name, string _symbol, uint8 _decimals, uint _count) {
name = _name;
symbol = _symbol;
decimals = _decimals;
totalSupply = _count;
balances[msg.sender] = _count;
}
/**
* @dev Transfer self tokens to given address
* @param _to destination address
* @param _value amount of token values to send
* @notice `_value` tokens will be sended to `_to`
* @return `true` when transfer done
*/
function transfer(address _to, uint _value) returns (bool) {
if (balances[msg.sender] >= _value) {
balances[msg.sender] -= _value;
balances[_to] += _value;
Transfer(msg.sender, _to, _value);
return true;
}
return false;
}
/**
* @dev Transfer with approvement mechainsm
* @param _from source address, `_value` tokens shold be approved for `sender`
* @param _to destination address
* @param _value amount of token values to send
* @notice from `_from` will be sended `_value` tokens to `_to`
* @return `true` when transfer is done
*/
function transferFrom(address _from, address _to, uint256 _value) returns (bool) {
var avail = allowances[_from][msg.sender]
> balances[_from] ? balances[_from]
: allowances[_from][msg.sender];
if (avail >= _value) {
allowances[_from][msg.sender] -= _value;
balances[_from] -= _value;
balances[_to] += _value;
Transfer(_from, _to, _value);
return true;
}
return false;
}
/**
* @dev Give to target address ability for self token manipulation without sending
* @param _spender target address (future requester)
* @param _value amount of token values for approving
*/
function approve(address _spender, uint256 _value) returns (bool) {
allowances[msg.sender][_spender] += _value;
Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Reset count of tokens approved for given address
* @param _spender target address (future requester)
*/
function unapprove(address _spender)
{ allowances[msg.sender][_spender] = 0; }
}
contract TokenEmission is Token {
function TokenEmission(string _name, string _symbol, uint8 _decimals,
uint _start_count)
Token(_name, _symbol, _decimals, _start_count)
{}
/**
* @dev Token emission
* @param _value amount of token values to emit
* @notice owner balance will be increased by `_value`
*/
function emission(uint _value) onlyOwner {
// Overflow check
if (_value + totalSupply < totalSupply) throw;
totalSupply += _value;
balances[owner] += _value;
}
/**
* @dev Burn the token values from sender balance and from total
* @param _value amount of token values for burn
* @notice sender balance will be decreased by `_value`
*/
function burn(uint _value) {
if (balances[msg.sender] >= _value) {
balances[msg.sender] -= _value;
totalSupply -= _value;
}
}
}
library CreatorTokenEmission {
function create(string _name, string _symbol, uint8 _decimals, uint256 _start_count) returns (TokenEmission)
{ return new TokenEmission(_name, _symbol, _decimals, _start_count); }
function version() constant returns (string)
{ return "v0.6.0 (1b4435b8)"; }
function abi() constant returns (string)
{ return '[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"hammer","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"emission","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hammer","type":"address"}],"name":"setHammer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"}],"name":"unapprove","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"},{"name":"_start_count","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]'; }
}
/**
* @title Builder based contract
*/
contract Builder is Object {
/**
* @dev this event emitted for every builded contract
*/
event Builded(address indexed client, address indexed instance);
/* Addresses builded contracts at sender */
mapping(address => address[]) public getContractsOf;
/**
* @dev Get last address
* @return last address contract
*/
function getLastContract() constant returns (address) {
var sender_contracts = getContractsOf[msg.sender];
return sender_contracts[sender_contracts.length - 1];
}
/* Building beneficiary */
address public beneficiary;
/**
* @dev Set beneficiary
* @param _beneficiary is address of beneficiary
*/
function setBeneficiary(address _beneficiary) onlyOwner
{ beneficiary = _beneficiary; }
/* Building cost */
uint public buildingCostWei;
/**
* @dev Set building cost
* @param _buildingCostWei is cost
*/
function setCost(uint _buildingCostWei) onlyOwner
{ buildingCostWei = _buildingCostWei; }
/* Security check report */
string public securityCheckURI;
/**
* @dev Set security check report URI
* @param _uri is an URI to report
*/
function setSecurityCheck(string _uri) onlyOwner
{ securityCheckURI = _uri; }
}
//
// AIRA Builder for TokenEmission contract
//
contract BuilderTokenEmission is Builder {
/**
* @dev Run script creation contract
* @param _name is name token
* @param _symbol is symbol token
* @param _decimals is fixed point position
* @param _start_count is count of tokens exist
* @param _client is a contract destination address (zero for sender)
* @return address new contract
*/
function create(string _name, string _symbol, uint8 _decimals, uint256 _start_count, address _client) payable returns (address) {
if (buildingCostWei > 0 && beneficiary != 0) {
// Too low value
if (msg.value < buildingCostWei) throw;
// Beneficiary send
if (!beneficiary.send(buildingCostWei)) throw;
// Refund
if (msg.value > buildingCostWei) {
if (!msg.sender.send(msg.value - buildingCostWei)) throw;
}
} else {
// Refund all
if (msg.value > 0) {
if (!msg.sender.send(msg.value)) throw;
}
}
if (_client == 0)
_client = msg.sender;
var inst = CreatorTokenEmission.create(_name, _symbol, _decimals, _start_count);
getContractsOf[_client].push(inst);
Builded(_client, inst);
inst.transfer(_client, _start_count);
inst.setOwner(_client);
inst.setHammer(_client);
return inst;
}
}