Audit completed
This commit is contained in:
parent
99f5ce21c3
commit
7c7d17059a
157
audit/README.md
157
audit/README.md
|
@ -1,10 +1,30 @@
|
|||
# Oracles Network Presale Contract Audit
|
||||
|
||||
Status: Work in progress
|
||||
|
||||
## Summary
|
||||
|
||||
Commits [5bc4391](https://github.com/oraclesorg/oracles-presale/commit/5bc439115ecebb0a52cfe9305f00f89756c5a90a).
|
||||
[Oracles Network](https://oracles.org/) intends to run a presale commencing in Nov 2017.
|
||||
|
||||
Bok Consulting Pty Ltd was commissioned to perform an audit on the Oracles Network's presale Ethereum smart contract.
|
||||
|
||||
This audit has been conducted on Oracles Network's source code in commit
|
||||
[5bc4391](https://github.com/oraclesorg/oracles-presale/commit/5bc439115ecebb0a52cfe9305f00f89756c5a90a).
|
||||
|
||||
No potential vulnerabilities have been identified in the presale contract.
|
||||
|
||||
<br />
|
||||
|
||||
### Mainnet Addresses
|
||||
|
||||
`TBA`
|
||||
|
||||
<br />
|
||||
|
||||
### Presale Contract
|
||||
|
||||
Ethers contributed by participants to the presale contract are immediately transferred to the presale wallet, reducing any risk of the loss
|
||||
of ethers in this bespoke smart contract.
|
||||
|
||||
No tokens are generated for these contributions.
|
||||
|
||||
<br />
|
||||
|
||||
|
@ -12,12 +32,104 @@ Commits [5bc4391](https://github.com/oraclesorg/oracles-presale/commit/5bc439115
|
|||
|
||||
## Table Of Contents
|
||||
|
||||
* [Summary](#summary)
|
||||
* [Recommendations](#recommendations)
|
||||
* [Potential Vulnerabilities](#potential-vulnerabilities)
|
||||
* [Scope](#scope)
|
||||
* [Limitations](#limitations)
|
||||
* [Due Diligence](#due-diligence)
|
||||
* [Risks](#risks)
|
||||
* [Testing](#testing)
|
||||
* [Code Review](#code-review)
|
||||
|
||||
<br />
|
||||
|
||||
<hr />
|
||||
|
||||
## Recommendations
|
||||
|
||||
* **LOW IMPORTANCE** Use the OpenZeppelin *Claimable* contract instead of the *Ownable* contract to provide more safety during the
|
||||
ownership transfer process
|
||||
|
||||
* **LOW IMPORTANCE** The variable `PresaleOracles.rate` is unused and can be removed
|
||||
|
||||
* **LOW IMPORTANCE** Consider adding the logging of an event for each contribution, like `Contribution(address investor, uint investorAmount, uint investorTotal, uint totalAmount)`.
|
||||
This data can then be easily extracted using a script, if there are many individual contributions
|
||||
|
||||
* **LOW IMPORTANCE** `BasicToken` can be replaced with the `ERC20Basic` interface in `PresaleOracles.claimTokens(...)`, and the `BasicToken`
|
||||
contract source code can be removed
|
||||
|
||||
<br />
|
||||
|
||||
<hr />
|
||||
|
||||
## Potential Vulnerabilities
|
||||
|
||||
No potential vulnerabilities have been identified in the presale contract.
|
||||
|
||||
<br />
|
||||
|
||||
<hr />
|
||||
|
||||
## Scope
|
||||
|
||||
This audit is into the technical aspects of the presale contract. The primary aim of this audit is to ensure that funds
|
||||
contributed to this contract is not easily attacked or stolen by third parties. The secondary aim of this audit is that
|
||||
ensure the coded algorithms work as expected. This audit does not guarantee that that the code is bugfree, but intends to
|
||||
highlight any areas of weaknesses.
|
||||
|
||||
<br />
|
||||
|
||||
<hr />
|
||||
|
||||
## Limitations
|
||||
|
||||
This audit makes no statements or warranties about the viability of the Oracles Network's business proposition, the individuals
|
||||
involved in this business or the regulatory regime for the business model.
|
||||
|
||||
<br />
|
||||
|
||||
<hr />
|
||||
|
||||
## Due Diligence
|
||||
|
||||
As always, potential participants in any crowdsale are encouraged to perform their due diligence on the business proposition
|
||||
before funding any crowdsales.
|
||||
|
||||
Potential participants are also encouraged to only send their funds to the official crowdsale Ethereum address, published on
|
||||
the crowdsale beneficiary's official communication channel.
|
||||
|
||||
Scammers have been publishing phishing address in the forums, twitter and other communication channels, and some go as far as
|
||||
duplicating crowdsale websites. Potential participants should NOT just click on any links received through these messages.
|
||||
Scammers have also hacked the crowdsale website to replace the crowdsale contract address with their scam address.
|
||||
|
||||
Potential participants should also confirm that the verified source code on EtherScan.io for the published crowdsale address
|
||||
matches the audited source code, and that the deployment parameters are correctly set, including the constant parameters.
|
||||
|
||||
<br />
|
||||
|
||||
<hr />
|
||||
|
||||
## Risks
|
||||
|
||||
* This presale contract has a low risk of having the ETH hacked or stolen, as any contributions by participants are immediately transferred
|
||||
to the presale wallet.
|
||||
|
||||
<br />
|
||||
|
||||
<hr />
|
||||
|
||||
## Testing
|
||||
|
||||
The following functions were tested using the script [test/01_test1.sh](test/01_test1.sh) with the summary results saved
|
||||
in [test/test1results.txt](test/test1results.txt) and the detailed output saved in [test/test1output.txt](test/test1output.txt):
|
||||
|
||||
* [x] Deploy Presale contract
|
||||
* [x] Initialise contract
|
||||
* [x] Whitelist accounts
|
||||
* [x] Blacklist accounts
|
||||
* [x] Send contributions for whitelisted addresses and blacklisted address (expecting failure)
|
||||
|
||||
<br />
|
||||
|
||||
<hr />
|
||||
|
@ -29,3 +141,42 @@ Commits [5bc4391](https://github.com/oraclesorg/oracles-presale/commit/5bc439115
|
|||
* [x] contract ERC20Basic
|
||||
* [x] contract BasicToken is ERC20Basic
|
||||
* [x] contract PresaleOracles is Ownable
|
||||
|
||||
<br />
|
||||
|
||||
The following warning messages are generated when using the Solidity compiler 0.4.18 and are of low importance, due to recent changes to the
|
||||
Solidity compiler version:
|
||||
|
||||
```
|
||||
$ solc_0.4.18 PresaleOracles_flat.sol
|
||||
PresaleOracles_flat.sol:40:3: Warning: No visibility specified. Defaulting to "public".
|
||||
function Ownable() {
|
||||
^
|
||||
Spanning multiple lines.
|
||||
PresaleOracles_flat.sol:4:3: Warning: Function state mutability can be restricted to pure
|
||||
function mul(uint256 a, uint256 b) internal constant returns (uint256) {
|
||||
^
|
||||
Spanning multiple lines.
|
||||
PresaleOracles_flat.sol:10:3: Warning: Function state mutability can be restricted to pure
|
||||
function div(uint256 a, uint256 b) internal constant returns (uint256) {
|
||||
^
|
||||
Spanning multiple lines.
|
||||
PresaleOracles_flat.sol:17:3: Warning: Function state mutability can be restricted to pure
|
||||
function sub(uint256 a, uint256 b) internal constant returns (uint256) {
|
||||
^
|
||||
Spanning multiple lines.
|
||||
PresaleOracles_flat.sol:22:3: Warning: Function state mutability can be restricted to pure
|
||||
function add(uint256 a, uint256 b) internal constant returns (uint256) {
|
||||
^
|
||||
Spanning multiple lines.
|
||||
PresaleOracles_flat.sol:127:5: Warning: Function state mutability can be restricted to pure
|
||||
function Presale() public {
|
||||
^
|
||||
Spanning multiple lines.
|
||||
```
|
||||
|
||||
<br />
|
||||
|
||||
<br />
|
||||
|
||||
(c) BokkyPooBah / Bok Consulting Pty Ltd for Oracles Network - Nov 15 2017. The MIT Licence.
|
|
@ -0,0 +1,225 @@
|
|||
#!/bin/bash
|
||||
# ----------------------------------------------------------------------------------------------
|
||||
# Testing the smart contract
|
||||
#
|
||||
# Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2017. The MIT Licence.
|
||||
# ----------------------------------------------------------------------------------------------
|
||||
|
||||
MODE=${1:-test}
|
||||
|
||||
GETHATTACHPOINT=`grep ^IPCFILE= settings.txt | sed "s/^.*=//"`
|
||||
PASSWORD=`grep ^PASSWORD= settings.txt | sed "s/^.*=//"`
|
||||
|
||||
CONTRACTSDIR=`grep ^CONTRACTSDIR= settings.txt | sed "s/^.*=//"`
|
||||
|
||||
SALESOL=`grep ^SALESOL= settings.txt | sed "s/^.*=//"`
|
||||
SALEJS=`grep ^SALEJS= settings.txt | sed "s/^.*=//"`
|
||||
|
||||
DEPLOYMENTDATA=`grep ^DEPLOYMENTDATA= settings.txt | sed "s/^.*=//"`
|
||||
|
||||
INCLUDEJS=`grep ^INCLUDEJS= settings.txt | sed "s/^.*=//"`
|
||||
TEST1OUTPUT=`grep ^TEST1OUTPUT= settings.txt | sed "s/^.*=//"`
|
||||
TEST1RESULTS=`grep ^TEST1RESULTS= settings.txt | sed "s/^.*=//"`
|
||||
|
||||
CURRENTTIME=`date +%s`
|
||||
CURRENTTIMES=`date -r $CURRENTTIME -u`
|
||||
|
||||
# Setting time to be a block representing one day
|
||||
BLOCKSINDAY=1
|
||||
|
||||
if [ "$MODE" == "dev" ]; then
|
||||
# Start time now
|
||||
STARTTIME=`echo "$CURRENTTIME" | bc`
|
||||
else
|
||||
# Start time 1m 10s in the future
|
||||
STARTTIME=`echo "$CURRENTTIME+75" | bc`
|
||||
fi
|
||||
STARTTIME_S=`date -r $STARTTIME -u`
|
||||
ENDTIME=`echo "$CURRENTTIME+60*3" | bc`
|
||||
ENDTIME_S=`date -r $ENDTIME -u`
|
||||
|
||||
printf "MODE = '$MODE'\n" | tee $TEST1OUTPUT
|
||||
printf "GETHATTACHPOINT = '$GETHATTACHPOINT'\n" | tee -a $TEST1OUTPUT
|
||||
printf "PASSWORD = '$PASSWORD'\n" | tee -a $TEST1OUTPUT
|
||||
|
||||
printf "CONTRACTSDIR = '$CONTRACTSDIR'\n" | tee -a $TEST1OUTPUT
|
||||
|
||||
printf "SALESOL = '$SALESOL'\n" | tee -a $TEST1OUTPUT
|
||||
printf "SALEJS = '$SALEJS'\n" | tee -a $TEST1OUTPUT
|
||||
|
||||
printf "DEPLOYMENTDATA = '$DEPLOYMENTDATA'\n" | tee -a $TEST1OUTPUT
|
||||
printf "INCLUDEJS = '$INCLUDEJS'\n" | tee -a $TEST1OUTPUT
|
||||
printf "TEST1OUTPUT = '$TEST1OUTPUT'\n" | tee -a $TEST1OUTPUT
|
||||
printf "TEST1RESULTS = '$TEST1RESULTS'\n" | tee -a $TEST1OUTPUT
|
||||
printf "CURRENTTIME = '$CURRENTTIME' '$CURRENTTIMES'\n" | tee -a $TEST1OUTPUT
|
||||
printf "STARTTIME = '$STARTTIME' '$STARTTIME_S'\n" | tee -a $TEST1OUTPUT
|
||||
printf "ENDTIME = '$ENDTIME' '$ENDTIME_S'\n" | tee -a $TEST1OUTPUT
|
||||
|
||||
# Make copy of SOL file and modify start and end times ---
|
||||
`cp $CONTRACTSDIR/$SALESOL $SALESOL`
|
||||
|
||||
# --- Modify parameters ---
|
||||
#`perl -pi -e "s/timePassed \> months\(3\)/timePassed \> 0/" $DTHSOL`
|
||||
#`perl -pi -e "s/deadline \= 1499436000;.*$/deadline = $ENDTIME; \/\/ $ENDTIME_S/" $FUNFAIRSALETEMPSOL`
|
||||
#`perl -pi -e "s/\/\/\/ \@return total amount of tokens.*$/function overloadedTotalSupply() constant returns (uint256) \{ return totalSupply; \}/" $DAOCASINOICOTEMPSOL`
|
||||
#`perl -pi -e "s/BLOCKS_IN_DAY \= 5256;*$/BLOCKS_IN_DAY \= $BLOCKSINDAY;/" $DAOCASINOICOTEMPSOL`
|
||||
|
||||
DIFFS1=`diff $CONTRACTSDIR/$SALESOL $SALESOL`
|
||||
echo "--- Differences $CONTRACTSDIR/$SALESOL $SALESOL ---" | tee -a $TEST1OUTPUT
|
||||
echo "$DIFFS1" | tee -a $TEST1OUTPUT
|
||||
|
||||
solc_0.4.18 --version | tee -a $TEST1OUTPUT
|
||||
|
||||
echo "var saleOutput=`solc_0.4.18 --optimize --combined-json abi,bin,interface $SALESOL`;" > $SALEJS
|
||||
|
||||
geth --verbosity 3 attach $GETHATTACHPOINT << EOF | tee -a $TEST1OUTPUT
|
||||
loadScript("$SALEJS");
|
||||
loadScript("functions.js");
|
||||
|
||||
var saleAbi = JSON.parse(saleOutput.contracts["$SALESOL:PresaleOracles"].abi);
|
||||
var saleBin = "0x" + saleOutput.contracts["$SALESOL:PresaleOracles"].bin;
|
||||
|
||||
// console.log("DATA: saleAbi=" + JSON.stringify(saleAbi));
|
||||
// console.log("DATA: saleBin=" + saleBin);
|
||||
|
||||
unlockAccounts("$PASSWORD");
|
||||
printBalances();
|
||||
console.log("RESULT: ");
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
var saleMessage = "Deploy Presale Contract";
|
||||
// -----------------------------------------------------------------------------
|
||||
console.log("RESULT: " + saleMessage);
|
||||
var saleContract = web3.eth.contract(saleAbi);
|
||||
var saleTx = null;
|
||||
var saleAddress = null;
|
||||
var sale = saleContract.new({from: contractOwnerAccount, data: saleBin, gas: 4000000},
|
||||
function(e, contract) {
|
||||
if (!e) {
|
||||
if (!contract.address) {
|
||||
saleTx = contract.transactionHash;
|
||||
} else {
|
||||
saleAddress = contract.address;
|
||||
addAccount(saleAddress, "Presale");
|
||||
addPresaleContractAddressAndAbi(saleAddress, saleAbi);
|
||||
printTxData("saleAddress=" + saleAddress, saleTx);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
while (txpool.status.pending > 0) {
|
||||
}
|
||||
printBalances();
|
||||
failIfTxStatusError(saleTx, saleMessage);
|
||||
printPresaleContractDetails();
|
||||
console.log("RESULT: ");
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
var initialiseSaleMessage = "Initialise Contribution";
|
||||
var startTime = $STARTTIME;
|
||||
var endTime = $ENDTIME;
|
||||
var cap = web3.toWei("10000", "ether");
|
||||
var minimumContribution = web3.toWei("0.1", "ether");
|
||||
// function initialize(uint256 _startTime, uint256 _endTime, uint256 _cap, uint256 _minimumContribution, address _vault) public onlyOwner
|
||||
// -----------------------------------------------------------------------------
|
||||
console.log("RESULT: " + initialiseSaleMessage);
|
||||
var initialiseSaleTx = sale.initialize(startTime, endTime, cap, minimumContribution, multisig, {from: contractOwnerAccount, gas: 2000000});
|
||||
while (txpool.status.pending > 0) {
|
||||
}
|
||||
printTxData("initialiseSaleTx", initialiseSaleTx);
|
||||
printBalances();
|
||||
failIfTxStatusError(initialiseSaleTx, initialiseSaleMessage);
|
||||
printPresaleContractDetails();
|
||||
console.log("RESULT: ");
|
||||
|
||||
|
||||
waitUntil("startTime", startTime, 0);
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
var whitelistMessage = "Whitelist";
|
||||
// -----------------------------------------------------------------------------
|
||||
console.log("RESULT: " + whitelistMessage);
|
||||
var whitelist_1Tx = sale.whitelistInvestor(account3, {from: contractOwnerAccount, gas: 2000000});
|
||||
var whitelist_2Tx = sale.whitelistInvestors([account4, account5, account7], {from: contractOwnerAccount, gas: 2000000});
|
||||
while (txpool.status.pending > 0) {
|
||||
}
|
||||
printTxData("whitelist_1Tx", whitelist_1Tx);
|
||||
printTxData("whitelist_2Tx", whitelist_2Tx);
|
||||
printBalances();
|
||||
failIfTxStatusError(whitelist_1Tx, whitelistMessage + " - whitelist(account3)");
|
||||
failIfTxStatusError(whitelist_2Tx, whitelistMessage + " - whitelist([account4, account5, account7])");
|
||||
printPresaleContractDetails();
|
||||
console.log("RESULT: ");
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
var blacklistMessage = "Blacklist";
|
||||
// -----------------------------------------------------------------------------
|
||||
console.log("RESULT: " + blacklistMessage);
|
||||
var blacklist_1Tx = sale.blacklistInvestor(account4, {from: contractOwnerAccount, gas: 2000000});
|
||||
while (txpool.status.pending > 0) {
|
||||
}
|
||||
printTxData("blacklist_1Tx", blacklist_1Tx);
|
||||
printBalances();
|
||||
failIfTxStatusError(blacklist_1Tx, blacklistMessage + " - blacklist(account4)");
|
||||
printPresaleContractDetails();
|
||||
console.log("RESULT: ");
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
var sendContribution1Message = "Send Contribution";
|
||||
// -----------------------------------------------------------------------------
|
||||
console.log("RESULT: " + sendContribution1Message);
|
||||
var sendContribution1_1Tx = eth.sendTransaction({from: account3, to: saleAddress, gas: 400000, value: web3.toWei("1000", "ether")});
|
||||
var sendContribution1_2Tx = eth.sendTransaction({from: account4, to: saleAddress, gas: 400000, value: web3.toWei("1000", "ether")});
|
||||
var sendContribution1_3Tx = eth.sendTransaction({from: account5, to: saleAddress, gas: 400000, value: web3.toWei("1000", "ether")});
|
||||
var sendContribution1_4Tx = eth.sendTransaction({from: account6, to: saleAddress, gas: 400000, value: web3.toWei("1000", "ether")});
|
||||
while (txpool.status.pending > 0) {
|
||||
}
|
||||
var sendContribution1_5Tx = eth.sendTransaction({from: account7, to: saleAddress, gas: 400000, value: web3.toWei("8000.00000000001", "ether")});
|
||||
while (txpool.status.pending > 0) {
|
||||
}
|
||||
var sendContribution1_6Tx = eth.sendTransaction({from: account7, to: saleAddress, gas: 400000, value: web3.toWei("7999", "ether")});
|
||||
while (txpool.status.pending > 0) {
|
||||
}
|
||||
printTxData("sendContribution1_1Tx", sendContribution1_1Tx);
|
||||
printTxData("sendContribution1_2Tx", sendContribution1_2Tx);
|
||||
printTxData("sendContribution1_3Tx", sendContribution1_3Tx);
|
||||
printTxData("sendContribution1_4Tx", sendContribution1_4Tx);
|
||||
printTxData("sendContribution1_5Tx", sendContribution1_5Tx);
|
||||
printTxData("sendContribution1_6Tx", sendContribution1_6Tx);
|
||||
printBalances();
|
||||
failIfTxStatusError(sendContribution1_1Tx, sendContribution1Message + " ac3 1000 ETH");
|
||||
passIfTxStatusError(sendContribution1_2Tx, sendContribution1Message + " ac4 1000 ETH - Expecting failure, not whitelisted");
|
||||
failIfTxStatusError(sendContribution1_3Tx, sendContribution1Message + " ac5 1000 ETH");
|
||||
passIfTxStatusError(sendContribution1_4Tx, sendContribution1Message + " ac6 1000 ETH - Expecting failure, not whitelisted");
|
||||
passIfTxStatusError(sendContribution1_5Tx, sendContribution1Message + " ac7 8000.00000000001 ETH - Expecting failure, amount will blow the cap");
|
||||
failIfTxStatusError(sendContribution1_6Tx, sendContribution1Message + " ac7 7999 ETH");
|
||||
printPresaleContractDetails();
|
||||
console.log("RESULT: ");
|
||||
|
||||
|
||||
waitUntil("endTime", endTime, 0);
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
var sendContribution2Message = "Send Contribution After End";
|
||||
// -----------------------------------------------------------------------------
|
||||
console.log("RESULT: " + sendContribution2Message);
|
||||
var sendContribution2_1Tx = eth.sendTransaction({from: account3, to: saleAddress, gas: 400000, value: web3.toWei("1", "ether")});
|
||||
while (txpool.status.pending > 0) {
|
||||
}
|
||||
printTxData("sendContribution2_1Tx", sendContribution2_1Tx);
|
||||
printBalances();
|
||||
passIfTxStatusError(sendContribution2_1Tx, sendContribution2Message + " ac3 1 ETH - Expecting failure, after end");
|
||||
printPresaleContractDetails();
|
||||
console.log("RESULT: ");
|
||||
|
||||
|
||||
EOF
|
||||
grep "DATA: " $TEST1OUTPUT | sed "s/DATA: //" > $DEPLOYMENTDATA
|
||||
cat $DEPLOYMENTDATA
|
||||
grep "RESULT: " $TEST1OUTPUT | sed "s/RESULT: //" > $TEST1RESULTS
|
||||
cat $TEST1RESULTS
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,211 @@
|
|||
pragma solidity ^0.4.18;
|
||||
|
||||
library SafeMath {
|
||||
function mul(uint256 a, uint256 b) internal constant returns (uint256) {
|
||||
uint256 c = a * b;
|
||||
assert(a == 0 || c / a == b);
|
||||
return c;
|
||||
}
|
||||
|
||||
function div(uint256 a, uint256 b) internal constant 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 constant returns (uint256) {
|
||||
assert(b <= a);
|
||||
return a - b;
|
||||
}
|
||||
|
||||
function add(uint256 a, uint256 b) internal constant returns (uint256) {
|
||||
uint256 c = a + b;
|
||||
assert(c >= a);
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
contract Ownable {
|
||||
address public owner;
|
||||
|
||||
|
||||
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
|
||||
|
||||
|
||||
/**
|
||||
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
|
||||
* account.
|
||||
*/
|
||||
function Ownable() {
|
||||
owner = msg.sender;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @dev Throws if called by any account other than the owner.
|
||||
*/
|
||||
modifier onlyOwner() {
|
||||
require(msg.sender == owner);
|
||||
_;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @dev Allows the current owner to transfer control of the contract to a newOwner.
|
||||
* @param newOwner The address to transfer ownership to.
|
||||
*/
|
||||
function transferOwnership(address newOwner) onlyOwner public {
|
||||
require(newOwner != address(0));
|
||||
OwnershipTransferred(owner, newOwner);
|
||||
owner = newOwner;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
contract ERC20Basic {
|
||||
uint256 public totalSupply;
|
||||
function balanceOf(address who) public constant returns (uint256);
|
||||
function transfer(address to, uint256 value) public returns (bool);
|
||||
event Transfer(address indexed from, address indexed to, uint256 value);
|
||||
}
|
||||
|
||||
contract BasicToken is ERC20Basic {
|
||||
using SafeMath for uint256;
|
||||
|
||||
mapping(address => uint256) balances;
|
||||
|
||||
/**
|
||||
* @dev transfer token for a specified address
|
||||
* @param _to The address to transfer to.
|
||||
* @param _value The amount to be transferred.
|
||||
*/
|
||||
function transfer(address _to, uint256 _value) public returns (bool) {
|
||||
require(_to != address(0));
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Gets the balance of the specified address.
|
||||
* @param _owner The address to query the the balance of.
|
||||
* @return An uint256 representing the amount owned by the passed address.
|
||||
*/
|
||||
function balanceOf(address _owner) public constant returns (uint256 balance) {
|
||||
return balances[_owner];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
contract PresaleOracles is Ownable {
|
||||
/*
|
||||
* PresaleOracles
|
||||
* Simple Presale contract
|
||||
* built by github.com/rstormsf Roman Storm
|
||||
*/
|
||||
using SafeMath for uint256;
|
||||
uint256 public startTime;
|
||||
uint256 public endTime;
|
||||
uint256 public cap;
|
||||
uint256 public rate;
|
||||
uint256 public totalInvestedInWei;
|
||||
uint256 public minimumContribution;
|
||||
mapping(address => uint256) public investorBalances;
|
||||
mapping(address => bool) public whitelist;
|
||||
uint256 public investorsLength;
|
||||
address public vault;
|
||||
bool public isInitialized = false;
|
||||
// TESTED by Roman Storm
|
||||
function () public payable {
|
||||
buy();
|
||||
}
|
||||
//TESTED by Roman Storm
|
||||
function Presale() public {
|
||||
}
|
||||
//TESTED by Roman Storm
|
||||
function initialize(uint256 _startTime, uint256 _endTime, uint256 _cap, uint256 _minimumContribution, address _vault) public onlyOwner {
|
||||
require(!isInitialized);
|
||||
require(_startTime != 0);
|
||||
require(_endTime != 0);
|
||||
require(_endTime > _startTime);
|
||||
require(_cap != 0);
|
||||
require(_minimumContribution != 0);
|
||||
require(_vault != 0x0);
|
||||
require(_cap > _minimumContribution);
|
||||
startTime = _startTime;
|
||||
endTime = _endTime;
|
||||
cap = _cap;
|
||||
isInitialized = true;
|
||||
minimumContribution = _minimumContribution;
|
||||
vault = _vault;
|
||||
}
|
||||
//TESTED by Roman Storm
|
||||
function buy() public payable {
|
||||
require(whitelist[msg.sender]);
|
||||
require(isValidPurchase(msg.value));
|
||||
require(isInitialized);
|
||||
require(getTime() >= startTime && getTime() <= endTime);
|
||||
address investor = msg.sender;
|
||||
investorBalances[investor] += msg.value;
|
||||
totalInvestedInWei += msg.value;
|
||||
forwardFunds(msg.value);
|
||||
}
|
||||
|
||||
//TESTED by Roman Storm
|
||||
function forwardFunds(uint256 _amount) internal {
|
||||
vault.transfer(_amount);
|
||||
}
|
||||
//TESTED by Roman Storm
|
||||
function claimTokens(address _token) public onlyOwner {
|
||||
if (_token == 0x0) {
|
||||
owner.transfer(this.balance);
|
||||
return;
|
||||
}
|
||||
|
||||
BasicToken token = BasicToken(_token);
|
||||
uint256 balance = token.balanceOf(this);
|
||||
token.transfer(owner, balance);
|
||||
}
|
||||
|
||||
function getTime() internal view returns(uint256) {
|
||||
return now;
|
||||
}
|
||||
//TESTED by Roman Storm
|
||||
function isValidPurchase(uint256 _amount) public view returns(bool) {
|
||||
bool nonZero = _amount > 0;
|
||||
bool hasMinimumAmount = investorBalances[msg.sender].add(_amount) >= minimumContribution;
|
||||
bool withinCap = totalInvestedInWei.add(_amount) <= cap;
|
||||
return hasMinimumAmount && withinCap && nonZero;
|
||||
}
|
||||
//TESTED by Roman Storm
|
||||
function whitelistInvestor(address _newInvestor) public onlyOwner {
|
||||
if(!whitelist[_newInvestor]) {
|
||||
whitelist[_newInvestor] = true;
|
||||
investorsLength++;
|
||||
}
|
||||
}
|
||||
//TESTED by Roman Storm
|
||||
function whitelistInvestors(address[] _investors) external onlyOwner {
|
||||
require(_investors.length <= 250);
|
||||
for(uint8 i=0; i<_investors.length;i++) {
|
||||
address newInvestor = _investors[i];
|
||||
if(!whitelist[newInvestor]) {
|
||||
whitelist[newInvestor] = true;
|
||||
investorsLength++;
|
||||
}
|
||||
}
|
||||
}
|
||||
function blacklistInvestor(address _investor) public onlyOwner {
|
||||
if(whitelist[_investor]) {
|
||||
delete whitelist[_investor];
|
||||
if(investorsLength != 0) {
|
||||
investorsLength--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,384 @@
|
|||
// Jul 14 2017
|
||||
var ethPriceUSD = 205.452;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Accounts
|
||||
// -----------------------------------------------------------------------------
|
||||
var accounts = [];
|
||||
var accountNames = {};
|
||||
|
||||
addAccount(eth.accounts[0], "Account #0 - Miner");
|
||||
addAccount(eth.accounts[1], "Account #1 - Contract Owner");
|
||||
addAccount(eth.accounts[2], "Account #2 - Multisig");
|
||||
addAccount(eth.accounts[3], "Account #3");
|
||||
addAccount(eth.accounts[4], "Account #4");
|
||||
addAccount(eth.accounts[5], "Account #5");
|
||||
addAccount(eth.accounts[6], "Account #6");
|
||||
addAccount(eth.accounts[7], "Account #7");
|
||||
|
||||
|
||||
var minerAccount = eth.accounts[0];
|
||||
var contractOwnerAccount = eth.accounts[1];
|
||||
var multisig = eth.accounts[2];
|
||||
var account3 = eth.accounts[3];
|
||||
var account4 = eth.accounts[4];
|
||||
var account5 = eth.accounts[5];
|
||||
var account6 = eth.accounts[6];
|
||||
var account7 = eth.accounts[7];
|
||||
|
||||
var baseBlock = eth.blockNumber;
|
||||
|
||||
function unlockAccounts(password) {
|
||||
for (var i = 0; i < eth.accounts.length; i++) {
|
||||
personal.unlockAccount(eth.accounts[i], password, 100000);
|
||||
}
|
||||
}
|
||||
|
||||
function addAccount(account, accountName) {
|
||||
accounts.push(account);
|
||||
accountNames[account] = accountName;
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Token Contract
|
||||
// -----------------------------------------------------------------------------
|
||||
var tokenContractAddress = null;
|
||||
var tokenContractAbi = null;
|
||||
|
||||
function addTokenContractAddressAndAbi(address, tokenAbi) {
|
||||
tokenContractAddress = address;
|
||||
tokenContractAbi = tokenAbi;
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Account ETH and token balances
|
||||
// -----------------------------------------------------------------------------
|
||||
function printBalances() {
|
||||
var token = tokenContractAddress == null || tokenContractAbi == null ? null : web3.eth.contract(tokenContractAbi).at(tokenContractAddress);
|
||||
var decimals = token == null ? 18 : token.decimals();
|
||||
var i = 0;
|
||||
var totalTokenBalance = new BigNumber(0);
|
||||
console.log("RESULT: # Account EtherBalanceChange Token Name");
|
||||
console.log("RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------");
|
||||
accounts.forEach(function(e) {
|
||||
var etherBalanceBaseBlock = eth.getBalance(e, baseBlock);
|
||||
var etherBalance = web3.fromWei(eth.getBalance(e).minus(etherBalanceBaseBlock), "ether");
|
||||
var tokenBalance = token == null ? new BigNumber(0) : token.balanceOf(e).shift(-decimals);
|
||||
totalTokenBalance = totalTokenBalance.add(tokenBalance);
|
||||
console.log("RESULT: " + pad2(i) + " " + e + " " + pad(etherBalance) + " " + padToken(tokenBalance, decimals) + " " + accountNames[e]);
|
||||
i++;
|
||||
});
|
||||
console.log("RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------");
|
||||
console.log("RESULT: " + padToken(totalTokenBalance, decimals) + " Total Token Balances");
|
||||
console.log("RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------");
|
||||
console.log("RESULT: ");
|
||||
}
|
||||
|
||||
function pad2(s) {
|
||||
var o = s.toFixed(0);
|
||||
while (o.length < 2) {
|
||||
o = " " + o;
|
||||
}
|
||||
return o;
|
||||
}
|
||||
|
||||
function pad(s) {
|
||||
var o = s.toFixed(18);
|
||||
while (o.length < 27) {
|
||||
o = " " + o;
|
||||
}
|
||||
return o;
|
||||
}
|
||||
|
||||
function padToken(s, decimals) {
|
||||
var o = s.toFixed(decimals);
|
||||
var l = parseInt(decimals)+12;
|
||||
while (o.length < l) {
|
||||
o = " " + o;
|
||||
}
|
||||
return o;
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Transaction status
|
||||
// -----------------------------------------------------------------------------
|
||||
function printTxData(name, txId) {
|
||||
var tx = eth.getTransaction(txId);
|
||||
var txReceipt = eth.getTransactionReceipt(txId);
|
||||
var gasPrice = tx.gasPrice;
|
||||
var gasCostETH = tx.gasPrice.mul(txReceipt.gasUsed).div(1e18);
|
||||
var gasCostUSD = gasCostETH.mul(ethPriceUSD);
|
||||
var block = eth.getBlock(txReceipt.blockNumber);
|
||||
console.log("RESULT: " + name + " status=" + txReceipt.status + (txReceipt.status == 0 ? " Failure" : " Success") + " gas=" + tx.gas +
|
||||
" gasUsed=" + txReceipt.gasUsed + " costETH=" + gasCostETH + " costUSD=" + gasCostUSD +
|
||||
" @ ETH/USD=" + ethPriceUSD + " gasPrice=" + web3.fromWei(gasPrice, "gwei") + " gwei block=" +
|
||||
txReceipt.blockNumber + " txIx=" + tx.transactionIndex + " txId=" + txId +
|
||||
" @ " + block.timestamp + " " + new Date(block.timestamp * 1000).toUTCString());
|
||||
}
|
||||
|
||||
function assertEtherBalance(account, expectedBalance) {
|
||||
var etherBalance = web3.fromWei(eth.getBalance(account), "ether");
|
||||
if (etherBalance == expectedBalance) {
|
||||
console.log("RESULT: OK " + account + " has expected balance " + expectedBalance);
|
||||
} else {
|
||||
console.log("RESULT: FAILURE " + account + " has balance " + etherBalance + " <> expected " + expectedBalance);
|
||||
}
|
||||
}
|
||||
|
||||
function failIfTxStatusError(tx, msg) {
|
||||
var status = eth.getTransactionReceipt(tx).status;
|
||||
if (status == 0) {
|
||||
console.log("RESULT: FAIL " + msg);
|
||||
return 0;
|
||||
} else {
|
||||
console.log("RESULT: PASS " + msg);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
function passIfTxStatusError(tx, msg) {
|
||||
var status = eth.getTransactionReceipt(tx).status;
|
||||
if (status == 1) {
|
||||
console.log("RESULT: FAIL " + msg);
|
||||
return 0;
|
||||
} else {
|
||||
console.log("RESULT: PASS " + msg);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
function gasEqualsGasUsed(tx) {
|
||||
var gas = eth.getTransaction(tx).gas;
|
||||
var gasUsed = eth.getTransactionReceipt(tx).gasUsed;
|
||||
return (gas == gasUsed);
|
||||
}
|
||||
|
||||
function failIfGasEqualsGasUsed(tx, msg) {
|
||||
var gas = eth.getTransaction(tx).gas;
|
||||
var gasUsed = eth.getTransactionReceipt(tx).gasUsed;
|
||||
if (gas == gasUsed) {
|
||||
console.log("RESULT: FAIL " + msg);
|
||||
return 0;
|
||||
} else {
|
||||
console.log("RESULT: PASS " + msg);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
function passIfGasEqualsGasUsed(tx, msg) {
|
||||
var gas = eth.getTransaction(tx).gas;
|
||||
var gasUsed = eth.getTransactionReceipt(tx).gasUsed;
|
||||
if (gas == gasUsed) {
|
||||
console.log("RESULT: PASS " + msg);
|
||||
return 1;
|
||||
} else {
|
||||
console.log("RESULT: FAIL " + msg);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
function failIfGasEqualsGasUsedOrContractAddressNull(contractAddress, tx, msg) {
|
||||
if (contractAddress == null) {
|
||||
console.log("RESULT: FAIL " + msg);
|
||||
return 0;
|
||||
} else {
|
||||
var gas = eth.getTransaction(tx).gas;
|
||||
var gasUsed = eth.getTransactionReceipt(tx).gasUsed;
|
||||
if (gas == gasUsed) {
|
||||
console.log("RESULT: FAIL " + msg);
|
||||
return 0;
|
||||
} else {
|
||||
console.log("RESULT: PASS " + msg);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Wait until some unixTime + additional seconds
|
||||
//-----------------------------------------------------------------------------
|
||||
function waitUntil(message, unixTime, addSeconds) {
|
||||
var t = parseInt(unixTime) + parseInt(addSeconds) + parseInt(1);
|
||||
var time = new Date(t * 1000);
|
||||
console.log("RESULT: Waiting until '" + message + "' at " + unixTime + "+" + addSeconds + "s =" + time + " now=" + new Date());
|
||||
while ((new Date()).getTime() <= time.getTime()) {
|
||||
}
|
||||
console.log("RESULT: Waited until '" + message + "' at at " + unixTime + "+" + addSeconds + "s =" + time + " now=" + new Date());
|
||||
console.log("RESULT: ");
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Wait until some block
|
||||
//-----------------------------------------------------------------------------
|
||||
function waitUntilBlock(message, block, addBlocks) {
|
||||
var b = parseInt(block) + parseInt(addBlocks);
|
||||
console.log("RESULT: Waiting until '" + message + "' #" + block + "+" + addBlocks + " = #" + b + " currentBlock=" + eth.blockNumber);
|
||||
while (eth.blockNumber <= b) {
|
||||
}
|
||||
console.log("RESULT: Waited until '" + message + "' #" + block + "+" + addBlocks + " = #" + b + " currentBlock=" + eth.blockNumber);
|
||||
console.log("RESULT: ");
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Crowdsale Contract
|
||||
//-----------------------------------------------------------------------------
|
||||
var presaleContractAddress = null;
|
||||
var presaleContractAbi = null;
|
||||
|
||||
function addPresaleContractAddressAndAbi(address, abi) {
|
||||
presaleContractAddress = address;
|
||||
presaleContractAbi = abi;
|
||||
}
|
||||
|
||||
var presaleFromBlock = 0;
|
||||
function printPresaleContractDetails() {
|
||||
console.log("RESULT: presaleContractAddress=" + presaleContractAddress);
|
||||
// console.log("RESULT: presaleContractAbi=" + JSON.stringify(presaleContractAbi));
|
||||
if (presaleContractAddress != null && presaleContractAbi != null) {
|
||||
var contract = eth.contract(presaleContractAbi).at(presaleContractAddress);
|
||||
console.log("RESULT: presale.owner=" + contract.owner());
|
||||
console.log("RESULT: presale.startTime=" + contract.startTime() + " " + new Date(contract.startTime() * 1000).toUTCString());
|
||||
console.log("RESULT: presale.endTime=" + contract.endTime() + " " + new Date(contract.endTime() * 1000).toUTCString());
|
||||
console.log("RESULT: presale.cap=" + contract.cap() + " " + contract.cap().shift(-18));
|
||||
console.log("RESULT: presale.rate=" + contract.rate());
|
||||
console.log("RESULT: presale.totalInvestedInWei=" + contract.totalInvestedInWei() + " " + contract.totalInvestedInWei().shift(-18));
|
||||
console.log("RESULT: presale.minimumContribution=" + contract.minimumContribution() + " " + contract.minimumContribution().shift(-18));
|
||||
console.log("RESULT: presale.investorsLength=" + contract.investorsLength());
|
||||
console.log("RESULT: presale.vault=" + contract.vault());
|
||||
console.log("RESULT: presale.isInitialized=" + contract.isInitialized());
|
||||
|
||||
var latestBlock = eth.blockNumber;
|
||||
var i;
|
||||
|
||||
// var newSaleEvents = contract.NewSale({}, { fromBlock: presaleFromBlock, toBlock: latestBlock });
|
||||
// i = 0;
|
||||
// newSaleEvents.watch(function (error, result) {
|
||||
// console.log("RESULT: NewSale " + i++ + " #" + result.blockNumber + ": " + JSON.stringify(result.args));
|
||||
// });
|
||||
// newSaleEvents.stopWatching();
|
||||
//
|
||||
// var initializedEvents = contract.Initialized({}, { fromBlock: presaleFromBlock, toBlock: latestBlock });
|
||||
// i = 0;
|
||||
// initializedEvents.watch(function (error, result) {
|
||||
// console.log("RESULT: Initialized " + i++ + " #" + result.blockNumber + ": " + JSON.stringify(result.args));
|
||||
// });
|
||||
// initializedEvents.stopWatching();
|
||||
//
|
||||
// var finalizedEvents = contract.Finalized({}, { fromBlock: presaleFromBlock, toBlock: latestBlock });
|
||||
// i = 0;
|
||||
// finalizedEvents.watch(function (error, result) {
|
||||
// console.log("RESULT: Finalized " + i++ + " #" + result.blockNumber + ": " + JSON.stringify(result.args));
|
||||
// });
|
||||
// finalizedEvents.stopWatching();
|
||||
|
||||
presaleFromBlock = parseInt(latestBlock) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
////-----------------------------------------------------------------------------
|
||||
//// PlaceHolder Contract
|
||||
////-----------------------------------------------------------------------------
|
||||
//var placeHolderContractAddress = null;
|
||||
//var placeHolderContractAbi = null;
|
||||
//
|
||||
//function addPlaceHolderContractAddressAndAbi(address, abi) {
|
||||
// placeHolderContractAddress = address;
|
||||
// placeHolderContractAbi = abi;
|
||||
//}
|
||||
//
|
||||
//var placeHolderFromBlock = 0;
|
||||
//function printPlaceHolderContractDetails() {
|
||||
// console.log("RESULT: placeHolderContractAddress=" + placeHolderContractAddress);
|
||||
// // console.log("RESULT: placeHolderContractAbi=" + JSON.stringify(placeHolderContractAbi));
|
||||
// if (placeHolderContractAddress != null && placeHolderContractAbi != null) {
|
||||
// var contract = eth.contract(placeHolderContractAbi).at(placeHolderContractAddress);
|
||||
// console.log("RESULT: placeHolder.controller=" + contract.controller());
|
||||
// console.log("RESULT: placeHolder.transferable=" + contract.transferable());
|
||||
// var latestBlock = eth.blockNumber;
|
||||
// var i;
|
||||
//
|
||||
// var claimedTokensEvents = contract.ClaimedTokens({}, { fromBlock: placeHolderFromBlock, toBlock: latestBlock });
|
||||
// i = 0;
|
||||
// claimedTokensEvents.watch(function (error, result) {
|
||||
// console.log("RESULT: ClaimedTokens " + i++ + " #" + result.blockNumber + ": " + JSON.stringify(result.args));
|
||||
// });
|
||||
// claimedTokensEvents.stopWatching();
|
||||
//
|
||||
// placeHolderFromBlock = parseInt(latestBlock) + 1;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//
|
||||
////-----------------------------------------------------------------------------
|
||||
//// Token Contract
|
||||
////-----------------------------------------------------------------------------
|
||||
//var tokenFromBlock = 0;
|
||||
//function printTokenContractDetails() {
|
||||
// console.log("RESULT: tokenContractAddress=" + tokenContractAddress);
|
||||
// // console.log("RESULT: tokenContractAbi=" + JSON.stringify(tokenContractAbi));
|
||||
// if (tokenContractAddress != null && tokenContractAbi != null) {
|
||||
// var contract = eth.contract(tokenContractAbi).at(tokenContractAddress);
|
||||
// var decimals = contract.decimals();
|
||||
// console.log("RESULT: token.controller=" + contract.controller());
|
||||
// console.log("RESULT: token.symbol=" + contract.symbol());
|
||||
// console.log("RESULT: token.name=" + contract.name());
|
||||
// console.log("RESULT: token.decimals=" + decimals);
|
||||
// console.log("RESULT: token.totalSupply=" + contract.totalSupply().shift(-decimals));
|
||||
// console.log("RESULT: token.transfersEnabled=" + contract.transfersEnabled());
|
||||
// // console.log("RESULT: token.totalSupplyHistory=" + contract.totalSupplyHistory());
|
||||
//
|
||||
// var latestBlock = eth.blockNumber;
|
||||
// var i;
|
||||
//
|
||||
// /*
|
||||
// var totalSupplyHistoryLength = contract.totalSupplyHistoryLength();
|
||||
// for (i = 0; i < totalSupplyHistoryLength; i++) {
|
||||
// var e = contract.totalSupplyHistory(i);
|
||||
// console.log("RESULT: totalSupplyHistory(" + i + ") = " + e[0] + " => " + e[1].shift(-decimals));
|
||||
// }
|
||||
//
|
||||
// var balanceHistoryLength = contract.balanceHistoryLength(account3);
|
||||
// for (i = 0; i < balanceHistoryLength; i++) {
|
||||
// var e = contract.balanceHistory(account3, i);
|
||||
// console.log("RESULT: balanceHistory(" + account3 + ", " + i + ") = " + e[0] + " => " + e[1].shift(-decimals));
|
||||
// }
|
||||
//
|
||||
// var balanceHistoryLength = contract.balanceHistoryLength(account4);
|
||||
// for (i = 0; i < balanceHistoryLength; i++) {
|
||||
// var e = contract.balanceHistory(account4, i);
|
||||
// console.log("RESULT: balanceHistory(" + account4 + ", " + i + ") = " + e[0] + " => " + e[1].shift(-decimals));
|
||||
// }
|
||||
//
|
||||
// var balanceHistoryLength = contract.balanceHistoryLength(account5);
|
||||
// for (i = 0; i < balanceHistoryLength; i++) {
|
||||
// var e = contract.balanceHistory(account5, i);
|
||||
// console.log("RESULT: balanceHistory(" + account5 + ", " + i + ") = " + e[0] + " => " + e[1].shift(-decimals));
|
||||
// }
|
||||
// */
|
||||
//
|
||||
// var approvalEvents = contract.Approval({}, { fromBlock: tokenFromBlock, toBlock: latestBlock });
|
||||
// i = 0;
|
||||
// approvalEvents.watch(function (error, result) {
|
||||
// console.log("RESULT: Approval " + i++ + " #" + result.blockNumber + " _owner=" + result.args._owner + " _spender=" + result.args._spender + " _amount=" +
|
||||
// result.args._amount.shift(-decimals));
|
||||
// });
|
||||
// approvalEvents.stopWatching();
|
||||
//
|
||||
// var transferEvents = contract.Transfer({}, { fromBlock: tokenFromBlock, toBlock: latestBlock });
|
||||
// i = 0;
|
||||
// transferEvents.watch(function (error, result) {
|
||||
// console.log("RESULT: Transfer " + i++ + " #" + result.blockNumber + ": _from=" + result.args._from + " _to=" + result.args._to +
|
||||
// " _amount=" + result.args._amount.shift(-decimals));
|
||||
// });
|
||||
// transferEvents.stopWatching();
|
||||
//
|
||||
// tokenFromBlock = parseInt(latestBlock) + 1;
|
||||
// }
|
||||
//}
|
|
@ -0,0 +1,488 @@
|
|||
MODE = 'test'
|
||||
GETHATTACHPOINT = 'ipc:./testchain/geth.ipc'
|
||||
PASSWORD = 'testtest'
|
||||
CONTRACTSDIR = '../../flat'
|
||||
SALESOL = 'PresaleOracles_flat.sol'
|
||||
SALEJS = 'PresaleOracles_flat.js'
|
||||
DEPLOYMENTDATA = 'deploymentData.txt'
|
||||
INCLUDEJS = './include.js'
|
||||
TEST1OUTPUT = 'test1output.txt'
|
||||
TEST1RESULTS = 'test1results.txt'
|
||||
CURRENTTIME = '1510716129' 'Wed 15 Nov 2017 03:22:09 UTC'
|
||||
STARTTIME = '1510716204' 'Wed 15 Nov 2017 03:23:24 UTC'
|
||||
ENDTIME = '1510716309' 'Wed 15 Nov 2017 03:25:09 UTC'
|
||||
--- Differences ../../flat/PresaleOracles_flat.sol PresaleOracles_flat.sol ---
|
||||
|
||||
solc, the solidity compiler commandline interface
|
||||
Version: 0.4.18+commit.9cf6e910.Darwin.appleclang
|
||||
Welcome to the Geth JavaScript console!
|
||||
|
||||
instance: Geth/v1.7.2-stable-1db4ecdc/darwin-amd64/go1.9
|
||||
coinbase: 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e
|
||||
at block: 2128 (Wed, 15 Nov 2017 14:21:46 AEDT)
|
||||
datadir: /Users/bok/Projects/OraclesPresaleContractAudit/audit/test/testchain
|
||||
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
|
||||
|
||||
>
|
||||
true
|
||||
>
|
||||
true
|
||||
>
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
>
|
||||
undefined
|
||||
>
|
||||
RESULT: # Account EtherBalanceChange Token Name
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 9.000000000000000000 0.000000000000000000 Account #0 - Miner
|
||||
RESULT: 1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 0.000000000000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
RESULT: 2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
RESULT: 3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
RESULT: 4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
RESULT: 5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
RESULT: 6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
RESULT: 7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0.000000000000000000 Total Token Balances
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
RESULT: Deploy Presale Contract
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
...
|
||||
......
|
||||
.........
|
||||
............
|
||||
............
|
||||
............
|
||||
............
|
||||
............
|
||||
............
|
||||
............
|
||||
.........
|
||||
......
|
||||
...
|
||||
undefined
|
||||
>
|
||||
...
|
||||
undefined
|
||||
>
|
||||
RESULT: saleAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 status=0x1 Success gas=4000000 gasUsed=757113 costETH=0.013628034 costUSD=2.799906841368 @ ETH/USD=205.452 gasPrice=18 gwei block=2133 txIx=0 txId=0x063fb179de23d9230534d59fd7f0a47631c7df13a7571f84ebba8eb80b2cac01 @ 1510716144 Wed, 15 Nov 2017 03:22:24 UTC
|
||||
RESULT: # Account EtherBalanceChange Token Name
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 15.013628034000000000 0.000000000000000000 Account #0 - Miner
|
||||
RESULT: 1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.013628034000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
RESULT: 2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
RESULT: 3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
RESULT: 4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
RESULT: 5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
RESULT: 6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
RESULT: 7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
RESULT: 8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0.000000000000000000 Total Token Balances
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
RESULT: PASS Deploy Presale Contract
|
||||
1
|
||||
>
|
||||
RESULT: presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
RESULT: presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
RESULT: presale.startTime=0 Thu, 01 Jan 1970 00:00:00 UTC
|
||||
RESULT: presale.endTime=0 Thu, 01 Jan 1970 00:00:00 UTC
|
||||
RESULT: presale.cap=0 0
|
||||
RESULT: presale.rate=0
|
||||
RESULT: presale.totalInvestedInWei=0 0
|
||||
RESULT: presale.minimumContribution=0 0
|
||||
RESULT: presale.investorsLength=0
|
||||
RESULT: presale.vault=0x0000000000000000000000000000000000000000
|
||||
RESULT: presale.isInitialized=false
|
||||
undefined
|
||||
>
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
>
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
RESULT: Initialise Contribution
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
...
|
||||
undefined
|
||||
>
|
||||
RESULT: initialiseSaleTx status=0x1 Success gas=2000000 gasUsed=125772 costETH=0.002263896 costUSD=0.465121960992 @ ETH/USD=205.452 gasPrice=18 gwei block=2135 txIx=0 txId=0x2ec5170349e14c56ec7e71fc30b3b99deae5cb898d1ed13f5cf4bde82c083bc4 @ 1510716150 Wed, 15 Nov 2017 03:22:30 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: # Account EtherBalanceChange Token Name
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 21.015891930000000000 0.000000000000000000 Account #0 - Miner
|
||||
RESULT: 1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.015891930000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
RESULT: 2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
RESULT: 3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
RESULT: 4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
RESULT: 5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
RESULT: 6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
RESULT: 7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
RESULT: 8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0.000000000000000000 Total Token Balances
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
RESULT: PASS Initialise Contribution
|
||||
1
|
||||
>
|
||||
RESULT: presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
RESULT: presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
RESULT: presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
RESULT: presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
RESULT: presale.cap=1e+22 10000
|
||||
RESULT: presale.rate=0
|
||||
RESULT: presale.totalInvestedInWei=0 0
|
||||
RESULT: presale.minimumContribution=100000000000000000 0.1
|
||||
RESULT: presale.investorsLength=0
|
||||
RESULT: presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
RESULT: presale.isInitialized=true
|
||||
undefined
|
||||
>
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
>
|
||||
>
|
||||
RESULT: Waiting until 'startTime' at 1510716204+0s =Wed, 15 Nov 2017 14:23:25 AEDT now=Wed, 15 Nov 2017 14:22:32 AEDT
|
||||
RESULT: Waited until 'startTime' at at 1510716204+0s =Wed, 15 Nov 2017 14:23:25 AEDT now=Wed, 15 Nov 2017 14:23:25 AEDT
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
>
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
RESULT: Whitelist
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
...
|
||||
undefined
|
||||
>
|
||||
RESULT: whitelist_1Tx status=0x1 Success gas=2000000 gasUsed=63730 costETH=0.00114714 costUSD=0.23568220728 @ ETH/USD=205.452 gasPrice=18 gwei block=2152 txIx=0 txId=0xef451151539135a7c5d460664b8caf90b632a4c9f9817d5b23a20ee61aebb365 @ 1510716208 Wed, 15 Nov 2017 03:23:28 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: whitelist_2Tx status=0x1 Success gas=2000000 gasUsed=103108 costETH=0.001855944 costUSD=0.381307406688 @ ETH/USD=205.452 gasPrice=18 gwei block=2152 txIx=1 txId=0x993fa0ff6eff5d53ecd4163246b12855ef4e61b0de971e242805d90b305d76ca @ 1510716208 Wed, 15 Nov 2017 03:23:28 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: # Account EtherBalanceChange Token Name
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 72.018895014000000000 0.000000000000000000 Account #0 - Miner
|
||||
RESULT: 1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.018895014000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
RESULT: 2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
RESULT: 3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
RESULT: 4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
RESULT: 5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
RESULT: 6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
RESULT: 7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
RESULT: 8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0.000000000000000000 Total Token Balances
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
RESULT: PASS Whitelist - whitelist(account3)
|
||||
1
|
||||
>
|
||||
RESULT: PASS Whitelist - whitelist([account4, account5, account7])
|
||||
1
|
||||
>
|
||||
RESULT: presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
RESULT: presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
RESULT: presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
RESULT: presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
RESULT: presale.cap=1e+22 10000
|
||||
RESULT: presale.rate=0
|
||||
RESULT: presale.totalInvestedInWei=0 0
|
||||
RESULT: presale.minimumContribution=100000000000000000 0.1
|
||||
RESULT: presale.investorsLength=4
|
||||
RESULT: presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
RESULT: presale.isInitialized=true
|
||||
undefined
|
||||
>
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
>
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
RESULT: Whitelist
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
...
|
||||
undefined
|
||||
>
|
||||
RESULT: blacklist_1Tx status=0x1 Success gas=2000000 gasUsed=18918 costETH=0.000340524 costUSD=0.069961336848 @ ETH/USD=205.452 gasPrice=18 gwei block=2154 txIx=0 txId=0x8cc0e9a1106853db415c2a375259d86715e4792a39a90ea2dc0aca2d6092f278 @ 1510716218 Wed, 15 Nov 2017 03:23:38 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: # Account EtherBalanceChange Token Name
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 78.019235538000000000 0.000000000000000000 Account #0 - Miner
|
||||
RESULT: 1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.019235538000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
RESULT: 2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
RESULT: 3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
RESULT: 4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
RESULT: 5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
RESULT: 6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
RESULT: 7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
RESULT: 8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0.000000000000000000 Total Token Balances
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
RESULT: PASS Whitelist - blacklist(account4)
|
||||
1
|
||||
>
|
||||
RESULT: presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
RESULT: presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
RESULT: presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
RESULT: presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
RESULT: presale.cap=1e+22 10000
|
||||
RESULT: presale.rate=0
|
||||
RESULT: presale.totalInvestedInWei=0 0
|
||||
RESULT: presale.minimumContribution=100000000000000000 0.1
|
||||
RESULT: presale.investorsLength=3
|
||||
RESULT: presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
RESULT: presale.isInitialized=true
|
||||
undefined
|
||||
>
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
>
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
RESULT: Send Contribution
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
...
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
...
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
...
|
||||
undefined
|
||||
>
|
||||
RESULT: sendContribution1_1Tx status=0x1 Success gas=400000 gasUsed=69426 costETH=0.001249668 costUSD=0.256746789936 @ ETH/USD=205.452 gasPrice=18 gwei block=2156 txIx=0 txId=0x49f88ad156306136ef25ffb3124e6c78fd8afd33e0d087269780353fc79b09fe @ 1510716233 Wed, 15 Nov 2017 03:23:53 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: sendContribution1_2Tx status=0x0 Failure gas=400000 gasUsed=21242 costETH=0.000382356 costUSD=0.078555804912 @ ETH/USD=205.452 gasPrice=18 gwei block=2156 txIx=3 txId=0x90e0839e8b92d86e4dd85b27113f9d779e9254bddcf533336be60948e9649314 @ 1510716233 Wed, 15 Nov 2017 03:23:53 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: sendContribution1_3Tx status=0x1 Success gas=400000 gasUsed=54426 costETH=0.000979668 costUSD=0.201274749936 @ ETH/USD=205.452 gasPrice=18 gwei block=2156 txIx=2 txId=0x04ca56fc7fbc1318280a02b345cd582975ab17447cbc24881d7a561d08c90309 @ 1510716233 Wed, 15 Nov 2017 03:23:53 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: sendContribution1_4Tx status=0x0 Failure gas=400000 gasUsed=21242 costETH=0.000382356 costUSD=0.078555804912 @ ETH/USD=205.452 gasPrice=18 gwei block=2156 txIx=1 txId=0xbe9b0968e3eab1b6f6512bb6038ee787487906789527ed56e86a8d7db4d0b492 @ 1510716233 Wed, 15 Nov 2017 03:23:53 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: sendContribution1_5Tx status=0x0 Failure gas=400000 gasUsed=21897 costETH=0.000394146 costUSD=0.080978083992 @ ETH/USD=205.452 gasPrice=18 gwei block=2158 txIx=0 txId=0x3d14b2a96d3aa595a53492978e3cb8184e1a99b6d1f75888a88cd7a61b074012 @ 1510716235 Wed, 15 Nov 2017 03:23:55 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: sendContribution1_6Tx status=0x1 Success gas=400000 gasUsed=54426 costETH=0.000979668 costUSD=0.201274749936 @ ETH/USD=205.452 gasPrice=18 gwei block=2160 txIx=0 txId=0xb3f169a86a02a724594ba063586974359c7854036b5c670b81de30620d4bf83b @ 1510716238 Wed, 15 Nov 2017 03:23:58 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: # Account EtherBalanceChange Token Name
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 96.023603400000000000 0.000000000000000000 Account #0 - Miner
|
||||
RESULT: 1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.019235538000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
RESULT: 2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 9999.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
RESULT: 3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 -1000.001249668000000000 0.000000000000000000 Account #3
|
||||
RESULT: 4 0xa44a08d3f6933c69212114bb66e2df1813651844 -0.000382356000000000 0.000000000000000000 Account #4
|
||||
RESULT: 5 0xa55a151eb00fded1634d27d1127b4be4627079ea -1000.000979668000000000 0.000000000000000000 Account #5
|
||||
RESULT: 6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 -0.000382356000000000 0.000000000000000000 Account #6
|
||||
RESULT: 7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec -7999.001373814000000000 0.000000000000000000 Account #7
|
||||
RESULT: 8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0.000000000000000000 Total Token Balances
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
RESULT: PASS Send Contribution ac3 1000 ETH
|
||||
1
|
||||
>
|
||||
RESULT: PASS Send Contribution ac4 1000 ETH - Expecting failure, not whitelisted
|
||||
1
|
||||
>
|
||||
RESULT: PASS Send Contribution ac5 1000 ETH
|
||||
1
|
||||
>
|
||||
RESULT: PASS Send Contribution ac6 1000 ETH - Expecting failure, not whitelisted
|
||||
1
|
||||
>
|
||||
RESULT: PASS Send Contribution ac7 8000.00000000001 ETH - Expecting failure, amount will blow the cap
|
||||
1
|
||||
>
|
||||
RESULT: PASS Send Contribution ac7 7999 ETH
|
||||
1
|
||||
>
|
||||
RESULT: presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
RESULT: presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
RESULT: presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
RESULT: presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
RESULT: presale.cap=1e+22 10000
|
||||
RESULT: presale.rate=0
|
||||
RESULT: presale.totalInvestedInWei=9.999e+21 9999
|
||||
RESULT: presale.minimumContribution=100000000000000000 0.1
|
||||
RESULT: presale.investorsLength=3
|
||||
RESULT: presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
RESULT: presale.isInitialized=true
|
||||
undefined
|
||||
>
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
>
|
||||
>
|
||||
RESULT: Waiting until 'endTime' at 1510716309+0s =Wed, 15 Nov 2017 14:25:10 AEDT now=Wed, 15 Nov 2017 14:24:01 AEDT
|
||||
RESULT: Waited until 'endTime' at at 1510716309+0s =Wed, 15 Nov 2017 14:25:10 AEDT now=Wed, 15 Nov 2017 14:25:10 AEDT
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
>
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
RESULT: Send Contribution After End
|
||||
undefined
|
||||
>
|
||||
undefined
|
||||
>
|
||||
...
|
||||
undefined
|
||||
>
|
||||
RESULT: sendContribution2_1Tx status=0x0 Failure gas=400000 gasUsed=22233 costETH=0.000400194 costUSD=0.082220657688 @ ETH/USD=205.452 gasPrice=18 gwei block=2179 txIx=0 txId=0xa780705a34d4373217e350cc62d3d7b225ab1ef67db7e551f66416aea8858082 @ 1510716310 Wed, 15 Nov 2017 03:25:10 UTC
|
||||
undefined
|
||||
>
|
||||
RESULT: # Account EtherBalanceChange Token Name
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 153.024003594000000000 0.000000000000000000 Account #0 - Miner
|
||||
RESULT: 1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.019235538000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
RESULT: 2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 9999.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
RESULT: 3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 -1000.001649862000000000 0.000000000000000000 Account #3
|
||||
RESULT: 4 0xa44a08d3f6933c69212114bb66e2df1813651844 -0.000382356000000000 0.000000000000000000 Account #4
|
||||
RESULT: 5 0xa55a151eb00fded1634d27d1127b4be4627079ea -1000.000979668000000000 0.000000000000000000 Account #5
|
||||
RESULT: 6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 -0.000382356000000000 0.000000000000000000 Account #6
|
||||
RESULT: 7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec -7999.001373814000000000 0.000000000000000000 Account #7
|
||||
RESULT: 8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT: 0.000000000000000000 Total Token Balances
|
||||
RESULT: -- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
RESULT: PASS Send Contribution After End ac3 1 ETH - Expecting failure, after end
|
||||
1
|
||||
>
|
||||
RESULT: presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
RESULT: presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
RESULT: presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
RESULT: presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
RESULT: presale.cap=1e+22 10000
|
||||
RESULT: presale.rate=0
|
||||
RESULT: presale.totalInvestedInWei=9.999e+21 9999
|
||||
RESULT: presale.minimumContribution=100000000000000000 0.1
|
||||
RESULT: presale.investorsLength=3
|
||||
RESULT: presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
RESULT: presale.isInitialized=true
|
||||
undefined
|
||||
>
|
||||
RESULT:
|
||||
undefined
|
||||
>
|
||||
>
|
||||
>
|
|
@ -0,0 +1,213 @@
|
|||
# Account EtherBalanceChange Token Name
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 9.000000000000000000 0.000000000000000000 Account #0 - Miner
|
||||
1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 0.000000000000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0.000000000000000000 Total Token Balances
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
|
||||
|
||||
Deploy Presale Contract
|
||||
saleAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 status=0x1 Success gas=4000000 gasUsed=757113 costETH=0.013628034 costUSD=2.799906841368 @ ETH/USD=205.452 gasPrice=18 gwei block=2133 txIx=0 txId=0x063fb179de23d9230534d59fd7f0a47631c7df13a7571f84ebba8eb80b2cac01 @ 1510716144 Wed, 15 Nov 2017 03:22:24 UTC
|
||||
# Account EtherBalanceChange Token Name
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 15.013628034000000000 0.000000000000000000 Account #0 - Miner
|
||||
1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.013628034000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0.000000000000000000 Total Token Balances
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
|
||||
PASS Deploy Presale Contract
|
||||
presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
presale.startTime=0 Thu, 01 Jan 1970 00:00:00 UTC
|
||||
presale.endTime=0 Thu, 01 Jan 1970 00:00:00 UTC
|
||||
presale.cap=0 0
|
||||
presale.rate=0
|
||||
presale.totalInvestedInWei=0 0
|
||||
presale.minimumContribution=0 0
|
||||
presale.investorsLength=0
|
||||
presale.vault=0x0000000000000000000000000000000000000000
|
||||
presale.isInitialized=false
|
||||
|
||||
Initialise Contribution
|
||||
initialiseSaleTx status=0x1 Success gas=2000000 gasUsed=125772 costETH=0.002263896 costUSD=0.465121960992 @ ETH/USD=205.452 gasPrice=18 gwei block=2135 txIx=0 txId=0x2ec5170349e14c56ec7e71fc30b3b99deae5cb898d1ed13f5cf4bde82c083bc4 @ 1510716150 Wed, 15 Nov 2017 03:22:30 UTC
|
||||
# Account EtherBalanceChange Token Name
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 21.015891930000000000 0.000000000000000000 Account #0 - Miner
|
||||
1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.015891930000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0.000000000000000000 Total Token Balances
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
|
||||
PASS Initialise Contribution
|
||||
presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
presale.cap=1e+22 10000
|
||||
presale.rate=0
|
||||
presale.totalInvestedInWei=0 0
|
||||
presale.minimumContribution=100000000000000000 0.1
|
||||
presale.investorsLength=0
|
||||
presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
presale.isInitialized=true
|
||||
|
||||
Waiting until 'startTime' at 1510716204+0s =Wed, 15 Nov 2017 14:23:25 AEDT now=Wed, 15 Nov 2017 14:22:32 AEDT
|
||||
Waited until 'startTime' at at 1510716204+0s =Wed, 15 Nov 2017 14:23:25 AEDT now=Wed, 15 Nov 2017 14:23:25 AEDT
|
||||
|
||||
Whitelist
|
||||
whitelist_1Tx status=0x1 Success gas=2000000 gasUsed=63730 costETH=0.00114714 costUSD=0.23568220728 @ ETH/USD=205.452 gasPrice=18 gwei block=2152 txIx=0 txId=0xef451151539135a7c5d460664b8caf90b632a4c9f9817d5b23a20ee61aebb365 @ 1510716208 Wed, 15 Nov 2017 03:23:28 UTC
|
||||
whitelist_2Tx status=0x1 Success gas=2000000 gasUsed=103108 costETH=0.001855944 costUSD=0.381307406688 @ ETH/USD=205.452 gasPrice=18 gwei block=2152 txIx=1 txId=0x993fa0ff6eff5d53ecd4163246b12855ef4e61b0de971e242805d90b305d76ca @ 1510716208 Wed, 15 Nov 2017 03:23:28 UTC
|
||||
# Account EtherBalanceChange Token Name
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 72.018895014000000000 0.000000000000000000 Account #0 - Miner
|
||||
1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.018895014000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0.000000000000000000 Total Token Balances
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
|
||||
PASS Whitelist - whitelist(account3)
|
||||
PASS Whitelist - whitelist([account4, account5, account7])
|
||||
presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
presale.cap=1e+22 10000
|
||||
presale.rate=0
|
||||
presale.totalInvestedInWei=0 0
|
||||
presale.minimumContribution=100000000000000000 0.1
|
||||
presale.investorsLength=4
|
||||
presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
presale.isInitialized=true
|
||||
|
||||
Whitelist
|
||||
blacklist_1Tx status=0x1 Success gas=2000000 gasUsed=18918 costETH=0.000340524 costUSD=0.069961336848 @ ETH/USD=205.452 gasPrice=18 gwei block=2154 txIx=0 txId=0x8cc0e9a1106853db415c2a375259d86715e4792a39a90ea2dc0aca2d6092f278 @ 1510716218 Wed, 15 Nov 2017 03:23:38 UTC
|
||||
# Account EtherBalanceChange Token Name
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 78.019235538000000000 0.000000000000000000 Account #0 - Miner
|
||||
1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.019235538000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 0.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 0.000000000000000000 0.000000000000000000 Account #3
|
||||
4 0xa44a08d3f6933c69212114bb66e2df1813651844 0.000000000000000000 0.000000000000000000 Account #4
|
||||
5 0xa55a151eb00fded1634d27d1127b4be4627079ea 0.000000000000000000 0.000000000000000000 Account #5
|
||||
6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 0.000000000000000000 0.000000000000000000 Account #6
|
||||
7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec 0.000000000000000000 0.000000000000000000 Account #7
|
||||
8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0.000000000000000000 Total Token Balances
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
|
||||
PASS Whitelist - blacklist(account4)
|
||||
presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
presale.cap=1e+22 10000
|
||||
presale.rate=0
|
||||
presale.totalInvestedInWei=0 0
|
||||
presale.minimumContribution=100000000000000000 0.1
|
||||
presale.investorsLength=3
|
||||
presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
presale.isInitialized=true
|
||||
|
||||
Send Contribution
|
||||
sendContribution1_1Tx status=0x1 Success gas=400000 gasUsed=69426 costETH=0.001249668 costUSD=0.256746789936 @ ETH/USD=205.452 gasPrice=18 gwei block=2156 txIx=0 txId=0x49f88ad156306136ef25ffb3124e6c78fd8afd33e0d087269780353fc79b09fe @ 1510716233 Wed, 15 Nov 2017 03:23:53 UTC
|
||||
sendContribution1_2Tx status=0x0 Failure gas=400000 gasUsed=21242 costETH=0.000382356 costUSD=0.078555804912 @ ETH/USD=205.452 gasPrice=18 gwei block=2156 txIx=3 txId=0x90e0839e8b92d86e4dd85b27113f9d779e9254bddcf533336be60948e9649314 @ 1510716233 Wed, 15 Nov 2017 03:23:53 UTC
|
||||
sendContribution1_3Tx status=0x1 Success gas=400000 gasUsed=54426 costETH=0.000979668 costUSD=0.201274749936 @ ETH/USD=205.452 gasPrice=18 gwei block=2156 txIx=2 txId=0x04ca56fc7fbc1318280a02b345cd582975ab17447cbc24881d7a561d08c90309 @ 1510716233 Wed, 15 Nov 2017 03:23:53 UTC
|
||||
sendContribution1_4Tx status=0x0 Failure gas=400000 gasUsed=21242 costETH=0.000382356 costUSD=0.078555804912 @ ETH/USD=205.452 gasPrice=18 gwei block=2156 txIx=1 txId=0xbe9b0968e3eab1b6f6512bb6038ee787487906789527ed56e86a8d7db4d0b492 @ 1510716233 Wed, 15 Nov 2017 03:23:53 UTC
|
||||
sendContribution1_5Tx status=0x0 Failure gas=400000 gasUsed=21897 costETH=0.000394146 costUSD=0.080978083992 @ ETH/USD=205.452 gasPrice=18 gwei block=2158 txIx=0 txId=0x3d14b2a96d3aa595a53492978e3cb8184e1a99b6d1f75888a88cd7a61b074012 @ 1510716235 Wed, 15 Nov 2017 03:23:55 UTC
|
||||
sendContribution1_6Tx status=0x1 Success gas=400000 gasUsed=54426 costETH=0.000979668 costUSD=0.201274749936 @ ETH/USD=205.452 gasPrice=18 gwei block=2160 txIx=0 txId=0xb3f169a86a02a724594ba063586974359c7854036b5c670b81de30620d4bf83b @ 1510716238 Wed, 15 Nov 2017 03:23:58 UTC
|
||||
# Account EtherBalanceChange Token Name
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 96.023603400000000000 0.000000000000000000 Account #0 - Miner
|
||||
1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.019235538000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 9999.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 -1000.001249668000000000 0.000000000000000000 Account #3
|
||||
4 0xa44a08d3f6933c69212114bb66e2df1813651844 -0.000382356000000000 0.000000000000000000 Account #4
|
||||
5 0xa55a151eb00fded1634d27d1127b4be4627079ea -1000.000979668000000000 0.000000000000000000 Account #5
|
||||
6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 -0.000382356000000000 0.000000000000000000 Account #6
|
||||
7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec -7999.001373814000000000 0.000000000000000000 Account #7
|
||||
8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0.000000000000000000 Total Token Balances
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
|
||||
PASS Send Contribution ac3 1000 ETH
|
||||
PASS Send Contribution ac4 1000 ETH - Expecting failure, not whitelisted
|
||||
PASS Send Contribution ac5 1000 ETH
|
||||
PASS Send Contribution ac6 1000 ETH - Expecting failure, not whitelisted
|
||||
PASS Send Contribution ac7 8000.00000000001 ETH - Expecting failure, amount will blow the cap
|
||||
PASS Send Contribution ac7 7999 ETH
|
||||
presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
presale.cap=1e+22 10000
|
||||
presale.rate=0
|
||||
presale.totalInvestedInWei=9.999e+21 9999
|
||||
presale.minimumContribution=100000000000000000 0.1
|
||||
presale.investorsLength=3
|
||||
presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
presale.isInitialized=true
|
||||
|
||||
Waiting until 'endTime' at 1510716309+0s =Wed, 15 Nov 2017 14:25:10 AEDT now=Wed, 15 Nov 2017 14:24:01 AEDT
|
||||
Waited until 'endTime' at at 1510716309+0s =Wed, 15 Nov 2017 14:25:10 AEDT now=Wed, 15 Nov 2017 14:25:10 AEDT
|
||||
|
||||
Send Contribution After End
|
||||
sendContribution2_1Tx status=0x0 Failure gas=400000 gasUsed=22233 costETH=0.000400194 costUSD=0.082220657688 @ ETH/USD=205.452 gasPrice=18 gwei block=2179 txIx=0 txId=0xa780705a34d4373217e350cc62d3d7b225ab1ef67db7e551f66416aea8858082 @ 1510716310 Wed, 15 Nov 2017 03:25:10 UTC
|
||||
# Account EtherBalanceChange Token Name
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0 0xa00af22d07c87d96eeeb0ed583f8f6ac7812827e 153.024003594000000000 0.000000000000000000 Account #0 - Miner
|
||||
1 0xa11aae29840fbb5c86e6fd4cf809eba183aef433 -0.019235538000000000 0.000000000000000000 Account #1 - Contract Owner
|
||||
2 0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976 9999.000000000000000000 0.000000000000000000 Account #2 - Multisig
|
||||
3 0xa33a6c312d9ad0e0f2e95541beed0cc081621fd0 -1000.001649862000000000 0.000000000000000000 Account #3
|
||||
4 0xa44a08d3f6933c69212114bb66e2df1813651844 -0.000382356000000000 0.000000000000000000 Account #4
|
||||
5 0xa55a151eb00fded1634d27d1127b4be4627079ea -1000.000979668000000000 0.000000000000000000 Account #5
|
||||
6 0xa66a85ede0cbe03694aa9d9de0bb19c99ff55bd9 -0.000382356000000000 0.000000000000000000 Account #6
|
||||
7 0xa77a2b9d4b1c010a22a7c565dc418cef683dbcec -7999.001373814000000000 0.000000000000000000 Account #7
|
||||
8 0x27daa9fe81944d721dc95e09f54c8bd3a90a5603 0.000000000000000000 0.000000000000000000 Presale
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
0.000000000000000000 Total Token Balances
|
||||
-- ------------------------------------------ --------------------------- ------------------------------ ---------------------------
|
||||
|
||||
PASS Send Contribution After End ac3 1 ETH - Expecting failure, after end
|
||||
presaleContractAddress=0x27daa9fe81944d721dc95e09f54c8bd3a90a5603
|
||||
presale.owner=0xa11aae29840fbb5c86e6fd4cf809eba183aef433
|
||||
presale.startTime=1510716204 Wed, 15 Nov 2017 03:23:24 UTC
|
||||
presale.endTime=1510716309 Wed, 15 Nov 2017 03:25:09 UTC
|
||||
presale.cap=1e+22 10000
|
||||
presale.rate=0
|
||||
presale.totalInvestedInWei=9.999e+21 9999
|
||||
presale.minimumContribution=100000000000000000 0.1
|
||||
presale.investorsLength=3
|
||||
presale.vault=0xa22ab8a9d641ce77e06d98b7d7065d324d3d6976
|
||||
presale.isInitialized=true
|
||||
|
Loading…
Reference in New Issue