Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
3fc24013
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,发现更多精彩内容 >>
提交
3fc24013
编写于
8月 08, 2014
作者:
O
obscuren
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed issue with overflowing 256 bit integers
上级
d6b0ab30
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
31 addition
and
0 deletion
+31
-0
ethvm/vm.go
ethvm/vm.go
+31
-0
未找到文件。
ethvm/vm.go
浏览文件 @
3fc24013
...
...
@@ -245,6 +245,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base
.
Add
(
y
,
x
)
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
// Pop result back on the stack
stack
.
Push
(
base
)
...
...
@@ -255,6 +257,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base
.
Sub
(
y
,
x
)
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
// Pop result back on the stack
stack
.
Push
(
base
)
...
...
@@ -265,6 +269,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base
.
Mul
(
y
,
x
)
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
// Pop result back on the stack
stack
.
Push
(
base
)
...
...
@@ -277,6 +283,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base
.
Div
(
y
,
x
)
}
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
// Pop result back on the stack
stack
.
Push
(
base
)
...
...
@@ -289,6 +297,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base
.
Div
(
y
,
x
)
}
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
// Pop result back on the stack
stack
.
Push
(
base
)
...
...
@@ -300,6 +310,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base
.
Mod
(
y
,
x
)
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
stack
.
Push
(
base
)
case
SMOD
:
...
...
@@ -310,6 +322,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base
.
Mod
(
y
,
x
)
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
stack
.
Push
(
base
)
...
...
@@ -321,6 +335,8 @@ func (self *Vm) RunClosure(closure *Closure) (ret []byte, err error) {
base
.
Exp
(
y
,
x
,
Pow256
)
ensure256
(
base
)
self
.
Printf
(
" = %v"
,
base
)
stack
.
Push
(
base
)
...
...
@@ -838,3 +854,18 @@ func (self *Vm) Endl() *Vm {
return
self
}
func
ensure256
(
x
*
big
.
Int
)
{
maxInt
,
_
:=
new
(
big
.
Int
)
.
SetString
(
"115792089237316195423570985008687907853269984665640564039457584007913129639935"
,
0
)
if
x
.
Cmp
(
maxInt
)
>=
0
{
x
.
SetInt64
(
0
)
return
}
// Could have done this with an OR, but big ints are costly.
if
x
.
Cmp
(
new
(
big
.
Int
))
<
0
{
x
.
SetInt64
(
0
)
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录