2015-05-24 12:48:43 +00:00
|
|
|
module.exports = (grunt) ->
|
|
|
|
web3 = require('web3')
|
|
|
|
readYaml = require('read-yaml');
|
|
|
|
|
|
|
|
grunt.registerTask "deploy_contracts", "deploy code", (env) =>
|
|
|
|
blockchainConfig = readYaml.sync("config/blockchain.yml")
|
2015-06-19 14:27:53 +00:00
|
|
|
contractsConfig = readYaml.sync("config/contracts.yml")[env || "development"]
|
2015-05-24 12:48:43 +00:00
|
|
|
rpcHost = blockchainConfig[env || "development"].rpc_host
|
|
|
|
rpcPort = blockchainConfig[env || "development"].rpc_port
|
2015-06-20 12:14:09 +00:00
|
|
|
gasLimit = blockchainConfig[env || "development"].gas_limit || 500000
|
2015-06-10 01:05:41 +00:00
|
|
|
gasPrice = blockchainConfig[env || "development"].gas_price || 10000000000000
|
2015-05-24 12:48:43 +00:00
|
|
|
|
|
|
|
try
|
|
|
|
web3.setProvider(new web3.providers.HttpProvider("http://#{rpcHost}:#{rpcPort}"))
|
|
|
|
primaryAddress = web3.eth.coinbase
|
|
|
|
web3.eth.defaultAccount = primaryAddress
|
|
|
|
catch e
|
|
|
|
grunt.log.writeln("==== can't connect to #{rpcHost}:#{rpcPort} check if an ethereum node is running")
|
|
|
|
exit
|
|
|
|
|
|
|
|
grunt.log.writeln("address is : #{primaryAddress}")
|
|
|
|
|
|
|
|
result = "web3.setProvider(new web3.providers.HttpProvider('http://#{rpcHost}:#{rpcPort}'));"
|
|
|
|
result += "web3.eth.defaultAccount = web3.eth.accounts[0];"
|
|
|
|
|
|
|
|
contractFiles = grunt.file.expand(grunt.config.get("deploy.contracts"))
|
|
|
|
for contractFile in contractFiles
|
|
|
|
source = grunt.file.read(contractFile)
|
|
|
|
|
|
|
|
grunt.log.writeln("deploying #{contractFile}")
|
2015-05-27 02:11:35 +00:00
|
|
|
compiled_contracts = web3.eth.compile.solidity(source)
|
|
|
|
|
2015-06-19 14:27:53 +00:00
|
|
|
for className, contract of compiled_contracts
|
2015-06-20 12:09:34 +00:00
|
|
|
contractGasLimit = contractsConfig?[className]?.gasLimit || gasLimit
|
|
|
|
contractGasPrice = contractsConfig?[className]?.gasPrice || gasPrice
|
2015-05-27 02:11:35 +00:00
|
|
|
|
2015-06-20 12:09:34 +00:00
|
|
|
args = contractsConfig?[className]?.args
|
2015-05-27 02:11:35 +00:00
|
|
|
|
2015-06-19 14:27:53 +00:00
|
|
|
contractObject = web3.eth.contract(contract.info.abiDefinition)
|
2015-06-20 03:21:03 +00:00
|
|
|
|
2015-06-20 12:09:34 +00:00
|
|
|
contractParams = args || []
|
2015-06-20 03:21:03 +00:00
|
|
|
contractParams.push({from: primaryAddress, data: contract.code, gas: contractGasLimit, gasPrice: contractGasPrice})
|
|
|
|
contractAddress = contractObject.new.apply(contractObject, contractParams).address
|
2015-06-19 14:27:53 +00:00
|
|
|
|
|
|
|
console.log "address is #{contractAddress}"
|
|
|
|
|
|
|
|
grunt.log.writeln("deployed #{className} at #{contractAddress}")
|
2015-05-27 02:11:35 +00:00
|
|
|
|
|
|
|
abi = JSON.stringify(contract.info.abiDefinition)
|
|
|
|
|
|
|
|
result += "var #{className}Abi = #{abi};"
|
|
|
|
result += "var #{className}Contract = web3.eth.contract(#{className}Abi);"
|
2015-06-04 10:33:14 +00:00
|
|
|
result += "var #{className} = #{className}Contract.at('#{contractAddress}');";
|
2015-05-24 12:48:43 +00:00
|
|
|
|
|
|
|
destFile = grunt.config.get("deploy.dest")
|
|
|
|
grunt.file.write(destFile, result)
|
|
|
|
|