Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
15f491e5
Commit
15f491e5
authored
Mar 04, 2015
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Clean up REPL
parent
5817dab8
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
141 additions
and
166 deletions
+141
-166
cmd.go
cmd/ethereum/cmd.go
+18
-33
flags.go
cmd/ethereum/flags.go
+1
-0
main.go
cmd/ethereum/main.go
+7
-1
repl.go
cmd/ethereum/repl/repl.go
+101
-3
protocol.go
eth/protocol.go
+2
-1
javascript_runtime.go
javascript/javascript_runtime.go
+11
-124
types.go
javascript/types.go
+1
-4
No files found.
cmd/ethereum/cmd.go
View file @
15f491e5
/*
// Copyright (c) 2013-2014, Jeffrey Wilcke. All rights reserved.
This file is part of go-ethereum
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
// MA 02110-1301 USA
go-ethereum is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
go-ethereum is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @authors
* Jeffrey Wilcke <i@jev.io>
*/
package
main
package
main
import
(
import
(
"io/ioutil"
"io/ioutil"
"os"
"os"
"github.com/ethereum/go-ethereum/cmd/ethereum/repl"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/javascript"
"github.com/ethereum/go-ethereum/javascript"
"github.com/ethereum/go-ethereum/xeth"
)
)
func
InitJsConsole
(
ethereum
*
eth
.
Ethereum
)
{
repl
:=
ethrepl
.
NewJSRepl
(
ethereum
)
go
repl
.
Start
()
utils
.
RegisterInterrupt
(
func
(
os
.
Signal
)
{
repl
.
Stop
()
})
}
func
ExecJsFile
(
ethereum
*
eth
.
Ethereum
,
InputFile
string
)
{
func
ExecJsFile
(
ethereum
*
eth
.
Ethereum
,
InputFile
string
)
{
file
,
err
:=
os
.
Open
(
InputFile
)
file
,
err
:=
os
.
Open
(
InputFile
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -47,9 +35,6 @@ func ExecJsFile(ethereum *eth.Ethereum, InputFile string) {
...
@@ -47,9 +35,6 @@ func ExecJsFile(ethereum *eth.Ethereum, InputFile string) {
if
err
!=
nil
{
if
err
!=
nil
{
clilogger
.
Fatalln
(
err
)
clilogger
.
Fatalln
(
err
)
}
}
re
:=
javascript
.
NewJSRE
(
ethereum
)
re
:=
javascript
.
NewJSRE
(
xeth
.
New
(
ethereum
))
utils
.
RegisterInterrupt
(
func
(
os
.
Signal
)
{
re
.
Stop
()
})
re
.
Run
(
string
(
content
))
re
.
Run
(
string
(
content
))
}
}
cmd/ethereum/flags.go
View file @
15f491e5
...
@@ -120,6 +120,7 @@ func Init() {
...
@@ -120,6 +120,7 @@ func Init() {
flag
.
BoolVar
(
&
StartMining
,
"mine"
,
false
,
"start mining"
)
flag
.
BoolVar
(
&
StartMining
,
"mine"
,
false
,
"start mining"
)
flag
.
BoolVar
(
&
StartJsConsole
,
"js"
,
false
,
"launches javascript console"
)
flag
.
BoolVar
(
&
StartJsConsole
,
"js"
,
false
,
"launches javascript console"
)
flag
.
BoolVar
(
&
PrintVersion
,
"version"
,
false
,
"prints version number"
)
flag
.
BoolVar
(
&
PrintVersion
,
"version"
,
false
,
"prints version number"
)
flag
.
IntVar
(
&
MinerThreads
,
"minerthreads"
,
runtime
.
NumCPU
(),
"number of miner threads"
)
// Network stuff
// Network stuff
var
(
var
(
...
...
cmd/ethereum/main.go
View file @
15f491e5
...
@@ -26,6 +26,7 @@ import (
...
@@ -26,6 +26,7 @@ import (
"runtime"
"runtime"
"time"
"time"
"github.com/ethereum/go-ethereum/cmd/ethereum/repl"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/eth"
...
@@ -137,7 +138,12 @@ func main() {
...
@@ -137,7 +138,12 @@ func main() {
}
}
if
StartJsConsole
{
if
StartJsConsole
{
InitJsConsole
(
ethereum
)
repl
:=
ethrepl
.
NewJSRepl
(
ethereum
)
repl
.
Start
()
utils
.
RegisterInterrupt
(
func
(
os
.
Signal
)
{
repl
.
Stop
()
})
}
else
if
len
(
InputFile
)
>
0
{
}
else
if
len
(
InputFile
)
>
0
{
ExecJsFile
(
ethereum
,
InputFile
)
ExecJsFile
(
ethereum
,
InputFile
)
}
}
...
...
cmd/ethereum/repl/repl.go
View file @
15f491e5
...
@@ -24,10 +24,14 @@ import (
...
@@ -24,10 +24,14 @@ import (
"os"
"os"
"path"
"path"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/javascript"
"github.com/ethereum/go-ethereum/javascript"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/xeth"
"github.com/obscuren/otto"
)
)
var
repllogger
=
logger
.
NewLogger
(
"REPL"
)
var
repllogger
=
logger
.
NewLogger
(
"REPL"
)
...
@@ -38,7 +42,9 @@ type Repl interface {
...
@@ -38,7 +42,9 @@ type Repl interface {
}
}
type
JSRepl
struct
{
type
JSRepl
struct
{
re
*
javascript
.
JSRE
re
*
javascript
.
JSRE
ethereum
*
eth
.
Ethereum
xeth
*
xeth
.
XEth
prompt
string
prompt
string
...
@@ -53,7 +59,11 @@ func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
...
@@ -53,7 +59,11 @@ func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
panic
(
err
)
panic
(
err
)
}
}
return
&
JSRepl
{
re
:
javascript
.
NewJSRE
(
ethereum
),
prompt
:
"> "
,
history
:
hist
}
xeth
:=
xeth
.
New
(
ethereum
)
repl
:=
&
JSRepl
{
re
:
javascript
.
NewJSRE
(
xeth
),
xeth
:
xeth
,
ethereum
:
ethereum
,
prompt
:
"> "
,
history
:
hist
}
repl
.
initStdFuncs
()
return
repl
}
}
func
(
self
*
JSRepl
)
Start
()
{
func
(
self
*
JSRepl
)
Start
()
{
...
@@ -80,7 +90,6 @@ func (self *JSRepl) Start() {
...
@@ -80,7 +90,6 @@ func (self *JSRepl) Start() {
func
(
self
*
JSRepl
)
Stop
()
{
func
(
self
*
JSRepl
)
Stop
()
{
if
self
.
running
{
if
self
.
running
{
self
.
running
=
false
self
.
running
=
false
self
.
re
.
Stop
()
repllogger
.
Infoln
(
"exit JS Console"
)
repllogger
.
Infoln
(
"exit JS Console"
)
self
.
history
.
Close
()
self
.
history
.
Close
()
}
}
...
@@ -101,3 +110,92 @@ func (self *JSRepl) parseInput(code string) {
...
@@ -101,3 +110,92 @@ func (self *JSRepl) parseInput(code string) {
self
.
PrintValue
(
value
)
self
.
PrintValue
(
value
)
}
}
func
(
self
*
JSRepl
)
initStdFuncs
()
{
t
,
_
:=
self
.
re
.
Vm
.
Get
(
"eth"
)
eth
:=
t
.
Object
()
eth
.
Set
(
"connect"
,
self
.
connect
)
eth
.
Set
(
"stopMining"
,
self
.
stopMining
)
eth
.
Set
(
"startMining"
,
self
.
startMining
)
eth
.
Set
(
"dump"
,
self
.
dump
)
eth
.
Set
(
"export"
,
self
.
export
)
}
/*
* The following methods are natively implemented javascript functions
*/
func
(
self
*
JSRepl
)
dump
(
call
otto
.
FunctionCall
)
otto
.
Value
{
var
block
*
types
.
Block
if
len
(
call
.
ArgumentList
)
>
0
{
if
call
.
Argument
(
0
)
.
IsNumber
()
{
num
,
_
:=
call
.
Argument
(
0
)
.
ToInteger
()
block
=
self
.
ethereum
.
ChainManager
()
.
GetBlockByNumber
(
uint64
(
num
))
}
else
if
call
.
Argument
(
0
)
.
IsString
()
{
hash
,
_
:=
call
.
Argument
(
0
)
.
ToString
()
block
=
self
.
ethereum
.
ChainManager
()
.
GetBlock
(
ethutil
.
Hex2Bytes
(
hash
))
}
else
{
fmt
.
Println
(
"invalid argument for dump. Either hex string or number"
)
}
if
block
==
nil
{
fmt
.
Println
(
"block not found"
)
return
otto
.
UndefinedValue
()
}
}
else
{
block
=
self
.
ethereum
.
ChainManager
()
.
CurrentBlock
()
}
statedb
:=
state
.
New
(
block
.
Root
(),
self
.
ethereum
.
Db
())
v
,
_
:=
self
.
re
.
Vm
.
ToValue
(
statedb
.
RawDump
())
return
v
}
func
(
self
*
JSRepl
)
stopMining
(
call
otto
.
FunctionCall
)
otto
.
Value
{
self
.
xeth
.
Miner
()
.
Stop
()
return
otto
.
TrueValue
()
}
func
(
self
*
JSRepl
)
startMining
(
call
otto
.
FunctionCall
)
otto
.
Value
{
self
.
xeth
.
Miner
()
.
Start
()
return
otto
.
TrueValue
()
}
func
(
self
*
JSRepl
)
connect
(
call
otto
.
FunctionCall
)
otto
.
Value
{
nodeURL
,
err
:=
call
.
Argument
(
0
)
.
ToString
()
if
err
!=
nil
{
return
otto
.
FalseValue
()
}
if
err
:=
self
.
ethereum
.
SuggestPeer
(
nodeURL
);
err
!=
nil
{
return
otto
.
FalseValue
()
}
return
otto
.
TrueValue
()
}
func
(
self
*
JSRepl
)
export
(
call
otto
.
FunctionCall
)
otto
.
Value
{
if
len
(
call
.
ArgumentList
)
==
0
{
fmt
.
Println
(
"err: require file name"
)
return
otto
.
FalseValue
()
}
fn
,
err
:=
call
.
Argument
(
0
)
.
ToString
()
if
err
!=
nil
{
fmt
.
Println
(
err
)
return
otto
.
FalseValue
()
}
data
:=
self
.
ethereum
.
ChainManager
()
.
Export
()
if
err
:=
ethutil
.
WriteFile
(
fn
,
data
);
err
!=
nil
{
fmt
.
Println
(
err
)
return
otto
.
FalseValue
()
}
return
otto
.
TrueValue
()
}
eth/protocol.go
View file @
15f491e5
...
@@ -15,7 +15,7 @@ import (
...
@@ -15,7 +15,7 @@ import (
)
)
const
(
const
(
ProtocolVersion
=
5
5
ProtocolVersion
=
5
6
NetworkId
=
0
NetworkId
=
0
ProtocolLength
=
uint64
(
8
)
ProtocolLength
=
uint64
(
8
)
ProtocolMaxMsgSize
=
10
*
1024
*
1024
ProtocolMaxMsgSize
=
10
*
1024
*
1024
...
@@ -250,6 +250,7 @@ func (self *ethProtocol) handle() error {
...
@@ -250,6 +250,7 @@ func (self *ethProtocol) handle() error {
return
self
.
protoError
(
ErrDecode
,
"msg %v: %v"
,
msg
,
err
)
return
self
.
protoError
(
ErrDecode
,
"msg %v: %v"
,
msg
,
err
)
}
}
hash
:=
request
.
Block
.
Hash
()
hash
:=
request
.
Block
.
Hash
()
fmt
.
Println
(
"received block: %x"
,
hash
)
_
,
chainHead
,
_
:=
self
.
chainManager
.
Status
()
_
,
chainHead
,
_
:=
self
.
chainManager
.
Status
()
jsonlogger
.
LogJson
(
&
logger
.
EthChainReceivedNewBlock
{
jsonlogger
.
LogJson
(
&
logger
.
EthChainReceivedNewBlock
{
...
...
javascript/javascript_runtime.go
View file @
15f491e5
...
@@ -6,14 +6,7 @@ import (
...
@@ -6,14 +6,7 @@ import (
"os"
"os"
"path"
"path"
"path/filepath"
"path/filepath"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/xeth"
"github.com/ethereum/go-ethereum/xeth"
"github.com/obscuren/otto"
"github.com/obscuren/otto"
)
)
...
@@ -21,11 +14,8 @@ import (
...
@@ -21,11 +14,8 @@ import (
var
jsrelogger
=
logger
.
NewLogger
(
"JSRE"
)
var
jsrelogger
=
logger
.
NewLogger
(
"JSRE"
)
type
JSRE
struct
{
type
JSRE
struct
{
ethereum
*
eth
.
Ethereum
Vm
*
otto
.
Otto
Vm
*
otto
.
Otto
xeth
*
xeth
.
XEth
xeth
*
xeth
.
XEth
events
event
.
Subscription
objectCb
map
[
string
][]
otto
.
Value
objectCb
map
[
string
][]
otto
.
Value
}
}
...
@@ -44,12 +34,10 @@ func (jsre *JSRE) LoadIntFile(file string) {
...
@@ -44,12 +34,10 @@ func (jsre *JSRE) LoadIntFile(file string) {
jsre
.
LoadExtFile
(
path
.
Join
(
assetPath
,
file
))
jsre
.
LoadExtFile
(
path
.
Join
(
assetPath
,
file
))
}
}
func
NewJSRE
(
ethereum
*
eth
.
Ethereum
)
*
JSRE
{
func
NewJSRE
(
xeth
*
xeth
.
XEth
)
*
JSRE
{
re
:=
&
JSRE
{
re
:=
&
JSRE
{
ethereum
,
otto
.
New
(),
otto
.
New
(),
xeth
.
New
(
ethereum
),
xeth
,
nil
,
make
(
map
[
string
][]
otto
.
Value
),
make
(
map
[
string
][]
otto
.
Value
),
}
}
...
@@ -59,14 +47,7 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE {
...
@@ -59,14 +47,7 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE {
// Load extra javascript files
// Load extra javascript files
re
.
LoadIntFile
(
"bignumber.min.js"
)
re
.
LoadIntFile
(
"bignumber.min.js"
)
// Subscribe to events
re
.
Bind
(
"eth"
,
&
JSEthereum
{
re
.
xeth
,
re
.
Vm
})
mux
:=
ethereum
.
EventMux
()
re
.
events
=
mux
.
Subscribe
(
core
.
NewBlockEvent
{})
// We have to make sure that, whoever calls this, calls "Stop"
go
re
.
mainLoop
()
re
.
Bind
(
"eth"
,
&
JSEthereum
{
re
.
xeth
,
re
.
Vm
,
ethereum
})
re
.
initStdFuncs
()
re
.
initStdFuncs
()
...
@@ -83,6 +64,12 @@ func (self *JSRE) Run(code string) (otto.Value, error) {
...
@@ -83,6 +64,12 @@ func (self *JSRE) Run(code string) (otto.Value, error) {
return
self
.
Vm
.
Run
(
code
)
return
self
.
Vm
.
Run
(
code
)
}
}
func
(
self
*
JSRE
)
initStdFuncs
()
{
t
,
_
:=
self
.
Vm
.
Get
(
"eth"
)
eth
:=
t
.
Object
()
eth
.
Set
(
"require"
,
self
.
require
)
}
func
(
self
*
JSRE
)
Require
(
file
string
)
error
{
func
(
self
*
JSRE
)
Require
(
file
string
)
error
{
if
len
(
filepath
.
Ext
(
file
))
==
0
{
if
len
(
filepath
.
Ext
(
file
))
==
0
{
file
+=
".js"
file
+=
".js"
...
@@ -99,84 +86,6 @@ func (self *JSRE) Require(file string) error {
...
@@ -99,84 +86,6 @@ func (self *JSRE) Require(file string) error {
return
nil
return
nil
}
}
func
(
self
*
JSRE
)
Stop
()
{
self
.
events
.
Unsubscribe
()
jsrelogger
.
Infoln
(
"stopped"
)
}
func
(
self
*
JSRE
)
mainLoop
()
{
for
_
=
range
self
.
events
.
Chan
()
{
}
}
func
(
self
*
JSRE
)
initStdFuncs
()
{
t
,
_
:=
self
.
Vm
.
Get
(
"eth"
)
eth
:=
t
.
Object
()
eth
.
Set
(
"connect"
,
self
.
connect
)
eth
.
Set
(
"require"
,
self
.
require
)
eth
.
Set
(
"stopMining"
,
self
.
stopMining
)
eth
.
Set
(
"startMining"
,
self
.
startMining
)
eth
.
Set
(
"dump"
,
self
.
dump
)
eth
.
Set
(
"export"
,
self
.
export
)
}
/*
* The following methods are natively implemented javascript functions
*/
func
(
self
*
JSRE
)
dump
(
call
otto
.
FunctionCall
)
otto
.
Value
{
var
block
*
types
.
Block
if
len
(
call
.
ArgumentList
)
>
0
{
if
call
.
Argument
(
0
)
.
IsNumber
()
{
num
,
_
:=
call
.
Argument
(
0
)
.
ToInteger
()
block
=
self
.
ethereum
.
ChainManager
()
.
GetBlockByNumber
(
uint64
(
num
))
}
else
if
call
.
Argument
(
0
)
.
IsString
()
{
hash
,
_
:=
call
.
Argument
(
0
)
.
ToString
()
block
=
self
.
ethereum
.
ChainManager
()
.
GetBlock
(
ethutil
.
Hex2Bytes
(
hash
))
}
else
{
fmt
.
Println
(
"invalid argument for dump. Either hex string or number"
)
}
if
block
==
nil
{
fmt
.
Println
(
"block not found"
)
return
otto
.
UndefinedValue
()
}
}
else
{
block
=
self
.
ethereum
.
ChainManager
()
.
CurrentBlock
()
}
statedb
:=
state
.
New
(
block
.
Root
(),
self
.
ethereum
.
Db
())
v
,
_
:=
self
.
Vm
.
ToValue
(
statedb
.
RawDump
())
return
v
}
func
(
self
*
JSRE
)
stopMining
(
call
otto
.
FunctionCall
)
otto
.
Value
{
self
.
xeth
.
Miner
()
.
Stop
()
return
otto
.
TrueValue
()
}
func
(
self
*
JSRE
)
startMining
(
call
otto
.
FunctionCall
)
otto
.
Value
{
self
.
xeth
.
Miner
()
.
Start
()
return
otto
.
TrueValue
()
}
func
(
self
*
JSRE
)
connect
(
call
otto
.
FunctionCall
)
otto
.
Value
{
nodeURL
,
err
:=
call
.
Argument
(
0
)
.
ToString
()
if
err
!=
nil
{
return
otto
.
FalseValue
()
}
if
err
:=
self
.
ethereum
.
SuggestPeer
(
nodeURL
);
err
!=
nil
{
return
otto
.
FalseValue
()
}
return
otto
.
TrueValue
()
}
func
(
self
*
JSRE
)
require
(
call
otto
.
FunctionCall
)
otto
.
Value
{
func
(
self
*
JSRE
)
require
(
call
otto
.
FunctionCall
)
otto
.
Value
{
file
,
err
:=
call
.
Argument
(
0
)
.
ToString
()
file
,
err
:=
call
.
Argument
(
0
)
.
ToString
()
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -191,25 +100,3 @@ func (self *JSRE) require(call otto.FunctionCall) otto.Value {
...
@@ -191,25 +100,3 @@ func (self *JSRE) require(call otto.FunctionCall) otto.Value {
return
t
return
t
}
}
func
(
self
*
JSRE
)
export
(
call
otto
.
FunctionCall
)
otto
.
Value
{
if
len
(
call
.
ArgumentList
)
==
0
{
fmt
.
Println
(
"err: require file name"
)
return
otto
.
FalseValue
()
}
fn
,
err
:=
call
.
Argument
(
0
)
.
ToString
()
if
err
!=
nil
{
fmt
.
Println
(
err
)
return
otto
.
FalseValue
()
}
data
:=
self
.
ethereum
.
ChainManager
()
.
Export
()
if
err
:=
ethutil
.
WriteFile
(
fn
,
data
);
err
!=
nil
{
fmt
.
Println
(
err
)
return
otto
.
FalseValue
()
}
return
otto
.
TrueValue
()
}
javascript/types.go
View file @
15f491e5
...
@@ -2,8 +2,6 @@ package javascript
...
@@ -2,8 +2,6 @@ package javascript
import
(
import
(
"fmt"
"fmt"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/xeth"
"github.com/ethereum/go-ethereum/xeth"
...
@@ -55,8 +53,7 @@ func NewJSLog(log state.Log) JSLog {
...
@@ -55,8 +53,7 @@ func NewJSLog(log state.Log) JSLog {
type
JSEthereum
struct
{
type
JSEthereum
struct
{
*
xeth
.
XEth
*
xeth
.
XEth
vm
*
otto
.
Otto
vm
*
otto
.
Otto
ethereum
*
eth
.
Ethereum
}
}
func
(
self
*
JSEthereum
)
Block
(
v
interface
{})
otto
.
Value
{
func
(
self
*
JSEthereum
)
Block
(
v
interface
{})
otto
.
Value
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment