From 9be12c840688a938342ef1e4071d17904ea3d430 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Fri, 19 Mar 2021 17:16:26 -0700 Subject: [PATCH] chaincfg: use DeploymentStarter/DeploymentEnder instead of start/end times In this commit, we utilize the recently added ConsensusDeploymentStarter and ConsensusDeploymentEnder interfaces. Concrete implementations of this interface based on the median time past comparison are used now in the ConsensusDeployment struct instead of hard coded start/end times. Along the way, we had to switch to using the "zero time": time.Time{}, in place of 0 and math.MaxInt64 as comparison (After/Before) seems to be broken in the Go stdlib for times very far in the future. It appears Go isn't ready to handle the heat death of the universe. --- chaincfg/params.go | 133 ++++++++++++++++++++++++++++++--------------- 1 file changed, 90 insertions(+), 43 deletions(-) diff --git a/chaincfg/params.go b/chaincfg/params.go index 7e4327984c4..0c83c9ed05d 100644 --- a/chaincfg/params.go +++ b/chaincfg/params.go @@ -6,7 +6,6 @@ package chaincfg import ( "errors" - "math" "math/big" "strings" "time" @@ -69,13 +68,13 @@ type ConsensusDeployment struct { // this particular soft-fork deployment refers to. BitNumber uint8 - // StartTime is the median block time after which voting on the - // deployment starts. - StartTime uint64 + // DeploymentStarter is used to determine if the given + // ConsensusDeployment has started or not. + DeploymentStarter ConsensusDeploymentStarter - // ExpireTime is the median block time after which the attempted - // deployment expires. - ExpireTime uint64 + // DeploymentEnder is used to determine if the given + // ConsensusDeployment has ended or not. + DeploymentEnder ConsensusDeploymentEnder } // Constants that define the deployment offset in the deployments field of the @@ -289,19 +288,31 @@ var MainNetParams = Params{ MinerConfirmationWindow: 2016, // Deployments: [DefinedDeployments]ConsensusDeployment{ DeploymentTestDummy: { - BitNumber: 28, - StartTime: 1199145601, // January 1, 2008 UTC - ExpireTime: 1230767999, // December 31, 2008 UTC + BitNumber: 28, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(11991456010, 0), // January 1, 2008 UTC + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1230767999, 0), // December 31, 2008 UTC + ), }, DeploymentCSV: { - BitNumber: 0, - StartTime: 1462060800, // May 1st, 2016 - ExpireTime: 1493596800, // May 1st, 2017 + BitNumber: 0, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1462060800, 0), // May 1st, 2016 + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1493596800, 0), // May 1st, 2017 + ), }, DeploymentSegwit: { - BitNumber: 1, - StartTime: 1479168000, // November 15, 2016 UTC - ExpireTime: 1510704000, // November 15, 2017 UTC. + BitNumber: 1, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1479168000, 0), // November 15, 2016 UTC + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1510704000, 0), // November 15, 2017 UTC. + ), }, }, @@ -365,19 +376,31 @@ var RegressionNetParams = Params{ MinerConfirmationWindow: 144, Deployments: [DefinedDeployments]ConsensusDeployment{ DeploymentTestDummy: { - BitNumber: 28, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires + BitNumber: 28, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentCSV: { - BitNumber: 0, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires + BitNumber: 0, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentSegwit: { - BitNumber: 1, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires. + BitNumber: 1, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(0, 0), // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires. + ), }, }, @@ -459,19 +482,31 @@ var TestNet3Params = Params{ MinerConfirmationWindow: 2016, Deployments: [DefinedDeployments]ConsensusDeployment{ DeploymentTestDummy: { - BitNumber: 28, - StartTime: 1199145601, // January 1, 2008 UTC - ExpireTime: 1230767999, // December 31, 2008 UTC + BitNumber: 28, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1199145601, 0), // January 1, 2008 UTC + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1230767999, 0), // December 31, 2008 UTC + ), }, DeploymentCSV: { - BitNumber: 0, - StartTime: 1456790400, // March 1st, 2016 - ExpireTime: 1493596800, // May 1st, 2017 + BitNumber: 0, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1456790400, 0), // March 1st, 2016 + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1493596800, 0), // May 1st, 2017 + ), }, DeploymentSegwit: { - BitNumber: 1, - StartTime: 1462060800, // May 1, 2016 UTC - ExpireTime: 1493596800, // May 1, 2017 UTC. + BitNumber: 1, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1462060800, 0), // May 1, 2016 UTC + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1493596800, 0), // May 1, 2017 UTC. + ), }, }, @@ -539,19 +574,31 @@ var SimNetParams = Params{ MinerConfirmationWindow: 100, Deployments: [DefinedDeployments]ConsensusDeployment{ DeploymentTestDummy: { - BitNumber: 28, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires + BitNumber: 28, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentCSV: { - BitNumber: 0, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires + BitNumber: 0, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentSegwit: { - BitNumber: 1, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires. + BitNumber: 1, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires. + ), }, },