Go to file
BokkyPooBah 3df6277388 Mainnet addresses 2017-11-16 14:10:54 +11:00
audit Mainnet addresses 2017-11-16 14:10:54 +11:00
build/contracts add bokky's feedback on adding 2017-11-14 22:19:30 -08:00
contracts add bokky's feedback on adding 2017-11-14 22:19:30 -08:00
flat add bokky's feedback on adding 2017-11-14 22:19:30 -08:00
migrations init 2017-11-09 18:16:40 -08:00
mochawesome-report fix auto-deploy 2017-11-09 20:52:39 -08:00
scripts update scripts to notify how many expected investors should be 2017-11-12 21:37:06 -08:00
test add whitelist 2017-11-11 19:36:41 -08:00
.ethgas.js fix auto-deploy 2017-11-09 20:52:39 -08:00
.gitignore Code review 2017-11-12 22:24:05 +11:00
.python-version add travis 2017-11-09 18:22:19 -08:00
.solcover.js fix solcoverage 2017-11-09 20:47:23 -08:00
.soliumignore add travis 2017-11-09 18:22:19 -08:00
.travis.yml fix auto-deploy 2017-11-09 21:04:04 -08:00
README.md change Ownable to Claimable from bokky's audit 2017-11-12 21:32:36 -08:00
package-lock.json fix auto-deploy 2017-11-09 20:52:39 -08:00
package.json fix auto-deploy 2017-11-09 20:52:39 -08:00
truffle-config.js init 2017-11-09 18:16:40 -08:00
truffle.js add coverage network to truffle.js 2017-11-09 20:41:25 -08:00

README.md

Oracles Presale Contract

Build Status Coverage Status

Full Test Report Presale contract that records investor's balances and sends ether to presale owner. It allows to set minimum Contrubution amount, start Date, end Date.

To use:

  1. Flat contracts/PresaleOracles.sol by using solidity-flattener
solidity_flattener --solc-paths=zeppelin-solidity=$(pwd)/node_modules/zeppelin-solidity/ contracts/PresaleOracles.sol --out flat/PresaleOracles_flat.sol
  1. Deploy flat file

  2. Call initialize with following params:

    -startTime in unix format

    -endTime in unix format

    -cap in wei format

    -minimumContribution in wei format

    -vault (eth address where funds will be collected)

Example:

"1510291574","1610291574","100000000000000000000","100000000000000000","0x0039f22efb07a647557c7c5d17854cfd6d489ef3"
startTime: `Friday, November 10, 2017 5:26:14 AM `
endTime: `Sunday, January 10, 2021 3:12:54 PM `
cap: `100 eth `
minimum: `0.1 eth `
vault: `0x0039f22efb07a647557c7c5d17854cfd6d489ef3`
  1. Whitelist investors by calling whitelistInvestors with an array ['0x0039f22efb07a647557c7c5d17854cfd6d489ef3']
  2. Let whitelisted investors send money to contract's address OR to send to buy method (0xa6f2ae3a)

How to whitelist a lot of addresses in batch

  1. cd scripts
  2. npm install
  3. open .env file and modify settings:
PRESALE_ADDRESS=0x6F3f79941f89E03D4aF9bDb8BE0623DC24F2bef0
UNLOCKED_ADDRESS=0x0039f22efb07a647557c7c5d17854cfd6d489ef3
RPC_PORT=8549
GAS_PRICE=0.7
  1. run parity with unlocked account from which the deployment will happen. It has to match with your .env UNLOCKED_ADDRESS:
parity --jsonrpc-port 8549 --chain kovan --unlock 0x0039F22efB07A647557C7C5d17854CFD6D489eF3 --password $HOME/FILE_PATH_TO_YOUR_PASSWORD_FILE
  1. Copy list of addresses into scripts/ARRAY_OF_ADDRESSES.json
  2. run node whitelist.js

The script will show you how many total transactions will be generated

Caution:

If you see this error:

- Unhandled rejection Error: Transaction was not mined within 50 blocks, please make sure your transaction was properly send. Be aware that it might still be mined!

it's totally ok because the transaction is still in the queue and hasn't been mined yet.

Test result and gas usage


  Contract: Presale
    ✓ constructor should set owner
    ✓ can not buy if not initialized (21411 gas)
    #initilize
      ✓ rejects if not sent by owner (25424 gas)
      ✓ sets values (131614 gas)
      ✓ cannot initialize twice (157350 gas)
      ✓ startTime cannot be 0 (25168 gas)
      ✓ endTime cannot be 0 (25232 gas)
      ✓ endTime cannot be less than startTime (25424 gas)
      ✓ cap cannot be 0 (24976 gas)
      ✓ vault cannot be 0x0 (24144 gas)
      ✓ minimumContribution cannot be 0 (24976 gas)
    #buy
      ✓ cannot buy if not whitelisted (21411 gas)
      ✓ cannot buy if not value is 0 (63333 gas)
      ✓ cannot buy if not value is less than minimum (63333 gas)
      ✓ can not buy if time is not within startTime&endTime (111666 gas)
      ✓ can not buy more than cap (63333 gas)
      ✓ happy path (244544 gas)
    whitelisting capabilities
      #whitelistInvestor
        ✓ cannot by called by non-owner (23450 gas)
        ✓ whitelists an investor (64399 gas)
      #whitelistInvestors
        ✓ cannot by called by non-owner (23666 gas)
        ✓ whitelists investors (119844 gas)
      #blacklistInvestor
        ✓ cannot by called by non-owner (23582 gas)
        ✓ blacklist an investors (139579 gas)

·------------------------------------------------------------------------|-----------------------------------·
│                                  Gas                                   ·  Block limit: 17592186044415 gas  │
··········································|······························|····································
│  Methods                                ·          1 gwei/gas          ·          307.55 usd/eth           │
···················|······················|·········|··········|·········|················|···················
│  Contract        ·  Method              ·  Min    ·  Max     ·  Avg    ·  # calls       ·  usd (avg)       │
···················|······················|·········|··········|·········|················|···················
│  PresaleOracles  ·  blacklistInvestor   ·  19735  ·   23582  ·  21659  ·             2  ·            0.01  │
···················|······················|·········|··········|·········|················|···················
│  PresaleOracles  ·  buy                 ·      -  ·       -  ·      -  ·             0  ·               -  │
···················|······················|·········|··········|·········|················|···················
│  PresaleOracles  ·  claimTokens         ·      -  ·       -  ·      -  ·             0  ·               -  │
···················|······················|·········|··········|·········|················|···················
│  PresaleOracles  ·  initialize          ·  24144  ·  131614  ·  46431  ·            10  ·            0.01  │
···················|······················|·········|··········|·········|················|···················
│  PresaleOracles  ·  Presale             ·      -  ·       -  ·      -  ·             0  ·               -  │
···················|······················|·········|··········|·········|················|···················
│  PresaleOracles  ·  transferOwnership   ·      -  ·       -  ·      -  ·             0  ·               -  │
···················|······················|·········|··········|·········|················|···················
│  PresaleOracles  ·  whitelistInvestor   ·  23450  ·   64399  ·  50749  ·             3  ·            0.02  │
···················|······················|·········|··········|·········|················|···················
│  PresaleOracles  ·  whitelistInvestors  ·  23666  ·  119844  ·  87785  ·             3  ·            0.03  │
·------------------|----------------------|---------|----------|---------|----------------|------------------·

  23 passing (3m)

Testnet deployment

Latest Contract deployments

With Claimable: https://kovan.etherscan.io/address/0x985dbb1c5dda22ff9d529abc1c3539bc525943f4#code

Previous deployments with old source code:

https://kovan.etherscan.io/address/0x6f3f79941f89e03d4af9bdb8be0623dc24f2bef0

Contract Deployment: https://kovan.etherscan.io/address/0xb9b49e21e77d2d89a9e4c7ef4f684ad2a4e99663#code

Called Initialize by Owner with params: "1510291574","1610291574","40000000000000000000000","1000000000000000000","0x0039f22efb07a647557c7c5d17854cfd6d489ef3" (40000 eth cap, 1 eth minimum) https://kovan.etherscan.io/tx/0xc95047493d8eead08c3bef52c54cc2ffcbd2e0ef89c1ba1a719d28bd98011c84

Called fallback with 0.5 ether: (expected error) https://kovan.etherscan.io/tx/0x6f7335f55257a56f9382d47dfeacf26e482f3c6238e829dfbc5e143d6972f0e0

Called buy(0xa6f2ae3a) with 1 ether: https://kovan.etherscan.io/tx/0xdbf29ed04dcb1a71e90f3a404739b6e3bb2c526b7788547ad9dc66e5eb64c79f Verified forwarded funds as internal transaction.

Called fallback with 0.1 ether to add to already contributer 1 eth from the same address: https://kovan.etherscan.io/tx/0x76b38e3211ad5ce465edce69faf0d69837b924e47f705ec16cf4e30fc163781e

Cap tests: Deployed contract: https://kovan.etherscan.io/address/0x9acf295c782e14ac86b87a3545e444256a3a7e56#readContract "1510291574","1610291574","500000000000000000","100000000000000000","0x0039f22efb07a647557c7c5d17854cfd6d489ef3" (cap 0.5 eth, min 0.1 eth)

Send 1 eth over cap(expected error): https://kovan.etherscan.io/tx/0xb0c4a7f64bd392fae8b174a1304d91691c1cb3acdec0d290fd3a734a725cbcaa

Send 0.5 to match cap: https://kovan.etherscan.io/tx/0x5709e2ca2b4406a89c4ecedc2f1913b7ce9cdef66670b694851650a4fe037ae2

Send additional 0.00001 to over cap(expected error): https://kovan.etherscan.io/tx/0x826229102f3a235c21173295434507a9664ad3f822edc1b9af488bdc3f01e32d

Time tests: Send after sale ends(expected error): "1507667268","1507753668","500000000000000000","100000000000000000","0x0039f22efb07a647557c7c5d17854cfd6d489ef3" https://kovan.etherscan.io/address/0xec1afb89f87cb0ac296cad6e73dbeeab5b006050#readContract

Send 0.1 ether to get rejected: https://kovan.etherscan.io/tx/0xd859be5b5b58303a4cbc61902f8927efa9de96a3739ce39a18e1f6949a154c2b