mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-24 13:46:43 +00:00
commit
a83d648597
34 changed files with 2046 additions and 63 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -36,3 +36,4 @@ profile.tmp
|
||||||
profile.cov
|
profile.cov
|
||||||
|
|
||||||
.idea/workspace.xml
|
.idea/workspace.xml
|
||||||
|
*.idea/
|
||||||
BIN
BUILDS-GEXP/gexp-darwin-386
Executable file
BIN
BUILDS-GEXP/gexp-darwin-386
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp-darwin-amd64
Executable file
BIN
BUILDS-GEXP/gexp-darwin-amd64
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp-linux-386
Executable file
BIN
BUILDS-GEXP/gexp-linux-386
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp-linux-amd64
Executable file
BIN
BUILDS-GEXP/gexp-linux-amd64
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp-linux-arm
Executable file
BIN
BUILDS-GEXP/gexp-linux-arm
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp-windows-386.exe
Executable file
BIN
BUILDS-GEXP/gexp-windows-386.exe
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp-windows-amd64.exe
Executable file
BIN
BUILDS-GEXP/gexp-windows-amd64.exe
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-darwin-386
Executable file
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-darwin-386
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-darwin-amd64
Executable file
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-darwin-amd64
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-linux-386
Executable file
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-linux-386
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-linux-amd64
Executable file
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-linux-amd64
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-linux-arm
Executable file
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-linux-arm
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-windows-386.exe
Executable file
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-windows-386.exe
Executable file
Binary file not shown.
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-windows-amd64.exe
Executable file
BIN
BUILDS-GEXP/gexp1.1.3-go1.5.1/gexp-windows-amd64.exe
Executable file
Binary file not shown.
|
|
@ -16,7 +16,7 @@ master | [ branch.
|
The following builds are build automatically by our build servers after each push to the [develop](https://github.com/expanse-project/go-expanse/tree/develop) branch.
|
||||||
|
|
||||||
* [Docker](https://registry.hub.docker.com/u/expanse/client-go/)
|
* [Docker](https://registry.hub.docker.com/u/expanse/go-expanse/)
|
||||||
* [OS X](http://build.ethdev.com/builds/OSX%20Go%20develop%20branch/Mist-OSX-latest.dmg)
|
* [OS X](http://build.ethdev.com/builds/OSX%20Go%20develop%20branch/Mist-OSX-latest.dmg)
|
||||||
* Ubuntu
|
* Ubuntu
|
||||||
[trusty](https://build.ethdev.com/builds/Linux%20Go%20develop%20deb%20i386-trusty/latest/) |
|
[trusty](https://build.ethdev.com/builds/Linux%20Go%20develop%20deb%20i386-trusty/latest/) |
|
||||||
|
|
@ -71,3 +71,4 @@ Commits that are directly based on master are simply ignored.
|
||||||
See [Developers' Guide](https://github.com/expanse-project/go-expanse/wiki/Developers'-Guide)
|
See [Developers' Guide](https://github.com/expanse-project/go-expanse/wiki/Developers'-Guide)
|
||||||
for more details on configuring your environment, testing, and
|
for more details on configuring your environment, testing, and
|
||||||
dependency management.
|
dependency management.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,10 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ClientIdentifier = "Gexp"
|
ClientIdentifier = "Gexp"
|
||||||
Version = "1.1.2"
|
Version = "1.1.3"
|
||||||
VersionMajor = 1
|
VersionMajor = 1
|
||||||
VersionMinor = 1
|
VersionMinor = 1
|
||||||
VersionPatch = 2
|
VersionPatch = 3
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
||||||
|
|
@ -295,7 +295,7 @@ var (
|
||||||
ListenPortFlag = cli.IntFlag{
|
ListenPortFlag = cli.IntFlag{
|
||||||
Name: "port",
|
Name: "port",
|
||||||
Usage: "Network listening port",
|
Usage: "Network listening port",
|
||||||
Value: 60606,
|
Value: 42786,
|
||||||
}
|
}
|
||||||
BootnodesFlag = cli.StringFlag{
|
BootnodesFlag = cli.StringFlag{
|
||||||
Name: "bootnodes",
|
Name: "bootnodes",
|
||||||
|
|
|
||||||
|
|
@ -22,20 +22,20 @@ const (
|
||||||
Disclaimer of Liabilites and Warranties
|
Disclaimer of Liabilites and Warranties
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
THE USER EXPRESSLY KNOWS AND AGREES THAT THE USER IS USING THE ETHEREUM PLATFORM AT THE USER’S SOLE
|
THE USER EXPRESSLY KNOWS AND AGREES THAT THE USER IS USING THE EXPANSE PLATFORM AT THE USER’S SOLE
|
||||||
RISK. THE USER REPRESENTS THAT THE USER HAS AN ADEQUATE UNDERSTANDING OF THE RISKS, USAGE AND
|
RISK. THE USER REPRESENTS THAT THE USER HAS AN ADEQUATE UNDERSTANDING OF THE RISKS, USAGE AND
|
||||||
INTRICACIES OF CRYPTOGRAPHIC TOKENS AND BLOCKCHAIN-BASED OPEN SOURCE SOFTWARE, ETH PLATFORM AND ETH.
|
INTRICACIES OF CRYPTOGRAPHIC TOKENS AND BLOCKCHAIN-BASED OPEN SOURCE SOFTWARE, EXP PLATFORM AND EXP.
|
||||||
THE USER ACKNOWLEDGES AND AGREES THAT, TO THE FULLEST EXTENT PERMITTED BY ANY APPLICABLE LAW, THE
|
THE USER ACKNOWLEDGES AND AGREES THAT, TO THE FULLEST EXTENT PERMITTED BY ANY APPLICABLE LAW, THE
|
||||||
DISCLAIMERS OF LIABILITY CONTAINED HEREIN APPLY TO ANY AND ALL DAMAGES OR INJURY WHATSOEVER CAUSED
|
DISCLAIMERS OF LIABILITY CONTAINED HEREIN APPLY TO ANY AND ALL DAMAGES OR INJURY WHATSOEVER CAUSED
|
||||||
BY OR RELATED TO RISKS OF, USE OF, OR INABILITY TO USE, ETH OR THE ETHEREUM PLATFORM UNDER ANY CAUSE
|
BY OR RELATED TO RISKS OF, USE OF, OR INABILITY TO USE, EXP OR THE EXPANSE PLATFORM UNDER ANY CAUSE
|
||||||
OR ACTION WHATSOEVER OF ANY KIND IN ANY JURISDICTION, INCLUDING, WITHOUT LIMITATION, ACTIONS FOR
|
OR ACTION WHATSOEVER OF ANY KIND IN ANY JURISDICTION, INCLUDING, WITHOUT LIMITATION, ACTIONS FOR
|
||||||
BREACH OF WARRANTY, BREACH OF CONTRACT OR TORT (INCLUDING NEGLIGENCE) AND THAT NEITHER STIFTUNG
|
BREACH OF WARRANTY, BREACH OF CONTRACT OR TORT (INCLUDING NEGLIGENCE) AND THAT NEITHER STIFTUNG
|
||||||
ETHEREUM NOR ETHEREUM TEAM SHALL BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR
|
EXPANSE NOR EXPANSE TEAM SHALL BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR
|
||||||
CONSEQUENTIAL DAMAGES, INCLUDING FOR LOSS OF PROFITS, GOODWILL OR DATA. SOME JURISDICTIONS DO NOT
|
CONSEQUENTIAL DAMAGES, INCLUDING FOR LOSS OF PROFITS, GOODWILL OR DATA. SOME JURISDICTIONS DO NOT
|
||||||
ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR CERTAIN
|
ALLOW THE EXCLUSION OF CERTAIN WARRANTIES OR THE LIMITATION OR EXCLUSION OF LIABILITY FOR CERTAIN
|
||||||
TYPES OF DAMAGES. THEREFORE, SOME OF THE ABOVE LIMITATIONS IN THIS SECTION MAY NOT APPLY TO A USER.
|
TYPES OF DAMAGES. THEREFORE, SOME OF THE ABOVE LIMITATIONS IN THIS SECTION MAY NOT APPLY TO A USER.
|
||||||
IN PARTICULAR, NOTHING IN THESE TERMS SHALL AFFECT THE STATUTORY RIGHTS OF ANY USER OR EXCLUDE
|
IN PARTICULAR, NOTHING IN THESE TERMS SHALL AFFECT THE STATUTORY RIGHTS OF ANY USER OR EXCLUDE
|
||||||
INJURY ARISING FROM ANY WILLFUL MISCONDUCT OR FRAUD OF STIFTUNG ETHEREUM.
|
INJURY ARISING FROM ANY WILLFUL MISCONDUCT OR FRAUD OF STIFTUNG EXPANSE.
|
||||||
|
|
||||||
Do you accept this agreement?`
|
Do you accept this agreement?`
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -20,4 +20,4 @@ import (
|
||||||
"math/big"
|
"math/big"
|
||||||
)
|
)
|
||||||
|
|
||||||
var BlockReward *big.Int = big.NewInt(6e+18)
|
var BlockReward *big.Int = big.NewInt(8e+18)
|
||||||
|
|
|
||||||
|
|
@ -263,6 +263,7 @@ func (self *StateObject) Copy() *StateObject {
|
||||||
stateObject.gasPool.Set(self.gasPool)
|
stateObject.gasPool.Set(self.gasPool)
|
||||||
stateObject.remove = self.remove
|
stateObject.remove = self.remove
|
||||||
stateObject.dirty = self.dirty
|
stateObject.dirty = self.dirty
|
||||||
|
stateObject.deleted = self.deleted
|
||||||
|
|
||||||
return stateObject
|
return stateObject
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
package state
|
package state
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"math/big"
|
"math/big"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
|
@ -117,3 +118,106 @@ func (s *StateSuite) TestSnapshot(c *checker.C) {
|
||||||
|
|
||||||
c.Assert(data1, checker.DeepEquals, res)
|
c.Assert(data1, checker.DeepEquals, res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// use testing instead of checker because checker does not support
|
||||||
|
// printing/logging in tests (-check.vv does not work)
|
||||||
|
func TestSnapshot2(t *testing.T) {
|
||||||
|
db, _ := ethdb.NewMemDatabase()
|
||||||
|
state := New(common.Hash{}, db)
|
||||||
|
|
||||||
|
stateobjaddr0 := toAddr([]byte("so0"))
|
||||||
|
stateobjaddr1 := toAddr([]byte("so1"))
|
||||||
|
var storageaddr common.Hash
|
||||||
|
|
||||||
|
data0 := common.BytesToHash([]byte{17})
|
||||||
|
data1 := common.BytesToHash([]byte{18})
|
||||||
|
|
||||||
|
state.SetState(stateobjaddr0, storageaddr, data0)
|
||||||
|
state.SetState(stateobjaddr1, storageaddr, data1)
|
||||||
|
|
||||||
|
// db, trie are already non-empty values
|
||||||
|
so0 := state.GetStateObject(stateobjaddr0)
|
||||||
|
so0.balance = big.NewInt(42)
|
||||||
|
so0.nonce = 43
|
||||||
|
so0.gasPool = big.NewInt(44)
|
||||||
|
so0.code = []byte{'c', 'a', 'f', 'e'}
|
||||||
|
so0.codeHash = so0.CodeHash()
|
||||||
|
so0.remove = true
|
||||||
|
so0.deleted = false
|
||||||
|
so0.dirty = false
|
||||||
|
state.SetStateObject(so0)
|
||||||
|
|
||||||
|
// and one with deleted == true
|
||||||
|
so1 := state.GetStateObject(stateobjaddr1)
|
||||||
|
so1.balance = big.NewInt(52)
|
||||||
|
so1.nonce = 53
|
||||||
|
so1.gasPool = big.NewInt(54)
|
||||||
|
so1.code = []byte{'c', 'a', 'f', 'e', '2'}
|
||||||
|
so1.codeHash = so1.CodeHash()
|
||||||
|
so1.remove = true
|
||||||
|
so1.deleted = true
|
||||||
|
so1.dirty = true
|
||||||
|
state.SetStateObject(so1)
|
||||||
|
|
||||||
|
so1 = state.GetStateObject(stateobjaddr1)
|
||||||
|
if so1 != nil {
|
||||||
|
t.Fatalf("deleted object not nil when getting")
|
||||||
|
}
|
||||||
|
|
||||||
|
snapshot := state.Copy()
|
||||||
|
state.Set(snapshot)
|
||||||
|
|
||||||
|
so0Restored := state.GetStateObject(stateobjaddr0)
|
||||||
|
so1Restored := state.GetStateObject(stateobjaddr1)
|
||||||
|
// non-deleted is equal (restored)
|
||||||
|
compareStateObjects(so0Restored, so0, t)
|
||||||
|
// deleted should be nil, both before and after restore of state copy
|
||||||
|
if so1Restored != nil {
|
||||||
|
t.Fatalf("deleted object not nil after restoring snapshot")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func compareStateObjects(so0, so1 *StateObject, t *testing.T) {
|
||||||
|
if so0.address != so1.address {
|
||||||
|
t.Fatalf("Address mismatch: have %v, want %v", so0.address, so1.address)
|
||||||
|
}
|
||||||
|
if so0.balance.Cmp(so1.balance) != 0 {
|
||||||
|
t.Fatalf("Balance mismatch: have %v, want %v", so0.balance, so1.balance)
|
||||||
|
}
|
||||||
|
if so0.nonce != so1.nonce {
|
||||||
|
t.Fatalf("Nonce mismatch: have %v, want %v", so0.nonce, so1.nonce)
|
||||||
|
}
|
||||||
|
if !bytes.Equal(so0.codeHash, so1.codeHash) {
|
||||||
|
t.Fatalf("CodeHash mismatch: have %v, want %v", so0.codeHash, so1.codeHash)
|
||||||
|
}
|
||||||
|
if !bytes.Equal(so0.code, so1.code) {
|
||||||
|
t.Fatalf("Code mismatch: have %v, want %v", so0.code, so1.code)
|
||||||
|
}
|
||||||
|
if !bytes.Equal(so0.initCode, so1.initCode) {
|
||||||
|
t.Fatalf("InitCode mismatch: have %v, want %v", so0.initCode, so1.initCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range so1.storage {
|
||||||
|
if so0.storage[k] != v {
|
||||||
|
t.Fatalf("Storage key %s mismatch: have %v, want %v", k, so0.storage[k], v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for k, v := range so0.storage {
|
||||||
|
if so1.storage[k] != v {
|
||||||
|
t.Fatalf("Storage key %s mismatch: have %v, want none.", k, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if so0.gasPool.Cmp(so1.gasPool) != 0 {
|
||||||
|
t.Fatalf("GasPool mismatch: have %v, want %v", so0.gasPool, so1.gasPool)
|
||||||
|
}
|
||||||
|
if so0.remove != so1.remove {
|
||||||
|
t.Fatalf("Remove mismatch: have %v, want %v", so0.remove, so1.remove)
|
||||||
|
}
|
||||||
|
if so0.deleted != so1.deleted {
|
||||||
|
t.Fatalf("Deleted mismatch: have %v, want %v", so0.deleted, so1.deleted)
|
||||||
|
}
|
||||||
|
if so0.dirty != so1.dirty {
|
||||||
|
t.Fatalf("Dirty mismatch: have %v, want %v", so0.dirty, so1.dirty)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ func (self *StateTransition) BuyGas() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if sender.Balance().Cmp(mgval) < 0 {
|
if sender.Balance().Cmp(mgval) < 0 {
|
||||||
return fmt.Errorf("insufficient ETH for gas (%x). Req %v, has %v", sender.Address().Bytes()[:4], mgval, sender.Balance())
|
return fmt.Errorf("insufficient EXP for gas (%x). Req %v, has %v", sender.Address().Bytes()[:4], mgval, sender.Balance())
|
||||||
}
|
}
|
||||||
if err = self.gp.SubGas(mgas, self.gasPrice); err != nil {
|
if err = self.gp.SubGas(mgas, self.gasPrice); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
FROM ubuntu:utopic
|
FROM ubuntu:utopic
|
||||||
MAINTAINER caktux
|
MAINTAINER chrisfranko
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
|
|
||||||
|
|
@ -12,11 +12,20 @@ RUN apt-get dist-upgrade -q -y
|
||||||
RUN apt-get install -q -y unattended-upgrades
|
RUN apt-get install -q -y unattended-upgrades
|
||||||
|
|
||||||
# Install Expanse
|
# Install Expanse
|
||||||
RUN apt-get install -q -y software-properties-common
|
RUN apt-get install -q -y curl git mercurial binutils bison gcc make libgmp3-dev build-essential
|
||||||
RUN add-apt-repository ppa:expanse/expanse
|
|
||||||
RUN add-apt-repository ppa:expanse/expanse-dev
|
# Install Go
|
||||||
RUN apt-get update
|
RUN \
|
||||||
RUN apt-get install -q -y gexp
|
mkdir -p /goroot && \
|
||||||
|
curl https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz | tar xvzf - -C /goroot --strip-components=1
|
||||||
|
|
||||||
|
# Set environment variables.
|
||||||
|
ENV GOROOT /goroot
|
||||||
|
ENV GOPATH /gopath
|
||||||
|
ENV PATH $GOROOT/bin:$GOPATH/bin:$PATH
|
||||||
|
|
||||||
|
RUN git clone http://www.github.com/expanse-project/go-expanse.git
|
||||||
|
RUN cd go-expanse && git checkout develop && make gexp
|
||||||
|
|
||||||
# Install supervisor
|
# Install supervisor
|
||||||
RUN apt-get install -q -y supervisor
|
RUN apt-get install -q -y supervisor
|
||||||
|
|
@ -25,7 +34,7 @@ RUN apt-get install -q -y supervisor
|
||||||
ADD supervisord.conf supervisord.conf
|
ADD supervisord.conf supervisord.conf
|
||||||
|
|
||||||
EXPOSE 9656
|
EXPOSE 9656
|
||||||
EXPOSE 60606
|
EXPOSE 42786
|
||||||
|
|
||||||
CMD ["-n", "-c", "/supervisord.conf"]
|
CMD ["-n", "-c", "/supervisord.conf"]
|
||||||
ENTRYPOINT ["/usr/bin/supervisord"]
|
ENTRYPOINT ["/usr/bin/supervisord"]
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ nodaemon=false
|
||||||
|
|
||||||
[program:gexp]
|
[program:gexp]
|
||||||
priority=30
|
priority=30
|
||||||
directory=/
|
directory=~/go-expanse/
|
||||||
command=gexp --rpc
|
command=build/bin/gexp --rpc
|
||||||
user=root
|
user=root
|
||||||
autostart=true
|
autostart=true
|
||||||
autorestart=true
|
autorestart=true
|
||||||
|
|
|
||||||
|
|
@ -60,11 +60,11 @@ var (
|
||||||
jsonlogger = logger.NewJsonLogger()
|
jsonlogger = logger.NewJsonLogger()
|
||||||
|
|
||||||
defaultBootNodes = []*discover.Node{
|
defaultBootNodes = []*discover.Node{
|
||||||
// ETH/DEV Go Bootnodes
|
// EXP/DEV Go Bootnodes
|
||||||
discover.MustParseNode("enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:60606"),
|
discover.MustParseNode("enode://f944c6702a78a0cbcd6505b76daff069dad2e45ff88896c475da2bef47091c88e5b4042211233e397ad958be998003a2674151e60719c5fdeeff5f8cc2c231a1@74.196.59.103:42786"),
|
||||||
discover.MustParseNode("enode://de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786@54.94.239.50:60606"),
|
discover.MustParseNode("enode://4055ec69e53df4bfecb95e3b65c28e4f2a1145a3bdc4d85d077b552248cf159951afd649f044783bebf48b902fbc0e96978c76236fd4ab3d5ef7d95d72b84ee5@45.55.217.136:42786"),
|
||||||
// ETH/DEV cpp-expanse (poc-9.ethdev.com)
|
discover.MustParseNode("enode://68c545b62f060dc78d4bbb9fe65cfd5979dede3c2f73fcbba9bac7fb9d1cff70e77b39cce4fa5dfdeb0d064c82db1ad8acee3915fb41f45d0a42000f92c1fd73@192.3.54.134:42786"),
|
||||||
discover.MustParseNode("enode://487611428e6c99a11a9795a6abe7b529e81315ca6aad66e2a2fc76e3adf263faba0d35466c2f8f68d561dbefa8878d4df5f1f2ddb1fbeab7f42ffb8cd328bd4a@5.1.83.226:60606"),
|
discover.MustParseNode("enode://753d7d97ffc944edf42b676731b28e059d669484eb16e4526778f83e72d35922dee01b2967722e640a4a210e923aecdb4e4962b2d70fd2ca5dc2d911590e0737@192.3.149.110:42786"),
|
||||||
}
|
}
|
||||||
|
|
||||||
staticNodes = "static-nodes.json" // Path within <datadir> to search for the static node list
|
staticNodes = "static-nodes.json" // Path within <datadir> to search for the static node list
|
||||||
|
|
|
||||||
|
|
@ -2424,11 +2424,11 @@ module.exports={
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var version = require('./version.json');
|
var version = require('./version.json');
|
||||||
var net = require('./web3/net');
|
var net = require('./web3/methods/net');
|
||||||
var exp = require('./web3/exp');
|
var exp = require('./web3/methods/exp');
|
||||||
var db = require('./web3/db');
|
var db = require('./web3/methods/db');
|
||||||
var shh = require('./web3/shh');
|
var shh = require('./web3/methods/shh');
|
||||||
var watches = require('./web3/watches');
|
var watches = require('./web3/methods/watches');
|
||||||
var Filter = require('./web3/filter');
|
var Filter = require('./web3/filter');
|
||||||
var utils = require('./utils/utils');
|
var utils = require('./utils/utils');
|
||||||
var formatters = require('./web3/formatters');
|
var formatters = require('./web3/formatters');
|
||||||
|
|
@ -2573,7 +2573,7 @@ setupMethods(web3.shh, shh.methods);
|
||||||
module.exports = web3;
|
module.exports = web3;
|
||||||
|
|
||||||
|
|
||||||
},{"./utils/config":18,"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/filter":28,"./web3/formatters":29,"./web3/method":35,"./web3/methods/db":36,"./web3/methods/eth":37,"./web3/methods/net":38,"./web3/methods/shh":39,"./web3/methods/watches":40,"./web3/property":42,"./web3/requestmanager":43}],23:[function(require,module,exports){
|
},{"./utils/config":18,"./utils/sha3":19,"./utils/utils":20,"./version.json":21,"./web3/batch":24,"./web3/filter":28,"./web3/formatters":29,"./web3/method":35,"./web3/methods/db":36,"./web3/methods/exp":37,"./web3/methods/net":38,"./web3/methods/shh":39,"./web3/methods/watches":40,"./web3/property":42,"./web3/requestmanager":43}],23:[function(require,module,exports){
|
||||||
/*
|
/*
|
||||||
This file is part of expanse.js.
|
This file is part of expanse.js.
|
||||||
|
|
||||||
|
|
@ -3237,7 +3237,7 @@ SolidityEvent.prototype.execute = function (indexed, options, callback) {
|
||||||
|
|
||||||
var o = this.encode(indexed, options);
|
var o = this.encode(indexed, options);
|
||||||
var formatter = this.decode.bind(this);
|
var formatter = this.decode.bind(this);
|
||||||
return new Filter(o, watches.eth(), formatter, callback);
|
return new Filter(o, watches.exp(), formatter, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -4270,7 +4270,7 @@ Iban.fromBban = function (bban) {
|
||||||
* @return {Iban} the IBAN object
|
* @return {Iban} the IBAN object
|
||||||
*/
|
*/
|
||||||
Iban.createIndirect = function (options) {
|
Iban.createIndirect = function (options) {
|
||||||
return Iban.fromBban('ETH' + options.institution + options.identifier);
|
return Iban.fromBban('EXP' + options.institution + options.identifier);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -4292,7 +4292,7 @@ Iban.isValid = function (iban) {
|
||||||
* @returns {Boolean} true if it is, otherwise false
|
* @returns {Boolean} true if it is, otherwise false
|
||||||
*/
|
*/
|
||||||
Iban.prototype.isValid = function () {
|
Iban.prototype.isValid = function () {
|
||||||
return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30})$/.test(this._iban) &&
|
return /^XE[0-9]{2}(EXP[0-9A-Z]{13}|[0-9A-Z]{30})$/.test(this._iban) &&
|
||||||
mod9710(iso13616Prepare(this._iban)) === 1;
|
mod9710(iso13616Prepare(this._iban)) === 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -4963,7 +4963,7 @@ module.exports = {
|
||||||
* ]
|
* ]
|
||||||
* },
|
* },
|
||||||
*
|
*
|
||||||
* @class [web3] eth
|
* @class [web3] exp
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
@ -4994,7 +4994,7 @@ var uncleCountCall = function (args) {
|
||||||
return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
|
return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @returns an array of objects describing web3.eth api methods
|
/// @returns an array of objects describing web3.exp api methods
|
||||||
|
|
||||||
var getBalance = new Method({
|
var getBalance = new Method({
|
||||||
name: 'getBalance',
|
name: 'getBalance',
|
||||||
|
|
@ -5170,7 +5170,7 @@ var methods = [
|
||||||
getWork
|
getWork
|
||||||
];
|
];
|
||||||
|
|
||||||
/// @returns an array of objects describing web3.eth api properties
|
/// @returns an array of objects describing web3.exp api properties
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -5236,11 +5236,11 @@ module.exports = {
|
||||||
var utils = require('../../utils/utils');
|
var utils = require('../../utils/utils');
|
||||||
var Property = require('../property');
|
var Property = require('../property');
|
||||||
|
|
||||||
/// @returns an array of objects describing web3.eth api methods
|
/// @returns an array of objects describing web3.exp api methods
|
||||||
var methods = [
|
var methods = [
|
||||||
];
|
];
|
||||||
|
|
||||||
/// @returns an array of objects describing web3.eth api properties
|
/// @returns an array of objects describing web3.exp api properties
|
||||||
var properties = [
|
var properties = [
|
||||||
new Property({
|
new Property({
|
||||||
name: 'listening',
|
name: 'listening',
|
||||||
|
|
@ -5356,7 +5356,7 @@ module.exports = {
|
||||||
var Method = require('../method');
|
var Method = require('../method');
|
||||||
|
|
||||||
/// @returns an array of objects describing web3.exp.filter api methods
|
/// @returns an array of objects describing web3.exp.filter api methods
|
||||||
var eth = function () {
|
var exp = function () {
|
||||||
var newFilterCall = function (args) {
|
var newFilterCall = function (args) {
|
||||||
var type = args[0];
|
var type = args[0];
|
||||||
|
|
||||||
|
|
@ -5441,7 +5441,7 @@ var shh = function () {
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
eth: eth,
|
exp: exp,
|
||||||
shh: shh
|
shh: shh
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -105,8 +105,8 @@ func TestNodeDBFetchStore(t *testing.T) {
|
||||||
node := newNode(
|
node := newNode(
|
||||||
MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
||||||
net.IP{192, 168, 0, 1},
|
net.IP{192, 168, 0, 1},
|
||||||
60606,
|
42786,
|
||||||
60606,
|
42786,
|
||||||
)
|
)
|
||||||
inst := time.Now()
|
inst := time.Now()
|
||||||
num := 314
|
num := 314
|
||||||
|
|
@ -166,8 +166,8 @@ var nodeDBSeedQueryNodes = []struct {
|
||||||
node: newNode(
|
node: newNode(
|
||||||
MustHexID("0x01d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
MustHexID("0x01d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
||||||
net.IP{127, 0, 0, 1},
|
net.IP{127, 0, 0, 1},
|
||||||
60606,
|
42786,
|
||||||
60606,
|
42786,
|
||||||
),
|
),
|
||||||
pong: time.Now().Add(-2 * time.Second),
|
pong: time.Now().Add(-2 * time.Second),
|
||||||
},
|
},
|
||||||
|
|
@ -175,8 +175,8 @@ var nodeDBSeedQueryNodes = []struct {
|
||||||
node: newNode(
|
node: newNode(
|
||||||
MustHexID("0x02d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
MustHexID("0x02d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
||||||
net.IP{127, 0, 0, 2},
|
net.IP{127, 0, 0, 2},
|
||||||
60606,
|
42786,
|
||||||
60606,
|
42786,
|
||||||
),
|
),
|
||||||
pong: time.Now().Add(-3 * time.Second),
|
pong: time.Now().Add(-3 * time.Second),
|
||||||
},
|
},
|
||||||
|
|
@ -184,8 +184,8 @@ var nodeDBSeedQueryNodes = []struct {
|
||||||
node: newNode(
|
node: newNode(
|
||||||
MustHexID("0x03d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
MustHexID("0x03d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
||||||
net.IP{127, 0, 0, 3},
|
net.IP{127, 0, 0, 3},
|
||||||
60606,
|
42786,
|
||||||
60606,
|
42786,
|
||||||
),
|
),
|
||||||
pong: time.Now().Add(-1 * time.Second),
|
pong: time.Now().Add(-1 * time.Second),
|
||||||
},
|
},
|
||||||
|
|
@ -335,8 +335,8 @@ var nodeDBExpirationNodes = []struct {
|
||||||
node: newNode(
|
node: newNode(
|
||||||
MustHexID("0x01d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
MustHexID("0x01d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
||||||
net.IP{127, 0, 0, 1},
|
net.IP{127, 0, 0, 1},
|
||||||
60606,
|
42786,
|
||||||
60606,
|
42786,
|
||||||
),
|
),
|
||||||
pong: time.Now().Add(-nodeDBNodeExpiration + time.Minute),
|
pong: time.Now().Add(-nodeDBNodeExpiration + time.Minute),
|
||||||
exp: false,
|
exp: false,
|
||||||
|
|
@ -344,8 +344,8 @@ var nodeDBExpirationNodes = []struct {
|
||||||
node: newNode(
|
node: newNode(
|
||||||
MustHexID("0x02d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
MustHexID("0x02d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
|
||||||
net.IP{127, 0, 0, 2},
|
net.IP{127, 0, 0, 2},
|
||||||
60606,
|
42786,
|
||||||
60606,
|
42786,
|
||||||
),
|
),
|
||||||
pong: time.Now().Add(-nodeDBNodeExpiration - time.Minute),
|
pong: time.Now().Add(-nodeDBNodeExpiration - time.Minute),
|
||||||
exp: true,
|
exp: true,
|
||||||
|
|
|
||||||
|
|
@ -98,10 +98,10 @@ func (n *Node) String() string {
|
||||||
// parameter "discport".
|
// parameter "discport".
|
||||||
//
|
//
|
||||||
// In the following example, the node URL describes
|
// In the following example, the node URL describes
|
||||||
// a node with IP address 10.3.58.6, TCP listening port 60606
|
// a node with IP address 10.3.58.6, TCP listening port 42786
|
||||||
// and UDP discovery port 30301.
|
// and UDP discovery port 30301.
|
||||||
//
|
//
|
||||||
// enode://<hex node id>@10.3.58.6:60606?discport=30301
|
// enode://<hex node id>@10.3.58.6:42786?discport=30301
|
||||||
func ParseNode(rawurl string) (*Node, error) {
|
func ParseNode(rawurl string) (*Node, error) {
|
||||||
var (
|
var (
|
||||||
id NodeID
|
id NodeID
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ func newUDPTest(t *testing.T) *udpTest {
|
||||||
pipe: newpipe(),
|
pipe: newpipe(),
|
||||||
localkey: newkey(),
|
localkey: newkey(),
|
||||||
remotekey: newkey(),
|
remotekey: newkey(),
|
||||||
remoteaddr: &net.UDPAddr{IP: net.IP{1, 2, 3, 4}, Port: 60606},
|
remoteaddr: &net.UDPAddr{IP: net.IP{1, 2, 3, 4}, Port: 42786},
|
||||||
}
|
}
|
||||||
test.table, test.udp = newUDP(test.localkey, test.pipe, nil, "")
|
test.table, test.udp = newUDP(test.localkey, test.pipe, nil, "")
|
||||||
return test
|
return test
|
||||||
|
|
@ -296,10 +296,10 @@ func TestUDP_findnodeMultiReply(t *testing.T) {
|
||||||
|
|
||||||
// send the reply as two packets.
|
// send the reply as two packets.
|
||||||
list := []*Node{
|
list := []*Node{
|
||||||
MustParseNode("enode://ba85011c70bcc5c04d8607d3a0ed29aa6179c092cbdda10d5d32684fb33ed01bd94f588ca8f91ac48318087dcb02eaf36773a7a453f0eedd6742af668097b29c@10.0.1.16:60606?discport=30304"),
|
MustParseNode("enode://ba85011c70bcc5c04d8607d3a0ed29aa6179c092cbdda10d5d32684fb33ed01bd94f588ca8f91ac48318087dcb02eaf36773a7a453f0eedd6742af668097b29c@10.0.1.16:42786?discport=30304"),
|
||||||
MustParseNode("enode://81fa361d25f157cd421c60dcc28d8dac5ef6a89476633339c5df30287474520caca09627da18543d9079b5b288698b542d56167aa5c09111e55acdbbdf2ef799@10.0.1.16:60606"),
|
MustParseNode("enode://81fa361d25f157cd421c60dcc28d8dac5ef6a89476633339c5df30287474520caca09627da18543d9079b5b288698b542d56167aa5c09111e55acdbbdf2ef799@10.0.1.16:42786"),
|
||||||
MustParseNode("enode://9bffefd833d53fac8e652415f4973bee289e8b1a5c6c4cbe70abf817ce8a64cee11b823b66a987f51aaa9fba0d6a91b3e6bf0d5a5d1042de8e9eeea057b217f8@10.0.1.36:30301?discport=17"),
|
MustParseNode("enode://9bffefd833d53fac8e652415f4973bee289e8b1a5c6c4cbe70abf817ce8a64cee11b823b66a987f51aaa9fba0d6a91b3e6bf0d5a5d1042de8e9eeea057b217f8@10.0.1.36:30301?discport=17"),
|
||||||
MustParseNode("enode://1b5b4aa662d7cb44a7221bfba67302590b643028197a7d5214790f3bac7aaa4a3241be9e83c09cf1f6c69d007c634faae3dc1b1221793e8446c0b3a09de65960@10.0.1.16:60606"),
|
MustParseNode("enode://1b5b4aa662d7cb44a7221bfba67302590b643028197a7d5214790f3bac7aaa4a3241be9e83c09cf1f6c69d007c634faae3dc1b1221793e8446c0b3a09de65960@10.0.1.16:42786"),
|
||||||
}
|
}
|
||||||
rpclist := make([]rpcNode, len(list))
|
rpclist := make([]rpcNode, len(list))
|
||||||
for i := range list {
|
for i := range list {
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ var (
|
||||||
DifficultyBoundDivisor = big.NewInt(2048) // The bound divisor of the difficulty, used in the update calculations.
|
DifficultyBoundDivisor = big.NewInt(2048) // The bound divisor of the difficulty, used in the update calculations.
|
||||||
QuadCoeffDiv = big.NewInt(512) // Divisor for the quadratic particle of the memory cost equation.
|
QuadCoeffDiv = big.NewInt(512) // Divisor for the quadratic particle of the memory cost equation.
|
||||||
GenesisDifficulty = big.NewInt(131072) // Difficulty of the Genesis block.
|
GenesisDifficulty = big.NewInt(131072) // Difficulty of the Genesis block.
|
||||||
DurationLimit = big.NewInt(13) // The decision boundary on the blocktime duration used to determine whether difficulty should go up or not.
|
DurationLimit = big.NewInt(60) // The decision boundary on the blocktime duration used to determine whether difficulty should go up or not.
|
||||||
SstoreSetGas = big.NewInt(20000) // Once per SLOAD operation.
|
SstoreSetGas = big.NewInt(20000) // Once per SLOAD operation.
|
||||||
LogDataGas = big.NewInt(8) // Per byte in a LOG* operation's data.
|
LogDataGas = big.NewInt(8) // Per byte in a LOG* operation's data.
|
||||||
CallStipend = big.NewInt(2300) // Free gas given at beginning of call.
|
CallStipend = big.NewInt(2300) // Free gas given at beginning of call.
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,11 @@
|
||||||
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"extraData": "0x4672616e6b6f497346726565646f6d",
|
"extraData": "0x4672616e6b6f497346726565646f6d",
|
||||||
"gasLimit": "0x1388",
|
"gasLimit": "0x1388",
|
||||||
"difficulty": "0x400000000",
|
"difficulty": "0x4000000",
|
||||||
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
||||||
"coinbase": "0x90c4384bb05d96d2f54b27e0102da5240f7833ae",
|
"coinbase": "0x90c4384bb05d96d2f54b27e0102da5240f7833ae",
|
||||||
"alloc": {
|
"alloc": {
|
||||||
"0x90c4384bb05d96d2f54b27e0102da5240f7833ae": { "balance": "1000000000000000000000000" }
|
"0x93decab0cd745598860f782ac1e8f046cb99e898": { "balance": "100000000000000000000000000000" },
|
||||||
|
"0x656a2b5ed407c26e7c04d9e5449edd3109c99506": { "balance": "77777777777777777"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -16,7 +16,7 @@ RUN cd pyethereum && curl https://bootstrap.pypa.io/bootstrap-buildout.py | pyth
|
||||||
RUN cd pyethereum && bin/buildout
|
RUN cd pyethereum && bin/buildout
|
||||||
|
|
||||||
#default port for incoming requests
|
#default port for incoming requests
|
||||||
EXPOSE 60606
|
EXPOSE 42786
|
||||||
|
|
||||||
WORKDIR /pyethereum
|
WORKDIR /pyethereum
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue