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
6eb38e02
Unverified
Commit
6eb38e02
authored
Oct 23, 2017
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cmd/puppeth: fix dashboard iframes, extend with new services
parent
51a86f61
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
441 additions
and
51 deletions
+441
-51
genesis.go
cmd/puppeth/genesis.go
+171
-0
module_dashboard.go
cmd/puppeth/module_dashboard.go
+244
-43
wizard_dashboard.go
cmd/puppeth/wizard_dashboard.go
+24
-6
wizard_genesis.go
cmd/puppeth/wizard_genesis.go
+1
-1
wizard_node.go
cmd/puppeth/wizard_node.go
+1
-1
No files found.
cmd/puppeth/genesis.go
View file @
6eb38e02
...
...
@@ -28,6 +28,140 @@ import (
"github.com/ethereum/go-ethereum/params"
)
// cppEthereumGenesisSpec represents the genesis specification format used by the
// C++ Ethereum implementation.
type
cppEthereumGenesisSpec
struct
{
SealEngine
string
`json:"sealEngine"`
Params
struct
{
AccountStartNonce
hexutil
.
Uint64
`json:"accountStartNonce"`
HomesteadForkBlock
hexutil
.
Uint64
`json:"homesteadForkBlock"`
EIP150ForkBlock
hexutil
.
Uint64
`json:"EIP150ForkBlock"`
EIP158ForkBlock
hexutil
.
Uint64
`json:"EIP158ForkBlock"`
ByzantiumForkBlock
hexutil
.
Uint64
`json:"byzantiumForkBlock"`
ConstantinopleForkBlock
hexutil
.
Uint64
`json:"constantinopleForkBlock"`
NetworkID
hexutil
.
Uint64
`json:"networkID"`
ChainID
hexutil
.
Uint64
`json:"chainID"`
MaximumExtraDataSize
hexutil
.
Uint64
`json:"maximumExtraDataSize"`
MinGasLimit
hexutil
.
Uint64
`json:"minGasLimit"`
MaxGasLimit
hexutil
.
Uint64
`json:"maxGasLimit"`
GasLimitBoundDivisor
*
hexutil
.
Big
`json:"gasLimitBoundDivisor"`
MinimumDifficulty
*
hexutil
.
Big
`json:"minimumDifficulty"`
DifficultyBoundDivisor
*
hexutil
.
Big
`json:"difficultyBoundDivisor"`
DurationLimit
*
hexutil
.
Big
`json:"durationLimit"`
BlockReward
*
hexutil
.
Big
`json:"blockReward"`
}
`json:"params"`
Genesis
struct
{
Nonce
hexutil
.
Bytes
`json:"nonce"`
Difficulty
*
hexutil
.
Big
`json:"difficulty"`
MixHash
common
.
Hash
`json:"mixHash"`
Author
common
.
Address
`json:"author"`
Timestamp
hexutil
.
Uint64
`json:"timestamp"`
ParentHash
common
.
Hash
`json:"parentHash"`
ExtraData
hexutil
.
Bytes
`json:"extraData"`
GasLimit
hexutil
.
Uint64
`json:"gasLimit"`
}
`json:"genesis"`
Accounts
map
[
common
.
Address
]
*
cppEthereumGenesisSpecAccount
`json:"accounts"`
}
// cppEthereumGenesisSpecAccount is the prefunded genesis account and/or precompiled
// contract definition.
type
cppEthereumGenesisSpecAccount
struct
{
Balance
*
hexutil
.
Big
`json:"balance"`
Nonce
uint64
`json:"nonce,omitempty"`
Precompiled
*
cppEthereumGenesisSpecBuiltin
`json:"precompiled,omitempty"`
}
// cppEthereumGenesisSpecBuiltin is the precompiled contract definition.
type
cppEthereumGenesisSpecBuiltin
struct
{
Name
string
`json:"name,omitempty"`
StartingBlock
hexutil
.
Uint64
`json:"startingBlock,omitempty"`
Linear
*
cppEthereumGenesisSpecLinearPricing
`json:"linear,omitempty"`
}
type
cppEthereumGenesisSpecLinearPricing
struct
{
Base
uint64
`json:"base"`
Word
uint64
`json:"word"`
}
// newCppEthereumGenesisSpec converts a go-ethereum genesis block into a Parity specific
// chain specification format.
func
newCppEthereumGenesisSpec
(
network
string
,
genesis
*
core
.
Genesis
)
(
*
cppEthereumGenesisSpec
,
error
)
{
// Only ethash is currently supported between go-ethereum and cpp-ethereum
if
genesis
.
Config
.
Ethash
==
nil
{
return
nil
,
errors
.
New
(
"unsupported consensus engine"
)
}
// Reconstruct the chain spec in Parity's format
spec
:=
&
cppEthereumGenesisSpec
{
SealEngine
:
"Ethash"
,
}
spec
.
Params
.
AccountStartNonce
=
0
spec
.
Params
.
HomesteadForkBlock
=
(
hexutil
.
Uint64
)(
genesis
.
Config
.
HomesteadBlock
.
Uint64
())
spec
.
Params
.
EIP150ForkBlock
=
(
hexutil
.
Uint64
)(
genesis
.
Config
.
EIP150Block
.
Uint64
())
spec
.
Params
.
EIP158ForkBlock
=
(
hexutil
.
Uint64
)(
genesis
.
Config
.
EIP158Block
.
Uint64
())
spec
.
Params
.
ByzantiumForkBlock
=
(
hexutil
.
Uint64
)(
genesis
.
Config
.
ByzantiumBlock
.
Uint64
())
spec
.
Params
.
ConstantinopleForkBlock
=
(
hexutil
.
Uint64
)(
math
.
MaxUint64
)
spec
.
Params
.
NetworkID
=
(
hexutil
.
Uint64
)(
genesis
.
Config
.
ChainId
.
Uint64
())
spec
.
Params
.
ChainID
=
(
hexutil
.
Uint64
)(
genesis
.
Config
.
ChainId
.
Uint64
())
spec
.
Params
.
MaximumExtraDataSize
=
(
hexutil
.
Uint64
)(
params
.
MaximumExtraDataSize
)
spec
.
Params
.
MinGasLimit
=
(
hexutil
.
Uint64
)(
params
.
MinGasLimit
.
Uint64
())
spec
.
Params
.
MaxGasLimit
=
(
hexutil
.
Uint64
)(
math
.
MaxUint64
)
spec
.
Params
.
MinimumDifficulty
=
(
*
hexutil
.
Big
)(
params
.
MinimumDifficulty
)
spec
.
Params
.
DifficultyBoundDivisor
=
(
*
hexutil
.
Big
)(
params
.
DifficultyBoundDivisor
)
spec
.
Params
.
GasLimitBoundDivisor
=
(
*
hexutil
.
Big
)(
params
.
GasLimitBoundDivisor
)
spec
.
Params
.
DurationLimit
=
(
*
hexutil
.
Big
)(
params
.
DurationLimit
)
spec
.
Params
.
BlockReward
=
(
*
hexutil
.
Big
)(
ethash
.
FrontierBlockReward
)
spec
.
Genesis
.
Nonce
=
(
hexutil
.
Bytes
)(
make
([]
byte
,
8
))
binary
.
LittleEndian
.
PutUint64
(
spec
.
Genesis
.
Nonce
[
:
],
genesis
.
Nonce
)
spec
.
Genesis
.
MixHash
=
genesis
.
Mixhash
spec
.
Genesis
.
Difficulty
=
(
*
hexutil
.
Big
)(
genesis
.
Difficulty
)
spec
.
Genesis
.
Author
=
genesis
.
Coinbase
spec
.
Genesis
.
Timestamp
=
(
hexutil
.
Uint64
)(
genesis
.
Timestamp
)
spec
.
Genesis
.
ParentHash
=
genesis
.
ParentHash
spec
.
Genesis
.
ExtraData
=
(
hexutil
.
Bytes
)(
genesis
.
ExtraData
)
spec
.
Genesis
.
GasLimit
=
(
hexutil
.
Uint64
)(
genesis
.
GasLimit
)
spec
.
Accounts
=
make
(
map
[
common
.
Address
]
*
cppEthereumGenesisSpecAccount
)
for
address
,
account
:=
range
genesis
.
Alloc
{
spec
.
Accounts
[
address
]
=
&
cppEthereumGenesisSpecAccount
{
Balance
:
(
*
hexutil
.
Big
)(
account
.
Balance
),
Nonce
:
account
.
Nonce
,
}
}
spec
.
Accounts
[
common
.
BytesToAddress
([]
byte
{
1
})]
.
Precompiled
=
&
cppEthereumGenesisSpecBuiltin
{
Name
:
"ecrecover"
,
Linear
:
&
cppEthereumGenesisSpecLinearPricing
{
Base
:
3000
},
}
spec
.
Accounts
[
common
.
BytesToAddress
([]
byte
{
2
})]
.
Precompiled
=
&
cppEthereumGenesisSpecBuiltin
{
Name
:
"sha256"
,
Linear
:
&
cppEthereumGenesisSpecLinearPricing
{
Base
:
60
,
Word
:
12
},
}
spec
.
Accounts
[
common
.
BytesToAddress
([]
byte
{
3
})]
.
Precompiled
=
&
cppEthereumGenesisSpecBuiltin
{
Name
:
"ripemd160"
,
Linear
:
&
cppEthereumGenesisSpecLinearPricing
{
Base
:
600
,
Word
:
120
},
}
spec
.
Accounts
[
common
.
BytesToAddress
([]
byte
{
4
})]
.
Precompiled
=
&
cppEthereumGenesisSpecBuiltin
{
Name
:
"identity"
,
Linear
:
&
cppEthereumGenesisSpecLinearPricing
{
Base
:
15
,
Word
:
3
},
}
if
genesis
.
Config
.
ByzantiumBlock
!=
nil
{
spec
.
Accounts
[
common
.
BytesToAddress
([]
byte
{
5
})]
.
Precompiled
=
&
cppEthereumGenesisSpecBuiltin
{
Name
:
"modexp"
,
StartingBlock
:
(
hexutil
.
Uint64
)(
genesis
.
Config
.
ByzantiumBlock
.
Uint64
()),
}
spec
.
Accounts
[
common
.
BytesToAddress
([]
byte
{
6
})]
.
Precompiled
=
&
cppEthereumGenesisSpecBuiltin
{
Name
:
"alt_bn128_G1_add"
,
StartingBlock
:
(
hexutil
.
Uint64
)(
genesis
.
Config
.
ByzantiumBlock
.
Uint64
()),
Linear
:
&
cppEthereumGenesisSpecLinearPricing
{
Base
:
500
},
}
spec
.
Accounts
[
common
.
BytesToAddress
([]
byte
{
7
})]
.
Precompiled
=
&
cppEthereumGenesisSpecBuiltin
{
Name
:
"alt_bn128_G1_mul"
,
StartingBlock
:
(
hexutil
.
Uint64
)(
genesis
.
Config
.
ByzantiumBlock
.
Uint64
()),
Linear
:
&
cppEthereumGenesisSpecLinearPricing
{
Base
:
40000
},
}
spec
.
Accounts
[
common
.
BytesToAddress
([]
byte
{
8
})]
.
Precompiled
=
&
cppEthereumGenesisSpecBuiltin
{
Name
:
"alt_bn128_pairing_product"
,
StartingBlock
:
(
hexutil
.
Uint64
)(
genesis
.
Config
.
ByzantiumBlock
.
Uint64
()),
}
}
return
spec
,
nil
}
// parityChainSpec is the chain specification format used by Parity.
type
parityChainSpec
struct
{
Name
string
`json:"name"`
...
...
@@ -206,3 +340,40 @@ func newParityChainSpec(network string, genesis *core.Genesis, bootnodes []strin
}
return
spec
,
nil
}
// pyEthereumGenesisSpec represents the genesis specification format used by the
// Python Ethereum implementation.
type
pyEthereumGenesisSpec
struct
{
Nonce
hexutil
.
Bytes
`json:"nonce"`
Timestamp
hexutil
.
Uint64
`json:"timestamp"`
ExtraData
hexutil
.
Bytes
`json:"extraData"`
GasLimit
hexutil
.
Uint64
`json:"gasLimit"`
Difficulty
*
hexutil
.
Big
`json:"difficulty"`
Mixhash
common
.
Hash
`json:"mixhash"`
Coinbase
common
.
Address
`json:"coinbase"`
Alloc
core
.
GenesisAlloc
`json:"alloc"`
ParentHash
common
.
Hash
`json:"parentHash"`
}
// newPyEthereumGenesisSpec converts a go-ethereum genesis block into a Parity specific
// chain specification format.
func
newPyEthereumGenesisSpec
(
network
string
,
genesis
*
core
.
Genesis
)
(
*
pyEthereumGenesisSpec
,
error
)
{
// Only ethash is currently supported between go-ethereum and pyethereum
if
genesis
.
Config
.
Ethash
==
nil
{
return
nil
,
errors
.
New
(
"unsupported consensus engine"
)
}
spec
:=
&
pyEthereumGenesisSpec
{
Timestamp
:
(
hexutil
.
Uint64
)(
genesis
.
Timestamp
),
ExtraData
:
genesis
.
ExtraData
,
GasLimit
:
(
hexutil
.
Uint64
)(
genesis
.
GasLimit
),
Difficulty
:
(
*
hexutil
.
Big
)(
genesis
.
Difficulty
),
Mixhash
:
genesis
.
Mixhash
,
Coinbase
:
genesis
.
Coinbase
,
Alloc
:
genesis
.
Alloc
,
ParentHash
:
genesis
.
ParentHash
,
}
spec
.
Nonce
=
(
hexutil
.
Bytes
)(
make
([]
byte
,
8
))
binary
.
LittleEndian
.
PutUint64
(
spec
.
Nonce
[
:
],
genesis
.
Nonce
)
return
spec
,
nil
}
cmd/puppeth/module_dashboard.go
View file @
6eb38e02
This diff is collapsed.
Click to expand it.
cmd/puppeth/wizard_dashboard.go
View file @
6eb38e02
...
...
@@ -58,7 +58,6 @@ func (w *wizard) deployDashboard() {
available
[
service
]
=
append
(
available
[
service
],
server
)
}
}
listing
:=
make
(
map
[
string
]
string
)
for
_
,
service
:=
range
[]
string
{
"ethstats"
,
"explorer"
,
"wallet"
,
"faucet"
}
{
// Gather all the locally hosted pages of this type
var
pages
[]
string
...
...
@@ -74,6 +73,14 @@ func (w *wizard) deployDashboard() {
if
infos
,
err
:=
checkEthstats
(
client
,
w
.
network
);
err
==
nil
{
port
=
infos
.
port
}
case
"explorer"
:
if
infos
,
err
:=
checkExplorer
(
client
,
w
.
network
);
err
==
nil
{
port
=
infos
.
webPort
}
case
"wallet"
:
if
infos
,
err
:=
checkWallet
(
client
,
w
.
network
);
err
==
nil
{
port
=
infos
.
webPort
}
case
"faucet"
:
if
infos
,
err
:=
checkFaucet
(
client
,
w
.
network
);
err
==
nil
{
port
=
infos
.
port
...
...
@@ -101,30 +108,41 @@ func (w *wizard) deployDashboard() {
log
.
Error
(
"Invalid listing choice, aborting"
)
return
}
var
page
string
switch
{
case
choice
<=
len
(
pages
)
:
listing
[
service
]
=
pages
[
choice
-
1
]
page
=
pages
[
choice
-
1
]
case
choice
==
len
(
pages
)
+
1
:
fmt
.
Println
()
fmt
.
Printf
(
"Which address is the external %s service at?
\n
"
,
service
)
listing
[
service
]
=
w
.
readString
()
page
=
w
.
readString
()
default
:
// No service hosting for this
}
// Save the users choice
switch
service
{
case
"ethstats"
:
infos
.
ethstats
=
page
case
"explorer"
:
infos
.
explorer
=
page
case
"wallet"
:
infos
.
wallet
=
page
case
"faucet"
:
infos
.
faucet
=
page
}
}
// If we have ethstats running, ask whether to make the secret public or not
var
ethstats
bool
if
w
.
conf
.
ethstats
!=
""
{
fmt
.
Println
()
fmt
.
Println
(
"Include ethstats secret on dashboard (y/n)? (default = yes)"
)
ethstats
=
w
.
readDefaultString
(
"y"
)
==
"y"
infos
.
trusted
=
w
.
readDefaultString
(
"y"
)
==
"y"
}
// Try to deploy the dashboard container on the host
fmt
.
Println
()
fmt
.
Printf
(
"Should the dashboard be built from scratch (y/n)? (default = no)
\n
"
)
nocache
:=
w
.
readDefaultString
(
"n"
)
!=
"n"
if
out
,
err
:=
deployDashboard
(
client
,
w
.
network
,
infos
.
port
,
infos
.
host
,
listing
,
&
w
.
conf
,
ethstat
s
,
nocache
);
err
!=
nil
{
if
out
,
err
:=
deployDashboard
(
client
,
w
.
network
,
&
w
.
conf
,
info
s
,
nocache
);
err
!=
nil
{
log
.
Error
(
"Failed to deploy dashboard container"
,
"err"
,
err
)
if
len
(
out
)
>
0
{
fmt
.
Printf
(
"%s
\n
"
,
out
)
...
...
cmd/puppeth/wizard_genesis.go
View file @
6eb38e02
...
...
@@ -37,7 +37,7 @@ func (w *wizard) makeGenesis() {
genesis
:=
&
core
.
Genesis
{
Timestamp
:
uint64
(
time
.
Now
()
.
Unix
()),
GasLimit
:
4700000
,
Difficulty
:
big
.
NewInt
(
1048576
),
Difficulty
:
big
.
NewInt
(
524288
),
Alloc
:
make
(
core
.
GenesisAlloc
),
Config
:
&
params
.
ChainConfig
{
HomesteadBlock
:
big
.
NewInt
(
1
),
...
...
cmd/puppeth/wizard_node.go
View file @
6eb38e02
...
...
@@ -65,7 +65,7 @@ func (w *wizard) deployNode(boot bool) {
fmt
.
Printf
(
"Where should data be stored on the remote machine? (default = %s)
\n
"
,
infos
.
datadir
)
infos
.
datadir
=
w
.
readDefaultString
(
infos
.
datadir
)
}
if
w
.
conf
.
genesis
.
Config
.
Ethash
!=
nil
{
if
w
.
conf
.
genesis
.
Config
.
Ethash
!=
nil
&&
!
boot
{
fmt
.
Println
()
if
infos
.
ethashdir
==
""
{
fmt
.
Printf
(
"Where should the ethash mining DAGs be stored on the remote machine?
\n
"
)
...
...
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