@ -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,7 +124,25 @@ func run(ctx *cli.Context) error {
} )
tstart := time . Now ( )
ret , e := vmenv . Call (
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 ) ) ,
@ -129,9 +150,11 @@ func run(ctx *cli.Context) error {
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