Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions f3-sidecar/f3manifest_2k.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"Pause": false,
"ProtocolVersion": 7,
"InitialInstance": 0,
"BootstrapEpoch": 1000,
"NetworkName": "2k",
"ExplicitPower": null,
"IgnoreECPower": false,
"InitialPowerTable": null,
"CommitteeLookback": 10,
"CatchUpAlignment": 15000000000,
"Gpbft": {
"Delta": 6000000000,
"DeltaBackOffExponent": 2,
"QualityDeltaMultiplier": 1,
"MaxLookaheadRounds": 5,
"ChainProposedLength": 100,
"RebroadcastBackoffBase": 6000000000,
"RebroadcastBackoffExponent": 1.3,
"RebroadcastBackoffSpread": 0.1,
"RebroadcastBackoffMax": 60000000000
},
"EC": {
"Period": 4000000000,
"Finality": 900,
"DelayMultiplier": 2,
"BaseDecisionBackoffTable": [1.3, 1.69, 2.2, 2.86, 3.71, 4.83, 6.27, 7.5],
"HeadLookback": 4,
"Finalize": true
},
"CertificateExchange": {
"ClientRequestTimeout": 10000000000,
"ServerRequestTimeout": 60000000000,
"MinimumPollInterval": 30000000000,
"MaximumPollInterval": 120000000000
},
"PubSub": {
"CompressionEnabled": true,
"ChainCompressionEnabled": true,
"GMessageSubscriptionBufferSize": 128,
"ValidatedMessageBufferSize": 128
},
"ChainExchange": {
"SubscriptionBufferSize": 32,
"MaxChainLength": 100,
"MaxInstanceLookahead": 10,
"MaxDiscoveredChainsPerInstance": 1000,
"MaxWantedChainsPerInstance": 1000,
"RebroadcastInterval": 2000000000,
"MaxTimestampAge": 8000000000
},
"PartialMessageManager": {
"PendingDiscoveredChainsBufferSize": 100,
"PendingPartialMessagesBufferSize": 100,
"PendingChainBroadcastsBufferSize": 100,
"PendingInstanceRemovalBufferSize": 10,
"CompletedMessagesBufferSize": 100,
"MaxBufferedMessagesPerInstance": 25000,
"MaxCachedValidatedMessagesPerInstance": 25000
}
}
61 changes: 61 additions & 0 deletions f3-sidecar/f3manifest_butterfly.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"Pause": false,
"ProtocolVersion": 7,
"InitialInstance": 0,
"BootstrapEpoch": 1000,
"NetworkName": "butterflynet",
"ExplicitPower": null,
"IgnoreECPower": false,
"InitialPowerTable": null,
"CommitteeLookback": 10,
"CatchUpAlignment": 15000000000,
"Gpbft": {
"Delta": 6000000000,
"DeltaBackOffExponent": 2,
"QualityDeltaMultiplier": 1,
"MaxLookaheadRounds": 5,
"ChainProposedLength": 100,
"RebroadcastBackoffBase": 6000000000,
"RebroadcastBackoffExponent": 1.3,
"RebroadcastBackoffSpread": 0.1,
"RebroadcastBackoffMax": 60000000000
},
"EC": {
"Period": 30000000000,
"Finality": 900,
"DelayMultiplier": 2,
"BaseDecisionBackoffTable": [1.3, 1.69, 2.2, 2.86, 3.71, 4.83, 6.27, 7.5],
"HeadLookback": 4,
"Finalize": true
},
"CertificateExchange": {
"ClientRequestTimeout": 10000000000,
"ServerRequestTimeout": 60000000000,
"MinimumPollInterval": 30000000000,
"MaximumPollInterval": 120000000000
},
"PubSub": {
"CompressionEnabled": true,
"ChainCompressionEnabled": true,
"GMessageSubscriptionBufferSize": 128,
"ValidatedMessageBufferSize": 128
},
"ChainExchange": {
"SubscriptionBufferSize": 32,
"MaxChainLength": 100,
"MaxInstanceLookahead": 10,
"MaxDiscoveredChainsPerInstance": 1000,
"MaxWantedChainsPerInstance": 1000,
"RebroadcastInterval": 2000000000,
"MaxTimestampAge": 8000000000
},
"PartialMessageManager": {
"PendingDiscoveredChainsBufferSize": 100,
"PendingPartialMessagesBufferSize": 100,
"PendingChainBroadcastsBufferSize": 100,
"PendingInstanceRemovalBufferSize": 10,
"CompletedMessagesBufferSize": 100,
"MaxBufferedMessagesPerInstance": 25000,
"MaxCachedValidatedMessagesPerInstance": 25000
}
}
72 changes: 72 additions & 0 deletions f3-sidecar/f3manifest_calibnet.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
{
"Pause": false,
"ProtocolVersion": 7,
"InitialInstance": 0,
"BootstrapEpoch": 2081674,
"NetworkName": "calibrationnet",
"ExplicitPower": null,
"IgnoreECPower": false,
"InitialPowerTable": {
"/": "bafy2bzaceab236vmmb3n4q4tkvua2n4dphcbzzxerxuey3mot4g3cov5j3r2c"
},
"CommitteeLookback": 10,
"CatchUpAlignment": 15000000000,
"Gpbft": {
"Delta": 6000000000,
"DeltaBackOffExponent": 2,
"QualityDeltaMultiplier": 1,
"MaxLookaheadRounds": 5,
"ChainProposedLength": 100,
"RebroadcastBackoffBase": 6000000000,
"RebroadcastBackoffExponent": 1.3,
"RebroadcastBackoffSpread": 0.1,
"RebroadcastBackoffMax": 60000000000
},
"EC": {
"Period": 30000000000,
"Finality": 900,
"DelayMultiplier": 2,
"BaseDecisionBackoffTable": [
1.3,
1.69,
2.2,
2.86,
3.71,
4.83,
6.27,
7.5
],
"HeadLookback": 4,
"Finalize": true
},
"CertificateExchange": {
"ClientRequestTimeout": 10000000000,
"ServerRequestTimeout": 60000000000,
"MinimumPollInterval": 30000000000,
"MaximumPollInterval": 120000000000
},
"PubSub": {
"CompressionEnabled": true,
"ChainCompressionEnabled": true,
"GMessageSubscriptionBufferSize": 128,
"ValidatedMessageBufferSize": 128
},
"ChainExchange": {
"SubscriptionBufferSize": 32,
"MaxChainLength": 100,
"MaxInstanceLookahead": 10,
"MaxDiscoveredChainsPerInstance": 1000,
"MaxWantedChainsPerInstance": 1000,
"RebroadcastInterval": 2000000000,
"MaxTimestampAge": 8000000000
},
"PartialMessageManager": {
"PendingDiscoveredChainsBufferSize": 100,
"PendingPartialMessagesBufferSize": 100,
"PendingChainBroadcastsBufferSize": 100,
"PendingInstanceRemovalBufferSize": 10,
"CompletedMessagesBufferSize": 100,
"MaxBufferedMessagesPerInstance": 25000,
"MaxCachedValidatedMessagesPerInstance": 25000
}
}
63 changes: 63 additions & 0 deletions f3-sidecar/f3manifest_mainnet.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{
"Pause": false,
"ProtocolVersion": 7,
"InitialInstance": 0,
"BootstrapEpoch": 4920480,
"NetworkName": "filecoin",
"ExplicitPower": null,
"IgnoreECPower": false,
"InitialPowerTable": {
"/": "bafy2bzacecklgxd2eksmodvhgurqvorkg3wamgqkrunir3al2gchv2cikgmbu"
},
"CommitteeLookback": 10,
"CatchUpAlignment": 15000000000,
"Gpbft": {
"Delta": 6000000000,
"DeltaBackOffExponent": 2,
"QualityDeltaMultiplier": 8,
"MaxLookaheadRounds": 5,
"ChainProposedLength": 20,
"RebroadcastBackoffBase": 6000000000,
"RebroadcastBackoffExponent": 1.3,
"RebroadcastBackoffSpread": 0.1,
"RebroadcastBackoffMax": 60000000000
},
"EC": {
"Period": 30000000000,
"Finality": 900,
"DelayMultiplier": 2,
"BaseDecisionBackoffTable": [1.3, 1.69, 2.2, 2.86, 3.71, 4.83, 6.27, 7.5],
"HeadLookback": 4,
"Finalize": true
},
"CertificateExchange": {
"ClientRequestTimeout": 10000000000,
"ServerRequestTimeout": 60000000000,
"MinimumPollInterval": 30000000000,
"MaximumPollInterval": 120000000000
},
"PubSub": {
"CompressionEnabled": true,
"ChainCompressionEnabled": true,
"GMessageSubscriptionBufferSize": 1024,
"ValidatedMessageBufferSize": 1024
},
"ChainExchange": {
"SubscriptionBufferSize": 64,
"MaxChainLength": 20,
"MaxInstanceLookahead": 10,
"MaxDiscoveredChainsPerInstance": 1000,
"MaxWantedChainsPerInstance": 1000,
"RebroadcastInterval": 2000000000,
"MaxTimestampAge": 16000000000
},
"PartialMessageManager": {
"PendingDiscoveredChainsBufferSize": 100,
"PendingPartialMessagesBufferSize": 100,
"PendingChainBroadcastsBufferSize": 100,
"PendingInstanceRemovalBufferSize": 10,
"CompletedMessagesBufferSize": 100,
"MaxBufferedMessagesPerInstance": 25000,
"MaxCachedValidatedMessagesPerInstance": 25000
}
}
35 changes: 35 additions & 0 deletions f3-sidecar/manifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,24 @@ package main

import (
"context"
_ "embed"
"encoding/json"
"time"

"github.com/filecoin-project/go-f3/gpbft"
"github.com/filecoin-project/go-f3/manifest"
"github.com/ipfs/go-cid"
)

var Network2PredefinedManifestMappings map[gpbft.NetworkName]*manifest.Manifest = make(map[gpbft.NetworkName]*manifest.Manifest)

func init() {
for _, bytes := range [][]byte{F3ManifestBytes2K, F3ManifestBytesButterfly, F3ManifestBytesCalibnet, F3ManifestBytesMainnet} {
m := loadManifest(bytes)
Network2PredefinedManifestMappings[m.NetworkName] = m
}
}

type ContractManifestProvider struct {
started *bool
pollInterval time.Duration
Expand Down Expand Up @@ -83,3 +95,26 @@ func (p *ContractManifestProvider) Stop(context.Context) error {
return nil
}
func (p *ContractManifestProvider) ManifestUpdates() <-chan *manifest.Manifest { return p.ch }

//go:embed f3manifest_2k.json
var F3ManifestBytes2K []byte

//go:embed f3manifest_butterfly.json
var F3ManifestBytesButterfly []byte

//go:embed f3manifest_calibnet.json
var F3ManifestBytesCalibnet []byte

//go:embed f3manifest_mainnet.json
var F3ManifestBytesMainnet []byte

func loadManifest(bytes []byte) *manifest.Manifest {
var m manifest.Manifest
if err := json.Unmarshal(bytes, &m); err != nil {
logger.Panicf("failed to unmarshal F3 manifest: %s", err)
}
if err := m.Validate(); err != nil {
logger.Panicf("invalid F3 manifest: %s", err)
}
return &m
}
61 changes: 35 additions & 26 deletions f3-sidecar/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,37 +65,46 @@ func run(ctx context.Context, rpcEndpoint string, jwt string, f3RpcEndpoint stri
return err
}
verif := blssig.VerifierWithKeyOnG1()
m := manifest.LocalDevnetManifest()
switch initialPowerTable, err := cid.Parse(initialPowerTable); {
case err == nil && isCidDefined(initialPowerTable):
logger.Infof("InitialPowerTable is %s", initialPowerTable)
m.InitialPowerTable = initialPowerTable
default:
logger.Warn("InitialPowerTable is undefined")
m.InitialPowerTable = cid.Undef
}
networkName := gpbft.NetworkName(rawNetwork)
// Use "filecoin" as the network name on mainnet, otherwise use the network name. Yes,
// mainnet is called testnetnet in state.
if rawNetwork == "testnetnet" {
m.NetworkName = "filecoin"
} else {
m.NetworkName = gpbft.NetworkName(rawNetwork)
if networkName == "testnetnet" {
networkName = "filecoin"
}
m := Network2PredefinedManifestMappings[networkName]
if m == nil {
m = manifest.LocalDevnetManifest()
m.NetworkName = networkName
versionInfo, err := api.Version(ctx)
if err != nil {
return err
}

blockDelay := time.Duration(versionInfo.BlockDelay) * time.Second
m.EC.Period = blockDelay
m.EC.HeadLookback = 4
m.EC.Finalize = true
m.CatchUpAlignment = blockDelay / 2
m.CertificateExchange.MinimumPollInterval = blockDelay
m.CertificateExchange.MaximumPollInterval = 4 * blockDelay
}
if m.BootstrapEpoch != bootstrapEpoch {
m.BootstrapEpoch = bootstrapEpoch
logger.Infof("Bootstrap epoch is set to %d", m.BootstrapEpoch)
}
if m.EC.Finality != finality {
m.EC.Finality = finality
logger.Infof("EC finality is set to %d", m.EC.Finality)
}
versionInfo, err := api.Version(ctx)
if err != nil {
return err
switch initialPowerTable, err := cid.Parse(initialPowerTable); {
case initialPowerTable != m.InitialPowerTable && err == nil && isCidDefined(initialPowerTable):
logger.Infof("InitialPowerTable is set to %s", initialPowerTable)
m.InitialPowerTable = initialPowerTable
case !isCidDefined(m.InitialPowerTable):
logger.Warn("InitialPowerTable is undefined")
default:
}

blockDelay := time.Duration(versionInfo.BlockDelay) * time.Second
m.EC.Period = blockDelay
m.EC.HeadLookback = 4
m.EC.Finality = finality
m.EC.Finalize = true
m.CatchUpAlignment = blockDelay / 2
m.BootstrapEpoch = bootstrapEpoch
m.CertificateExchange.MinimumPollInterval = blockDelay
m.CertificateExchange.MaximumPollInterval = 4 * blockDelay

var manifestProvider manifest.ManifestProvider
if err := m.Validate(); err == nil {
logger.Infoln("Using static manifest")
Expand Down
3 changes: 2 additions & 1 deletion src/networks/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,8 @@ impl ChainConfig {
upgrade_teep_initial_fil_reserved: None,
f3_enabled: true,
f3_consensus: true,
f3_bootstrap_epoch: -1,
// April 29 at 10:00 UTC
f3_bootstrap_epoch: 4920480,
f3_initial_power_table: Some(
"bafy2bzacecklgxd2eksmodvhgurqvorkg3wamgqkrunir3al2gchv2cikgmbu"
.parse()
Expand Down
Loading