Skip to content

Instantly share code, notes, and snippets.

@sithu
Created August 16, 2017 03:41
Show Gist options
  • Save sithu/457eae966c1ad5eb466818192d6d0cfa to your computer and use it in GitHub Desktop.
Save sithu/457eae966c1ad5eb466818192d6d0cfa to your computer and use it in GitHub Desktop.
chain: ropsten
# Use automated Chrome to verify all contracts on etherscan.io
# You need to install Splinter package:
# pip install splinter
verify_on_etherscan: no
browser_driver: chrome
contracts:
# This is the address of the multisig wallet where the paymnts eventually land
team_multisig:
contract_name: MultiSigWallet
contract_file: GnosisWallet.sol
address: '0x40f381b3bd8a4693a56f18984adfc4dd3322650e'
#
# Token contract
#
# This contract represents ERC-20 token.
# It has transfer lock up functionality to prevent the token to be transferable
# until the ICO is over.
#
# We create the whole token supply upfront and no more token minting
# happens ever.
#
# Token has 18 decimals.
#
# Token supply is one billion tokens.
#
# Name and symbol are not set yet. They are set later. In
# the case of the deployment fails and we need redeploy
# we do not create unnecessary entries in token explorers.
#
token: !!omap
- contract_name: BurnableCrowdsaleToken
- contract_file: BurnableCrowdsaleToken.sol
- arguments: !!omap
- _name: MooToken
- _symbol: MOO
- _initialSupply: 100000000000000000000000000000
- _decimals: 18
- _mintable: false
- address: '0x9ebc7a13f8909a3e778ffeaf478f29e3192f7694'
- constructor_args: '0x00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000001431e0fae6d7217caa00000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084d6f6f546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d4f4f0000000000000000000000000000000000000000000000000000000000'
- libraries:
SafeMathLib: '0x0f69edbab9f65197888f49eba552b8efbe6b18a2'
#
# Pricing strategy.
#
# We use ETH tranches. People who buy in in the first
# tranches get 20% and 10% bonus tokens.
#
pricing_strategy: !!omap
- contract_name: EthTranchePricing
- contract_file: EthTranchePricing.sol
- arguments: !!omap
- _tranches:
- 0
- 2272727272727
- 45000000000000000000000
- 2380952380952
- 90000000000000000000000
- 2500000000000
- 999999999999999000000000000000000
- 0
- address: '0x38732bf1fb0477ba4cbbb5bad56af18eb5905d1f'
- constructor_args: '0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000211291a0d1700000000000000000000000000000000000000000000098774738bc8222000000000000000000000000000000000000000000000000000000000022a5bd2261800000000000000000000000000000000000000000000130ee8e717904440000000000000000000000000000000000000000000000000000000000246139ca800000000000000000000000000000000000000314dc6448d932ae0a456589c00000000000000000000000000000000000000000000000000000000000000000000'
- libraries:
SafeMathLib: '0x17cec37f169f8a34f28d4807602d7d1cfbaaa3a0'
crowdsale: !!omap
- contract_name: AllocatedCrowdsale
- contract_file: AllocatedCrowdsale.sol
- arguments: !!omap
- _token: '0x9ebc7a13f8909a3e778ffeaf478f29e3192f7694'
- _pricingStrategy: '0x38732bf1fb0477ba4cbbb5bad56af18eb5905d1f'
- _multisigWallet: '0x40f381b3bd8a4693a56f18984adfc4dd3322650e'
- _start: 1505221200
- _end: 1509022800
- _minimumFundingGoal: 15000000000000000000000
- _beneficiary: '0x40f381b3bd8a4693a56f18984adfc4dd3322650e'
- address: '0x44840f373e354badc39bd9baf1ed6594a3021be1'
- constructor_args: '0x0000000000000000000000006fda29059e37528f0b6975328c87eacb3c8bfe990000000000000000000000008ed546b4a61192286b8d9e967152911289b8445b00000000000000000000000082b7fdf7d900c1752c663432f4d252b6854b1a960000000000000000000000000000000000000000000000000000000059b7da500000000000000000000000000000000000000000000000000000000059f1dc5000000000000000000000000000000000000000000000032d26d12e980b60000000000000000000000000000082b7fdf7d900c1752c663432f4d252b6854b1a96'
- libraries:
SafeMathLib: '0x4b93484222b861d453bc818dfda2cb8d390815dd'
#
# Because deploy_address controls whole supply,
# we do not create any supply dynamically,
# we do not need a finalizer.
#
finalize_agent: !!omap
- contract_name: NullFinalizeAgent
- contract_file: NullFinalizeAgent.sol
- arguments: !!omap
- _crowdsale: '0x44840f373e354badc39bd9baf1ed6594a3021be1'
- address: '0x4607c8c17e8cbd2210be900746715a3cf7f617d1'
- constructor_args: '0x0000000000000000000000002eb2f363716f2617cd7924e748c8279be4a33f3b'
- libraries: {}
# Post-deployment actions connect contracts together.
post_actions: |2
# Allow crowdsale contract to sell its token
token.transact({"from": deploy_address}).approve(crowdsale.address, 70000000000*10**8)
# Make sure crowdsale contract and these accounts
# can transfer tokens despite transfer lock up
token.transact({"from": deploy_address}).setTransferAgent(team_multisig.address, True)
token.transact({"from": deploy_address}).setTransferAgent(crowdsale.address, True)
token.transact({"from": deploy_address}).setTransferAgent(finalize_agent.address, True)
token.transact({"from": deploy_address}).setTransferAgent(deploy_address, True)
# Do not do nothing at the end of the crowdsale
confirm_tx(crowdsale.transact({"from": deploy_address}).setFinalizeAgent(finalize_agent.address))
# Owner can release the token transfer when they fel its the time
confirm_tx(token.transact({"from": deploy_address}).setReleaseAgent(deploy_address))
# Set token upgrade master to team multisig to give the new token path
confirm_tx(token.transact({"from": deploy_address}).setUpgradeMaster(team_multisig.address))
# Allow test buys from these accounts before token sale begins.
# The latter one is a presale contract address.
# Presale contract (PreICOProxyBuyer) can move in funds
# and get tokens before the actual start time.
confirm_multiple_txs( \
crowdsale.transact({"from": deploy_address}).setEarlyParicipantWhitelist(deploy_address, True), \
crowdsale.transact({"from": deploy_address}).setEarlyParicipantWhitelist("0x6d997eDcA04282950416FA380d834f360fC36eBb", True) \
)
# We set a special price, outside ETH tranches, for a presale contract
confirm_tx(pricing_strategy.transact({"from": deploy_address}).setPreicoAddress("0x6d997eDcA04282950416FA380d834f360fC36eBb", 2083333333333))
# Sanity check
verify_actions: |
assert token.call().owner().lower() == deploy_address.lower()
assert token.call().released() == False
assert crowdsale.call().owner().lower() == deploy_address.lower()
assert crowdsale.call().multisigWallet().lower() == team_multisig.address.lower()
assert finalize_agent.call().isSane()
assert crowdsale.call().getState() == CrowdsaleState.PreFunding # PreFunding for the final, as it is deployed pre-opening
# Do a test buy using a test address.
# This ensures are variables are set and the
# funds flow in the multisig wallet.
#confirm_tx(crowdsale.transact({"from": deploy_address, "value": to_wei("0.02", "ether")}).buy())
# As the last action, after successful deployment, set the right token symbol and name so that it shows in a blockchain explorer
confirm_tx(token.transact({"from": deploy_address}).setTokenInformation("MooToken", "MOO"))
deploy_address: '0x7bce9a8d57bd2a4e95accd5bd14676f4a8c08ae8'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment