Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
30402430
G
go-ethereum
项目概览
whqwjb
/
go-ethereum
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
go-ethereum
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
30402430
编写于
8月 15, 2017
作者:
M
Martin Holst Swende
提交者:
Felix Lange
8月 15, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cmd/evm: add --receiver, support code from stdin (#14873)
上级
9facf642
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
39 addition
and
27 deletion
+39
-27
cmd/evm/main.go
cmd/evm/main.go
+6
-1
cmd/evm/runner.go
cmd/evm/runner.go
+33
-26
未找到文件。
cmd/evm/main.go
浏览文件 @
30402430
...
...
@@ -53,7 +53,7 @@ var (
}
CodeFileFlag
=
cli
.
StringFlag
{
Name
:
"codefile"
,
Usage
:
"
file containing EVM code
"
,
Usage
:
"
File containing EVM code. If '-' is specified, code is read from stdin
"
,
}
GasFlag
=
cli
.
Uint64Flag
{
Name
:
"gas"
,
...
...
@@ -102,6 +102,10 @@ var (
Name
:
"sender"
,
Usage
:
"The transaction origin"
,
}
ReceiverFlag
=
cli
.
StringFlag
{
Name
:
"receiver"
,
Usage
:
"The transaction receiver (execution context)"
,
}
DisableMemoryFlag
=
cli
.
BoolFlag
{
Name
:
"nomemory"
,
Usage
:
"disable memory output"
,
...
...
@@ -131,6 +135,7 @@ func init() {
GenesisFlag
,
MachineFlag
,
SenderFlag
,
ReceiverFlag
,
DisableMemoryFlag
,
DisableStackFlag
,
}
...
...
cmd/evm/runner.go
浏览文件 @
30402430
...
...
@@ -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
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录