Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
4d987624
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,发现更多精彩内容 >>
提交
4d987624
编写于
5月 28, 2014
作者:
O
obscuren
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed state object gas return
上级
73a42d34
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
43 addition
and
8 deletion
+43
-8
ethchain/closure.go
ethchain/closure.go
+4
-4
ethchain/vm.go
ethchain/vm.go
+9
-3
ethpub/pub.go
ethpub/pub.go
+12
-1
ethutil/bytes.go
ethutil/bytes.go
+18
-0
未找到文件。
ethchain/closure.go
浏览文件 @
4d987624
...
...
@@ -11,13 +11,13 @@ type ClosureRef interface {
ReturnGas
(
*
big
.
Int
,
*
big
.
Int
,
*
State
)
Address
()
[]
byte
GetMem
(
*
big
.
Int
)
*
ethutil
.
Value
SetStore
(
*
big
.
Int
,
*
ethutil
.
Value
)
SetStor
ag
e
(
*
big
.
Int
,
*
ethutil
.
Value
)
N
()
*
big
.
Int
}
// Basic inline closure object which implement the 'closure' interface
type
Closure
struct
{
callee
*
StateObject
callee
ClosureRef
object
*
StateObject
Script
[]
byte
State
*
State
...
...
@@ -28,7 +28,7 @@ type Closure struct {
}
// Create a new closure for the given data items
func
NewClosure
(
callee
,
object
*
StateObject
,
script
[]
byte
,
state
*
State
,
gas
,
price
*
big
.
Int
)
*
Closure
{
func
NewClosure
(
callee
ClosureRef
,
object
*
StateObject
,
script
[]
byte
,
state
*
State
,
gas
,
price
*
big
.
Int
)
*
Closure
{
c
:=
&
Closure
{
callee
:
callee
,
object
:
object
,
Script
:
script
,
State
:
state
,
Args
:
nil
}
// In most cases gas, price and value are pointers to transaction objects
...
...
@@ -118,7 +118,7 @@ func (c *Closure) Object() *StateObject {
return
c
.
object
}
func
(
c
*
Closure
)
Callee
()
*
StateObject
{
func
(
c
*
Closure
)
Callee
()
ClosureRef
{
return
c
.
callee
}
...
...
ethchain/vm.go
浏览文件 @
4d987624
...
...
@@ -326,9 +326,15 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
case
CALLDATALOAD
:
require
(
1
)
offset
:=
stack
.
Pop
()
.
Int64
()
val
:=
closure
.
Args
[
offset
:
offset
+
32
]
stack
.
Push
(
ethutil
.
BigD
(
val
))
var
data
[]
byte
if
len
(
closure
.
Args
)
>=
int
(
offset
+
32
)
{
data
=
closure
.
Args
[
offset
:
offset
+
32
]
}
else
{
data
=
[]
byte
{
0
}
}
stack
.
Push
(
ethutil
.
BigD
(
data
))
case
CALLDATASIZE
:
stack
.
Push
(
big
.
NewInt
(
int64
(
len
(
closure
.
Args
))))
case
GASPRICE
:
...
...
@@ -498,7 +504,7 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
contract
.
AddAmount
(
value
)
// Create a new callable closure
closure
:=
NewClosure
(
closure
.
Object
()
,
contract
,
contract
.
script
,
vm
.
state
,
gas
,
closure
.
Price
)
closure
:=
NewClosure
(
closure
,
contract
,
contract
.
script
,
vm
.
state
,
gas
,
closure
.
Price
)
// Executer the closure and get the return value (if any)
ret
,
_
,
err
:=
closure
.
Call
(
vm
,
args
,
hook
)
if
err
!=
nil
{
...
...
ethpub/pub.go
浏览文件 @
4d987624
...
...
@@ -4,6 +4,7 @@ import (
"encoding/hex"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil"
"strings"
)
type
PEthereum
struct
{
...
...
@@ -161,7 +162,17 @@ func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, sc
if
len
(
scriptStr
)
>
0
&&
scriptStr
[
0
:
2
]
==
"0x"
{
scriptStr
=
scriptStr
[
2
:
len
(
scriptStr
)]
}
tx
=
ethchain
.
NewTransactionMessage
(
hash
,
value
,
gas
,
gasPrice
,
ethutil
.
FromHex
(
scriptStr
))
data
:=
ethutil
.
StringToByteFunc
(
scriptStr
,
func
(
s
string
)
(
ret
[]
byte
)
{
slice
:=
strings
.
Split
(
s
,
"
\n
"
)
for
_
,
dataItem
:=
range
slice
{
d
:=
ethutil
.
FormatData
(
dataItem
)
ret
=
append
(
ret
,
d
...
)
}
return
})
tx
=
ethchain
.
NewTransactionMessage
(
hash
,
value
,
gas
,
gasPrice
,
data
)
}
acc
:=
lib
.
stateManager
.
TransState
()
.
GetStateObject
(
keyPair
.
Address
())
...
...
ethutil/bytes.go
浏览文件 @
4d987624
...
...
@@ -4,6 +4,7 @@ import (
"bytes"
"encoding/binary"
"fmt"
"math/big"
)
// Number to bytes
...
...
@@ -98,3 +99,20 @@ func StringToByteFunc(str string, cb func(str string) []byte) (ret []byte) {
return
}
func
FormatData
(
data
string
)
[]
byte
{
if
len
(
data
)
==
0
{
return
nil
}
// Simple stupid
d
:=
new
(
big
.
Int
)
if
data
[
0
:
1
]
==
"
\"
"
&&
data
[
len
(
data
)
-
1
:
]
==
"
\"
"
{
d
.
SetBytes
([]
byte
(
data
[
1
:
len
(
data
)
-
1
]))
}
else
if
len
(
data
)
>
1
&&
data
[
:
2
]
==
"0x"
{
d
.
SetBytes
(
FromHex
(
data
[
2
:
]))
}
else
{
d
.
SetString
(
data
,
0
)
}
return
BigToBytes
(
d
,
256
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录