Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
crypto-mainz
workshops
Commits
9c05aacd
Commit
9c05aacd
authored
Oct 01, 2018
by
Nhan Vu
Browse files
Datei hinzugefügt
parent
6be342d4
Changes
1
Show whitespace changes
Inline
Side-by-side
ccm-token.sol
0 → 100644
View file @
9c05aacd
pragma
solidity
^
0.4
.
24
;
// ----------------------------------------------------------------------------
// '0CCM' token contract
//
// Deployed to : 0xE02b98e353C56490f46C0549662f07db7931C4d9
// Symbol : 0CCM
// Name : 0 Crypto Community Mainz Token
// Total supply: 100000000
// Decimals : 18
//
// Enjoy.
//
// (c) by Moritz Neto with BokkyPooBah / Bok Consulting Pty Ltd Au 2017. The MIT Licence.
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Safe maths
// ----------------------------------------------------------------------------
contract
SafeMath
{
function
safeAdd
(
uint
a
,
uint
b
)
public
pure
returns
(
uint
c
)
{
c
=
a
+
b
;
require
(
c
>=
a
);
}
function
safeSub
(
uint
a
,
uint
b
)
public
pure
returns
(
uint
c
)
{
require
(
b
<=
a
);
c
=
a
-
b
;
}
function
safeMul
(
uint
a
,
uint
b
)
public
pure
returns
(
uint
c
)
{
c
=
a
*
b
;
require
(
a
==
0
||
c
/
a
==
b
);
}
function
safeDiv
(
uint
a
,
uint
b
)
public
pure
returns
(
uint
c
)
{
require
(
b
>
0
);
c
=
a
/
b
;
}
}
// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
contract
ERC20Interface
{
function
totalSupply
()
public
constant
returns
(
uint
);
function
balanceOf
(
address
tokenOwner
)
public
constant
returns
(
uint
balance
);
function
allowance
(
address
tokenOwner
,
address
spender
)
public
constant
returns
(
uint
remaining
);
function
transfer
(
address
to
,
uint
tokens
)
public
returns
(
bool
success
);
function
approve
(
address
spender
,
uint
tokens
)
public
returns
(
bool
success
);
function
transferFrom
(
address
from
,
address
to
,
uint
tokens
)
public
returns
(
bool
success
);
event
Transfer
(
address
indexed
from
,
address
indexed
to
,
uint
tokens
);
event
Approval
(
address
indexed
tokenOwner
,
address
indexed
spender
,
uint
tokens
);
}
// ----------------------------------------------------------------------------
// Contract function to receive approval and execute function in one call
//
// Borrowed from MiniMeToken
// ----------------------------------------------------------------------------
contract
ApproveAndCallFallBack
{
function
receiveApproval
(
address
from
,
uint256
tokens
,
address
token
,
bytes
data
)
public
;
}
// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract
Owned
{
address
public
owner
;
address
public
newOwner
;
event
OwnershipTransferred
(
address
indexed
_from
,
address
indexed
_to
);
constructor
()
public
{
owner
=
msg
.
sender
;
}
modifier
onlyOwner
{
require
(
msg
.
sender
==
owner
);
_
;
}
function
transferOwnership
(
address
_newOwner
)
public
onlyOwner
{
newOwner
=
_newOwner
;
}
function
acceptOwnership
()
public
{
require
(
msg
.
sender
==
newOwner
);
emit
OwnershipTransferred
(
owner
,
newOwner
);
owner
=
newOwner
;
newOwner
=
address
(
0
);
}
}
// ----------------------------------------------------------------------------
// ERC20 Token, with the addition of symbol, name and decimals and assisted
// token transfers
// ----------------------------------------------------------------------------
contract
CcmainzToken
is
ERC20Interface
,
Owned
,
SafeMath
{
string
public
symbol
;
string
public
name
;
uint8
public
decimals
;
uint
public
_totalSupply
;
mapping
(
address
=>
uint
)
balances
;
mapping
(
address
=>
mapping
(
address
=>
uint
))
allowed
;
// ------------------------------------------------------------------------
// Constructor
// ------------------------------------------------------------------------
constructor
()
public
{
symbol
=
"0CCM"
;
name
=
"0 Crypto Community Mainz Token"
;
decimals
=
18
;
_totalSupply
=
100000000000000000000000000
;
balances
[
0xE02b98e353C56490f46C0549662f07db7931C4d9
]
=
_totalSupply
;
emit
Transfer
(
address
(
0
),
0xE02b98e353C56490f46C0549662f07db7931C4d9
,
_totalSupply
);
}
// ------------------------------------------------------------------------
// Total supply
// ------------------------------------------------------------------------
function
totalSupply
()
public
constant
returns
(
uint
)
{
return
_totalSupply
-
balances
[
address
(
0
)];
}
// ------------------------------------------------------------------------
// Get the token balance for account tokenOwner
// ------------------------------------------------------------------------
function
balanceOf
(
address
tokenOwner
)
public
constant
returns
(
uint
balance
)
{
return
balances
[
tokenOwner
];
}
// ------------------------------------------------------------------------
// Transfer the balance from token owner's account to to account
// - Owner's account must have sufficient balance to transfer
// - 0 value transfers are allowed
// ------------------------------------------------------------------------
function
transfer
(
address
to
,
uint
tokens
)
public
returns
(
bool
success
)
{
balances
[
msg
.
sender
]
=
safeSub
(
balances
[
msg
.
sender
],
tokens
);
balances
[
to
]
=
safeAdd
(
balances
[
to
],
tokens
);
emit
Transfer
(
msg
.
sender
,
to
,
tokens
);
return
true
;
}
// ------------------------------------------------------------------------
// Token owner can approve for spender to transferFrom(...) tokens
// from the token owner's account
//
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// recommends that there are no checks for the approval double-spend attack
// as this should be implemented in user interfaces
// ------------------------------------------------------------------------
function
approve
(
address
spender
,
uint
tokens
)
public
returns
(
bool
success
)
{
allowed
[
msg
.
sender
][
spender
]
=
tokens
;
emit
Approval
(
msg
.
sender
,
spender
,
tokens
);
return
true
;
}
// ------------------------------------------------------------------------
// Transfer tokens from the from account to the to account
//
// The calling account must already have sufficient tokens approve(...)-d
// for spending from the from account and
// - From account must have sufficient balance to transfer
// - Spender must have sufficient allowance to transfer
// - 0 value transfers are allowed
// ------------------------------------------------------------------------
function
transferFrom
(
address
from
,
address
to
,
uint
tokens
)
public
returns
(
bool
success
)
{
balances
[
from
]
=
safeSub
(
balances
[
from
],
tokens
);
allowed
[
from
][
msg
.
sender
]
=
safeSub
(
allowed
[
from
][
msg
.
sender
],
tokens
);
balances
[
to
]
=
safeAdd
(
balances
[
to
],
tokens
);
emit
Transfer
(
from
,
to
,
tokens
);
return
true
;
}
// ------------------------------------------------------------------------
// Returns the amount of tokens approved by the owner that can be
// transferred to the spender's account
// ------------------------------------------------------------------------
function
allowance
(
address
tokenOwner
,
address
spender
)
public
constant
returns
(
uint
remaining
)
{
return
allowed
[
tokenOwner
][
spender
];
}
// ------------------------------------------------------------------------
// Token owner can approve for spender to transferFrom(...) tokens
// from the token owner's account. The spender contract function
// receiveApproval(...) is then executed
// ------------------------------------------------------------------------
function
approveAndCall
(
address
spender
,
uint
tokens
,
bytes
data
)
public
returns
(
bool
success
)
{
allowed
[
msg
.
sender
][
spender
]
=
tokens
;
emit
Approval
(
msg
.
sender
,
spender
,
tokens
);
ApproveAndCallFallBack
(
spender
).
receiveApproval
(
msg
.
sender
,
tokens
,
this
,
data
);
return
true
;
}
// ------------------------------------------------------------------------
// Don't accept ETH
// ------------------------------------------------------------------------
function
()
public
payable
{
revert
();
}
// ------------------------------------------------------------------------
// Owner can transfer out any accidentally sent ERC20 tokens
// ------------------------------------------------------------------------
function
transferAnyERC20Token
(
address
tokenAddress
,
uint
tokens
)
public
onlyOwner
returns
(
bool
success
)
{
return
ERC20Interface
(
tokenAddress
).
transfer
(
owner
,
tokens
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment