|
|
|
@ -84,6 +84,7 @@ func runCmd(ctx *cli.Context) error { |
|
|
|
|
statedb *state.StateDB |
|
|
|
|
chainConfig *params.ChainConfig |
|
|
|
|
sender = common.StringToAddress("sender") |
|
|
|
|
receiver = common.StringToAddress("receiver") |
|
|
|
|
) |
|
|
|
|
if ctx.GlobalBool(MachineFlag.Name) { |
|
|
|
|
tracer = NewJSONLogger(logconfig, os.Stdout) |
|
|
|
@ -104,46 +105,52 @@ func runCmd(ctx *cli.Context) error { |
|
|
|
|
if ctx.GlobalString(SenderFlag.Name) != "" { |
|
|
|
|
sender = common.HexToAddress(ctx.GlobalString(SenderFlag.Name)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
statedb.CreateAccount(sender) |
|
|
|
|
|
|
|
|
|
if ctx.GlobalString(ReceiverFlag.Name) != "" { |
|
|
|
|
receiver = common.HexToAddress(ctx.GlobalString(ReceiverFlag.Name)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
|
code []byte |
|
|
|
|
ret []byte |
|
|
|
|
err error |
|
|
|
|
) |
|
|
|
|
if fn := ctx.Args().First(); len(fn) > 0 { |
|
|
|
|
src, err := ioutil.ReadFile(fn) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bin, err := compiler.Compile(fn, src, false) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
code = common.Hex2Bytes(bin) |
|
|
|
|
} else if ctx.GlobalString(CodeFlag.Name) != "" { |
|
|
|
|
code = common.Hex2Bytes(ctx.GlobalString(CodeFlag.Name)) |
|
|
|
|
} else { |
|
|
|
|
var hexcode []byte |
|
|
|
|
// The '--code' or '--codefile' flag overrides code in state
|
|
|
|
|
if ctx.GlobalString(CodeFileFlag.Name) != "" { |
|
|
|
|
var hexcode []byte |
|
|
|
|
var err error |
|
|
|
|
hexcode, err = ioutil.ReadFile(ctx.GlobalString(CodeFileFlag.Name)) |
|
|
|
|
if err != nil { |
|
|
|
|
fmt.Printf("Could not load code from file: %v\n", err) |
|
|
|
|
// If - is specified, it means that code comes from stdin
|
|
|
|
|
if ctx.GlobalString(CodeFileFlag.Name) == "-" { |
|
|
|
|
//Try reading from stdin
|
|
|
|
|
if hexcode, err = ioutil.ReadAll(os.Stdin); err != nil { |
|
|
|
|
fmt.Printf("Could not load code from stdin: %v\n", err) |
|
|
|
|
os.Exit(1) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
var err error |
|
|
|
|
hexcode, err = ioutil.ReadAll(os.Stdin) |
|
|
|
|
if err != nil { |
|
|
|
|
fmt.Printf("Could not load code from stdin: %v\n", err) |
|
|
|
|
// Codefile with hex assembly
|
|
|
|
|
if hexcode, err = ioutil.ReadFile(ctx.GlobalString(CodeFileFlag.Name)); err != nil { |
|
|
|
|
fmt.Printf("Could not load code from file: %v\n", err) |
|
|
|
|
os.Exit(1) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
code = common.Hex2Bytes(string(bytes.TrimRight(hexcode, "\n"))) |
|
|
|
|
|
|
|
|
|
} else if ctx.GlobalString(CodeFlag.Name) != "" { |
|
|
|
|
code = common.Hex2Bytes(ctx.GlobalString(CodeFlag.Name)) |
|
|
|
|
} else if fn := ctx.Args().First(); len(fn) > 0 { |
|
|
|
|
// EASM-file to compile
|
|
|
|
|
src, err := ioutil.ReadFile(fn) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
bin, err := compiler.Compile(fn, src, false) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
code = common.Hex2Bytes(bin) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
initialGas := ctx.GlobalUint64(GasFlag.Name) |
|
|
|
|
runtimeConfig := runtime.Config{ |
|
|
|
|
Origin: sender, |
|
|
|
@ -180,9 +187,9 @@ func runCmd(ctx *cli.Context) error { |
|
|
|
|
input := append(code, common.Hex2Bytes(ctx.GlobalString(InputFlag.Name))...) |
|
|
|
|
ret, _, leftOverGas, err = runtime.Create(input, &runtimeConfig) |
|
|
|
|
} else { |
|
|
|
|
receiver := common.StringToAddress("receiver") |
|
|
|
|
if len(code) > 0 { |
|
|
|
|
statedb.SetCode(receiver, code) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
ret, leftOverGas, err = runtime.Call(receiver, common.Hex2Bytes(ctx.GlobalString(InputFlag.Name)), &runtimeConfig) |
|
|
|
|
} |
|
|
|
|
execTime := time.Since(tstart) |
|
|
|
|