Merge pull request #3 from expanse-project/develop

GEXP 1.1.3
This commit is contained in:
Christopher Franko 2015-09-12 14:03:26 -04:00
commit a83d648597
34 changed files with 2046 additions and 63 deletions

1
.gitignore vendored
View file

@ -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

Binary file not shown.

BIN
BUILDS-GEXP/gexp-darwin-amd64 Executable file

Binary file not shown.

BIN
BUILDS-GEXP/gexp-linux-386 Executable file

Binary file not shown.

BIN
BUILDS-GEXP/gexp-linux-amd64 Executable file

Binary file not shown.

BIN
BUILDS-GEXP/gexp-linux-arm Executable file

Binary file not shown.

BIN
BUILDS-GEXP/gexp-windows-386.exe Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -16,7 +16,7 @@ master | [![Build+Status](https://build.ethdev.com/buildstatusimage?builder=L
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. 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.

View file

@ -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 (

View file

@ -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",

View file

@ -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 USERS SOLE THE USER EXPRESSLY KNOWS AND AGREES THAT THE USER IS USING THE EXPANSE PLATFORM AT THE USERS 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?`
) )

View file

@ -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)

View file

@ -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
} }

View file

@ -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)
}
}

View file

@ -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

View file

@ -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"]

View file

@ -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

1866
exp.log Normal file

File diff suppressed because it is too large Load diff

View file

@ -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

View file

@ -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
}; };

View file

@ -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,

View file

@ -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

View file

@ -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 {

View file

@ -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.

View file

@ -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"}
} }
} }

View file

@ -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