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
.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.
* [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)
* Ubuntu
[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)
for more details on configuring your environment, testing, and
dependency management.

View file

@ -48,10 +48,10 @@ import (
const (
ClientIdentifier = "Gexp"
Version = "1.1.2"
Version = "1.1.3"
VersionMajor = 1
VersionMinor = 1
VersionPatch = 2
VersionPatch = 3
)
var (

View file

@ -295,7 +295,7 @@ var (
ListenPortFlag = cli.IntFlag{
Name: "port",
Usage: "Network listening port",
Value: 60606,
Value: 42786,
}
BootnodesFlag = cli.StringFlag{
Name: "bootnodes",

View file

@ -22,20 +22,20 @@ const (
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
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
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
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
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.
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?`
)

View file

@ -20,4 +20,4 @@ import (
"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.remove = self.remove
stateObject.dirty = self.dirty
stateObject.deleted = self.deleted
return stateObject
}

View file

@ -17,6 +17,7 @@
package state
import (
"bytes"
"math/big"
"testing"
@ -117,3 +118,106 @@ func (s *StateSuite) TestSnapshot(c *checker.C) {
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
}
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 {
return err

View file

@ -1,5 +1,5 @@
FROM ubuntu:utopic
MAINTAINER caktux
MAINTAINER chrisfranko
ENV DEBIAN_FRONTEND noninteractive
@ -12,11 +12,20 @@ RUN apt-get dist-upgrade -q -y
RUN apt-get install -q -y unattended-upgrades
# Install Expanse
RUN apt-get install -q -y software-properties-common
RUN add-apt-repository ppa:expanse/expanse
RUN add-apt-repository ppa:expanse/expanse-dev
RUN apt-get update
RUN apt-get install -q -y gexp
RUN apt-get install -q -y curl git mercurial binutils bison gcc make libgmp3-dev build-essential
# Install Go
RUN \
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
RUN apt-get install -q -y supervisor
@ -25,7 +34,7 @@ RUN apt-get install -q -y supervisor
ADD supervisord.conf supervisord.conf
EXPOSE 9656
EXPOSE 60606
EXPOSE 42786
CMD ["-n", "-c", "/supervisord.conf"]
ENTRYPOINT ["/usr/bin/supervisord"]

View file

@ -3,8 +3,8 @@ nodaemon=false
[program:gexp]
priority=30
directory=/
command=gexp --rpc
directory=~/go-expanse/
command=build/bin/gexp --rpc
user=root
autostart=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()
defaultBootNodes = []*discover.Node{
// ETH/DEV Go Bootnodes
discover.MustParseNode("enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:60606"),
discover.MustParseNode("enode://de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786@54.94.239.50:60606"),
// ETH/DEV cpp-expanse (poc-9.ethdev.com)
discover.MustParseNode("enode://487611428e6c99a11a9795a6abe7b529e81315ca6aad66e2a2fc76e3adf263faba0d35466c2f8f68d561dbefa8878d4df5f1f2ddb1fbeab7f42ffb8cd328bd4a@5.1.83.226:60606"),
// EXP/DEV Go Bootnodes
discover.MustParseNode("enode://f944c6702a78a0cbcd6505b76daff069dad2e45ff88896c475da2bef47091c88e5b4042211233e397ad958be998003a2674151e60719c5fdeeff5f8cc2c231a1@74.196.59.103:42786"),
discover.MustParseNode("enode://4055ec69e53df4bfecb95e3b65c28e4f2a1145a3bdc4d85d077b552248cf159951afd649f044783bebf48b902fbc0e96978c76236fd4ab3d5ef7d95d72b84ee5@45.55.217.136:42786"),
discover.MustParseNode("enode://68c545b62f060dc78d4bbb9fe65cfd5979dede3c2f73fcbba9bac7fb9d1cff70e77b39cce4fa5dfdeb0d064c82db1ad8acee3915fb41f45d0a42000f92c1fd73@192.3.54.134:42786"),
discover.MustParseNode("enode://753d7d97ffc944edf42b676731b28e059d669484eb16e4526778f83e72d35922dee01b2967722e640a4a210e923aecdb4e4962b2d70fd2ca5dc2d911590e0737@192.3.149.110:42786"),
}
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 net = require('./web3/net');
var exp = require('./web3/exp');
var db = require('./web3/db');
var shh = require('./web3/shh');
var watches = require('./web3/watches');
var net = require('./web3/methods/net');
var exp = require('./web3/methods/exp');
var db = require('./web3/methods/db');
var shh = require('./web3/methods/shh');
var watches = require('./web3/methods/watches');
var Filter = require('./web3/filter');
var utils = require('./utils/utils');
var formatters = require('./web3/formatters');
@ -2573,7 +2573,7 @@ setupMethods(web3.shh, shh.methods);
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.
@ -3237,7 +3237,7 @@ SolidityEvent.prototype.execute = function (indexed, options, callback) {
var o = this.encode(indexed, options);
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
*/
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
*/
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;
};
@ -4963,7 +4963,7 @@ module.exports = {
* ]
* },
*
* @class [web3] eth
* @class [web3] exp
* @constructor
*/
@ -4994,7 +4994,7 @@ var uncleCountCall = function (args) {
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({
name: 'getBalance',
@ -5170,7 +5170,7 @@ var methods = [
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 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 = [
];
/// @returns an array of objects describing web3.eth api properties
/// @returns an array of objects describing web3.exp api properties
var properties = [
new Property({
name: 'listening',
@ -5356,7 +5356,7 @@ module.exports = {
var Method = require('../method');
/// @returns an array of objects describing web3.exp.filter api methods
var eth = function () {
var exp = function () {
var newFilterCall = function (args) {
var type = args[0];
@ -5441,7 +5441,7 @@ var shh = function () {
};
module.exports = {
eth: eth,
exp: exp,
shh: shh
};

View file

@ -105,8 +105,8 @@ func TestNodeDBFetchStore(t *testing.T) {
node := newNode(
MustHexID("0x1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
net.IP{192, 168, 0, 1},
60606,
60606,
42786,
42786,
)
inst := time.Now()
num := 314
@ -166,8 +166,8 @@ var nodeDBSeedQueryNodes = []struct {
node: newNode(
MustHexID("0x01d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
net.IP{127, 0, 0, 1},
60606,
60606,
42786,
42786,
),
pong: time.Now().Add(-2 * time.Second),
},
@ -175,8 +175,8 @@ var nodeDBSeedQueryNodes = []struct {
node: newNode(
MustHexID("0x02d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
net.IP{127, 0, 0, 2},
60606,
60606,
42786,
42786,
),
pong: time.Now().Add(-3 * time.Second),
},
@ -184,8 +184,8 @@ var nodeDBSeedQueryNodes = []struct {
node: newNode(
MustHexID("0x03d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
net.IP{127, 0, 0, 3},
60606,
60606,
42786,
42786,
),
pong: time.Now().Add(-1 * time.Second),
},
@ -335,8 +335,8 @@ var nodeDBExpirationNodes = []struct {
node: newNode(
MustHexID("0x01d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
net.IP{127, 0, 0, 1},
60606,
60606,
42786,
42786,
),
pong: time.Now().Add(-nodeDBNodeExpiration + time.Minute),
exp: false,
@ -344,8 +344,8 @@ var nodeDBExpirationNodes = []struct {
node: newNode(
MustHexID("0x02d9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
net.IP{127, 0, 0, 2},
60606,
60606,
42786,
42786,
),
pong: time.Now().Add(-nodeDBNodeExpiration - time.Minute),
exp: true,

View file

@ -98,10 +98,10 @@ func (n *Node) String() string {
// parameter "discport".
//
// 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.
//
// 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) {
var (
id NodeID

View file

@ -67,7 +67,7 @@ func newUDPTest(t *testing.T) *udpTest {
pipe: newpipe(),
localkey: 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, "")
return test
@ -296,10 +296,10 @@ func TestUDP_findnodeMultiReply(t *testing.T) {
// send the reply as two packets.
list := []*Node{
MustParseNode("enode://ba85011c70bcc5c04d8607d3a0ed29aa6179c092cbdda10d5d32684fb33ed01bd94f588ca8f91ac48318087dcb02eaf36773a7a453f0eedd6742af668097b29c@10.0.1.16:60606?discport=30304"),
MustParseNode("enode://81fa361d25f157cd421c60dcc28d8dac5ef6a89476633339c5df30287474520caca09627da18543d9079b5b288698b542d56167aa5c09111e55acdbbdf2ef799@10.0.1.16:60606"),
MustParseNode("enode://ba85011c70bcc5c04d8607d3a0ed29aa6179c092cbdda10d5d32684fb33ed01bd94f588ca8f91ac48318087dcb02eaf36773a7a453f0eedd6742af668097b29c@10.0.1.16:42786?discport=30304"),
MustParseNode("enode://81fa361d25f157cd421c60dcc28d8dac5ef6a89476633339c5df30287474520caca09627da18543d9079b5b288698b542d56167aa5c09111e55acdbbdf2ef799@10.0.1.16:42786"),
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))
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.
QuadCoeffDiv = big.NewInt(512) // Divisor for the quadratic particle of the memory cost equation.
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.
LogDataGas = big.NewInt(8) // Per byte in a LOG* operation's data.
CallStipend = big.NewInt(2300) // Free gas given at beginning of call.

View file

@ -4,10 +4,11 @@
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x4672616e6b6f497346726565646f6d",
"gasLimit": "0x1388",
"difficulty": "0x400000000",
"difficulty": "0x4000000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x90c4384bb05d96d2f54b27e0102da5240f7833ae",
"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
#default port for incoming requests
EXPOSE 60606
EXPOSE 42786
WORKDIR /pyethereum