diff --git a/VERSION.FUSE.txt b/VERSION.FUSE.txt new file mode 100644 index 00000000000..4d54daddb61 --- /dev/null +++ b/VERSION.FUSE.txt @@ -0,0 +1 @@ +4.0.2 diff --git a/src/Nethermind/Chains/fuse.json b/src/Nethermind/Chains/fuse.json new file mode 100644 index 00000000000..3893dc86402 --- /dev/null +++ b/src/Nethermind/Chains/fuse.json @@ -0,0 +1,74 @@ +{ + "name": "FuseNetwork", + "engine": { + "authorityRound": { + "params": { + "stepDuration": "5", + "blockReward": "0x0", + "blockRewardContractAddress": "0x63D4efeD2e3dA070247bea3073BCaB896dFF6C9B", + "blockRewardContractTransition": 100, + "validators": { + "multi": { + "0": { + "list": ["0xd9176e84898a0054680aec3f7c056b200c3d96c3"] + }, + "100": { + "safeContract": "0x3014ca10b91cb3D0AD85fEf7A3Cb95BCAc9c0f79" + } + } + } + } + } + }, + "params": { + "gasLimitBoundDivisor": "0x400", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0x1388", + "networkID" : "0x07a", + "eip155Transition": 0, + "validateChainIdTransition": 0, + "eip140Transition": 0, + "eip211Transition": 0, + "eip214Transition": 0, + "eip658Transition": 0, + "eip150Transition": "0x0", + "eip160Transition": "0x0", + "eip161abcTransition": "0x0", + "eip161dTransition": "0x0", + "eip98Transition": "0x7fffffffffffff", + "eip145Transition": "0x38ada7", + "eip1014Transition": "0x38ada7", + "eip1052Transition": "0x38ada7", + "eip1283Transition": "0xd29240", + "eip1344Transition": "0xd29240", + "eip1706Transition": "0xd29240", + "eip1884Transition": "0xd29240", + "eip2028Transition": "0xd29240", + "eip2929Transition": "0xd29240", + "eip2930Transition": "0xd29240", + "maxCodeSize": 24576, + "maxCodeSizeTransition": "0x0" + }, + "genesis": { + "seal": { + "authorityRound": { + "step": "0x0", + "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + }, + "difficulty": "0x20000", + "gasLimit": "0x989680" + }, + "accounts": { + "0x0000000000000000000000000000000000000001": { "balance": "1", "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } }, + "0x0000000000000000000000000000000000000002": { "balance": "1", "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } }, + "0x0000000000000000000000000000000000000003": { "balance": "1", "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } }, + "0x0000000000000000000000000000000000000004": { "balance": "1", "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } }, + "0x0000000000000000000000000000000000000005": { "builtin": { "name": "modexp", "pricing": { "0": { "price": { "modexp": { "divisor": 20 } } }, "0xd29240": { "info": "EIP-2565: ModExp Gas Cost.", "price": { "modexp2565": {} } } } } }, + "0x0000000000000000000000000000000000000006": { "builtin": { "name": "alt_bn128_add", "pricing": { "0": { "price": { "alt_bn128_const_operations": { "price": 500 } } }, "0xd29240": { "info": "EIP-1108 Istanbul HF", "price": { "alt_bn128_const_operations": { "price": 150 } } } } } }, + "0x0000000000000000000000000000000000000007": { "builtin": { "name": "alt_bn128_mul", "pricing": { "0": { "price": { "alt_bn128_const_operations": { "price": 4000 } } }, "0xd29240": { "info": "EIP-1108 Istanbul HF", "price": { "alt_bn128_const_operations": { "price": 6000 } } } } } }, + "0x0000000000000000000000000000000000000008": { "builtin": { "name": "alt_bn128_pairing", "pricing": { "0": { "price": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } }, "0xd29240": { "info": "EIP-1108 Istanbul HF", "price": { "alt_bn128_pairing": { "base": 45000, "pair": 34000 } } } } } }, + "0x0000000000000000000000000000000000000009": { "builtin": { "name": "blake2_f", "pricing": { "0xd29240": { "info": "EIP-152 Istanbul HF", "price": { "blake2_f": { "gas_per_round": 1 } } } } } }, + "0xd9176e84898a0054680aec3f7c056b200c3d96c3": { "balance": "300000000000000000000000000" } + } +} diff --git a/src/Nethermind/Chains/spark.json b/src/Nethermind/Chains/spark.json new file mode 100644 index 00000000000..37b7f705e67 --- /dev/null +++ b/src/Nethermind/Chains/spark.json @@ -0,0 +1,114 @@ +{ + "name": "FuseNetwork", + "engine": { + "authorityRound": { + "params": { + "stepDuration": "5", + "blockReward": "0x0", + "blockRewardContractAddress": "0x52B9b9585e1b50DA5600f7dbD94E9fE68943162c", + "blockRewardContractTransition": 1000, + "validators": { + "multi": { + "0": { + "list": [ "0xba7829b381f07cca0d186bdf619fdc6c7f756d0a" ] + }, + "1000": { + "safeContract": "0xC8c3a332f9e4CE6bfFFcf967026cB006Db2311c7" + }, + "6905799": { + "list": [ "0x379e81df609e8235c9026f25a379d49a27b10d30","0xba7829b381f07cca0d186bdf619fdc6c7f756d0a","0xe4cc9b2836ba373c3ccf473cbb15ed07007963ee","0xbc048d3064fd912b40a9aadcf67a14fd4601db77"] + }, + "6910120": { + "safeContract": "0xC8c3a332f9e4CE6bfFFcf967026cB006Db2311c7" + }, + "6925000": { + "list": [ "0x379e81df609e8235c9026f25a379d49a27b10d30","0xba7829b381f07cca0d186bdf619fdc6c7f756d0a","0xe4cc9b2836ba373c3ccf473cbb15ed07007963ee","0xbc048d3064fd912b40a9aadcf67a14fd4601db77"] + } + } + } + } + } + }, + "params": { + "gasLimitBoundDivisor": "0x400", + "maximumExtraDataSize": "0x20", + "minGasLimit": "0x1388", + "networkID" : "0x07b", + "eip155Transition": 0, + "validateChainIdTransition": 0, + "eip140Transition": 0, + "eip211Transition": 0, + "eip214Transition": 0, + "eip658Transition": 0, + "eip150Transition": "0x0", + "eip160Transition": "0x0", + "eip161abcTransition": "0x0", + "eip161dTransition": "0x0", + "eip98Transition": "0x7fffffffffffff", + "eip145Transition": "0x6bf64", + "eip1014Transition": "0x6bf64", + "eip1052Transition": "0x6bf64", + "eip1283Transition": "0x13d620", + "eip1344Transition": "0x13d620", + "eip1706Transition": "0x13d620", + "eip1884Transition": "0x13d620", + "eip2028Transition": "0x13d620", + "eip2929Transition": "0x13d620", + "eip2930Transition": "0x13d620", + "maxCodeSize": 24576, + "maxCodeSizeTransition": "0x0" + }, + "genesis": { + "seal": { + "authorityRound": { + "step": "0x0", + "signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + }, + "difficulty": "0x20000", + "gasLimit": "0x5F5E100" + }, + "accounts": { + "0x0000000000000000000000000000000000000001": { + "balance": "1", + "builtin": { "name": "ecrecover", "pricing": { "linear": { "base": 3000, "word": 0 } } } + }, + "0x0000000000000000000000000000000000000002": { + "balance": "1", + "builtin": { "name": "sha256", "pricing": { "linear": { "base": 60, "word": 12 } } } + }, + "0x0000000000000000000000000000000000000003": { + "balance": "1", + "builtin": { "name": "ripemd160", "pricing": { "linear": { "base": 600, "word": 120 } } } + }, + "0x0000000000000000000000000000000000000004": { + "balance": "1", + "builtin": { "name": "identity", "pricing": { "linear": { "base": 15, "word": 3 } } } + }, + "0x0000000000000000000000000000000000000005": { + "builtin": { "name": "modexp", "activate_at": 0, "pricing": { "modexp": { "divisor": 20 } } } + }, + "0x0000000000000000000000000000000000000006": { + "builtin": { + "name": "alt_bn128_add", + "activate_at": 0, + "pricing": { "linear": { "base": 500, "word": 0 } } + } + }, + "0x0000000000000000000000000000000000000007": { + "builtin": { + "name": "alt_bn128_mul", + "activate_at": 0, + "pricing": { "linear": { "base": 40000, "word": 0 } } + } + }, + "0x0000000000000000000000000000000000000008": { + "builtin": { + "name": "alt_bn128_pairing", + "activate_at": 0, + "pricing": { "alt_bn128_pairing": { "base": 100000, "pair": 80000 } } + } + }, + "0xba7829b381f07cca0d186bdf619fdc6c7f756d0a": { "balance": "300000000000000000000000000" } + } +} diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/GasPrice/GasPriceOracle.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/GasPrice/GasPriceOracle.cs index f31a86f85df..77db179764e 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/GasPrice/GasPriceOracle.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/Eth/GasPrice/GasPriceOracle.cs @@ -56,6 +56,7 @@ public UInt256 GetGasPriceEstimate() IEnumerable txGasPrices = GetSortedGasPricesFromRecentBlocks(headBlock.Number); UInt256 gasPriceEstimate = GetGasPriceAtPercentile(txGasPrices.ToList()) ?? GetMinimumGasPrice(headBlock.BaseFeePerGas); + gasPriceEstimate = UInt256.Max(gasPriceEstimate, GetMinimumGasPrice(headBlock.BaseFeePerGas)); gasPriceEstimate = UInt256.Min(gasPriceEstimate!, EthGasPriceConstants.MaxGasPrice); _gasPriceEstimation.Set(headBlockHash, gasPriceEstimate); return gasPriceEstimate!; diff --git a/src/Nethermind/Nethermind.Runner/Data/static-nodes-fuse.json b/src/Nethermind/Nethermind.Runner/Data/static-nodes-fuse.json new file mode 100644 index 00000000000..db6ffdf6dd0 --- /dev/null +++ b/src/Nethermind/Nethermind.Runner/Data/static-nodes-fuse.json @@ -0,0 +1,5 @@ +[ + "enode://84ee9a7eb287e857c9baec48f3601382174516441e56c8e00e07fbf55d74db60861911a820aec80d6038a0909ae3165423b31644317b580e2f6dc54b3b9a7b66@35.205.73.124:30303", + "enode://1bb0253afcd0c6a04125165c23c911cf20da583f63b3e0f4ab16f70e48b454dc7da0a68329f3224fbf7f406386ee4e904923a826ecf1ee739bd4bcb6f46fc744@34.76.228.61:30303", + "enode://7bc2e851cad345437984d6550b1b98d7029b694f2793e2c592637a793b243760060a5a3e00d6212b75f1c534a97b41d532221071242d01116e9ff3c8dcc95672@95.217.1.4:30303" +] diff --git a/src/Nethermind/Nethermind.Runner/Data/static-nodes-spark.json b/src/Nethermind/Nethermind.Runner/Data/static-nodes-spark.json new file mode 100644 index 00000000000..325f57cc29d --- /dev/null +++ b/src/Nethermind/Nethermind.Runner/Data/static-nodes-spark.json @@ -0,0 +1,6 @@ +[ + "enode://beea6b15658e694f76d5ac7775c9be5cb88dfe12a67d464fdb1134ca5bf2d47f44047be935547780c8ec300920e2d684a4fe90c9ba1c66a6f559ac2ec0976d28@34.22.208.55:30303", + "enode://4b115030420718523198eaad02c68961814c1d2f2f1c437d25f6a05279438465865b454431b5b0d1e839f6c37d9d52668105eb285e6aa6362c0601ef4fb8854b@34.76.70.196:30303", + "enode://f1eb1ac3f624f6862fd2d6f56c30671d808088adef18a4fafd508665a3a3ce063553ff8be290247ed074ee759d2d05bf95b629a72e30eedd47e2f2df85d6f581@35.205.144.49:30303", + "enode://94230ecf060189d842d14a7c039d37aae328c317d6b0d66e4f1b67b307a6e64a11f5309d45a9c536824909cf828cf34eb730adcb60872cd723be832d2979f811@34.34.138.246:30303" +] diff --git a/src/Nethermind/Nethermind.Runner/configs/fuse.cfg b/src/Nethermind/Nethermind.Runner/configs/fuse.cfg new file mode 100644 index 00000000000..ed634062dd0 --- /dev/null +++ b/src/Nethermind/Nethermind.Runner/configs/fuse.cfg @@ -0,0 +1,51 @@ +{ + "Init": { + "DiscoveryEnabled": true, + "WebSocketsEnabled": false, + "StoreReceipts" : true, + "ChainSpecPath": "chainspec/fuse.json", + "BaseDbPath": "nethermind_db/fuse", + "LogFileName": "fuse.logs.txt", + "StaticNodesPath": "Data/static-nodes-fuse.json" + }, + "Sync": { + "FastSync": true, + "PivotNumber": 23564000, + "PivotHash": "0xb4dd1d85586bdf79d4e26ed41c4a50898b3046d23ce58df07a4266f2af6ee0f6", + "PivotTotalDifficulty": "8018413694124993953050959249522186134388665717", + "FastBlocks": true, + "UseGethLimitsInFastBlocks": false, + "FastSyncCatchUpHeightDelta": 10000000000 + }, + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "LocalIp": "0.0.0.0", + "ExternalIp": "0.0.0.0" + }, + "JsonRpc": { + "Enabled": true, + "Timeout": 20000, + "Host": "0.0.0.0", + "Port": 8545, + "WebSocketsPort": 8546 + }, + "Metrics": { + "NodeName": "Fuse" + }, + "Bloom": { + "IndexLevelBucketSizes": [ + 16, + 16, + 16 + ] + }, + "Pruning": { + "Enabled": true, + "CacheMb": 1024, + "PersistenceInterval": 16384 + }, + "Mining": { + "MinGasPrice": "10000000000" + } +} diff --git a/src/Nethermind/Nethermind.Runner/configs/fuse_archive.cfg b/src/Nethermind/Nethermind.Runner/configs/fuse_archive.cfg new file mode 100644 index 00000000000..7e68f9e166f --- /dev/null +++ b/src/Nethermind/Nethermind.Runner/configs/fuse_archive.cfg @@ -0,0 +1,40 @@ +{ + "Init": { + "DiscoveryEnabled": true, + "WebSocketsEnabled": true, + "StoreReceipts" : true, + "ChainSpecPath": "chainspec/fuse.json", + "BaseDbPath": "nethermind_db/fuse_archive", + "LogFileName": "fuse_archive.logs.txt", + "StaticNodesPath": "Data/static-nodes-fuse.json" + }, + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "LocalIp": "0.0.0.0", + "ExternalIp": "0.0.0.0" + }, + "JsonRpc": { + "Enabled": true, + "Timeout": 20000, + "Host": "0.0.0.0", + "Port": 8545, + "WebSocketsPort": 8546 + }, + "Metrics": { + "NodeName": "Fuse_archive" + }, + "Bloom": { + "IndexLevelBucketSizes": [ + 16, + 16, + 16 + ] + }, + "Pruning": { + "Mode": "None" + }, + "Mining": { + "MinGasPrice": "10000000000" + } +} diff --git a/src/Nethermind/Nethermind.Runner/configs/fuse_validator.cfg b/src/Nethermind/Nethermind.Runner/configs/fuse_validator.cfg new file mode 100644 index 00000000000..4d1586bf0af --- /dev/null +++ b/src/Nethermind/Nethermind.Runner/configs/fuse_validator.cfg @@ -0,0 +1,53 @@ +{ + "Init": { + "DiscoveryEnabled": true, + "WebSocketsEnabled": false, + "StoreReceipts" : false, + "IsMining": true, + "ChainSpecPath": "chainspec/fuse.json", + "BaseDbPath": "nethermind_db/fuse", + "LogFileName": "fuse_validator.logs.txt", + "StaticNodesPath": "Data/static-nodes-fuse.json" + }, + "Sync": { + "FastSync": true, + "PivotNumber": 22850000, + "PivotHash": "0x651c4a6688b184c615afba96ffb36ed5b80b3190ba31260b5bfdcd60e9e434d0", + "PivotTotalDifficulty": "7775452084143443890138109779815903631410512080", + "FastBlocks": true, + "UseGethLimitsInFastBlocks": false, + "FastSyncCatchUpHeightDelta": 10000000000 + }, + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "LocalIp": "0.0.0.0", + "ExternalIp": "0.0.0.0" + }, + "JsonRpc": { + "Enabled": true, + "Timeout": 20000, + "Host": "127.0.0.1", + "Port": 8545 + }, + "Metrics": { + "NodeName": "Fuse" + }, + "Bloom": { + "IndexLevelBucketSizes": [ + 16, + 16, + 16 + ] + }, + "Pruning": { + "Enabled": true, + "CacheMb": 512, + "PersistenceInterval": 16384 + }, + "Mining": { + "Enabled": true, + "MinGasPrice": "10000000000", + "TargetBlockGasLimit": "20000000" + } +} diff --git a/src/Nethermind/Nethermind.Runner/configs/spark.cfg b/src/Nethermind/Nethermind.Runner/configs/spark.cfg new file mode 100644 index 00000000000..909ab24851b --- /dev/null +++ b/src/Nethermind/Nethermind.Runner/configs/spark.cfg @@ -0,0 +1,56 @@ +{ + "Init": { + "DiscoveryEnabled": true, + "WebSocketsEnabled": false, + "StoreReceipts" : true, + "ChainSpecPath": "chainspec/spark.json", + "BaseDbPath": "nethermind_db/spark", + "LogFileName": "spark.logs.txt", + "StaticNodesPath": "Data/static-nodes-spark.json" + }, + "Sync": { + "DownloadBodiesInFastSync": true, + "DownloadHeadersInFastSync": true, + "DownloadReceiptsInFastSync": true, + "FastSync": true, + "PivotNumber": 9000000, + "PivotHash": "0xe8ae7da314b811234661055a63df7d3b2eaecc6f2c7d600742c533ad909b65c0", + "PivotTotalDifficulty": "3062541302288446171170371466885913902759974689", + "FastBlocks": true, + "NetworkingEnabled": true, + "SynchronizationEnabled": true, + "UseGethLimitsInFastBlocks": false, + "FastSyncCatchUpHeightDelta": 10000000000 + }, + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "LocalIp": "0.0.0.0", + "ExternalIp": "0.0.0.0" + }, + "JsonRpc": { + "Enabled": true, + "Timeout": 20000, + "Host": "0.0.0.0", + "Port": 8545, + "WebSocketsPort": 8546 + }, + "Metrics": { + "NodeName": "Spark" + }, + "Bloom": { + "IndexLevelBucketSizes": [ + 16, + 16, + 16 + ] + }, + "Pruning": { + "Enabled": true, + "CacheMb": 1024, + "PersistenceInterval": 16384 + }, + "Mining": { + "MinGasPrice": "10000000000" + } +} diff --git a/src/Nethermind/Nethermind.Runner/configs/spark_archive.cfg b/src/Nethermind/Nethermind.Runner/configs/spark_archive.cfg new file mode 100644 index 00000000000..4e8517c74ce --- /dev/null +++ b/src/Nethermind/Nethermind.Runner/configs/spark_archive.cfg @@ -0,0 +1,40 @@ +{ + "Init": { + "DiscoveryEnabled": true, + "WebSocketsEnabled": true, + "StoreReceipts" : true, + "ChainSpecPath": "chainspec/spark.json", + "BaseDbPath": "nethermind_db/spark_archive", + "LogFileName": "spark_archive.logs.txt", + "StaticNodesPath": "Data/static-nodes-spark.json" + }, + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "LocalIp": "0.0.0.0", + "ExternalIp": "0.0.0.0" + }, + "JsonRpc": { + "Enabled": true, + "Timeout": 20000, + "Host": "0.0.0.0", + "Port": 8545, + "WebSocketsPort": 8546 + }, + "Metrics": { + "NodeName": "Spark_archive" + }, + "Bloom": { + "IndexLevelBucketSizes": [ + 16, + 16, + 16 + ] + }, + "Pruning": { + "Mode": "None" + }, + "Mining": { + "MinGasPrice": "10000000000" + } +} diff --git a/src/Nethermind/Nethermind.Runner/configs/spark_validator.cfg b/src/Nethermind/Nethermind.Runner/configs/spark_validator.cfg new file mode 100644 index 00000000000..56b15ded930 --- /dev/null +++ b/src/Nethermind/Nethermind.Runner/configs/spark_validator.cfg @@ -0,0 +1,53 @@ +{ + "Init": { + "DiscoveryEnabled": true, + "WebSocketsEnabled": false, + "StoreReceipts" : false, + "IsMining": true, + "ChainSpecPath": "chainspec/spark.json", + "BaseDbPath": "nethermind_db/spark", + "LogFileName": "spark_validator.logs.txt", + "StaticNodesPath": "Data/static-nodes-spark.json" + }, + "Sync": { + "FastSync": true, + "PivotNumber": 9000000, + "PivotHash": "0xe8ae7da314b811234661055a63df7d3b2eaecc6f2c7d600742c533ad909b65c0", + "PivotTotalDifficulty": "3062541302288446171170371466885913902759974689", + "FastBlocks": true, + "UseGethLimitsInFastBlocks": false, + "FastSyncCatchUpHeightDelta": 10000000000 + }, + "Network": { + "DiscoveryPort": 30303, + "P2PPort": 30303, + "LocalIp": "0.0.0.0", + "ExternalIp": "0.0.0.0" + }, + "JsonRpc": { + "Enabled": true, + "Timeout": 20000, + "Host": "127.0.0.1", + "Port": 8545 + }, + "Metrics": { + "NodeName": "Fuse" + }, + "Bloom": { + "IndexLevelBucketSizes": [ + 16, + 16, + 16 + ] + }, + "Pruning": { + "Enabled": true, + "CacheMb": 1024, + "PersistenceInterval": 16384 + }, + "Mining": { + "Enabled": true, + "MinGasPrice": "10000000000", + "TargetBlockGasLimit": "20000000" + } +}