embark/tasks/blockchain.coffee

72 lines
2.3 KiB
CoffeeScript

module.exports = (grunt) ->
readYaml = require('read-yaml')
require('shelljs/global')
grunt.registerTask "blockchain", "deploy ethereum node", (env_) =>
env = env_ || "development"
try
blockchainConfig = readYaml.sync("config/blockchain.yml")
catch exception
grunt.log.writeln("==== error reading config/blockchain.yml")
grunt.log.writeln(exception)
rpcHost = blockchainConfig[env].rpc_host
rpcPort = blockchainConfig[env].rpc_port
rpcWhitelist = blockchainConfig[env].rpc_whitelist
minerthreads = blockchainConfig[env].minerthreads
datadir = blockchainConfig[env].datadir
networkId = blockchainConfig[env].network_id || Math.floor(((Math.random()*100000)+1000))
port = blockchainConfig[env].port || "30303"
console = blockchainConfig[env].console || false
mine_when_needed = blockchainConfig[env].mine_when_needed || false
account = blockchainConfig[env].account
address = account.address
cmd = "geth "
unless datadir is "default"
cmd += "--datadir=\"#{datadir}\" "
cmd += "--logfile=\"#{datadir}.log\" "
cmd += "--port #{port} "
cmd += "--rpc "
cmd += "--rpcport #{rpcPort} "
cmd += "--networkid #{networkId} "
cmd += "--rpccorsdomain \"#{rpcWhitelist}\" "
unless minerthreads is undefined
cmd += "--minerthreads \"#{minerthreads}\" "
cmd += "--mine "
if account.password isnt undefined
cmd += "--password #{account.password} "
if account.init
grunt.log.writeln("=== initializating account")
grunt.log.writeln("running: #{cmd} account list")
result = exec(cmd + "account list")
grunt.log.writeln("finished")
grunt.log.writeln("=== output is #{result.output}")
if result.output.indexOf("Fatal") < 0
grunt.log.writeln("=== already initialized")
address = result.output.match(/{(\w+)}/)[1]
else
grunt.log.writeln("running: #{cmd} account new")
output = exec(cmd + " account new")
address = output.output.match(/{(\w+)}/)[1]
if address isnt undefined
cmd += "--unlock #{address} "
if console
cmd += "console"
if mine_when_needed
cmd += "js node_modules/embark-framework/js/mine.js"
grunt.log.writeln("running: #{cmd}")
grunt.log.writeln("=== running geth")
#sh.run(cmd)
exec(cmd)