OSDN Git Service

Merge pull request #676 from Bytom/keys
[bytom/bytom-spv.git] / consensus / general.go
1 package consensus
2
3 import (
4         "strings"
5
6         "github.com/bytom/protocol/bc"
7 )
8
9 //consensus variables
10 const (
11         // Max gas that one block contains
12         MaxBlockGas = uint64(100000000)
13
14         //config parameter for coinbase reward
15         CoinbasePendingBlockNumber = uint64(6)
16         subsidyReductionInterval   = uint64(560640)
17         baseSubsidy                = uint64(41250000000)
18         InitialBlockSubsidy        = uint64(1470000000000000000)
19
20         // config for pow mining
21         PowMinBits            = uint64(2305843009213861724)
22         BlocksPerRetarget     = uint64(128)
23         TargetSecondsPerBlock = uint64(60)
24         SeedPerRetarget       = uint64(128)
25
26         // MaxTimeOffsetSeconds is the maximum number of seconds a block time is allowed to be ahead of the current time
27         MaxTimeOffsetSeconds = uint64(60 * 60)
28         MedianTimeBlocks     = 11
29
30         PayToWitnessPubKeyHashDataSize = 20
31         PayToWitnessScriptHashDataSize = 32
32
33         CoinbaseArbitrarySizeLimit = 128
34
35         VMGasRate        = int64(1000)
36         StorageGasRate   = int64(5)
37         MaxGasAmount     = int64(100000)
38         DefaultGasCredit = int64(80000)
39
40         BTMAlias       = "BTM"
41         BTMSymbol      = "BTM"
42         BTMDecimals    = 8
43         BTMDescription = `Bytom Official Issue`
44 )
45
46 // BTMAssetID is BTM's asset id, the soul asset of Bytom
47 var BTMAssetID = &bc.AssetID{
48         V0: uint64(18446744073709551615),
49         V1: uint64(18446744073709551615),
50         V2: uint64(18446744073709551615),
51         V3: uint64(18446744073709551615),
52 }
53
54 // InitialSeed is SHA3-256 of Byte[0^32]
55 var InitialSeed = &bc.Hash{
56         V0: uint64(11412844483649490393),
57         V1: uint64(4614157290180302959),
58         V2: uint64(1780246333311066183),
59         V3: uint64(9357197556716379726),
60 }
61
62 // BTMDefinitionMap is the ....
63 var BTMDefinitionMap = map[string]interface{}{
64         "name":        BTMAlias,
65         "symbol":      BTMSymbol,
66         "decimals":    BTMDecimals,
67         "description": BTMDescription,
68 }
69
70 // BlockSubsidy calculate the coinbase rewards on given block height
71 func BlockSubsidy(height uint64) uint64 {
72         if height == 0 {
73                 return InitialBlockSubsidy
74         }
75         return baseSubsidy >> uint(height/subsidyReductionInterval)
76 }
77
78 // IsBech32SegwitPrefix returns whether the prefix is a known prefix for segwit
79 // addresses on any default or registered network.  This is used when decoding
80 // an address string into a specific address type.
81 func IsBech32SegwitPrefix(prefix string, params *Params) bool {
82         prefix = strings.ToLower(prefix)
83         return prefix == params.Bech32HRPSegwit+"1"
84 }
85
86 // Params store the config for different network
87 type Params struct {
88         // Name defines a human-readable identifier for the network.
89         Name            string
90         Bech32HRPSegwit string
91 }
92
93 var ActiveNetParams = &MainNetParams
94
95 // MainNetParams is the config for production
96 var MainNetParams = Params{
97         Name:            "main",
98         Bech32HRPSegwit: "bm",
99 }
100
101 // TestNetParams is the config for test-net
102 var TestNetParams = Params{
103         Name:            "test",
104         Bech32HRPSegwit: "tm",
105 }