diff options
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/evm/main.go | 45 | ||||
-rw-r--r-- | cmd/geth/chaincmd.go | 2 | ||||
-rw-r--r-- | cmd/utils/cmd.go | 10 | ||||
-rw-r--r-- | cmd/utils/flags.go | 2 |
4 files changed, 41 insertions, 18 deletions
diff --git a/cmd/evm/main.go b/cmd/evm/main.go index e7b266d4e..aa48f6ede 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -84,11 +84,16 @@ var ( Name: "verbosity", Usage: "sets the verbosity level", } + CreateFlag = cli.BoolFlag{ + Name: "create", + Usage: "indicates the action should be create rather than call", + } ) func init() { app = utils.NewApp("0.2", "the evm command line interface") app.Flags = []cli.Flag{ + CreateFlag, DebugFlag, VerbosityFlag, ForceJitFlag, @@ -111,8 +116,6 @@ func run(ctx *cli.Context) error { db, _ := ethdb.NewMemDatabase() statedb, _ := state.New(common.Hash{}, db) sender := statedb.CreateAccount(common.StringToAddress("sender")) - receiver := statedb.CreateAccount(common.StringToAddress("receiver")) - receiver.SetCode(common.Hex2Bytes(ctx.GlobalString(CodeFlag.Name))) vmenv := NewEnv(statedb, common.StringToAddress("evmuser"), common.Big(ctx.GlobalString(ValueFlag.Name)), vm.Config{ Debug: ctx.GlobalBool(DebugFlag.Name), @@ -121,17 +124,37 @@ func run(ctx *cli.Context) error { }) tstart := time.Now() - ret, e := vmenv.Call( - sender, - receiver.Address(), - common.Hex2Bytes(ctx.GlobalString(InputFlag.Name)), - common.Big(ctx.GlobalString(GasFlag.Name)), - common.Big(ctx.GlobalString(PriceFlag.Name)), - common.Big(ctx.GlobalString(ValueFlag.Name)), + + var ( + ret []byte + err error ) + + if ctx.GlobalBool(CreateFlag.Name) { + input := append(common.Hex2Bytes(ctx.GlobalString(CodeFlag.Name)), common.Hex2Bytes(ctx.GlobalString(InputFlag.Name))...) + ret, _, err = vmenv.Create( + sender, + input, + common.Big(ctx.GlobalString(GasFlag.Name)), + common.Big(ctx.GlobalString(PriceFlag.Name)), + common.Big(ctx.GlobalString(ValueFlag.Name)), + ) + } else { + receiver := statedb.CreateAccount(common.StringToAddress("receiver")) + receiver.SetCode(common.Hex2Bytes(ctx.GlobalString(CodeFlag.Name))) + ret, err = vmenv.Call( + sender, + receiver.Address(), + common.Hex2Bytes(ctx.GlobalString(InputFlag.Name)), + common.Big(ctx.GlobalString(GasFlag.Name)), + common.Big(ctx.GlobalString(PriceFlag.Name)), + common.Big(ctx.GlobalString(ValueFlag.Name)), + ) + } vmdone := time.Since(tstart) if ctx.GlobalBool(DumpFlag.Name) { + statedb.Commit() fmt.Println(string(statedb.Dump())) } vm.StdErrFormat(vmenv.StructLogs()) @@ -150,8 +173,8 @@ num gc: %d } fmt.Printf("OUT: 0x%x", ret) - if e != nil { - fmt.Printf(" error: %v", e) + if err != nil { + fmt.Printf(" error: %v", err) } fmt.Println() return nil diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 076852ff2..321551ce0 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -174,7 +174,7 @@ func dump(ctx *cli.Context) error { for _, arg := range ctx.Args() { var block *types.Block if hashish(arg) { - block = chain.GetBlock(common.HexToHash(arg)) + block = chain.GetBlockByHash(common.HexToHash(arg)) } else { num, _ := strconv.Atoi(arg) block = chain.GetBlockByNumber(uint64(num)) diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index 9e2b14f56..3b521a0e1 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -120,7 +120,7 @@ func ImportChain(chain *core.BlockChain, fn string) error { } } - glog.Infoln("Importing blockchain", fn) + glog.Infoln("Importing blockchain ", fn) fh, err := os.Open(fn) if err != nil { return err @@ -182,7 +182,7 @@ func hasAllBlocks(chain *core.BlockChain, bs []*types.Block) bool { } func ExportChain(blockchain *core.BlockChain, fn string) error { - glog.Infoln("Exporting blockchain to", fn) + glog.Infoln("Exporting blockchain to ", fn) fh, err := os.OpenFile(fn, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm) if err != nil { return err @@ -191,12 +191,12 @@ func ExportChain(blockchain *core.BlockChain, fn string) error { if err := blockchain.Export(fh); err != nil { return err } - glog.Infoln("Exported blockchain to", fn) + glog.Infoln("Exported blockchain to ", fn) return nil } func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, last uint64) error { - glog.Infoln("Exporting blockchain to", fn) + glog.Infoln("Exporting blockchain to ", fn) // TODO verify mode perms fh, err := os.OpenFile(fn, os.O_CREATE|os.O_APPEND|os.O_WRONLY, os.ModePerm) if err != nil { @@ -206,6 +206,6 @@ func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, las if err := blockchain.ExportN(fh, first, last); err != nil { return err } - glog.Infoln("Exported blockchain to", fn) + glog.Infoln("Exported blockchain to ", fn) return nil } diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index d2ba42801..14898b987 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -806,7 +806,7 @@ func MustMakeChainConfig(ctx *cli.Context) *core.ChainConfig { // MustMakeChainConfigFromDb reads the chain configuration from the given database. func MustMakeChainConfigFromDb(ctx *cli.Context, db ethdb.Database) *core.ChainConfig { - genesis := core.GetBlock(db, core.GetCanonicalHash(db, 0)) + genesis := core.GetBlock(db, core.GetCanonicalHash(db, 0), 0) if genesis != nil { // Existing genesis block, use stored config if available. |