// “// Contrato de token 'CoinCoin' CROWDSALE” ----------------------------
Contrato de token // 'CoinCoin' CROWDSALE
//
// Implantado para: 0xD0FDf2ECd4CadE671a7EE1063393eC0eB90816FD
// Símbolo: CNC
// Nome: Token CoinCoin
// Oferta total: Gazillion
// Decimais: 18
//
// Apreciar.
//
// (c) por Moritz Neto & Daniel Bar com BokkyPooBah / Bok Consulting Pty Ltd Au 2017. A licença MIT.
// ------------------------------------------------ ----------------------------
// ------------------------------------------------ ----------------------------
// Matemática segura
// ------------------------------------------------ ----------------------------
contrato SafeMath {
function safeAdd (uint a, uint b) retornos puros internos (uint c) {
c = a + b;
requer (c> = a);
}
function safeSub (uint a, uint b) retornos puros internos (uint c) {
requer (b <= a);
c = a - b;
}
função safeMul (uint a, uint b) retornos puros internos (uint c) {
c = a * b;
requer (a == 0 || c / a == b);
}
function safeDiv (uint a, uint b) retornos puros internos (uint c) {
requer (b> 0);
c = a / b;
}
}
transferência de eventos (endereço indexado, endereço indexado, tokens uint);
aprovação do evento (endereço indexado tokenOwner, endereço remetente indexado, uint tokens);
}
// ------------------------------------------------ ----------------------------
// Contrata a função para aprovação e execução de função em chamada
//
// emprestado do MiniMeToken
// ------------------------------------------------ ----------------------------
contrato ApproveAndCallFallBack {
função receiveApproval (endereço de, tokens uint256, token de endereço, dados de bytes) public;
}
// ------------------------------------------------ ----------------------------
// Contrato de propriedade
// ------------------------------------------------ ----------------------------
contrato de propriedade {
endereço público proprietário;
endereço público newOwner;
// ------------------------------------------------ ----------------------------
// Token ERC20, com a adição de símbolo, nome e casas decimais e assistido
// transferências de tokens
//
CoinCoin contrato é ERC20Interface, Owned, SafeMath {
símbolo público de string;
nome público da string;
uint8 decimais públicos;
uint public _totalSupply;
uint public startDate;
bônus públicos totais;
uint public endDate;
mapeamento (endereço => uint) saldos;
mapeamento (endereço => mapeamento (endereço => uint)) permitido;
// ------------------------------------------------ ------------------------
// Construtor
// ------------------------------------------------ ------------------------
função CoinCoin () public {
símbolo = "CNC";
nome = "Token CoinCoin";
decimais = 18;
bonusEnds = agora + 1 semanas;
endDate = agora + 7 semanas;
}
// ------------------------------------------------ ------------------------
// Oferta total
// ------------------------------------------------ ------------------------
function totalSupply () public retornos constantes (uint) {
return _totalSupply - saldos [endereço (0)];
}
// ------------------------------------------------ ------------------------
// Obtém o saldo do token para a conta `tokenOwner`
// ------------------------------------------------ ------------------------
function balanceOf (address tokenOwner) retornos constantes públicos (saldo uint) {
saldos de retorno [tokenOwner];
}
// ------------------------------------------------ ------------------------
// Transfere o saldo da conta do proprietário do token para a conta `to`
// - A conta do proprietário deve ter saldo suficiente para transferir
// - são permitidas transferências de valor 0
// ------------------------------------------------ ------------------------
transferência de função (endereço para, tokens uint) retornos públicos (sucesso bool) {
saldos [msg.sender] = safeSub (saldos [msg.sender], tokens);
saldos [para] = safeAdd (saldos [para], tokens);
Transferir (msg.sender, para, tokens);
retorno verdadeiro;
}
// ------------------------------------------------ ------------------------
// O proprietário do token pode aprovar para o `spender` transferir os tokens (...)`
// da conta do proprietário do token
//
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// recomenda que não haja verificações para o ataque de gasto duplo de aprovação
// como isso deve ser implementado em interfaces de usuário
// ------------------------------------------------ ------------------------
função de aprovação (endereço spender, token de uint) retornos públicos (sucesso bool) {
permitido [msg.sender] [spender] = tokens;
Aprovação (msg.sender, spender, tokens);
retorno verdadeiro;
}
// ------------------------------------------------ ------------------------
// Transferir `tokens` da conta` de` para a conta` para`
//
// A conta de chamada já deve ter tokens suficientes para aprovação (...) - d
// para gastar da conta `from` e
// - Da conta deve ter saldo suficiente para transferir
// - O Spender deve ter permissão suficiente para transferir
// - são permitidas transferências de valor 0
// ------------------------------------------------ ------------------------
função transferFrom (endereço de endereço para, tokens uint) retornos públicos (bool sucesso) {
saldos [de] = SafeSub (saldos [de], tokens);
permitido [de] [msg.sender] = safeSub (permitido [de] [msg.sender], tokens);
saldos [para] = safeAdd (saldos [para], tokens);
Transferência (de, para, tokens);
retorno verdadeiro;
}
// ------------------------------------------------ ------------------------
// Retorna a quantidade de tokens arquitetos pelo proprietário que podem ser
// transferido para a conta do gastador
// ------------------------------------------------ ------------------------
subsídio de função (endereço token proprietário, endereço gasta) retornos públicos constantes (uint restante) {
retorno permitido [tokenOwner] [spender];
}
// ------------------------------------------------ ------------------------
// O proprietário do token pode aprovar para o `spender` transferir os tokens (...)`
// da conta do proprietário do token. A função de contrato `` gastador`
// `receiveApproval (...)` é então correta
// ------------------------------------------------ ------------------------
função approveAndCall (endereço spender, token de uint, bytes de dados) retornos públicos (bool sucesso) {
permitido [msg.sender] [spender] = tokens;
Aprovação (msg.sender, spender, tokens);
ApproveAndCallFallBack (spender) .receiveApproval (msg.sender, tokens, this, data);
retorno verdadeiro;
}
// ------------------------------------------------ ------------------------
// 1.000 fichas de CNC por 1 ETH
// ------------------------------------------------ ------------------------
function () public payable {
require (agora> = startDate && now <= endDate);
tokens de uint;
if (agora <= bonusEnds) {
tokens = msg.value * 1200;
} outro {
tokens = msg.value * 1000;
}
saldos [msg.sender] = safeAdd (saldos [msg.sender], tokens);
_totalSupply = safeAdd (_totalSupply, tokens);
Transferência (endereço (0), msg.sender, tokens);
owner.transfer (msg.value);
}
// ------------------------------------------------ ------------------------
// O proprietário pode transferir quaisquer tokens ERC20 enviados acidentalmente
// ------------------------------------------------ ------------------------
função transferAnyERC20Token (endereço tokenAddress, uint tokens) public onlyOwner retorna (bool sucesso) {
return ERC20Interface (tokenAddress) .transfer (proprietário, tokens);
}
…bar/Token.sol
237 linhas (198 sloc) 9,09 KB solidez do pragma ^ 0.4,18;
// “// Contrato de token 'CoinCoin' CROWDSALE” ---------------------------- Contrato de token // 'CoinCoin' CROWDSALE // // Implantado para: 0xD0FDf2ECd4CadE671a7EE1063393eC0eB90816FD // Símbolo: CNC // Nome: Token CoinCoin // Oferta total: Gazillion // Decimais: 18 // // Apreciar. // // (c) por Moritz Neto & Daniel Bar com BokkyPooBah / Bok Consulting Pty Ltd Au 2017. A licença MIT. // ------------------------------------------------ ----------------------------
// ------------------------------------------------ ---------------------------- // Matemática segura // ------------------------------------------------ ---------------------------- contrato SafeMath { function safeAdd (uint a, uint b) retornos puros internos (uint c) { c = a + b; requer (c> = a); } function safeSub (uint a, uint b) retornos puros internos (uint c) { requer (b <= a); c = a - b; } função safeMul (uint a, uint b) retornos puros internos (uint c) { c = a * b; requer (a == 0 || c / a == b); } function safeDiv (uint a, uint b) retornos puros internos (uint c) { requer (b> 0); c = a / b; } }
// ------------------------------------------------ ---------------------------- // Interface do ERC Token Standard # 20 // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ------------------------------------------------ ---------------------------- contrato ERC20Interface { função totalSupply () retornos constantes públicos (uint); função balanceOf (endereço tokenOwner) retornos constantes públicos (saldo uint); subsídio de função (endereço token proprietário, endereço gastador) retornos constantes públicos (uint restantes); transferência de função (endereço para, tokens uint) retornos públicos (sucesso bool); função de aprovação (endereço spender, token de uint) retornos públicos (sucesso bool); função transferFrom (endereço de, endereço para, tokens uint) retornos públicos (bool sucesso);
}
// ------------------------------------------------ ---------------------------- // Contrata a função para aprovação e execução de função em chamada // // emprestado do MiniMeToken // ------------------------------------------------ ---------------------------- contrato ApproveAndCallFallBack { função receiveApproval (endereço de, tokens uint256, token de endereço, dados de bytes) public; }
// ------------------------------------------------ ---------------------------- // Contrato de propriedade // ------------------------------------------------ ---------------------------- contrato de propriedade { endereço público proprietário; endereço público newOwner;
}
// ------------------------------------------------ ---------------------------- // Token ERC20, com a adição de símbolo, nome e casas decimais e assistido // transferências de tokens // CoinCoin contrato é ERC20Interface, Owned, SafeMath { símbolo público de string; nome público da string; uint8 decimais públicos; uint public _totalSupply; uint public startDate; bônus públicos totais; uint public endDate;
}