-
Notifications
You must be signed in to change notification settings - Fork 33
/
fork.go
87 lines (73 loc) · 1.64 KB
/
fork.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package common
import (
"math"
"math/big"
)
var (
UseTestnetRule = false
UseDevnetRule = false
MainnetConstantinopleEnableHeight *big.Int = nil
TestnetConstantinopleEnableHeight *big.Int = big.NewInt(1577000)
DevnetConstantinopleEnableHeight *big.Int = big.NewInt(0)
)
// mainnet fork heights
var MAINNET_FORKS = []uint64{
739500, // fork 1
1818300, // fork 2
}
// testnet fork heights
var TESTNET_FORKS = []uint64{
534500, // fork 1
1577000, // fork 2
}
const (
PosV1 = iota + 1
PosV2
PosV3
)
func GetForkHeight(n int) uint64 {
if UseDevnetRule || n <= 0 {
return 0
}
forkArray := MAINNET_FORKS
if UseTestnetRule {
forkArray = TESTNET_FORKS
}
if n <= len(forkArray) {
return forkArray[n-1]
}
return math.MaxUint64
}
func IsHardFork(n int, blockNumber *big.Int) bool {
return blockNumber == nil || blockNumber.Uint64() >= GetForkHeight(n)
}
func GetPoSHashVersion(blockNumber *big.Int) int {
if IsHardFork(2, blockNumber) {
return PosV3
}
if IsHardFork(1, blockNumber) {
return PosV2
}
return PosV1
}
func IsPrivateSwapCheckingEnabled(blockNumber *big.Int) bool {
return IsHardFork(1, blockNumber)
}
func IsHeaderSnapCheckingEnabled(blockNumber *big.Int) bool {
return IsHardFork(1, blockNumber)
}
func IsMultipleMiningCheckingEnabled(blockNumber *big.Int) bool {
return IsHardFork(1, blockNumber)
}
func IsSmartTransferEnabled(blockNumber *big.Int) bool {
return IsHardFork(2, blockNumber)
}
func GetConstantinopleEnableHeight() *big.Int {
if UseDevnetRule {
return DevnetConstantinopleEnableHeight
}
if UseTestnetRule {
return TestnetConstantinopleEnableHeight
}
return MainnetConstantinopleEnableHeight
}