Last active
August 29, 2015 14:26
-
-
Save TOMOAKI12345/4c62abb85b2790759222 to your computer and use it in GitHub Desktop.
https://www.ethereum.org/crowdsale Crowdsale with token sale.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var csCompiled = '606060405260405160a08061089f8339016040526060805190602001805190602001805190602001805190602001805190602001505b84600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555083600160005081905550603c830242016003600050819055508160046000508190555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b50505050506107dc806100c36000396000f3006060604052361561008a576000357c01000000000000000000000000000000000000000000000000000000009004806301cb3b20146102bf57806329dcb0cf146102cc57806338af3eed146102ed5780636e66f6e9146103245780637a3a0e841461035b5780637b3e5e7b1461037c578063a035b1fe1461039d578063dc0d3dff146103be5761008a565b6102bd5b60003490506040604051908101604052803381526020018281526020015060066000506006600050805480919060010190908154818355818115116101365760020281600202836000526020600020918201910161013591906100ec565b808211156101315760006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160005060009055506001016100ec565b5090565b5b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff0219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390b98a11336004600050548404604051837c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506020604051808303816000876161da5a03f1156100025750505060405151507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf633826001604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15b50565b005b6102ca6004506104c8565b005b6102d760045061043a565b6040518082815260200191505060405180910390f35b6102f8600450610402565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61032f60045061044c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610366600450610428565b6040518082815260200191505060405180910390f35b610387600450610431565b6040518082815260200191505060405180910390f35b6103a8600450610443565b6040518082815260200191505060405180910390f35b6103cf600480359060200150610472565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016000505481565b60026000505481565b60036000505481565b60046000505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066000508181548110156100025790600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160005054905082565b6000600360005054421015156107d8576001600050546002600050541015156105cf57600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000600260005054604051809050600060405180830381858888f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600050546000604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a161079d565b7fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf66000600b600060405180848152602001838152602001828152602001935050505060405180910390a1600090505b60066000505481101561079c57600660005081815481101561000257906000526020600020906002020160005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000600660005083815481101561000257906000526020600020906002020160005060010160005054604051809050600060405180830381858888f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6600660005082815481101561000257906000526020600020906002020160005060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006600050838154811015610002579060005260206000209060020201600050600101600050546000604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15b806001019050805061061e565b5b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b5056' | |
| var csABI = [{"constant":false,"inputs":[],"name":"checkGoalReached","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"fundingGoal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"funders","outputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"type":"function"},{"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_fundingGoal","type":"uint256"},{"name":"_duration","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_reward","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"isContribution","type":"bool"}],"name":"FundTransfer","type":"event"}] | |
| // --------------- setup token contract------------ | |
| // define token compiled code | |
| var tokenCompiled = '606060405260405160208061025a8339016040526060805190602001505b8080602757506127105b600060005060003373ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600050819055505b506101ef8061006b6000396000f30060606040526000357c01000000000000000000000000000000000000000000000000000000009004806390b98a1114610044578063bbd39ac01461007157610042565b005b61005b6004803590602001803590602001506100b3565b6040518082815260200191505060405180910390f35b610082600480359060200150610098565b6040518082815260200191505060405180910390f35b60006000506020528060005260406000206000915090505481565b600081600060005060003373ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000505410156100f557600090506101e9565b81600060005060003373ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282825054039250508190555081600060005060008573ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828282505401925050819055507f16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146338484604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1600190506101e9565b9291505056' | |
| // define token ABI | |
| var tokenABI = [{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"sendCoin","outputs":[{"name":"sufficient","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"coinBalanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"supply","type":"uint256"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"receiver","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"CoinTransfer","type":"event"}] | |
| // define supply of tokens | |
| var supply = 100; | |
| // create token contract | |
| var tokenFactory = web3.eth.contract(tokenABI); | |
| // eth.accounts[0] should have gasprice * gas amount of Ether | |
| var token = tokenContract.new( | |
| supply, | |
| { | |
| from:web3.eth.accounts[0], | |
| data:tokenCompiled, | |
| gas: 2000000 | |
| }, function(e, contract){ | |
| console.log('hello callback') | |
| if(!e) { | |
| if(!contract.address) { | |
| console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined..."); | |
| } else { | |
| console.log("Contract mined! Address: " + contract.address); | |
| console.log(contract); | |
| } | |
| } | |
| else{ | |
| console.log(e); | |
| } | |
| }) | |
| var _beneficiary = eth.accounts[3]; // create an account for this | |
| var _fundingGoal = web3.toWei(5, "ether"); // raises 5 ether | |
| var _duration = 30; // number of minutes the campaign will last | |
| var _price = web3.toWei(0.5, "ether"); // the price of the tokens, in ether | |
| var _reward = tokenInstance.address; // the token contract address. | |
| var csContract = eth.contract(csABI) | |
| var crowdsale = csContract.new( | |
| _beneficiary, | |
| _fundingGoal, | |
| _duration, | |
| _price, | |
| _reward, | |
| { | |
| from: eth.accounts[0], | |
| data: csCompiled, | |
| gas: 1000000 | |
| }, function(e, contract){ | |
| if(!e) { | |
| if(!contract.address) { | |
| console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined..."); | |
| } else { | |
| console.log("Contract mined! Address: " + contract.address); | |
| console.log(contract); | |
| } | |
| } | |
| }); | |
| var eth.getCode(crowdsale.address) | |
| token.sendCoin.sendTransaction(crowdsale.address, 10, {from:eth.accounts[0]}); | |
| "Current crowdsale must raise " + web3.fromWei(crowdsale.fundingGoal.call(), "ether") + " ether in order to send it to " + crowdsale.beneficiary.call() + "." | |
| // send Token one to another | |
| var amount = web3.toWei(5, "ether"); // decide how much to contribute | |
| eth.sendTransaction({from:eth.accounts[0], to: crowdsale.address, value:amount, gas:1000000}) | |
| crowdsale.checkGoalReached.sendTransaction({from: eth.accounts[0], gas:2000000}) | |
| web3.fromWei(eth.getBalance(eth.accounts[0]), "ether") + " ether" | |
| web3.fromWei(eth.getBalance(eth.accounts[1]), "ether") + " ether" | |
| token.coinBalanceOf.call(eth.accounts[0]) + " tokens" | |
| token.coinBalanceOf.call(eth.accounts[1]) + " tokens" | |
| // event for checkif the funding reached. | |
| var event = crowdsale.FundTransfer({}, '', function(error, result){ | |
| if (!error) | |
| if (result.args.isContribution) { | |
| console.log("\n New backer! Received " + web3.fromWei(result.args.amount, "ether") + " ether from " + result.args.backer ) | |
| console.log( "\n The current funding at " +( 100 * crowdsale.amountRaised.call() / crowdsale.fundingGoal.call()) + "% of its goals. Funders have contributed a total of " + web3.fromWei(crowdsale.amountRaised.call(), "ether") + " ether."); | |
| var timeleft = Math.floor(Date.now() / 1000)-crowdsale.deadline(); | |
| if (timeleft>3600) { console.log("Deadline has passed, " + Math.floor(timeleft/3600) + " hours ago") | |
| } else if (timeleft>0) { console.log("Deadline has passed, " + Math.floor(timeleft/60) + " minutes ago") | |
| } else if (timeleft>-3600) { console.log(Math.floor(-1*timeleft/60) + " minutes until deadline") | |
| } else { console.log(Math.floor(-1*timeleft/3600) + " hours until deadline") | |
| } | |
| } else { | |
| console.log("Funds transferred from crowdsale account: " + web3.fromWei(result.args.amount, "ether") + " ether to " + result.args.backer ) | |
| } | |
| }); | |
| // check the crowdsale functionality | |
| var amount = web3.toWei(5, "ether") // decide how much he will contribute | |
| eth.sendTransaction({from: eth.accounts[0], to: crowdsale.address, value: amount, gas: 1000000}) | |
| Alternatively, if you want someone else to send it, they can even use the name registrar to contribute: | |
| eth.sendTransaction({from: eth.accounts[0], to: registrar.addr("mycrowdsale"), value: amount, gas: 500000}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment