|
|
@@ -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 {
|
|
|
+ // The '--code' or '--codefile' flag overrides code in state
|
|
|
+ if ctx.GlobalString(CodeFileFlag.Name) != "" {
|
|
|
+ var hexcode []byte
|
|
|
+ var err error
|
|
|
+ // 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 {
|
|
|
+ // 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)
|
|
|
- } else if ctx.GlobalString(CodeFlag.Name) != "" {
|
|
|
- code = common.Hex2Bytes(ctx.GlobalString(CodeFlag.Name))
|
|
|
- } else {
|
|
|
- var hexcode []byte
|
|
|
- if ctx.GlobalString(CodeFileFlag.Name) != "" {
|
|
|
- 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)
|
|
|
- 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)
|
|
|
- os.Exit(1)
|
|
|
- }
|
|
|
- }
|
|
|
- code = common.Hex2Bytes(string(bytes.TrimRight(hexcode, "\n")))
|
|
|
}
|
|
|
+
|
|
|
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")
|
|
|
- statedb.SetCode(receiver, code)
|
|
|
-
|
|
|
+ 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)
|