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
7f1a4c37
Commit
7f1a4c37
authored
May 21, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'release/poc5-rc8'
parents
c07c4549
3ddaf56a
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
156 additions
and
46 deletions
+156
-46
README.md
README.md
+14
-17
wallet.qml
ethereal/assets/qml/wallet.qml
+39
-0
samplecoin.html
ethereal/assets/samplecoin/samplecoin.html
+1
-1
gui.go
ethereal/ui/gui.go
+5
-9
config.go
ethereum/config.go
+10
-1
javascript_runtime.go
ethereum/javascript_runtime.go
+77
-14
repl.go
ethereum/repl.go
+5
-1
repl_darwin.go
ethereum/repl_darwin.go
+5
-3
No files found.
README.md
View file @
7f1a4c37
...
...
@@ -5,7 +5,7 @@ Ethereum
Ethereum Go Client © 2014 Jeffrey Wilcke.
Current state: Proof of Concept 5.0 RC
7
.
Current state: Proof of Concept 5.0 RC
8
.
For the development package please see the
[
eth-go package
](
https://github.com/ethereum/eth-go
)
.
...
...
@@ -26,28 +26,25 @@ General command line options
====================
```
-c Launch the developer console (node only)
Shared between ethereum and ethereal
-m Start mining blocks
-genaddr Generates a new address and private key (destructive action)
-p Port on which the server will accept incomming connections (= 30303)
-upnp Enable UPnP (= false)
-x Desired amount of peers (= 5)
-h This help
-p Port on which the server will accept incomming connections
-upnp Enable UPnP
-x Desired amount of peers
-r Start JSON RPC
-dir Data directory used to store configs and databases
(=".ethereum")
-import Import a private key
(hex)
```
-dir Data directory used to store configs and databases
-import Import a private key
-h This
Developer console commands
==========================
Ethereum only
ethereum [options] [filename]
-js Start the JavaScript REPL
filename Load the given file and interpret as JavaScript
Etheral only
-asset_path absolute path to GUI assets directory
```
addp <host>:<port> Connect to the given host
tx <addr> <amount> Send <amount> Wei to the specified <addr>
contract <value> <gasprice> Creates a new contract and launches the editor
```
See the "help" command for
*developer*
options.
Contribution
============
...
...
ethereal/assets/qml/wallet.qml
View file @
7f1a4c37
...
...
@@ -67,6 +67,7 @@ ApplicationWindow {
networkView
.
visible
=
false
historyView
.
visible
=
false
newTxView
.
visible
=
false
infoView
.
visible
=
false
view
.
visible
=
true
//root.title = "Ethereal - " = view.title
}
...
...
@@ -120,6 +121,17 @@ ApplicationWindow {
}
}
}
Image
{
source
:
ui
.
assetPath
(
"net.png"
)
anchors.horizontalCenter
:
parent
.
horizontalCenter
MouseArea
{
anchors.fill
:
parent
onClicked
:
{
setView
(
infoView
)
}
}
}
}
}
...
...
@@ -217,6 +229,33 @@ ApplicationWindow {
}
}
Rectangle
{
id
:
infoView
property
var
title
:
"Information"
visible
:
false
color
:
"#00000000"
anchors.fill
:
parent
Label
{
id
:
addressLabel
text
:
"Address"
anchors
{
margins
:
5
top
:
parent
.
top
left
:
parent
.
left
}
}
TextField
{
anchors
{
margins
:
5
left
:
addressLabel
.
right
top
:
parent
.
top
}
text
:
pub
.
getKey
().
address
width
:
500
}
}
/*
signal addPlugin(string name)
Component {
...
...
ethereal/assets/samplecoin/samplecoin.html
View file @
7f1a4c37
...
...
@@ -9,7 +9,7 @@
<script
type=
"text/javascript"
>
var
jefcoinAddr
=
"
739105c31705038744d190332e3a07c8fea8a9eb
"
var
jefcoinAddr
=
"
fc0a9436890478bb9b1c6ed7455c2535366f4a99
"
var
mAddr
=
""
function
createTransaction
()
{
...
...
ethereal/ui/gui.go
View file @
7f1a4c37
...
...
@@ -55,7 +55,7 @@ func New(ethereum *eth.Ethereum) *Gui {
}
func
(
gui
*
Gui
)
Start
(
assetPath
string
)
{
const
version
=
"0.5.0 RC
7
"
const
version
=
"0.5.0 RC
8
"
defer
gui
.
txDb
.
Close
()
...
...
@@ -74,6 +74,7 @@ func (gui *Gui) Start(assetPath string) {
// Expose the eth library and the ui library to QML
context
.
SetVar
(
"eth"
,
gui
)
context
.
SetVar
(
"pub"
,
gui
.
pub
)
gui
.
uiLib
=
NewUiLib
(
gui
.
engine
,
gui
.
eth
,
assetPath
)
context
.
SetVar
(
"ui"
,
gui
.
uiLib
)
...
...
@@ -164,7 +165,7 @@ func (gui *Gui) setWalletValue(amount, unconfirmedFunds *big.Int) {
var
str
string
if
unconfirmedFunds
!=
nil
{
pos
:=
"+"
if
unconfirmedFunds
.
Cmp
(
big
.
NewInt
(
0
))
>=
0
{
if
unconfirmedFunds
.
Cmp
(
big
.
NewInt
(
0
))
<
0
{
pos
=
"-"
}
val
:=
ethutil
.
CurrencyToString
(
new
(
big
.
Int
)
.
Abs
(
ethutil
.
BigCopy
(
unconfirmedFunds
)))
...
...
@@ -206,15 +207,10 @@ func (gui *Gui) update() {
if
txMsg
.
Event
==
"newTx:pre"
{
object
:=
state
.
GetAccount
(
gui
.
addr
)
if
bytes
.
Compare
(
tx
.
Sender
(),
gui
.
addr
)
==
0
&&
object
.
Nonce
<=
tx
.
Nonce
{
if
bytes
.
Compare
(
tx
.
Sender
(),
gui
.
addr
)
==
0
{
gui
.
win
.
Root
()
.
Call
(
"addTx"
,
ethpub
.
NewPTx
(
tx
))
gui
.
txDb
.
Put
(
tx
.
Hash
(),
tx
.
RlpEncode
())
/*
object.Nonce += 1
state.SetStateObject(object)
*/
unconfirmedFunds
.
Sub
(
unconfirmedFunds
,
tx
.
Value
)
}
else
if
bytes
.
Compare
(
tx
.
Recipient
,
gui
.
addr
)
==
0
{
gui
.
win
.
Root
()
.
Call
(
"addTx"
,
ethpub
.
NewPTx
(
tx
))
...
...
@@ -234,7 +230,7 @@ func (gui *Gui) update() {
gui
.
setWalletValue
(
object
.
Amount
,
nil
)
state
.
Set
StateObject
(
object
)
state
.
Update
StateObject
(
object
)
}
}
}
...
...
ethereum/config.go
View file @
7f1a4c37
...
...
@@ -2,6 +2,8 @@ package main
import
(
"flag"
"fmt"
"os"
)
var
StartMining
bool
...
...
@@ -23,6 +25,11 @@ var StartJsConsole bool
var
InputFile
string
func
Init
()
{
flag
.
Usage
=
func
()
{
fmt
.
Fprintf
(
os
.
Stderr
,
"%s [options] [filename]:
\n
"
,
os
.
Args
[
0
])
flag
.
PrintDefaults
()
}
flag
.
BoolVar
(
&
StartMining
,
"m"
,
false
,
"start dagger mining"
)
flag
.
BoolVar
(
&
ShowGenesis
,
"g"
,
false
,
"prints genesis header and exits"
)
flag
.
BoolVar
(
&
StartRpc
,
"r"
,
false
,
"start rpc server"
)
...
...
@@ -38,7 +45,9 @@ func Init() {
flag
.
StringVar
(
&
ImportKey
,
"import"
,
""
,
"imports the given private key (hex)"
)
flag
.
IntVar
(
&
MaxPeer
,
"x"
,
10
,
"maximum desired peers"
)
flag
.
BoolVar
(
&
StartJsConsole
,
"js"
,
false
,
"exp"
)
flag
.
StringVar
(
&
InputFile
,
"e"
,
""
,
"Run javascript file"
)
//
flag.StringVar(&InputFile, "e", "", "Run javascript file")
flag
.
Parse
()
InputFile
=
flag
.
Arg
(
0
)
}
ethereum/javascript_runtime.go
View file @
7f1a4c37
...
...
@@ -6,7 +6,10 @@ import (
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethpub"
"github.com/ethereum/eth-go/ethutil"
"github.com/robertkrimen/otto"
"github.com/obscuren/otto"
"io/ioutil"
"os"
"path/filepath"
)
type
JSRE
struct
{
...
...
@@ -53,6 +56,22 @@ func (self *JSRE) Run(code string) (otto.Value, error) {
return
self
.
vm
.
Run
(
code
)
}
func
(
self
*
JSRE
)
Require
(
file
string
)
error
{
if
len
(
filepath
.
Ext
(
file
))
==
0
{
file
+=
".js"
}
fh
,
err
:=
os
.
Open
(
file
)
if
err
!=
nil
{
return
err
}
content
,
_
:=
ioutil
.
ReadAll
(
fh
)
self
.
Run
(
"exports = {};(function() {"
+
string
(
content
)
+
"})();"
)
return
nil
}
func
(
self
*
JSRE
)
Stop
()
{
// Kill the main loop
self
.
quitChan
<-
true
...
...
@@ -82,7 +101,10 @@ out:
cb
.
Call
(
cb
,
val
)
}
}
else
if
storageObject
,
ok
:=
object
.
Resource
.
(
*
ethchain
.
StorageState
);
ok
{
fmt
.
Println
(
storageObject
)
for
_
,
cb
:=
range
self
.
objectCb
[
ethutil
.
Hex
(
storageObject
.
StateAddress
)
+
ethutil
.
Hex
(
storageObject
.
Address
)]
{
val
,
_
:=
self
.
vm
.
ToValue
(
ethpub
.
NewPStorageState
(
storageObject
))
cb
.
Call
(
cb
,
val
)
}
}
}
}
...
...
@@ -91,24 +113,65 @@ out:
func
(
self
*
JSRE
)
initStdFuncs
()
{
t
,
_
:=
self
.
vm
.
Get
(
"eth"
)
eth
:=
t
.
Object
()
eth
.
Set
(
"watch"
,
func
(
call
otto
.
FunctionCall
)
otto
.
Value
{
addr
,
_
:=
call
.
Argument
(
0
)
.
ToString
()
cb
:=
call
.
Argument
(
1
)
eth
.
Set
(
"watch"
,
self
.
watch
)
eth
.
Set
(
"addPeer"
,
self
.
addPeer
)
eth
.
Set
(
"require"
,
self
.
require
)
}
/*
* The following methods are natively implemented javascript functions
*/
// eth.watch
func
(
self
JSRE
)
watch
(
call
otto
.
FunctionCall
)
otto
.
Value
{
addr
,
_
:=
call
.
Argument
(
0
)
.
ToString
()
var
storageAddr
string
var
cb
otto
.
Value
var
storageCallback
bool
if
len
(
call
.
ArgumentList
)
>
2
{
storageCallback
=
true
storageAddr
,
_
=
call
.
Argument
(
1
)
.
ToString
()
cb
=
call
.
Argument
(
2
)
}
else
{
cb
=
call
.
Argument
(
1
)
}
if
storageCallback
{
self
.
objectCb
[
addr
+
storageAddr
]
=
append
(
self
.
objectCb
[
addr
+
storageAddr
],
cb
)
event
:=
"storage:"
+
string
(
ethutil
.
FromHex
(
addr
))
+
":"
+
string
(
ethutil
.
FromHex
(
storageAddr
))
self
.
ethereum
.
Reactor
()
.
Subscribe
(
event
,
self
.
changeChan
)
}
else
{
self
.
objectCb
[
addr
]
=
append
(
self
.
objectCb
[
addr
],
cb
)
event
:=
"object:"
+
string
(
ethutil
.
FromHex
(
addr
))
self
.
ethereum
.
Reactor
()
.
Subscribe
(
event
,
self
.
changeChan
)
}
return
otto
.
UndefinedValue
()
}
func
(
self
*
JSRE
)
addPeer
(
call
otto
.
FunctionCall
)
otto
.
Value
{
host
,
err
:=
call
.
Argument
(
0
)
.
ToString
()
if
err
!=
nil
{
return
otto
.
FalseValue
()
}
self
.
ethereum
.
ConnectToPeer
(
host
)
return
otto
.
TrueValue
()
}
func
(
self
*
JSRE
)
require
(
call
otto
.
FunctionCall
)
otto
.
Value
{
file
,
err
:=
call
.
Argument
(
0
)
.
ToString
()
if
err
!=
nil
{
return
otto
.
UndefinedValue
()
}
)
eth
.
Set
(
"addPeer"
,
func
(
call
otto
.
FunctionCall
)
otto
.
Value
{
host
,
err
:=
call
.
Argument
(
0
)
.
ToString
(
)
if
err
!=
nil
{
return
otto
.
FalseValue
()
}
self
.
ethereum
.
ConnectToPeer
(
host
)
}
if
err
:=
self
.
Require
(
file
);
err
!=
nil
{
fmt
.
Println
(
"err:"
,
err
)
return
otto
.
UndefinedValue
()
}
t
,
_
:=
self
.
vm
.
Get
(
"exports"
)
return
otto
.
TrueValue
()
})
return
t
}
ethereum/repl.go
View file @
7f1a4c37
...
...
@@ -4,7 +4,7 @@ import (
"fmt"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethpub"
"github.com/
robertkrim
en/otto"
"github.com/
obscur
en/otto"
)
type
Repl
interface
{
...
...
@@ -53,6 +53,10 @@ type JSEthereum struct {
vm
*
otto
.
Otto
}
func
(
self
*
JSEthereum
)
GetBlock
(
hash
string
)
otto
.
Value
{
return
self
.
toVal
(
self
.
PEthereum
.
GetBlock
(
hash
))
}
func
(
self
*
JSEthereum
)
GetKey
()
otto
.
Value
{
return
self
.
toVal
(
self
.
PEthereum
.
GetKey
())
}
...
...
ethereum/repl_darwin.go
View file @
7f1a4c37
...
...
@@ -8,7 +8,6 @@ package main
import
"C"
import
(
"github.com/robertkrimen/otto"
"strings"
"unsafe"
)
...
...
@@ -87,7 +86,10 @@ L:
}
}
func
(
self
*
JSRepl
)
PrintValue
(
v
alue
otto
.
Value
)
{
func
(
self
*
JSRepl
)
PrintValue
(
v
interface
{}
)
{
method
,
_
:=
self
.
re
.
vm
.
Get
(
"prettyPrint"
)
method
.
Call
(
method
,
value
)
v
,
err
:=
self
.
re
.
vm
.
ToValue
(
v
)
if
err
==
nil
{
method
.
Call
(
method
,
v
)
}
}
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