Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
b70a73cd
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,发现更多精彩内容 >>
未验证
提交
b70a73cd
编写于
8月 16, 2017
作者:
J
Jeffrey Wilcke
提交者:
Péter Szilágyi
8月 16, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core/vm: implement REVERT metropolis opcode
上级
0b978f91
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
21 addition
and
1 deletion
+21
-1
core/vm/instructions.go
core/vm/instructions.go
+7
-1
core/vm/interpreter.go
core/vm/interpreter.go
+4
-0
core/vm/jump_table.go
core/vm/jump_table.go
+7
-0
core/vm/opcodes.go
core/vm/opcodes.go
+3
-0
未找到文件。
core/vm/instructions.go
浏览文件 @
b70a73cd
...
...
@@ -718,7 +718,14 @@ func opReturn(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *S
ret
:=
memory
.
GetPtr
(
offset
.
Int64
(),
size
.
Int64
())
evm
.
interpreter
.
intPool
.
put
(
offset
,
size
)
return
ret
,
nil
}
func
opRevert
(
pc
*
uint64
,
evm
*
EVM
,
contract
*
Contract
,
memory
*
Memory
,
stack
*
Stack
)
([]
byte
,
error
)
{
offset
,
size
:=
stack
.
pop
(),
stack
.
pop
()
ret
:=
memory
.
GetPtr
(
offset
.
Int64
(),
size
.
Int64
())
evm
.
interpreter
.
intPool
.
put
(
offset
,
size
)
return
ret
,
nil
}
...
...
@@ -731,7 +738,6 @@ func opSuicide(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *
evm
.
StateDB
.
AddBalance
(
common
.
BigToAddress
(
stack
.
pop
()),
balance
)
evm
.
StateDB
.
Suicide
(
contract
.
Address
())
return
nil
,
nil
}
...
...
core/vm/interpreter.go
浏览文件 @
b70a73cd
...
...
@@ -209,6 +209,10 @@ func (in *Interpreter) Run(snapshot int, contract *Contract, input []byte) (ret
if
verifyPool
{
verifyIntegerPool
(
in
.
intPool
)
}
// checks whether the operation should revert state.
if
operation
.
reverts
{
in
.
evm
.
StateDB
.
RevertToSnapshot
(
snapshot
)
}
switch
{
case
err
!=
nil
:
...
...
core/vm/jump_table.go
浏览文件 @
b70a73cd
...
...
@@ -89,6 +89,13 @@ func NewMetropolisInstructionSet() [256]operation {
memorySize
:
memoryReturnDataCopy
,
valid
:
true
,
}
instructionSet
[
REVERT
]
=
operation
{
execute
:
opRevert
,
gasCost
:
constGasFunc
(
GasFastestStep
),
validateStack
:
makeStackFunc
(
2
,
0
),
valid
:
true
,
reverts
:
true
,
}
return
instructionSet
}
...
...
core/vm/opcodes.go
浏览文件 @
b70a73cd
...
...
@@ -204,6 +204,7 @@ const (
DELEGATECALL
STATICCALL
=
0xfa
REVERT
=
0xfd
SELFDESTRUCT
=
0xff
)
...
...
@@ -360,6 +361,7 @@ var opCodeToString = map[OpCode]string{
CALLCODE
:
"CALLCODE"
,
DELEGATECALL
:
"DELEGATECALL"
,
STATICCALL
:
"STATICCALL"
,
REVERT
:
"REVERT"
,
SELFDESTRUCT
:
"SELFDESTRUCT"
,
PUSH
:
"PUSH"
,
...
...
@@ -509,6 +511,7 @@ var stringToOp = map[string]OpCode{
"CALL"
:
CALL
,
"RETURN"
:
RETURN
,
"CALLCODE"
:
CALLCODE
,
"REVERT"
:
REVERT
,
"SELFDESTRUCT"
:
SELFDESTRUCT
,
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录