#StackBounty: #go-ethereum #private-blockchain #hardforks It possible to hard fork a private network without resyncing chain from scrat…

Bounty: 50

I am able to hard fork my private chain into first Constantinople and than to Istanbul, please see the answer for it.

My approach is:

  • I have updated geth to its highest version
  • I have kept the go-ethereum/params/config.go file as it is
  • I have updated the genesis.json file by adding "constantinopleBlock": 2862930, "petersburgBlock": 2862930, and "istanbulBlock": 3831182. Block numbers are selected based on my chain.
  • I have removed the chain. sudo rm -rf chaindata lightchaindata
  • Initialized my chain by started it with geth init
  • Finally, I have started my chain, which started to sync from 0th block

I have tried this without removing the chain but it did not work. So from scratch since genesis block should be updated, I am syncing the chain from 0th, block which is very uniefficient.

[Q] I was wondering is it possible to hard fork a private network without resyncing chain from the 0th block? This approach is inefficient to sync few GB all over again for all the nodes on the network.


Get this bounty!!!

#StackBounty: #go-ethereum #private-blockchain #hardforks #clique Is it possible to hard fork a private network to Constantinople?

Bounty: 50

I have a Proof-of-Authority private Ethereum network that has Byzantium EVM version and created by clique engine. I have a single miner that has Geth version: v1.8.27.

{
  "config": {
    "chainId": 23422,
    "homesteadBlock": 1,
    "eip150Block": 2,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 3,
    "eip158Block": 3,
    "byzantiumBlock": 4,
    "clique": {
      "period": 15,
      "epoch": 30000
    }
  },
}

Please see my configuration file: custom.json.

When I start geth I get following output:

INFO [07-10|13:46:36.647] Initialised chain configuration          
config="{ChainID: 23422 Homestead: 1 DAO: <nil> DAOSupport: false EIP150: 2
EIP155: 3 EIP158: 3 Byzantium: 4 Constantinople: <nil>  
Petersburg: <nil> Engine: clique}"

I assume since Constantinople: <nil> in the configuration file and I cannot alter the custom configuration file there is no way I can hard fork the private chain.


Here:

The configuration is fixed via constants in the code (see
ChainConfig). A custom configuration can be provided in genesis
specification file, however, this is only applicable when setting up a
new chain.

Hence, currently the only way to make a hard fork in a private network
is to ensure that all participants shutdown/upgrade/restart in a
predefined time slot.

// I have updated the geth version but in general I am not sure to check that whether the private chain is updated.

[Q] I was wondering, is it possible to hard fork a private chain that has different EVM version to Constantinople EVM?


Get this bounty!!!

#StackBounty: #private-blockchain #truffle-migration #gas-price Deploying contract with no cost (gasPrice 0) on private network

Bounty: 50

In order to achieve a no-coin bootstrapping of my private network I’m trying to deploy a first special contract having zero funds in owner wallet (every wallet of this private network should have zero balance) and to do so with truffle, gasPrice was set to 0 on truffle.js config file.

Nevertheless, when deploying truffle Migrations contract the following error is thrown:

"Migrations" could not deploy due to insufficient funds
* Account:  0x5FBF29a8Ad77EA087275858d874AcD55526cFbDF
* Balance:  0 wei
* Message:  sender doesn't have enough funds to send tx. The upfront cost is: 9400000000000000 and the sender's account only has: 0

The question is: how can be 9400000000000000 the expected cost while gasPrice being 0. Shouldn’t cost be 0 too?

Do I need to use a gasPrice 0 flag on the miner as explaind on Setting gasPrice not working on private network ?

truffle.js:

var HDWalletProvider = require("truffle-hdwallet-provider");
var mnemonic = "...";

module.exports = {
    networks: {
    development: {
        gas : 4700000,
        gasPrice : 0,
        provider: function() {
        return new HDWalletProvider(mnemonic, "http://127.0.0.1:port...", 0, 10)
        },
        network_id: "*" // Match any network id
    },
    ropsten: {
        gas : 4700000,
        gasPrice : 10000000000,
        provider: function() {
        return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/...", 0, 10)
        },
        network_id: "*" // Match any network id
    }
    },

    compilers: {
    solc: {
        version: "0.4.24",
        docker: false,
        settings: {
        optimizer: {
            enabled: true,
        }
        }
    }
    }
};


Get this bounty!!!