Issue/fix public testnet tests #424 (#438)

* Accounts are now encrypted with a strong passphrase.
* The encrypted passphrase is stored in .travis.yml
* Public testnet tests are now run after tests on a private net
This commit is contained in:
Evgeny Danilenko 2017-11-07 20:46:11 +03:00 committed by Ivan Tomilov
parent 9a3302ac36
commit 209d5fed74
21 changed files with 199 additions and 155 deletions

View File

@ -1,28 +1,29 @@
notifications:
email: false
language: go
go:
- 1.8
- 1.8
sudo: false
dist: trusty
install:
- go get golang.org/x/tools/cmd/cover
- make lint-deps
- go get golang.org/x/tools/cmd/cover
- make lint-deps
jobs:
include:
- stage: Lint
script: make lint
- stage: Test unit and integration
script: make test-unit-coverage
- stage: Test e2e
- stage: Test e2e on privite network
script: make test-e2e
- stage: Test e2e on public network
script: make test-e2e networkid=4
cache:
directories:
- .ethereumtest
- ".ethereumtest/Mainnet"
- ".ethereumtest/Rinkeby"
- ".ethereumtest/Ropsten"
- ".ethereumtest/StatusChain"
env:
matrix:
secure: pKU50Ex43gQUElL7R9U/N6aSUdubA7ypXQeH+qFGu65mb5RAReTPHHnVmO+sEuVoepmy19T3jSfRUWupY8YsLljJpJY12y9UDg22iCbC7AFbvrVWatDIKZVsOFEvtXBiF/gJ8jPHILhm+LytekbnsB1O04YzWb/5ZOlGOxSjfoqmevGJ17vUdnPcIvRzDq41xopITCPaK1cg8PXdZVhvy2FW50hTixRIf1wVmk/qM8LWvTQTf1b+KhA9aZaIV8lzJyQvp5rUcNmQhse9/+sagldBEF4YqXCDsQsaOkXuR4furi66b3QtMKpPftUiitsQXg4R1N25wQje5W6jt/mYaZynJSB4EDF5gTvDElxdQQ352mvBircv3plesUMM2NyEVcuOSNtjQSjdaNdes2MbLIER5qDehJNNv8ZaL3dC4V9dxI/L3ajtUvULBPD39sr2L1xkA7bNsOJHQy4CBU/i8YHsbNdlq55Z8kCueNGTi31tuxjuVsfLZtitLUjJ6l/YF/T5qhoM6UVVLtfk91WCPWgDrJ7NqIMNuo+Rhph0zYvizhB686cL2Vs4tJJEr+9ltaXtxs3msbGLMshTYcHbg4PbBLZXxo0MNpq7zTDUDPkWcBpYP7qfg7Z1f6dZ4Q4tr1WneO5XST547sxjtHIp6+u2XEr5JOj5JDjHCJQoA1c=

View File

@ -13,7 +13,6 @@ endif
CGO_CFLAGS=-I/$(JAVA_HOME)/include -I/$(JAVA_HOME)/include/darwin
GOBIN = build/bin
GO ?= latest
networkid ?=
# This is a code for automatic help generator.
# It supports ANSI colors and categories.
@ -90,7 +89,6 @@ generate: ##@other Regenerate assets and other auto-generated stuff
go generate ./static
rm ./static/scripts/web3.js
mock-install: ##@other Install mocking tools
go get -u github.com/golang/mock/mockgen
@ -113,7 +111,7 @@ test-e2e: ##@tests Run e2e tests
go test -timeout 5m ./e2e/accounts/... -network=$(networkid)
go test -timeout 5m ./e2e/api/... -network=$(networkid)
go test -timeout 5m ./e2e/node/... -network=$(networkid)
go test -timeout 15m ./e2e/jail/... -network=$(networkid)
go test -timeout 30m ./e2e/jail/... -network=$(networkid)
go test -timeout 20m ./e2e/rpc/... -network=$(networkid)
go test -timeout 20m ./e2e/whisper/... -network=$(networkid)
go test -timeout 10m ./e2e/transactions/... -network=$(networkid)
@ -123,4 +121,7 @@ ci: lint mock-install mock test-unit test-e2e ##@tests Run all linters and tests
clean: ##@other Cleanup
rm -fr build/bin/*
rm coverage.out coverage-all.out coverage.html
rm -f coverage.out coverage-all.out coverage.html
deep-clean: clean
rm -Rdf .ethereumtest/StatusChain

View File

@ -29,6 +29,8 @@ Use following Makefile commands:
- `make statusgo-ios` and `make statusgo-ios-simulator` (builds iOS related artifacts in `build/os-9.3/framework`)
# Testing
To setup accounts passphrase you need to setup an environment variable: `export ACCOUNT_PASSWORD="secret_pass_phrase"`.
To test statusgo, use: `make ci`.
To test statusgo using a giving network by name, use: `make ci networkid=rinkeby`.
To test statusgo using a giving network by id number, use: `make ci networkid=3`.

View File

@ -40,9 +40,6 @@ func (s *AccountsTestSuite) TestRPCEthAccounts() {
}
func (s *AccountsTestSuite) TestRPCEthAccountsWithUpstream() {
// FIXME(tiabc): Stop skipping after https://github.com/status-im/status-go/issues/424
s.T().Skip()
if GetNetworkID() == params.StatusChainNetworkID {
s.T().Skip()
}

View File

@ -65,7 +65,7 @@ func (s *JailRPCTestSuite) TestJailRPCSend() {
s.NoError(err)
s.T().Logf("Balance of %.2f ETH found on '%s' account", balance, TestConfig.Account1.Address)
s.False(balance < 100, "wrong balance (there should be lots of test Ether on that account)")
s.False(balance < 1, "wrong balance (there should be lots of test Ether on that account)")
}
func (s *JailRPCTestSuite) TestIsConnected() {
@ -172,7 +172,7 @@ func (s *JailRPCTestSuite) TestContractDeployment() {
}
// Wait until callback is fired and `responseValue` is set. Hacky but simple.
time.Sleep(2 * time.Second)
time.Sleep(5 * time.Second)
errorValue, err := cell.Get("errorValue")
s.NoError(err)

View File

@ -5,6 +5,7 @@ import (
whisper "github.com/ethereum/go-ethereum/whisper/whisperv5"
"github.com/status-im/status-go/geth/api"
"github.com/status-im/status-go/geth/common"
"github.com/status-im/status-go/geth/log"
"github.com/status-im/status-go/geth/signal"
. "github.com/status-im/status-go/testing" //nolint: golint
"github.com/stretchr/testify/suite"
@ -16,6 +17,20 @@ type NodeManagerTestSuite struct {
NodeManager common.NodeManager
}
func init() {
for id := range TestNetworkNames {
nodeConfig, err := MakeTestNodeConfig(id)
if err != nil {
panic(err)
}
err = importTestAccouns(nodeConfig.KeyStoreDir)
if err != nil {
panic(err)
}
}
}
// StartTestNode initiazes a NodeManager instances with configuration retrieved
// from the test config.
func (s *NodeManagerTestSuite) StartTestNode(opts ...TestNodeOption) {
@ -129,6 +144,8 @@ func (s *BackendTestSuite) TxQueueManager() common.TxQueueManager {
}
func importTestAccouns(keyStoreDir string) (err error) {
log.Debug("Import accounts to", keyStoreDir)
err = common.ImportTestAccount(keyStoreDir, "test-account1.pk")
if err != nil {
return

View File

@ -80,9 +80,6 @@ func (s *TransactionsTestSuite) TestCallRPCSendTransaction() {
}
func (s *TransactionsTestSuite) TestCallRPCSendTransactionUpstream() {
// FIXME(tiabc): Stop skipping after https://github.com/status-im/status-go/issues/424
s.T().Skip()
if GetNetworkID() == params.StatusChainNetworkID {
s.T().Skip()
}
@ -312,9 +309,6 @@ func (s *TransactionsTestSuite) TestSendEther() {
}
func (s *TransactionsTestSuite) TestSendEtherTxUpstream() {
// FIXME(tiabc): Stop skipping after https://github.com/status-im/status-go/issues/424
s.T().Skip()
if GetNetworkID() == params.StatusChainNetworkID {
s.T().Skip()
}
@ -793,7 +787,7 @@ func (s *TransactionsTestSuite) TestEvictionOfQueuedTransactions() {
for i := 0; i < txqueue.DefaultTxQueueCap+5; i++ { // stress test by hitting with lots of goroutines
go s.Backend.SendTransaction(context.TODO(), common.SendTxArgs{}) // nolint: errcheck
}
time.Sleep(3 * time.Second)
time.Sleep(5 * time.Second)
s.True(txQueue.Count() <= txqueue.DefaultTxQueueCap, "transaction count should be %d (or %d): got %d", txqueue.DefaultTxQueueCap, txqueue.DefaultTxQueueCap-1, txQueue.Count())

View File

@ -100,12 +100,12 @@ func TestVerifyAccountPasswordWithAccountBeforeEIP55(t *testing.T) {
defer os.RemoveAll(keyStoreDir) //nolint: errcheck
// Import keys and make sure one was created before EIP55 introduction.
err = common.ImportTestAccount(keyStoreDir, "test-account1-before-eip55.pk")
err = common.ImportTestAccount(keyStoreDir, "test-account3-before-eip55.pk")
require.NoError(t, err)
acctManager := account.NewManager(nil)
address := gethcommon.HexToAddress(TestConfig.Account1.Address)
_, err = acctManager.VerifyAccountPassword(keyStoreDir, address.Hex(), TestConfig.Account1.Password)
address := gethcommon.HexToAddress(TestConfig.Account3.Address)
_, err = acctManager.VerifyAccountPassword(keyStoreDir, address.Hex(), TestConfig.Account3.Password)
require.NoError(t, err)
}

View File

@ -6,6 +6,7 @@ import (
"encoding/json"
"errors"
"fmt"
"os"
"strings"
"time"
@ -409,6 +410,11 @@ type DiscardTransactionsResult struct {
Results map[string]DiscardTransactionResult `json:"results"`
}
type account struct {
Address string
Password string
}
// TestConfig contains shared (among different test packages) parameters
type TestConfig struct {
Node struct {
@ -416,14 +422,9 @@ type TestConfig struct {
HTTPPort int
WSPort int
}
Account1 struct {
Address string
Password string
}
Account2 struct {
Address string
Password string
}
Account1 account
Account2 account
Account3 account
}
// NotifyResult is a JSON returned from notify message
@ -432,6 +433,8 @@ type NotifyResult struct {
Error string `json:"error,omitempty"`
}
const passphraseEnvName = "ACCOUNT_PASSWORD"
// LoadTestConfig loads test configuration values from disk
func LoadTestConfig() (*TestConfig, error) {
var testConfig TestConfig
@ -441,5 +444,10 @@ func LoadTestConfig() (*TestConfig, error) {
return nil, err
}
pass := os.Getenv(passphraseEnvName)
testConfig.Account1.Password = pass
testConfig.Account2.Password = pass
testConfig.Account3.Password = pass
return &testConfig, nil
}

View File

@ -65,8 +65,7 @@ func ToAddress(accountAddress string) *common.Address {
return &to.Address
}
// ImportTestAccount checks if test account exists in keystore, and if not
// tries to import it (from static resources, see "static/keys" folder)
// ImportTestAccount imports keystore from static resources, see "static/keys" folder
func ImportTestAccount(keystoreDir, accountFile string) error {
// make sure that keystore folder exists
if _, err := os.Stat(keystoreDir); os.IsNotExist(err) {
@ -74,15 +73,12 @@ func ImportTestAccount(keystoreDir, accountFile string) error {
}
dst := filepath.Join(keystoreDir, accountFile)
if _, err := os.Stat(dst); os.IsNotExist(err) {
err = ioutil.WriteFile(dst, static.MustAsset("keys/"+accountFile), 0644)
err := ioutil.WriteFile(dst, static.MustAsset("keys/"+accountFile), 0644)
if err != nil {
log.Warn("cannot copy test account PK", "error", err)
return err
}
}
return nil
return err
}
// PanicAfter throws panic() after waitSeconds, unless abort channel receives notification

View File

@ -190,6 +190,8 @@ func (m *Manager) CompleteTransaction(id common.QueuedTxID, password string) (ge
return hash, err
}
const cancelTimeout = time.Minute
func (m *Manager) completeLocalTransaction(queuedTx *common.QueuedTx, password string) (gethcommon.Hash, error) {
log.Info("complete transaction using local node", "id", queuedTx.ID)
@ -198,7 +200,7 @@ func (m *Manager) completeLocalTransaction(queuedTx *common.QueuedTx, password s
return gethcommon.Hash{}, err
}
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
ctx, cancel := context.WithTimeout(context.Background(), cancelTimeout)
defer cancel()
return les.StatusBackend.SendTransaction(ctx, status.SendTxArgs(queuedTx.Args), password)
@ -226,7 +228,7 @@ func (m *Manager) completeRemoteTransaction(queuedTx *common.QueuedTx, password
}
// We need to request a new transaction nounce from upstream node.
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
ctx, cancel := context.WithTimeout(context.Background(), cancelTimeout)
defer cancel()
var txCount hexutil.Uint
@ -282,7 +284,7 @@ func (m *Manager) completeRemoteTransaction(queuedTx *common.QueuedTx, password
return emptyHash, err
}
ctx2, cancel2 := context.WithTimeout(context.Background(), time.Minute)
ctx2, cancel2 := context.WithTimeout(context.Background(), cancelTimeout)
defer cancel2()
if err := client.CallContext(ctx2, nil, "eth_sendRawTransaction", gethcommon.ToHex(txBytes)); err != nil {
@ -298,7 +300,7 @@ func (m *Manager) estimateGas(args common.SendTxArgs) (*hexutil.Big, error) {
}
client := m.nodeManager.RPCClient()
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
ctx, cancel := context.WithTimeout(context.Background(), cancelTimeout)
defer cancel()
var gasPrice hexutil.Big
@ -342,7 +344,7 @@ func (m *Manager) estimateGas(args common.SendTxArgs) (*hexutil.Big, error) {
func (m *Manager) gasPrice() (*hexutil.Big, error) {
client := m.nodeManager.RPCClient()
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
ctx, cancel := context.WithTimeout(context.Background(), cancelTimeout)
defer cancel()
var gasPrice hexutil.Big

View File

@ -32,21 +32,41 @@ import (
const zeroHash = "0x0000000000000000000000000000000000000000000000000000000000000000"
var nodeConfigJSON = `{
"NetworkId": ` + strconv.Itoa(params.StatusChainNetworkID) + `,
"DataDir": "` + TestDataDir + `",
var testChainDir string
var nodeConfigJSON string
func init() {
testChainDir = filepath.Join(TestDataDir, TestNetworkNames[GetNetworkID()])
nodeConfigJSON = `{
"NetworkId": ` + strconv.Itoa(GetNetworkID()) + `,
"DataDir": "` + testChainDir + `",
"HTTPPort": ` + strconv.Itoa(TestConfig.Node.HTTPPort) + `,
"WSPort": ` + strconv.Itoa(TestConfig.Node.WSPort) + `,
"LogLevel": "INFO"
}`
}
// nolint: deadcode
func testExportedAPI(t *testing.T, done chan struct{}) {
<-startTestNode(t)
defer func() {
done <- struct{}{}
}()
// prepare accounts
testKeyDir := filepath.Join(testChainDir, "keystore")
if err := common.ImportTestAccount(testKeyDir, "test-account1.pk"); err != nil {
panic(err)
}
if err := common.ImportTestAccount(testKeyDir, "test-account2.pk"); err != nil {
panic(err)
}
// FIXME(tiabc): All of that is done because usage of cgo is not supported in tests.
// Probably, there should be a cleaner way, for example, test cgo bindings in e2e tests
// separately from other internal tests.
// FIXME(@jekamas): ATTENTION! this tests depends on each other!
tests := []struct {
name string
fn func(t *testing.T) bool
@ -124,11 +144,10 @@ func testExportedAPI(t *testing.T, done chan struct{}) {
for _, test := range tests {
t.Logf("=== RUN %s", test.name)
if ok := test.fn(t); !ok {
t.Logf("=== FAILED %s", test.name)
break
}
}
done <- struct{}{}
}
func testVerifyAccountPassword(t *testing.T) bool {
@ -740,7 +759,7 @@ func testCompleteTransaction(t *testing.T) bool {
// log into account from which transactions will be sent
if err := statusAPI.SelectAccount(TestConfig.Account1.Address, TestConfig.Account1.Password); err != nil {
t.Errorf("cannot select account: %v", TestConfig.Account1.Address)
t.Errorf("cannot select account: %v. Error %q", TestConfig.Account1.Address, err)
return false
}
@ -754,7 +773,7 @@ func testCompleteTransaction(t *testing.T) bool {
signal.SetDefaultNodeNotificationHandler(func(jsonEvent string) {
var envelope signal.Envelope
if err := json.Unmarshal([]byte(jsonEvent), &envelope); err != nil {
t.Errorf("cannot unmarshal event's JSON: %s", jsonEvent)
t.Errorf("cannot unmarshal event's JSON: %s. Error %q", jsonEvent, err)
return
}
if envelope.Type == txqueue.EventTransactionQueued {
@ -1358,16 +1377,19 @@ func testExecuteJS(t *testing.T) bool {
}
func startTestNode(t *testing.T) <-chan struct{} {
testDir := filepath.Join(TestDataDir, TestNetworkNames[GetNetworkID()])
syncRequired := false
if _, err := os.Stat(TestDataDir); os.IsNotExist(err) {
if _, err := os.Stat(testDir); os.IsNotExist(err) {
syncRequired = true
}
// inject test accounts
if err := common.ImportTestAccount(filepath.Join(TestDataDir, "keystore"), "test-account1.pk"); err != nil {
testKeyDir := filepath.Join(testDir, "keystore")
if err := common.ImportTestAccount(testKeyDir, "test-account1.pk"); err != nil {
panic(err)
}
if err := common.ImportTestAccount(filepath.Join(TestDataDir, "keystore"), "test-account2.pk"); err != nil {
if err := common.ImportTestAccount(testKeyDir, "test-account2.pk"); err != nil {
panic(err)
}

View File

@ -3,13 +3,12 @@
// scripts/README.md
// scripts/web3.js
// config/cht.json
// config/linter_exclude_list.txt
// config/status-chain-genesis.json
// config/test-data.json
// keys/firebaseauthkey
// keys/test-account1-before-eip55.pk
// keys/test-account1.pk
// keys/test-account2.pk
// keys/test-account3-before-eip55.pk
// keys/wnodekey
// keys/wnodepassword
// testdata/jail/commands.js
@ -101,7 +100,7 @@ func scriptsReadmeMd() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "scripts/README.md", size: 133, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "scripts/README.md", size: 133, mode: os.FileMode(420), modTime: time.Unix(1506892492, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -121,7 +120,7 @@ func scriptsWeb3Js() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "scripts/web3.js", size: 497689, mode: os.FileMode(420), modTime: time.Unix(1509276742, 0)}
info := bindataFileInfo{name: "scripts/web3.js", size: 497689, mode: os.FileMode(420), modTime: time.Unix(1509869327, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -141,32 +140,12 @@ func configChtJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "config/cht.json", size: 7418, mode: os.FileMode(420), modTime: time.Unix(1509276544, 0)}
info := bindataFileInfo{name: "config/cht.json", size: 7418, mode: os.FileMode(420), modTime: time.Unix(1509365052, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _configLinter_exclude_listTxt = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")
func configLinter_exclude_listTxtBytes() ([]byte, error) {
return bindataRead(
_configLinter_exclude_listTxt,
"config/linter_exclude_list.txt",
)
}
func configLinter_exclude_listTxt() (*asset, error) {
bytes, err := configLinter_exclude_listTxtBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "config/linter_exclude_list.txt", size: 0, mode: os.FileMode(420), modTime: time.Unix(1509276432, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _configStatusChainGenesisJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\x4b\x8e\xdb\x30\x0c\x86\xf7\x39\x85\xa0\x75\x17\xd4\x83\xa4\xe4\x9d\xed\x38\x68\x81\xee\x7a\x02\x5a\x92\x27\xc6\x38\x71\x90\x38\xc0\x4c\x8b\xb9\x7b\x91\x47\xd3\xa0\xe8\x78\x63\x48\x1f\xf9\x7f\x94\xf4\x6b\xa5\x94\x96\x69\x9a\x93\xae\xd4\x65\xa1\x94\xd2\x75\xae\x07\x83\xd0\x47\xc0\x76\xc0\x8e\x6a\xe6\xd0\x21\xba\xce\x60\x6d\x5c\x6c\x88\x4c\x68\xfa\x86\xff\xb6\x28\xdd\xcb\x24\xfb\x54\x74\xa5\x34\xbc\x19\xd8\x40\xbb\x01\xf2\xeb\x35\x46\x0b\x97\x4f\x5f\x0b\x3f\xbe\x5c\x7f\x9a\xb0\x05\x83\x81\x44\xa0\x2d\x06\x6d\x70\x98\x38\x04\x69\x0b\x11\x96\x68\xea\xde\xa1\xe5\x3e\x7c\x6e\x68\x4c\xdd\xf9\x35\x75\xb6\xdb\xe0\xb3\x60\x75\x97\xe8\x34\xef\x87\xf1\xe5\x11\xa0\xd3\x56\xc6\xfd\xb7\xac\x2b\xc5\xcc\xf7\x31\xb6\xf3\xae\x9c\x96\x22\xb9\x99\xe6\xf4\xaa\x2b\x05\x77\x90\x65\xde\xcc\xc7\xd7\x1f\xe7\xc3\x61\x3e\x2e\xba\x52\xcb\xf1\x5c\xee\xac\x7f\xff\x29\xfb\x65\x3c\xef\xfe\x6d\x2a\xe3\xc1\x20\x7c\x95\xd3\xf6\x36\xa3\x0d\xc9\x67\x31\x29\x89\x0f\x19\x0c\x70\x11\x2c\x62\xa3\x78\x90\x64\x70\x48\x12\x28\xc4\x98\xd0\x66\xb0\x0e\xe2\x20\xc6\x16\x71\xb1\x0f\x94\xad\x89\x49\x3f\xe7\xe2\x7f\x6d\xe1\xb1\xfb\x38\x77\x1e\x87\x61\x4c\xe7\x69\x79\xff\xf3\x16\xd7\xdb\xb9\xb2\xf2\xb6\x1c\x65\x2d\x8b\xdc\x10\x3a\xf6\x64\xd8\x33\xb2\xf3\x8e\x02\x19\x8a\x54\x2c\x20\xb0\xa5\xc8\x74\x61\x84\x16\xd0\x13\xf2\xa5\x36\x52\x21\xb6\xe0\x0b\x21\x7b\x66\x1a\xd8\x52\x7f\x8b\x7e\x91\xd3\xf7\x71\x37\x2e\xcf\x52\xd0\xab\x8f\xd5\xef\x00\x00\x00\xff\xff\x97\x48\x6e\xfd\x62\x02\x00\x00")
var _configStatusChainGenesisJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x90\x4d\x8e\xdb\x30\x0c\x85\xf7\x39\x85\xa0\x75\x17\xa4\x24\x92\x52\x76\x8e\x63\xa3\x05\xba\xeb\x09\xf4\xe7\x89\x31\x49\x1c\x24\x0e\x30\xd3\x62\xee\x5e\xe4\xa7\xe9\xa0\x98\x6e\x5a\xed\xc4\x47\xbe\xef\x91\x3f\x16\x4a\xe9\xb8\xdd\x4e\x59\x2f\xd5\xe5\xa3\x94\xd2\x4d\x69\x06\x24\x48\x01\xa8\x1d\xa8\xe3\x46\xc4\x77\x44\xb6\x43\x6a\xd0\x86\x15\x33\xfa\x55\x5a\xc9\xef\x11\xa5\x53\xdc\xc6\x7d\xae\x7a\xa9\x34\xbc\x20\xf4\xd0\xf6\xc0\x6e\xbd\xa6\x60\xe0\xf2\xf4\xb5\xf1\xed\xd3\x1d\xc1\xd4\x02\x92\xe7\x18\xa1\xad\x48\xc6\x5b\xca\xe2\x7d\x6c\x2b\x33\xd5\x80\x4d\xb2\x64\x24\xf9\xbf\x23\x56\xd8\x74\x6e\xcd\x9d\xe9\x7a\xfa\x88\xd0\x5b\xea\xc0\x1a\x2a\xb1\x78\xa9\x86\x19\xb3\xab\x7d\x20\x2c\xe4\xc5\x48\xe5\x42\xde\x16\xca\xff\xb1\x44\x03\x11\x83\x31\x68\xd8\x97\x60\x43\xb6\x31\x88\x49\x03\x39\xc6\xd2\x22\x0c\x12\x3c\x74\x1e\xdd\x3f\x20\x16\x77\x8c\xce\xd3\x7e\x18\x9f\x1e\x0e\x3a\x6f\xe2\xb8\xff\x52\xf4\x52\x89\xc8\x2d\x88\xde\x4c\xbb\x7a\x9a\x6b\x2c\xab\xed\x94\x9f\xf5\x52\xc1\x5d\x28\x71\xea\xa7\xe3\xf3\xb7\xf3\xe1\x30\x1d\x67\xbd\x54\xf3\xf1\x5c\xef\x5a\x7a\xfd\x1e\xf7\xf3\x78\xde\xfd\x39\x54\xc7\x03\x12\x7c\x8e\xa7\xcd\x2d\x24\x41\xe5\x5a\x92\xab\x01\x4a\x60\xe4\x98\x7d\x1a\x04\x31\xd4\x6a\x25\x3b\x70\x3e\x3b\x8c\x05\x82\x35\x9e\x85\x2b\x26\x1b\x4a\x66\x1f\xa1\xe6\x21\xd9\xa2\xdf\xfb\xd2\x87\x34\xff\xa8\x3e\xf6\x2e\xe3\x30\x8c\xf9\xbc\x9d\x5f\x7f\x9d\xea\x7a\x9d\xab\x56\x5f\xe6\x63\x5c\xc7\x39\xde\x03\x5a\x71\x8c\xe2\x84\xc4\x3a\xcb\x9e\x91\x03\x57\x03\x04\x62\x38\x08\x5f\x34\x26\x03\xe4\x98\xe4\xd2\x1b\xb8\xb2\x18\x70\x95\x49\x9c\x08\x0f\x62\x38\xdd\xac\x9f\xe2\xe9\xeb\xb8\x1b\xe7\xf7\x50\xd0\x8b\xb7\xc5\xcf\x00\x00\x00\xff\xff\x52\xcf\xce\x21\x29\x03\x00\x00")
func configStatusChainGenesisJsonBytes() ([]byte, error) {
return bindataRead(
@ -181,12 +160,12 @@ func configStatusChainGenesisJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "config/status-chain-genesis.json", size: 610, mode: os.FileMode(420), modTime: time.Unix(1508410633, 0)}
info := bindataFileInfo{name: "config/status-chain-genesis.json", size: 809, mode: os.FileMode(420), modTime: time.Unix(1509802928, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _configTestDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x8d\x31\x6b\xc4\x30\x0c\x46\xf7\xfc\x0a\xa1\xb9\x83\x1d\x57\xb2\x92\xcd\x09\x81\x4e\x25\x90\x83\xce\x8e\xed\x8c\x31\xc4\x57\xda\x52\xee\xbf\x17\xd3\x83\x40\xa1\xdc\x20\x10\x0f\xbe\xf7\xbe\x1b\x00\x7c\xcd\x31\x61\x0f\xf5\x07\xc0\xe5\x6b\x0f\x4b\x0a\x79\x8f\x05\x7b\x30\xea\xe9\x17\xbf\x5c\x2e\xf3\x9c\x8f\x2b\xf6\x20\xfc\x4c\x77\xfa\xb6\x9c\x8c\x1b\x80\x5b\xe5\xe8\x42\xc8\xef\xfb\x55\x9f\x52\x17\xe3\x91\x4a\x15\xa2\xfa\x74\xd1\x6d\x9a\xd4\xda\x29\x1a\x37\x9a\xd8\x59\x2b\x13\x91\x99\x34\x39\x6d\xba\x81\x59\xcb\xb0\x0e\x16\xef\x91\xd9\x97\xf2\x91\x8f\x58\xd7\xbe\xc4\xad\x1e\xfe\x8d\xb5\xff\xc4\x98\x46\xa5\x49\xd8\x7b\x35\x26\x4d\xad\x18\x0a\x56\xc4\x8f\x89\x99\x52\xa7\xdd\x6a\xa8\xb5\xab\x3c\x8c\x35\xb7\xe6\x27\x00\x00\xff\xff\x7c\x1f\x9c\xa6\x2e\x01\x00\x00")
var _configTestDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xcc\xb1\x6a\xc3\x30\x10\x80\xe1\xdd\x4f\x21\x34\x77\xd0\xdd\xe9\x4e\x27\x6f\xa6\x24\x74\x2a\x01\x07\x3a\xdb\x3a\x79\xb4\x20\x49\xa1\xa5\xe4\xdd\x8b\xdb\x42\xa0\x21\xdb\xcf\x3f\x7c\x5f\x9d\x73\xfe\xb5\x59\xf5\xbd\xdb\xda\x39\x3f\x7e\xae\x65\xac\xa5\xad\x76\xf6\xbd\xa3\xf0\xf4\xbb\x5f\x8e\xc7\xc3\xa1\x9d\x2e\xbe\x77\x2a\x91\xff\xee\xdb\x78\x7b\xd2\x39\x77\xdd\xbe\x1f\x4a\x69\xef\xeb\x05\x6e\xe8\x60\x76\xaa\xe7\x0d\xf4\xe1\x63\x4f\xbc\x0b\x84\x6c\x93\x69\xaa\x28\x02\x25\xd6\x7d\x66\x30\xd6\x84\xa9\x8a\xb1\x92\x71\xf1\xff\x41\x7c\x00\x0e\x61\x82\x8c\x08\x28\x6a\x99\x72\xa1\x29\x27\x9c\x17\x8e\x02\xf6\x0c\x61\x49\x59\xc3\x4e\x21\xde\x81\xf4\x00\x9c\x52\x0d\x08\x71\x21\x8e\x0a\xb3\xc4\x58\x81\xb2\x89\x66\x9b\x39\xce\x54\x05\x79\x81\xa2\xfa\x03\x76\xd7\xee\x3b\x00\x00\xff\xff\xdb\xbf\x70\x83\x47\x01\x00\x00")
func configTestDataJsonBytes() ([]byte, error) {
return bindataRead(
@ -201,7 +180,7 @@ func configTestDataJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "config/test-data.json", size: 302, mode: os.FileMode(420), modTime: time.Unix(1508082242, 0)}
info := bindataFileInfo{name: "config/test-data.json", size: 327, mode: os.FileMode(420), modTime: time.Unix(1509802928, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -221,32 +200,12 @@ func keysFirebaseauthkey() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "keys/firebaseauthkey", size: 153, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "keys/firebaseauthkey", size: 153, mode: os.FileMode(420), modTime: time.Unix(1509210499, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _keysTestAccount1BeforeEip55Pk = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x51\x5b\x6a\xe4\x4a\x0c\xfd\xbf\xcb\xd0\xb7\x0d\xf5\x92\xea\xb1\x1b\xa9\xa4\x22\x26\x1d\x77\x63\xbb\x73\x3b\x84\xec\x7d\x70\xc3\x4c\xc8\xc0\x7c\x4a\x1c\x1d\x9d\xc7\x27\xb0\xea\x66\xfb\x0e\x0d\x58\x79\x78\x74\x52\x1d\xf6\x81\x46\x9c\x73\x31\xc4\x68\x1e\xd9\xc7\x2a\x44\xbe\x88\x48\x86\x09\xfa\xf6\x71\x3b\xae\xd0\x3e\xa1\x2f\xb7\x17\xdb\xce\x6b\xdb\x67\x1f\xca\xdc\x8f\xed\x04\x3c\xd7\x87\x3d\x0e\x68\x60\x24\x89\x4b\x16\x0a\xd6\x99\x84\x30\x49\x42\xeb\xc5\x11\xfb\x2a\xc8\x65\x70\x30\xf3\x12\xab\x86\xce\x3e\x27\x47\xc3\xfb\x21\xc5\xa7\x50\x12\xe2\x1f\xbe\x1b\x6f\xfc\xb6\x9f\x6f\x97\x77\x68\x50\x28\xa2\x47\xed\x4a\x6e\x14\xa9\xc3\x7a\x56\x14\xc6\x3a\x02\x97\x8a\x06\x5f\x13\xbc\xea\x80\x06\xfb\x53\x30\x3c\xc7\x6f\x12\x7d\xbd\xd8\x0a\x2d\x86\x09\x56\x68\x81\x82\x4f\x69\x82\x1b\x34\x3f\xc1\x06\xad\x4c\xb0\xf3\xe5\x34\x50\xa2\x25\x2d\x18\x54\xd4\x6b\x12\xa9\xb1\xfb\x5a\x6a\x8e\xa4\x9a\xfa\x48\x29\x45\x71\x25\x85\x9a\x0b\x93\x59\x8f\x8e\x2a\xfb\x98\x1c\x75\x89\xe4\xf0\x14\xf2\xc6\x1d\x1a\x64\x75\x6e\x54\x62\x13\x4f\x25\x65\x9f\x43\x2a\x43\xba\xe8\xb0\x1e\x94\x94\xa9\x2a\xab\x31\x39\x23\x0c\x67\x20\x8e\x52\xb0\x58\x5d\xcd\x52\x43\x3c\x99\x16\x85\x06\xd2\x5d\x0a\x03\xf3\xcc\x5a\xfd\x9c\x12\xd6\x99\x1d\xd2\x4c\x2e\x77\x2b\x8e\x33\x39\x85\x09\xde\x6d\xdb\x97\xeb\x69\x72\x82\xff\x5f\x96\xfd\x66\x9b\xad\x2c\x17\x53\x68\xc7\x76\xb7\x09\xec\x71\xd8\xaa\xa6\xaf\xf6\xf1\xa3\xcf\xbf\x4b\xfc\x57\x09\xdf\x21\xff\x8c\x77\xbd\x5f\x2e\xbf\x5d\x9f\x98\xfd\x2e\xdc\xfb\xf5\xbe\x1e\xcb\xaa\xf6\x80\xe6\xbe\xfe\xfb\x15\x00\x00\xff\xff\x40\x04\x49\xb9\x7e\x02\x00\x00")
func keysTestAccount1BeforeEip55PkBytes() ([]byte, error) {
return bindataRead(
_keysTestAccount1BeforeEip55Pk,
"keys/test-account1-before-eip55.pk",
)
}
func keysTestAccount1BeforeEip55Pk() (*asset, error) {
bytes, err := keysTestAccount1BeforeEip55PkBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "keys/test-account1-before-eip55.pk", size: 638, mode: os.FileMode(420), modTime: time.Unix(1508082242, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _keysTestAccount1Pk = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\xcd\x6a\x1b\x41\x10\x84\xef\x79\x8c\x3e\xef\xc2\xfc\xf6\xfc\xdc\xa4\xa0\x07\xe9\x9e\xee\xc1\x8b\xe4\x95\xd8\x5d\x39\x32\xc6\xef\x1e\x56\x90\x18\x07\x72\x9c\xa1\xa8\xae\xaa\xef\x03\x48\x64\xd1\x75\x85\x0a\x07\x39\x74\x1b\x0d\x17\x13\x7f\xf6\x78\xc2\x43\x4a\xf9\x14\xa3\x3f\xd9\x78\xb0\xbe\x1c\x11\x6d\x3e\xf2\x31\xc1\x00\x6d\x79\xbf\x6d\x57\xa8\x1f\xd0\xa6\xdb\x8b\x2e\x50\x81\x74\x1d\xad\xcb\x63\xdb\x96\x5d\xf0\xfc\xde\xf4\xb1\x41\x05\x45\x0e\x94\x13\xa3\xd3\x46\xc8\x18\x03\x87\xa8\x2d\x1b\x24\x5b\x38\x52\xee\xe4\x54\x2d\xfb\x22\xae\x91\x4d\xc1\x60\xb7\xb6\x73\xb6\xc1\xe5\x10\xe3\x5f\xbf\x1b\x2d\xf4\xba\xee\x67\xa7\x37\xa8\x90\xd1\x47\x1b\xa5\x09\x9a\x9e\xb9\x74\x6d\x49\x22\x53\x2c\xdd\x51\x2e\x51\xe1\x73\x80\xb3\x74\xa8\xb0\x3e\x03\xc3\xf3\xf9\x65\x22\xe7\x8b\xce\x50\xbd\x1b\x60\x86\xea\xd0\xd9\x10\x06\xb8\x41\xb5\x03\x2c\x50\xf3\x00\x2b\x5d\xf6\x02\xd9\x6b\x90\x1c\x9d\xb0\x58\x09\xcc\xc5\x37\x5b\x72\x49\x1e\x45\x42\xeb\x21\x04\xcf\x26\x07\x57\x52\x26\x54\x6d\xde\x60\x21\xeb\x83\xc1\xc6\x1e\x4d\xdc\x83\xbc\x52\x83\x0a\x49\x8c\xe9\x05\x49\xd9\x62\x0e\xc9\x26\x17\x72\xe7\xc6\xd2\xb5\x39\x41\x21\x2c\x42\xa2\x84\x46\x31\xba\x7d\x10\x83\xc1\xa9\x2f\xa6\x24\x2e\xce\xef\x4e\x93\x40\x05\x6e\x26\xb8\x1e\xd3\x48\x52\xec\x18\x42\x2c\x23\x99\x88\x23\x9a\xd4\x34\x1b\x4a\x68\x04\x06\x78\xd3\x65\x9d\xae\x7b\xc9\x01\x7e\xbd\x4c\xeb\x4d\x17\x9d\x89\x2f\x2a\x50\xb7\xe5\xae\x03\xe8\x63\xd3\x59\x54\xce\xfa\xfe\x8d\xe7\xbf\x10\xff\x07\xe1\x6b\xe4\xef\xf3\xce\xf7\xcb\xe5\x4f\xeb\x5d\xb3\xde\x99\x5a\xbb\xde\xe7\x6d\x9a\x45\x1f\x50\xcd\xe7\x8f\xdf\x01\x00\x00\xff\xff\xb8\x59\x35\xa2\x7e\x02\x00\x00")
var _keysTestAccount1Pk = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\x8f\x4b\x8e\x24\x3b\x08\x45\xf7\xc2\x38\x42\xb2\x31\xd8\xd8\xf3\x57\xfb\xc0\x80\xf5\x52\xf5\x4b\x45\xa4\x4a\xdd\x2a\xd5\xde\x5b\x91\x83\xee\x19\x20\x74\xee\x3d\xdf\xa0\xee\x47\x9c\x27\x0c\x78\x29\xfc\x5f\x2a\xc8\xae\x2e\x2d\xb0\xd6\x6c\x14\x2f\x9d\xb3\xb3\x34\x6c\x51\x9d\xa5\x38\x1b\x6c\x60\xc7\xef\xfb\xe3\x13\xc6\x37\xd8\xed\xfe\x7f\x1c\x30\x40\xe3\xdc\x33\xca\x6e\x8f\xe3\x7a\x78\x9e\x1f\xf1\xeb\x01\x03\x48\x02\x7d\x89\xb7\xb4\x64\xae\x42\xea\x1a\x9c\x66\x9a\x29\x4a\x96\xa4\xa5\x63\xd0\x9c\xb9\x89\x66\xa5\x82\xe4\x66\x92\x08\x5b\x4c\x6a\x95\xd6\x5f\xde\x5d\x0f\x7d\x3f\xaf\xd8\xdb\xd7\xc5\x2d\xc4\xa6\xb4\xb0\xd8\xcc\x19\xbb\xf6\x9e\x5b\x0e\xe9\x5a\x3b\xb2\x24\xf8\xd9\xe0\xd5\x17\x0c\x38\x9f\x85\xe1\xb9\xfe\x83\xf8\xeb\x5b\x7c\xc0\x28\xb8\xc1\x07\x0c\xac\x98\x89\x36\xb8\xc3\xc8\x1b\x1c\x30\x64\x83\x53\xdf\x2e\x81\xdc\x99\xb1\xc9\x9c\x46\xab\x68\x22\xb1\xa4\xe2\xad\x79\x70\xca\x54\x8b\xa1\x08\xf6\x59\x9e\xb3\x06\xad\x1e\xc8\x68\x58\xda\xc2\xa9\xd6\xae\x22\xef\x6a\x30\xa0\xa3\x97\x60\xd2\xde\x22\xbc\x74\xcf\x8b\x6a\xc3\xb6\x12\x13\x55\x26\x4c\xcb\x78\x95\x6c\x6d\x51\xb4\x14\x42\x55\xa7\x75\x76\x5b\x2e\x53\xf0\x49\xba\x39\x0c\x98\x35\x11\x59\x95\xbd\x74\xa3\x9d\xaa\xfb\x2e\x39\xe3\x8e\x16\x8c\xd9\x19\x6d\x31\x6c\xf0\x15\xc7\x79\xfb\xbc\x24\x7f\xfe\x04\x00\x00\xff\xff\x0d\x85\xaf\xaf\xeb\x01\x00\x00")
func keysTestAccount1PkBytes() ([]byte, error) {
return bindataRead(
@ -261,12 +220,12 @@ func keysTestAccount1Pk() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "keys/test-account1.pk", size: 638, mode: os.FileMode(420), modTime: time.Unix(1508082242, 0)}
info := bindataFileInfo{name: "keys/test-account1.pk", size: 491, mode: os.FileMode(420), modTime: time.Unix(1509802928, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _keysTestAccount2Pk = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x92\x3d\x8e\xdb\x47\x0c\x47\xfb\x1c\x63\x6a\x09\x18\x72\xc8\x99\xe1\xbf\x0b\x7c\x12\x7e\xc2\x82\x6d\xed\x42\xd2\x3a\x6b\x18\xbe\x7b\xa0\x2d\xe2\x2a\x40\x8a\x94\x24\x88\xc7\x1f\xc1\xf7\xb3\x69\xc4\x2d\xef\xf7\x76\xb4\xc9\x9f\x3a\xf0\x9e\xaa\xfd\x53\x02\xe3\x1e\xec\x6b\x6f\xfd\x94\x73\x72\x0a\xfc\x69\x83\x71\xd9\x6e\xa7\xe6\xb7\x1f\xaf\x8f\x97\x76\xfc\x6c\x7e\x79\xfd\x9c\xb7\x76\x34\xcd\xfb\x19\x70\x9f\xfd\x71\x7b\x0e\x7c\xb4\x1f\xf9\xfe\x68\x47\xc3\x09\xcc\xc5\x3e\x80\x49\xd0\xdd\xa8\x17\x92\xa6\x0d\xaa\x9a\x56\x16\x16\x6e\x8b\x3a\x9a\xe4\x32\x63\xde\xa5\xe4\x32\xa6\x25\x43\xd5\x3f\xbc\x57\xbd\xe9\xb7\xfb\x73\xed\xe5\x7b\x3b\x1a\x84\xd8\xe8\x34\x8c\xc5\x87\x08\x3b\x41\xaf\x8d\x1e\x32\xad\xb2\x73\xfb\x75\x6a\x5f\xa2\xda\xd1\xee\x1f\x81\xdb\x47\xf9\x1b\x12\x5f\xbe\xe6\xb5\x1d\x03\x4f\xed\xda\x0e\xea\x32\x4f\xed\xb5\x1d\xf3\xd4\x6e\xed\xd8\xa7\x76\xd7\xaf\xcf\xf8\x64\x36\x03\xfb\xee\x80\x90\x2b\xdd\xb7\x8d\x70\x53\x61\x8f\xde\x07\x78\x0d\x1b\x13\x16\x4d\x40\xa4\xe5\x40\xb4\x27\xce\xc9\xbb\x67\x90\xed\x67\x8c\x6f\xea\xed\x68\xee\xbb\xb0\x4b\x08\xe0\x56\x4a\xd1\x3d\xa6\x4f\x81\x81\x94\x40\x2c\x41\x31\x02\x15\xad\x4f\x5c\x5e\x42\x29\xa2\x2b\xb7\x8d\xce\x36\xc3\x9f\xa4\x4b\xb4\xa3\x2d\x9e\x8e\xc0\x79\x8e\xa1\x75\xa6\xc1\x71\xde\xe5\x75\x1e\x92\x36\x31\x44\x59\x7a\x3b\xb5\xef\x79\xbb\x5f\x5e\x9e\x27\x9e\xda\x5f\x9f\x2f\xf7\xd7\xbc\xe5\x55\xed\x6b\x46\x3b\x1e\xb7\xb7\x3c\xb5\x7c\x7f\xe4\x35\x32\xbe\xe4\x8f\xff\xfa\xcd\x08\x76\xa7\xe5\x91\x32\xba\x85\x89\xc2\x44\xae\xc2\xac\xc0\xd1\x4d\x5d\x94\x31\x25\x56\x22\x76\xd5\x29\xe2\x1d\x96\x93\x3a\x54\x4d\xe2\x35\x59\x17\x82\xfa\x2c\x02\x1a\x55\xca\x0c\xe9\xb5\x16\x17\x76\x43\xce\xe5\xc1\x31\x36\xcf\x2c\x96\x5c\x35\x20\xa8\x2f\x2b\x8c\x4e\x9d\x0a\x07\x0e\x01\x81\x0e\x3e\x96\x0b\x09\x63\xd9\xa6\x89\x41\xb8\x41\x05\xad\x77\x4e\xa9\x0d\x3a\x23\x40\xab\xb0\x28\x0d\xd8\x8d\x7c\x2a\xcf\x28\xe9\xcb\x85\x05\xb8\x0f\x5f\xb1\xc5\xba\xa7\xf6\xed\xf6\x6f\xae\xd5\x9c\x46\x40\x36\xe7\xda\x1b\xa6\xf9\x48\x36\x43\xa0\x89\x64\x54\xeb\x7f\x72\xad\x0b\x99\x52\x4d\x36\xf5\xb9\x6b\xab\xec\xbe\xf6\x02\xd8\x2b\x42\x80\x99\x7a\x87\xa1\x7d\x09\x5a\x8d\x00\x88\x0e\xa2\x39\x3c\x75\xc5\xf2\xfe\xdb\x35\x4c\x94\x25\x42\x43\x17\x7b\xd5\x9a\x48\xbb\x3b\x4e\x1b\xa1\x55\xbd\xd4\xd7\xf6\x28\xc0\xec\x19\x4b\x20\xa7\xc2\x40\xa8\x91\xb1\xcb\x05\x9e\xa4\xfb\x9b\xa9\xfb\xcb\xdb\xf5\x71\xb9\x46\xbe\xb7\xa3\xff\xfa\xe3\xef\x00\x00\x00\xff\xff\xa8\xbd\x92\x7e\x32\x04\x00\x00")
var _keysTestAccount2Pk = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\x8f\x4d\x8a\x1c\x3d\x0c\x40\xef\xa2\x75\x15\xd8\xb2\x6c\x4b\xde\x7d\x7c\xe4\x20\xb2\x24\x93\x66\xfe\x9a\xaa\x66\x48\x18\xe6\xee\xa1\x7a\x91\x2c\x25\xc4\xd3\x7b\x5f\xa0\xee\x47\x9c\x27\x0c\xf8\x2f\x69\x16\xc4\x8c\x8d\x5d\x8a\x58\x51\xe9\x38\x57\xa5\x96\xfd\xff\x9c\x56\x17\x4e\x3f\x38\x13\x6c\x60\xc7\xef\xfb\xe3\x03\xc6\x17\xd8\xed\xfe\x33\x0e\x18\xa0\x71\xee\x19\x79\xb7\xc7\x71\x1d\x3c\xd7\x8f\xf8\xf5\x80\x01\xac\x2b\xc9\x5c\x9a\x50\x69\xf5\xa8\x2b\x17\x2d\xcc\x33\x8a\x64\xb7\x95\xc4\x6a\x36\xa6\x65\x2c\xc8\x84\x19\x31\x45\xea\xd6\x72\x4b\x84\x75\xf1\x5f\xde\x5d\x0f\x7d\x3b\xaf\xb7\xb7\x4f\x18\xd0\x75\x56\xd1\xa0\x2e\xb9\xf6\x1e\x1d\x3d\x9a\xd7\xe9\xac\x14\x48\xa1\xf0\xbd\xc1\x8b\x2f\x18\x70\x3e\x85\xe1\x39\xfe\x83\xf8\xcb\x6b\xbc\xc3\x28\xb8\xc1\x3b\x0c\x6c\x98\x89\x36\xb8\xc3\xc8\x1b\x1c\x30\x78\x83\x53\x5f\xaf\x00\xec\xd1\x6c\x72\xe4\x10\x4f\xd6\xdb\x9a\x73\x39\x91\x99\x22\xd5\xd2\x92\x2f\xa1\x24\xd3\x4c\xd4\x68\x51\x10\xdb\xa5\x35\xeb\x72\x9e\x49\xfa\x25\xf2\xa6\x76\x29\x2f\xf7\x59\x44\x3a\x7a\xcf\xb8\x26\x8a\x52\x59\x39\x72\xd4\x92\x4a\xe4\xc2\x1e\x26\x66\xa8\x2b\x66\xc2\xda\x82\xb5\xa7\x8a\xae\x54\xa4\x5b\xbb\x48\x37\x87\x01\x93\x51\xba\x4a\xde\x25\x05\xed\x24\x5e\x77\x6d\x4b\x76\xb6\x92\x2a\xf5\xc9\xd1\x14\x36\xf8\x8c\xe3\xbc\x7d\x5c\x91\xdf\x7f\x02\x00\x00\xff\xff\x80\x42\xa2\x5c\xeb\x01\x00\x00")
func keysTestAccount2PkBytes() ([]byte, error) {
return bindataRead(
@ -281,12 +240,32 @@ func keysTestAccount2Pk() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "keys/test-account2.pk", size: 1074, mode: os.FileMode(420), modTime: time.Unix(1508082242, 0)}
info := bindataFileInfo{name: "keys/test-account2.pk", size: 491, mode: os.FileMode(420), modTime: time.Unix(1509802928, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _keysWnodekey = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x57\x15\x43\x31\x0c\x03\xd0\xff\xa2\x51\x7a\x14\x0f\x38\xf2\x08\x7f\x08\xef\xba\xcf\x89\x9b\x76\x47\xa2\x61\xd7\x15\x5d\xe4\x33\xe0\x54\x65\x04\x05\xee\xfc\x5d\xcc\x92\xad\xf0\xe2\xf4\x70\xaf\x9a\xa8\xdf\x17\x00\x00\xff\xff\x8b\x9c\x8b\x4d\x41\x00\x00\x00")
var _keysTestAccount3BeforeEip55Pk = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\x90\x49\xae\x1c\x31\x08\x86\xef\xc2\xba\x4a\xf2\x80\x31\xf8\x36\x66\xb0\xd2\x7a\x53\xab\xaa\xf5\x94\xe8\xa9\xef\x1e\x55\x2f\x92\x25\x08\x3e\xfe\x8f\x1f\x98\xee\x47\x9c\x27\x0c\x98\x3d\x52\xc9\xb8\x6a\x43\xce\x4a\x88\x91\xab\x38\xb1\xb8\x36\xd4\x1a\x54\xda\xca\xc6\x0c\x1b\xd8\xf1\xe7\xfe\xf8\x82\xf1\x03\x76\xbb\xff\x8a\xe3\xda\x8e\x73\xcf\x85\x77\x7b\x1c\xd7\xc0\xab\xfd\x88\xdf\x0f\x18\xc0\xb3\xcd\x62\xdd\x92\x54\xd2\xe6\x91\xb4\x4b\xd1\xd4\x23\xd9\xb4\x9e\xa3\xd0\x52\x29\xa9\x89\x07\xa5\x16\xcc\x52\x6b\xc2\xa9\x96\x6b\x5d\xc2\xf1\x8f\x77\x9f\xc7\xfc\x38\xaf\xb3\xb7\x6f\x18\x40\xe2\xd6\x83\x3c\x9b\xf5\x50\x2c\x9e\xb8\x51\xaf\xde\xda\x22\xaa\x88\xf0\xdc\xe0\xcd\x17\x0c\x38\x5f\x81\xe1\x55\xfe\x87\xf8\xdb\x7b\x7c\xc2\xa8\x65\x83\x4f\x18\x85\x4a\x46\xdc\xe0\x0e\x23\x6f\x70\xc0\xe0\x0d\xce\xf9\x7e\x09\x20\x27\x4e\xcb\x44\x97\x4c\xe2\x40\x6a\x2d\x47\xcb\x58\xb4\x7b\x45\x5b\xb4\x72\x5d\xa1\xa2\x48\x4d\x93\x90\x4d\x8d\x89\xad\xa0\x70\x88\x17\xbe\x82\x7c\x4c\x83\x01\x7d\xc5\xf5\xde\x29\x35\x1c\xbb\x67\x54\x12\x62\x22\xaf\xa9\x27\x63\x5d\xa9\xa0\x11\x25\x2d\x7d\x2a\x56\xa7\x39\xb3\x95\xc4\x94\x5c\x99\x5b\xbf\x48\x37\x87\x01\x9e\x68\x45\x45\xdf\x9b\x4e\xd9\x2f\xf7\x5d\x71\xd5\x5d\x6a\xd7\x6c\xb3\x38\x09\xc2\x06\xdf\x71\x9c\xb7\xaf\x4b\xf2\xf9\x37\x00\x00\xff\xff\xf5\x6a\x4d\x5a\xeb\x01\x00\x00")
func keysTestAccount3BeforeEip55PkBytes() ([]byte, error) {
return bindataRead(
_keysTestAccount3BeforeEip55Pk,
"keys/test-account3-before-eip55.pk",
)
}
func keysTestAccount3BeforeEip55Pk() (*asset, error) {
bytes, err := keysTestAccount3BeforeEip55PkBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "keys/test-account3-before-eip55.pk", size: 491, mode: os.FileMode(420), modTime: time.Unix(1509802928, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _keysWnodekey = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x07\x15\x03\x31\x0c\x03\x50\x04\xe5\xa2\xf4\x29\x1e\x70\xe4\x11\xfe\x10\xee\xbb\xcf\x89\x9b\x76\x47\xa2\x61\xd7\x15\x5d\xe4\x33\xe0\x54\x65\x04\x05\xee\xfc\x5d\xcc\x92\xad\xf0\xe2\xf4\x70\xaf\x9a\xa8\xdf\x17\x00\x00\xff\xff\x28\x09\xef\xd3\x41\x00\x00\x00")
func keysWnodekeyBytes() ([]byte, error) {
return bindataRead(
@ -301,7 +280,7 @@ func keysWnodekey() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "keys/wnodekey", size: 65, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "keys/wnodekey", size: 65, mode: os.FileMode(420), modTime: time.Unix(1509802928, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -321,7 +300,7 @@ func keysWnodepassword() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "keys/wnodepassword", size: 9, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "keys/wnodepassword", size: 9, mode: os.FileMode(420), modTime: time.Unix(1509210501, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -341,7 +320,7 @@ func testdataJailCommandsJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "testdata/jail/commands.js", size: 7677, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "testdata/jail/commands.js", size: 7677, mode: os.FileMode(420), modTime: time.Unix(1506892492, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -361,7 +340,7 @@ func testdataJailStatusJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "testdata/jail/status.js", size: 3402, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "testdata/jail/status.js", size: 3402, mode: os.FileMode(420), modTime: time.Unix(1506892492, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -381,7 +360,7 @@ func testdataJailTxSendContextNoMessageIdJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "testdata/jail/tx-send/context-no-message-id.js", size: 1793, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "testdata/jail/tx-send/context-no-message-id.js", size: 1793, mode: os.FileMode(420), modTime: time.Unix(1506892492, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -401,7 +380,7 @@ func testdataJailTxSendMessageIdNoContextJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "testdata/jail/tx-send/message-id-no-context.js", size: 1875, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "testdata/jail/tx-send/message-id-no-context.js", size: 1875, mode: os.FileMode(420), modTime: time.Unix(1506892492, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -421,7 +400,7 @@ func testdataJailTxSendNoMessageIdOrContextJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "testdata/jail/tx-send/no-message-id-or-context.js", size: 1354, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "testdata/jail/tx-send/no-message-id-or-context.js", size: 1354, mode: os.FileMode(420), modTime: time.Unix(1506892492, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -441,7 +420,7 @@ func testdataJailTxSendTxSendJs() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "testdata/jail/tx-send/tx-send.js", size: 3343, mode: os.FileMode(420), modTime: time.Unix(1505738069, 0)}
info := bindataFileInfo{name: "testdata/jail/tx-send/tx-send.js", size: 3343, mode: os.FileMode(420), modTime: time.Unix(1507541314, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -461,7 +440,7 @@ func testdataNodeTestSol() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "testdata/node/test.sol", size: 119, mode: os.FileMode(420), modTime: time.Unix(1505683992, 0)}
info := bindataFileInfo{name: "testdata/node/test.sol", size: 119, mode: os.FileMode(420), modTime: time.Unix(1506892492, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -521,13 +500,12 @@ var _bindata = map[string]func() (*asset, error){
"scripts/README.md": scriptsReadmeMd,
"scripts/web3.js": scriptsWeb3Js,
"config/cht.json": configChtJson,
"config/linter_exclude_list.txt": configLinter_exclude_listTxt,
"config/status-chain-genesis.json": configStatusChainGenesisJson,
"config/test-data.json": configTestDataJson,
"keys/firebaseauthkey": keysFirebaseauthkey,
"keys/test-account1-before-eip55.pk": keysTestAccount1BeforeEip55Pk,
"keys/test-account1.pk": keysTestAccount1Pk,
"keys/test-account2.pk": keysTestAccount2Pk,
"keys/test-account3-before-eip55.pk": keysTestAccount3BeforeEip55Pk,
"keys/wnodekey": keysWnodekey,
"keys/wnodepassword": keysWnodepassword,
"testdata/jail/commands.js": testdataJailCommandsJs,
@ -582,15 +560,14 @@ type bintree struct {
var _bintree = &bintree{nil, map[string]*bintree{
"config": &bintree{nil, map[string]*bintree{
"cht.json": &bintree{configChtJson, map[string]*bintree{}},
"linter_exclude_list.txt": &bintree{configLinter_exclude_listTxt, map[string]*bintree{}},
"status-chain-genesis.json": &bintree{configStatusChainGenesisJson, map[string]*bintree{}},
"test-data.json": &bintree{configTestDataJson, map[string]*bintree{}},
}},
"keys": &bintree{nil, map[string]*bintree{
"firebaseauthkey": &bintree{keysFirebaseauthkey, map[string]*bintree{}},
"test-account1-before-eip55.pk": &bintree{keysTestAccount1BeforeEip55Pk, map[string]*bintree{}},
"test-account1.pk": &bintree{keysTestAccount1Pk, map[string]*bintree{}},
"test-account2.pk": &bintree{keysTestAccount2Pk, map[string]*bintree{}},
"test-account3-before-eip55.pk": &bintree{keysTestAccount3BeforeEip55Pk, map[string]*bintree{}},
"wnodekey": &bintree{keysWnodekey, map[string]*bintree{}},
"wnodepassword": &bintree{keysWnodepassword, map[string]*bintree{}},
}},

View File

@ -5,6 +5,12 @@
},
"65C01586aa0Ce152835c788aCe665e91Ab3527b8": {
"balance": "0x1B1AE4D6E2EF500000"
},
"F35E0325dad87e2661c4eF951d58727e6d583d5c": {
"balance": "0x10F0CF064DD59200000"
},
"A0a19221268d939c3a972bf5461dC10f7980E814": {
"balance": "0x10F0CF064DD59200000"
}
},
"config": {
@ -12,7 +18,7 @@
"homesteadBlock": 0,
"daoForkSupport": true,
"byzantiumBlock": 0,
"eip150Hash": "0x28c4da1cca48d0107ea5ea29a40ac15fca86899c52d02309fa12ea39b86d219c",
"eip150Hash": "0x50e6edb4e90d9616ac8bf7119ee37c4048c41ad09328676e1b39dc68a0ecfb3d",
"eip155Block": 0,
"eip158Block": 0
},

View File

@ -5,11 +5,12 @@
"WSPort": 8646
},
"Account1": {
"Address": "0xAdAf150b905Cf5E6A778E553E15A139B6618BbB7",
"Password": "asdfasdf"
"Address": "0xF35E0325dad87e2661c4eF951d58727e6d583d5c"
},
"Account2": {
"Address": "0x65C01586aa0Ce152835c788aCe665e91Ab3527b8",
"Password": "asdfasdf"
"Address": "0xA0a19221268d939c3a972bf5461dC10f7980E814"
},
"Account3": {
"Address": "0xa7e0214f35481b644e139d689db54b3e625f1c88"
}
}

View File

@ -1 +0,0 @@
{"address":"adaf150b905cf5e6a778e553e15a139b6618bbb7","crypto":{"cipher":"aes-128-ctr","ciphertext":"e6b4a87b62eca6b654b45ec806a19b5a8fa2ee1b39d2ca17406f11fb81428455","cipherparams":{"iv":"863515dcd60f8b9fec7d5ba59f2a895e"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"83e4d852dbd1d4bb93c1989736dd4cf4443b0842978a6eec3069a13406cb3605"},"mac":"7d00f96aeb1684717248fbcbdfec2d6da69dadea60e65239d20642e39097b923"},"id":"bc042f57-ad91-4459-a056-607ce80a760d","version":3,"whisperenabled":true,"extendedkey":{"cipher":"","ciphertext":"","cipherparams":{"iv":""},"kdf":"","kdfparams":null,"mac":""},"subaccountindex":0}

View File

@ -1 +1 @@
{"address":"AdAf150b905Cf5E6A778E553E15A139B6618BbB7","crypto":{"cipher":"aes-128-ctr","ciphertext":"e6b4a87b62eca6b654b45ec806a19b5a8fa2ee1b39d2ca17406f11fb81428455","cipherparams":{"iv":"863515dcd60f8b9fec7d5ba59f2a895e"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"83e4d852dbd1d4bb93c1989736dd4cf4443b0842978a6eec3069a13406cb3605"},"mac":"7d00f96aeb1684717248fbcbdfec2d6da69dadea60e65239d20642e39097b923"},"id":"bc042f57-ad91-4459-a056-607ce80a760d","version":3,"whisperenabled":true,"extendedkey":{"cipher":"","ciphertext":"","cipherparams":{"iv":""},"kdf":"","kdfparams":null,"mac":""},"subaccountindex":0}
{"address":"F35E0325dad87e2661c4eF951d58727e6d583d5c","crypto":{"cipher":"aes-128-ctr","ciphertext":"48e2df8d70f8bf34adae50b0b0e3180a392e4bb178a1a4324dcc80427eb4764f","cipherparams":{"iv":"4345ca4f23cb1129a99171e89a692580"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"1955278bbc4f3a048c0a8d77de501463c28829b31463cae4f9e252c237f2bac7"},"mac":"92d3e54a97eed39d1f46727f054465420fc5f31c7f4e70e846abc95dcfd8b827"},"id":"b6044c68-39c4-46dd-8112-2ce521d52cf5","version":3}

View File

@ -1 +1 @@
{"address":"65C01586aa0Ce152835c788aCe665e91Ab3527b8","crypto":{"cipher":"aes-128-ctr","ciphertext":"26155f5c315492ccb40f24aeb34ff6bfbdbdcb7402b9e7bb558fa4c936be51ff","cipherparams":{"iv":"1d9b3043b59c3995c410f82cd96bfe05"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":4096,"p":6,"r":8,"salt":"4bb6d2080121e7ecc8b3dcba95cd0031cf3b36174612247c14486266580ed4b8"},"mac":"cc8f209d9128a4e9a836c691324e1459d4d3d2a2b0627cf94e99a7e8b305b6dc"},"id":"756c215e-d3af-435d-8fcf-39eb62d9a590","version":3,"whisperenabled":true,"extendedkey":{"cipher":"aes-128-ctr","ciphertext":"dd5cc47cde930bdb9a1625ff2efd230bac9a52e9d7e220aa699c017c4ac1ff645765a721ac6f4143ffa551ecf775f20b25e7cd5d3856ef59e7f31d407bf2d0404f2323919101c37c94952fb8462d4281a92b005e9f81a6dd1aff2f4eb15cb4c6a56df907c9591503c7d89b0cea08cb","cipherparams":{"iv":"f66b414b6678816bc3e5bb214624b4f7"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":4096,"p":6,"r":8,"salt":"094ba4f65bac68f8a9807871187dd915540013a0792bf3d11d019ae3cea7d7c0"},"mac":"2e2979943a75cff762480c26b3daff0fac78cdf12e0ed791e6a1321f3ed8fc91"},"subaccountindex":0}
{"address":"A0a19221268d939c3a972bf5461dC10f7980E814","crypto":{"cipher":"aes-128-ctr","ciphertext":"8af09bfa02a4f7e5f13a388be391dcf09c51c84fc8928421220e07c6160425f8","cipherparams":{"iv":"7ab59ae4791577e72de6d5bd8a4e24ea"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"27e6cb8e1e9d0c76fbbfd44cca245360df9409bcc9ac4f4e48cae47b5fd8b097"},"mac":"7fddb39972d712fb29a43f1e1e5303e138dec9cc2afeb0256e8a7052da4397c6"},"id":"b8297a91-90e4-49d5-a6f9-8c30547b8e6a","version":3}

View File

@ -0,0 +1 @@
{"address":"a7e0214f35481b644e139d689db54b3e625f1c88","crypto":{"cipher":"aes-128-ctr","ciphertext":"8a5a2c7c0936b5de0b792b07e0cac71e26fb92059de605e8893304abc133f98e","cipherparams":{"iv":"69dc7e6d1cc7eb42d085673d55f66344"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"48080fc9bf9a68e46551e5142b7d34cf6f13feb9b465b096cabea452498e9d28"},"mac":"7fe3548a93ed47d14b696866d3070c8bf024c660b27ab43d6aa1c20860db8857"},"id":"d06fe34d-5ba9-42d0-b4f3-937b1ca2d694","version":3}

View File

@ -45,10 +45,18 @@ func init() {
panic(err)
}
flag.Parse()
// setup root directory
const pathSeparator = string(os.PathSeparator)
RootDir = filepath.Dir(pwd)
if strings.HasSuffix(RootDir, "geth") || strings.HasSuffix(RootDir, "cmd") { // we need to hop one more level
RootDir = filepath.Join(RootDir, "..")
pathDirs := strings.Split(RootDir, pathSeparator)
for i := range pathDirs {
if pathDirs[i] == "status-go" {
RootDir = filepath.Join(pathDirs[:i+1]...)
RootDir = filepath.Join(pathSeparator, RootDir)
break
}
}
// setup auxiliary directories
@ -95,15 +103,18 @@ func EnsureNodeSync(nodeManager common.NodeManager) {
panic("LightEthereumService is nil")
}
timeouter := time.NewTimer(20 * time.Minute)
defer timeouter.Stop()
// todo(@jeka): we should extract it into config
timeout := time.NewTimer(30 * time.Minute)
defer timeout.Stop()
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
statusTicker := time.NewTicker(5 * time.Minute)
defer statusTicker.Stop()
for {
select {
case <-timeouter.C:
panic("timout during node synchronization")
case <-timeout.C:
panic("timeout during node synchronization")
case <-ticker.C:
downloader := les.Downloader()
@ -115,11 +126,19 @@ func EnsureNodeSync(nodeManager common.NodeManager) {
return
}
}
// FIXME(tiabc): This is done for travis not to kill the application if syncing is taking
// too long. Another approach is to use travis_wait, see:
// https://docs.travis-ci.com/user/common-build-problems/#Build-times-out-because-no-output-was-received
// However, in case we prefix commands with `travis_wait`, the output is not shown in case
// of any error and it's impossible to get what happened. Is there a proper way out of this problem?
case <-statusTicker.C:
fmt.Println("Syncing...")
}
}
}
// GetRemoteURLFromNetworkID returns asociated network url for giving network id.
// GetRemoteURLFromNetworkID returns associated network url for giving network id.
func GetRemoteURLFromNetworkID(id int) (url string, err error) {
switch id {
case params.MainNetworkID:
@ -128,9 +147,10 @@ func GetRemoteURLFromNetworkID(id int) (url string, err error) {
url = params.RinkebyEthereumNetworkURL
case params.RopstenNetworkID:
url = params.RopstenEthereumNetworkURL
default:
err = ErrNoRemoteURL
}
err = ErrNoRemoteURL
return
}
@ -142,7 +162,7 @@ func GetHeadHashFromNetworkID(id int) string {
case params.RopstenNetworkID:
return "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d"
case params.StatusChainNetworkID:
return "0x28c4da1cca48d0107ea5ea29a40ac15fca86899c52d02309fa12ea39b86d219c"
return "0x50e6edb4e90d9616ac8bf7119ee37c4048c41ad09328676e1b39dc68a0ecfb3d"
}
return ""