Source Code
Latest 25 from a total of 4,697 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 5090777 | 2942 days ago | IN | 1.5 ETH | 0.000861 | ||||
| Transfer | 5054432 | 2948 days ago | IN | 0.3 ETH | 0.0004276 | ||||
| Transfer | 4953877 | 2965 days ago | IN | 0.01 ETH | 0.00044898 | ||||
| Transfer | 4926846 | 2969 days ago | IN | 0.12818612 ETH | 0.0008552 | ||||
| Transfer | 4897204 | 2975 days ago | IN | 0.3 ETH | 0.00087658 | ||||
| Transfer | 4893564 | 2975 days ago | IN | 1 ETH | 0.00021 | ||||
| Transfer | 4893469 | 2976 days ago | IN | 0.3 ETH | 0.0008552 | ||||
| Transfer | 4892101 | 2976 days ago | IN | 1.98 ETH | 0.00042 | ||||
| Transfer | 4890457 | 2976 days ago | IN | 0.00083247 ETH | 0.00042 | ||||
| Transfer | 4887698 | 2977 days ago | IN | 0.4 ETH | 0.0029932 | ||||
| Transfer | 4886550 | 2977 days ago | IN | 1.51 ETH | 0.0008552 | ||||
| Transfer | 4886522 | 2977 days ago | IN | 1.51 ETH | 0.0008552 | ||||
| Transfer | 4885757 | 2977 days ago | IN | 1 ETH | 0.0014966 | ||||
| Transfer | 4884584 | 2977 days ago | IN | 0.5 ETH | 0.0012828 | ||||
| Transfer | 4884550 | 2977 days ago | IN | 0.5 ETH | 0.00211662 | ||||
| Transfer | 4883148 | 2977 days ago | IN | 1 ETH | 0.0009621 | ||||
| Transfer | 4882985 | 2977 days ago | IN | 0.3 ETH | 0.00087658 | ||||
| Transfer | 4882799 | 2977 days ago | IN | 2 ETH | 0.0005345 | ||||
| Transfer | 4882797 | 2977 days ago | IN | 2 ETH | 0.0005345 | ||||
| Transfer | 4881714 | 2978 days ago | IN | 0.4 ETH | 0.0023518 | ||||
| Transfer | 4881707 | 2978 days ago | IN | 0.4 ETH | 0.00231 | ||||
| Transfer | 4881397 | 2978 days ago | IN | 0.98 ETH | 0.00044898 | ||||
| Transfer | 4880496 | 2978 days ago | IN | 0.4 ETH | 0.0008552 | ||||
| Transfer | 4880466 | 2978 days ago | IN | 0.4 ETH | 0.001069 | ||||
| Transfer | 4880429 | 2978 days ago | IN | 0.4 ETH | 0.00200972 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 4874232 | 2979 days ago | 0.5 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.305 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 2 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.39828656 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 4 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.38 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.8 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.5 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 2.98 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.3 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.3 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 1 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.4 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.515 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 1 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.4 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.3 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.3 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 1.01872899 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 2 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.6 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 1 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 5 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.69 ETH | ||||
| Transfer | 4873948 | 2979 days ago | 0.303 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TelcoinSaleKYCEscrow
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2017-12-17
*/
pragma solidity 0.4.18;
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
library SafeMath {
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a * b;
assert(a == 0 || c / a == b);
return c;
}
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;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
contract Telcoin {
using SafeMath for uint256;
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);
string public constant name = "Telcoin";
string public constant symbol = "TEL";
uint8 public constant decimals = 2;
/// The ERC20 total fixed supply of tokens.
uint256 public constant totalSupply = 100000000000 * (10 ** uint256(decimals));
/// Account balances.
mapping(address => uint256) balances;
/// The transfer allowances.
mapping (address => mapping (address => uint256)) internal allowed;
/// The initial distributor is responsible for allocating the supply
/// into the various pools described in the whitepaper. This can be
/// verified later from the event log.
function Telcoin(address _distributor) public {
balances[_distributor] = totalSupply;
Transfer(0x0, _distributor, totalSupply);
}
/// ERC20 balanceOf().
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
/// ERC20 transfer().
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
// SafeMath.sub will throw if there is not enough balance.
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
Transfer(msg.sender, _to, _value);
return true;
}
/// ERC20 transferFrom().
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
Transfer(_from, _to, _value);
return true;
}
/// ERC20 approve(). Comes with the standard caveat that an approval
/// meant to limit spending may actually allow more to be spent due to
/// unfortunate ordering of transactions. For safety, this method
/// should only be called if the current allowance is 0. Alternatively,
/// non-ERC20 increaseApproval() and decreaseApproval() can be used.
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
/// ERC20 allowance().
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/// Not officially ERC20. Allows an allowance to be increased safely.
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/// Not officially ERC20. Allows an allowance to be decreased safely.
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
contract TelcoinSaleToken {
using SafeMath for uint256;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event Mint(address indexed to, uint256 amount);
event MintFinished();
event Redeem(address indexed beneficiary, uint256 sacrificedValue, uint256 grantedValue);
event Transfer(address indexed from, address indexed to, uint256 value);
/// The owner of the contract.
address public owner;
/// The total number of minted tokens, excluding destroyed tokens.
uint256 public totalSupply;
/// The token balance and released amount of each address.
mapping(address => uint256) balances;
mapping(address => uint256) redeemed;
/// Whether the token is still mintable.
bool public mintingFinished = false;
/// Redeemable telcoin.
Telcoin telcoin;
uint256 public totalRedeemed;
/// Vesting period.
uint256 vestingStart;
uint256 vestingDuration;
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
function TelcoinSaleToken(
Telcoin _telcoin,
uint256 _vestingStart,
uint256 _vestingDuration
)
public
{
owner = msg.sender;
telcoin = _telcoin;
vestingStart = _vestingStart;
vestingDuration = _vestingDuration;
}
function finishMinting() onlyOwner public returns (bool) {
require(!mintingFinished);
mintingFinished = true;
MintFinished();
return true;
}
function mint(address _to, uint256 _amount) onlyOwner public returns (bool) {
require(_to != 0x0);
require(!mintingFinished);
require(_amount > 0);
totalSupply = totalSupply.add(_amount);
balances[_to] = balances[_to].add(_amount);
Mint(_to, _amount);
Transfer(0x0, _to, _amount);
return true;
}
function redeemMany(address[] _beneficiaries) public {
for (uint256 i = 0; i < _beneficiaries.length; i++) {
redeem(_beneficiaries[i]);
}
}
function redeem(address _beneficiary) public returns (uint256) {
require(mintingFinished);
require(_beneficiary != 0x0);
uint256 balance = redeemableBalance(_beneficiary);
if (balance == 0) {
return 0;
}
uint256 totalDistributable = telcoin.balanceOf(this).add(totalRedeemed);
// Avoid loss of precision by multiplying and later dividing by
// a large value.
uint256 amount = balance.mul(10 ** 18).div(totalSupply).mul(totalDistributable).div(10 ** 18);
balances[_beneficiary] = balances[_beneficiary].sub(balance);
redeemed[_beneficiary] = redeemed[_beneficiary].add(balance);
balances[telcoin] = balances[telcoin].add(balance);
totalRedeemed = totalRedeemed.add(amount);
Transfer(_beneficiary, telcoin, balance);
Redeem(_beneficiary, balance, amount);
telcoin.transfer(_beneficiary, amount);
return amount;
}
function transferOwnership(address _to) onlyOwner public {
require(_to != address(0));
OwnershipTransferred(owner, _to);
owner = _to;
}
function balanceOf(address _owner) public constant returns (uint256) {
return balances[_owner];
}
function redeemableBalance(address _beneficiary) public constant returns (uint256) {
return vestedBalance(_beneficiary).sub(redeemed[_beneficiary]);
}
function vestedBalance(address _beneficiary) public constant returns (uint256) {
uint256 currentBalance = balances[_beneficiary];
uint256 totalBalance = currentBalance.add(redeemed[_beneficiary]);
if (now < vestingStart) {
return 0;
}
if (now >= vestingStart.add(vestingDuration)) {
return totalBalance;
}
return totalBalance.mul(now.sub(vestingStart)).div(vestingDuration);
}
}
contract TelcoinSale {
using SafeMath for uint256;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event WalletChanged(address indexed previousWallet, address indexed newWallet);
event TokenPurchase(
address indexed purchaser,
address indexed beneficiary,
uint256 value,
uint256 amount,
uint256 bonusAmount
);
event TokenAltPurchase(
address indexed purchaser,
address indexed beneficiary,
uint256 value,
uint256 amount,
uint256 bonusAmount,
string symbol,
string transactionId
);
event Pause();
event Unpause();
event Withdrawal(address indexed wallet, uint256 weiAmount);
event Extended(uint256 until);
event Finalized();
event Refunding();
event Refunded(address indexed beneficiary, uint256 weiAmount);
event Whitelisted(
address indexed participant,
uint256 minWeiAmount,
uint256 maxWeiAmount,
uint32 bonusRate
);
event CapFlexed(uint32 flex);
/// The owner of the contract.
address public owner;
/// The temporary token we're selling. Sale tokens can be converted
/// immediately upon successful completion of the sale. Bonus tokens
/// are on a separate vesting schedule.
TelcoinSaleToken public saleToken;
TelcoinSaleToken public bonusToken;
/// The token we'll convert to after the sale ends.
Telcoin public telcoin;
/// The minimum and maximum goals to reach. If the soft cap is not reached
/// by the end of the sale, the contract will enter refund mode. If the
/// hard cap is reached, the contract can be finished early.
///
/// Due to our actual soft cap being tied to USD and the assumption that
/// the value of Ether will continue to increase during the ICO, we
/// implement a fixed minimum softcap that accounts for a 2.5x value
/// increase. The capFlex is a scale factor that allows us to scale the
/// caps above the fixed minimum values. Initially the scale factor will
/// be set so that our effective soft cap is ~10M USD.
uint256 public softCap;
uint256 public hardCap;
uint32 public capFlex;
/// The sale period.
uint256 public startTime;
uint256 public endTime;
uint256 public timeExtension;
/// The numnber of tokens to mint per wei.
uint256 public rate;
/// The total number of wei raised. Note that the contract's balance may
/// differ from this value if someone has decided to forcefully send us
/// ether.
uint256 public weiRaised;
/// The wallet that will receive the contract's balance once the sale
/// finishes and the soft cap is reached.
address public wallet;
/// The list of addresses that are allowed to participate in the sale,
/// up to what amount, and any special rate they may have, provided
/// that they do in fact participate with at least the minimum value
/// they agreed to.
mapping(address => uint256) public whitelistedMin;
mapping(address => uint256) public whitelistedMax;
mapping(address => uint32) public bonusRates;
/// The amount of wei and wei equivalents invested by each investor.
mapping(address => uint256) public deposited;
mapping(address => uint256) public altDeposited;
/// An enumerable list of investors.
address[] public investors;
/// Whether the sale is paused.
bool public paused = false;
/// Whether the sale has finished, and when.
bool public finished = false;
uint256 public finishedAt;
/// Whether we're accepting refunds.
bool public refunding = false;
/// The total number of wei refunded.
uint256 public weiRefunded;
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
modifier saleOpen() {
require(!finished);
require(!paused);
require(now >= startTime);
require(now <= endTime + timeExtension);
_;
}
function TelcoinSale(
uint256 _softCap,
uint256 _hardCap,
uint32 _capFlex,
uint256 _startTime,
uint256 _endTime,
uint256 _rate,
address _wallet,
Telcoin _telcoin,
uint256 _bonusVestingStart,
uint256 _bonusVestingDuration
)
public
payable
{
require(msg.value > 0);
require(_softCap > 0);
require(_hardCap >= _softCap);
require(_startTime >= now);
require(_endTime >= _startTime);
require(_rate > 0);
require(_wallet != 0x0);
owner = msg.sender;
softCap = _softCap;
hardCap = _hardCap;
capFlex = _capFlex;
startTime = _startTime;
endTime = _endTime;
rate = _rate;
wallet = _wallet;
telcoin = _telcoin;
saleToken = new TelcoinSaleToken(telcoin, 0, 0);
bonusToken = new TelcoinSaleToken(
telcoin,
_bonusVestingStart,
_bonusVestingDuration
);
wallet.transfer(msg.value);
}
function () public payable {
buyTokens(msg.sender);
}
function buyTokens(address _beneficiary) saleOpen public payable {
require(_beneficiary != address(0));
uint256 weiAmount = msg.value;
require(weiAmount > 0);
require(weiRaised.add(weiAmount) <= hardCap);
uint256 totalPrior = totalDeposited(_beneficiary);
uint256 totalAfter = totalPrior.add(weiAmount);
require(totalAfter <= whitelistedMax[_beneficiary]);
uint256 saleTokens;
uint256 bonusTokens;
(saleTokens, bonusTokens) = tokensForPurchase(_beneficiary, weiAmount);
uint256 newDeposited = deposited[_beneficiary].add(weiAmount);
deposited[_beneficiary] = newDeposited;
investors.push(_beneficiary);
weiRaised = weiRaised.add(weiAmount);
saleToken.mint(_beneficiary, saleTokens);
if (bonusTokens > 0) {
bonusToken.mint(_beneficiary, bonusTokens);
}
TokenPurchase(
msg.sender,
_beneficiary,
weiAmount,
saleTokens,
bonusTokens
);
}
function changeWallet(address _wallet) onlyOwner public payable {
require(_wallet != 0x0);
require(msg.value > 0);
WalletChanged(wallet, _wallet);
wallet = _wallet;
wallet.transfer(msg.value);
}
function extendTime(uint256 _timeExtension) onlyOwner public {
require(!finished);
require(now < endTime + timeExtension);
require(_timeExtension > 0);
timeExtension = timeExtension.add(_timeExtension);
require(timeExtension <= 7 days);
Extended(endTime.add(timeExtension));
}
function finish() onlyOwner public {
require(!finished);
require(hardCapReached() || now > endTime + timeExtension);
finished = true;
finishedAt = now;
saleToken.finishMinting();
bonusToken.finishMinting();
uint256 distributableCoins = telcoin.balanceOf(this);
if (softCapReached()) {
uint256 saleTokens = saleToken.totalSupply();
uint256 bonusTokens = bonusToken.totalSupply();
uint256 totalTokens = saleTokens.add(bonusTokens);
// Avoid loss of precision by multiplying and later dividing by
// a large value.
uint256 bonusPortion = bonusTokens.mul(10 ** 18).div(totalTokens).mul(distributableCoins).div(10 ** 18);
uint256 salePortion = distributableCoins.sub(bonusPortion);
saleToken.transferOwnership(owner);
bonusToken.transferOwnership(owner);
telcoin.transfer(saleToken, salePortion);
telcoin.transfer(bonusToken, bonusPortion);
withdraw();
} else {
refunding = true;
telcoin.transfer(wallet, distributableCoins);
Refunding();
}
Finalized();
}
function pause() onlyOwner public {
require(!paused);
paused = true;
Pause();
}
function refundMany(address[] _investors) public {
for (uint256 i = 0; i < _investors.length; i++) {
refund(_investors[i]);
}
}
function refund(address _investor) public {
require(finished);
require(refunding);
require(deposited[_investor] > 0);
uint256 weiAmount = deposited[_investor];
deposited[_investor] = 0;
weiRefunded = weiRefunded.add(weiAmount);
Refunded(_investor, weiAmount);
_investor.transfer(weiAmount);
}
function registerAltPurchase(
address _beneficiary,
string _symbol,
string _transactionId,
uint256 _weiAmount
)
saleOpen
onlyOwner
public
{
require(_beneficiary != address(0));
require(totalDeposited(_beneficiary).add(_weiAmount) <= whitelistedMax[_beneficiary]);
uint256 saleTokens;
uint256 bonusTokens;
(saleTokens, bonusTokens) = tokensForPurchase(_beneficiary, _weiAmount);
uint256 newAltDeposited = altDeposited[_beneficiary].add(_weiAmount);
altDeposited[_beneficiary] = newAltDeposited;
investors.push(_beneficiary);
weiRaised = weiRaised.add(_weiAmount);
saleToken.mint(_beneficiary, saleTokens);
if (bonusTokens > 0) {
bonusToken.mint(_beneficiary, bonusTokens);
}
TokenAltPurchase(
msg.sender,
_beneficiary,
_weiAmount,
saleTokens,
bonusTokens,
_symbol,
_transactionId
);
}
function transferOwnership(address _to) onlyOwner public {
require(_to != address(0));
OwnershipTransferred(owner, _to);
owner = _to;
}
function unpause() onlyOwner public {
require(paused);
paused = false;
Unpause();
}
function updateCapFlex(uint32 _capFlex) onlyOwner public {
require(!finished);
capFlex = _capFlex;
CapFlexed(capFlex);
}
function whitelistMany(
address[] _participants,
uint256 _minWeiAmount,
uint256 _maxWeiAmount,
uint32 _bonusRate
)
onlyOwner
public
{
for (uint256 i = 0; i < _participants.length; i++) {
whitelist(
_participants[i],
_minWeiAmount,
_maxWeiAmount,
_bonusRate
);
}
}
function whitelist(
address _participant,
uint256 _minWeiAmount,
uint256 _maxWeiAmount,
uint32 _bonusRate
)
onlyOwner
public
{
require(_participant != 0x0);
require(_bonusRate <= 400);
whitelistedMin[_participant] = _minWeiAmount;
whitelistedMax[_participant] = _maxWeiAmount;
bonusRates[_participant] = _bonusRate;
Whitelisted(
_participant,
_minWeiAmount,
_maxWeiAmount,
_bonusRate
);
}
function withdraw() onlyOwner public {
require(softCapReached() || (finished && now > finishedAt + 14 days));
uint256 weiAmount = this.balance;
if (weiAmount > 0) {
wallet.transfer(weiAmount);
Withdrawal(wallet, weiAmount);
}
}
function hardCapReached() public constant returns (bool) {
return weiRaised >= hardCap.mul(1000 + capFlex).div(1000);
}
function tokensForPurchase(
address _beneficiary,
uint256 _weiAmount
)
public
constant
returns (uint256, uint256)
{
uint256 baseTokens = _weiAmount.mul(rate);
uint256 totalPrior = totalDeposited(_beneficiary);
uint256 totalAfter = totalPrior.add(_weiAmount);
// Has the beneficiary passed the assigned minimum purchase level?
if (totalAfter < whitelistedMin[_beneficiary]) {
return (baseTokens, 0);
}
uint32 bonusRate = bonusRates[_beneficiary];
uint256 baseBonus = baseTokens.mul(1000 + bonusRate).div(1000).sub(baseTokens);
// Do we pass the minimum purchase level with this purchase?
if (totalPrior < whitelistedMin[_beneficiary]) {
uint256 balancePrior = totalPrior.mul(rate);
uint256 accumulatedBonus = balancePrior.mul(1000 + bonusRate).div(1000).sub(balancePrior);
return (baseTokens, accumulatedBonus.add(baseBonus));
}
return (baseTokens, baseBonus);
}
function totalDeposited(address _investor) public constant returns (uint256) {
return deposited[_investor].add(altDeposited[_investor]);
}
function softCapReached() public constant returns (bool) {
return weiRaised >= softCap.mul(1000 + capFlex).div(1000);
}
}
contract TelcoinSaleKYCEscrow {
using SafeMath for uint256;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event ValuePlaced(address indexed purchaser, address indexed beneficiary, uint256 amount);
event Approved(address indexed participant);
event Rejected(address indexed participant);
event Closed();
/// The owner of the contract.
address public owner;
/// The actual sale.
TelcoinSale public sale;
/// Whether the escrow has closed.
bool public closed = false;
/// The amount of wei and wei equivalents invested by each investor.
mapping(address => uint256) public deposited;
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
modifier escrowOpen() {
require(!closed);
_;
}
function TelcoinSaleKYCEscrow(TelcoinSale _sale) public {
require(_sale != address(0));
owner = msg.sender;
sale = _sale;
}
function () public payable {
placeValue(msg.sender);
}
function approve(address _participant) onlyOwner public {
uint256 weiAmount = deposited[_participant];
require(weiAmount > 0);
deposited[_participant] = 0;
Approved(_participant);
sale.buyTokens.value(weiAmount)(_participant);
}
function approveMany(address[] _participants) onlyOwner public {
for (uint256 i = 0; i < _participants.length; i++) {
approve(_participants[i]);
}
}
function close() onlyOwner public {
require(!closed);
closed = true;
Closed();
}
function placeValue(address _beneficiary) escrowOpen public payable {
require(_beneficiary != address(0));
uint256 weiAmount = msg.value;
require(weiAmount > 0);
uint256 newDeposited = deposited[_beneficiary].add(weiAmount);
deposited[_beneficiary] = newDeposited;
ValuePlaced(
msg.sender,
_beneficiary,
weiAmount
);
}
function reject(address _participant) onlyOwner public {
uint256 weiAmount = deposited[_participant];
require(weiAmount > 0);
deposited[_participant] = 0;
Rejected(_participant);
require(_participant.call.value(weiAmount)());
}
function rejectMany(address[] _participants) onlyOwner public {
for (uint256 i = 0; i < _participants.length; i++) {
reject(_participants[i]);
}
}
function transferOwnership(address _to) onlyOwner public {
require(_to != address(0));
OwnershipTransferred(owner, _to);
owner = _to;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"_participants","type":"address[]"}],"name":"rejectMany","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"close","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"closed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"sale","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"placeValue","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"}],"name":"reject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_participants","type":"address[]"}],"name":"approveMany","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"deposited","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_participant","type":"address"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_sale","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"ValuePlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"}],"name":"Approved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"participant","type":"address"}],"name":"Rejected","type":"event"},{"anonymous":false,"inputs":[],"name":"Closed","type":"event"}]Contract Creation Code
60606040526000600160146101000a81548160ff021916908315150217905550341561002a57600080fd5b604051602080610d8e83398101604052808051906020019091905050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561008257600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610c7b806101136000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631b1e5d5d146100ba57806343d726d614610114578063597e1fb5146101295780636ad1fe02146101565780638da5cb5b146101ab578063a374480a14610200578063ab0da5a91461022e578063bb70705914610267578063cb13cddb146102c1578063daea85c51461030e578063f2fde38b14610347575b6100b833610380565b005b34156100c557600080fd5b6101126004808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506104ef565b005b341561011f57600080fd5b61012761058b565b005b341561013457600080fd5b61013c61064a565b604051808215151515815260200191505060405180910390f35b341561016157600080fd5b61016961065d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b657600080fd5b6101be610683565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61022c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610380565b005b341561023957600080fd5b610265600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506106a8565b005b341561027257600080fd5b6102bf60048080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190505061081d565b005b34156102cc57600080fd5b6102f8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108b9565b6040518082815260200191505060405180910390f35b341561031957600080fd5b610345600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108d1565b005b341561035257600080fd5b61037e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610adc565b005b600080600160149054906101000a900460ff1615151561039f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156103db57600080fd5b3491506000821115156103ed57600080fd5b61043f82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3190919063ffffffff16565b905080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f25aef7442b0598bbb138d66173db749b5ecbc084c908aadc631b7fcde53236e3846040518082815260200191505060405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561054c57600080fd5b600090505b81518110156105875761057a828281518110151561056b57fe5b906020019060200201516106a8565b8080600101915050610551565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105e657600080fd5b600160149054906101000a900460ff1615151561060257600080fd5b60018060146101000a81548160ff0219169083151502179055507f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561070557600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111151561075657600080fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167faf77f8960cf590e245ec8b6d41c193a5dcacad8986ae4eb57ac9e5be7b6af03160405160405180910390a28173ffffffffffffffffffffffffffffffffffffffff168160405160006040518083038185876187965a03f192505050151561081957600080fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561087a57600080fd5b600090505b81518110156108b5576108a8828281518110151561089957fe5b906020019060200201516108d1565b808060010191505061087f565b5050565b60026020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561092e57600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111151561097f57600080fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f5d91bd0cecc45fef102af61de92c5462fadc884a5ce9d21c15e8a85198f2349e60405160405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec8ac4d882846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b1515610ac357600080fd5b6125ee5a03f11515610ad457600080fd5b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b3757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610b7357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284019050838110151515610c4557fe5b80915050929150505600a165627a7a7230582025871790f8a41b0fb34900dc5ee5c6233523c34ee5bb5d724cf5f7dcef11b20f002900000000000000000000000078f7ef08b4583f9866d8a98a9f2d9b64d9c02380
Deployed Bytecode
0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631b1e5d5d146100ba57806343d726d614610114578063597e1fb5146101295780636ad1fe02146101565780638da5cb5b146101ab578063a374480a14610200578063ab0da5a91461022e578063bb70705914610267578063cb13cddb146102c1578063daea85c51461030e578063f2fde38b14610347575b6100b833610380565b005b34156100c557600080fd5b6101126004808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506104ef565b005b341561011f57600080fd5b61012761058b565b005b341561013457600080fd5b61013c61064a565b604051808215151515815260200191505060405180910390f35b341561016157600080fd5b61016961065d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b657600080fd5b6101be610683565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61022c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610380565b005b341561023957600080fd5b610265600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506106a8565b005b341561027257600080fd5b6102bf60048080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509190505061081d565b005b34156102cc57600080fd5b6102f8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108b9565b6040518082815260200191505060405180910390f35b341561031957600080fd5b610345600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108d1565b005b341561035257600080fd5b61037e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610adc565b005b600080600160149054906101000a900460ff1615151561039f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156103db57600080fd5b3491506000821115156103ed57600080fd5b61043f82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c3190919063ffffffff16565b905080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f25aef7442b0598bbb138d66173db749b5ecbc084c908aadc631b7fcde53236e3846040518082815260200191505060405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561054c57600080fd5b600090505b81518110156105875761057a828281518110151561056b57fe5b906020019060200201516106a8565b8080600101915050610551565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156105e657600080fd5b600160149054906101000a900460ff1615151561060257600080fd5b60018060146101000a81548160ff0219169083151502179055507f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561070557600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111151561075657600080fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167faf77f8960cf590e245ec8b6d41c193a5dcacad8986ae4eb57ac9e5be7b6af03160405160405180910390a28173ffffffffffffffffffffffffffffffffffffffff168160405160006040518083038185876187965a03f192505050151561081957600080fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561087a57600080fd5b600090505b81518110156108b5576108a8828281518110151561089957fe5b906020019060200201516108d1565b808060010191505061087f565b5050565b60026020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561092e57600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111151561097f57600080fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f5d91bd0cecc45fef102af61de92c5462fadc884a5ce9d21c15e8a85198f2349e60405160405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ec8ac4d882846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506000604051808303818588803b1515610ac357600080fd5b6125ee5a03f11515610ad457600080fd5b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b3757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610b7357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284019050838110151515610c4557fe5b80915050929150505600a165627a7a7230582025871790f8a41b0fb34900dc5ee5c6233523c34ee5bb5d724cf5f7dcef11b20f0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000078f7ef08b4583f9866d8a98a9f2d9b64d9c02380
-----Decoded View---------------
Arg [0] : _sale (address): 0x78F7eF08b4583F9866D8a98A9f2D9B64d9c02380
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000078f7ef08b4583f9866d8a98a9f2d9b64d9c02380
Swarm Source
bzzr://25871790f8a41b0fb34900dc5ee5c6233523c34ee5bb5d724cf5f7dcef11b20f
Loading...
Loading
Loading...
Loading
Net Worth in USD
$18.73
Net Worth in ETH
0.009462
Token Allocations
THETA
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.187327 | 100 | $18.73 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.