Completed
Pull Request — master (#591)
by thomas
22:54 queued 09:12
created

Params::powTargetSpacing()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitWasp\Bitcoin\Chain;
6
7
use BitWasp\Bitcoin\Block\Block;
8
use BitWasp\Bitcoin\Block\BlockHeader;
9
use BitWasp\Bitcoin\Block\BlockHeaderInterface;
10
use BitWasp\Bitcoin\Block\BlockInterface;
11
use BitWasp\Bitcoin\Math\Math;
12
use BitWasp\Bitcoin\Script\Opcodes;
13
use BitWasp\Bitcoin\Script\ScriptFactory;
14
use BitWasp\Bitcoin\Transaction\Factory\TxBuilder;
15
use BitWasp\Buffertools\Buffer;
16
17
class Params implements ParamsInterface
18
{
19
    /**
20
     * @var int
21
     */
22
    protected static $maxBlockSizeBytes = 1000000;
23
24
    /**
25
     * @var int
26
     */
27
    protected static $maxMoney = 21000000;
28
29
    /**
30
     * @var int
31
     */
32
    protected static $subsidyHalvingInterval = 210000;
33
34
    /**
35
     * @var int
36
     */
37
    protected static $coinbaseMaturityAge = 120;
38
39
    /**
40
     * @var int
41
     */
42
    protected static $p2shActivateTime = 1333238400;
43
44
    /**
45
     * = 14 * 24 * 60 * 60
46
     * @var int
47
     */
48
    protected static $powTargetTimespan = 1209600;
49
50
    /**
51
     * = 10 * 60
52
     * @var int
53
     */
54
    protected static $powTargetSpacing = 600;
55
56
    /**
57
     * @var int
58
     */
59
    protected static $powRetargetInterval = 2016;
60
61
    /**
62
     * @var string
63
     */
64
    protected static $powTargetLimit = '26959946667150639794667015087019630673637144422540572481103610249215';
65
66
    /**
67
     * Hex: 1d00ffff
68
     * @var int
69
     */
70
    protected static $powBitsLimit = 486604799;
71
72
    /**
73
     * @var int
74
     */
75
    protected static $majorityWindow = 1000;
76
77
    /**
78
     * @var int
79
     */
80
    protected static $majorityEnforceBlockUpgrade = 750;
81
82
83
    /**
84
     * @var Math
85
     */
86
    protected $math;
87
88
    /**
89
     * @param Math $math
90
     */
91 5
    public function __construct(Math $math)
92
    {
93 5
        $this->math = $math;
94 5
    }
95
96
    /**
97
     * @return BlockHeaderInterface
98
     */
99 1
    public function getGenesisBlockHeader(): BlockHeaderInterface
100
    {
101 1
        return new BlockHeader(
102 1
            1,
103 1
            Buffer::hex('00', 32),
104 1
            Buffer::hex('4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b', 32),
105 1
            1231006505,
106 1
            0x1d00ffff,
107 1
            2083236893
108
        );
109
    }
110
111
    /**
112
     * @return BlockInterface
113
     */
114 1
    public function getGenesisBlock(): BlockInterface
115
    {
116 1
        $timestamp = new Buffer('The Times 03/Jan/2009 Chancellor on brink of second bailout for banks');
117 1
        $publicKey = Buffer::hex('04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f');
118
119 1
        $inputScript = ScriptFactory::create()
120 1
            ->push(Buffer::int('486604799', 4)->flip())
121 1
            ->push(Buffer::int('4', 1))
122 1
            ->push($timestamp)
123 1
            ->getScript();
124
125 1
        return new Block(
126 1
            $this->math,
127 1
            $this->getGenesisBlockHeader(),
128 1
            (new TxBuilder)
129 1
                ->version(1)
130 1
                ->input(new Buffer('', 32), 0xffffffff, $inputScript)
0 ignored issues
show
Documentation introduced by
$inputScript is of type object<BitWasp\Bitcoin\Script\ScriptInterface>, but the function expects a null|object<BitWasp\Bitcoin\Script\Script>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
131 1
                ->output(5000000000, ScriptFactory::sequence([$publicKey, Opcodes::OP_CHECKSIG]))
132 1
                ->locktime(0)
133 1
                ->get()
134
        );
135
    }
136
137
    /**
138
     * @return int
139
     */
140 1
    public function maxBlockSizeBytes(): int
141
    {
142 1
        return static::$maxBlockSizeBytes;
143
    }
144
145
    /**
146
     * @return int
147
     */
148 1
    public function subsidyHalvingInterval(): int
149
    {
150 1
        return static::$subsidyHalvingInterval;
151
    }
152
153
    /**
154
     * @return int
155
     */
156 1
    public function coinbaseMaturityAge(): int
157
    {
158 1
        return static::$coinbaseMaturityAge;
159
    }
160
161
    /**
162
     * @return int
163
     */
164 1
    public function maxMoney(): int
165
    {
166 1
        return static::$maxMoney;
167
    }
168
169
    /**
170
     * @return int
171
     */
172 1
    public function powTargetTimespan(): int
173
    {
174 1
        return static::$powTargetTimespan ;
175
    }
176
177
    /**
178
     * @return int
179
     */
180 1
    public function powTargetSpacing(): int
181
    {
182 1
        return static::$powTargetSpacing;
183
    }
184
185
    /**
186
     * @return int
187
     */
188 1
    public function powRetargetInterval(): int
189
    {
190 1
        return static::$powRetargetInterval;
191
    }
192
193
    /**
194
     * @return int|string
195
     */
196 1
    public function powTargetLimit(): string
197
    {
198 1
        return static::$powTargetLimit;
199
    }
200
201
    /**
202
     * @return int
203
     */
204 190
    public function powBitsLimit(): int
205
    {
206 190
        return static::$powBitsLimit;
207
    }
208
209
    /**
210
     * @return int
211
     */
212 1
    public function majorityEnforceBlockUpgrade(): int
213
    {
214 1
        return static::$majorityEnforceBlockUpgrade;
215
    }
216
217
    /**
218
     * @return int
219
     */
220 1
    public function majorityWindow(): int
221
    {
222 1
        return static::$majorityWindow;
223
    }
224
225
    /**
226
     * @return int
227
     */
228 1
    public function p2shActivateTime(): int
229
    {
230 1
        return static::$p2shActivateTime;
231
    }
232
233
    /**
234
     * @return int
235
     */
236 1
    public function getMaxBlockSigOps(): int
237
    {
238 1
        return $this->maxBlockSizeBytes() / 50;
239
    }
240
    
241
    /**
242
     * @return int
243
     */
244 1
    public function getMaxTxSigOps(): int
245
    {
246 1
        return $this->getMaxBlockSigOps() / 5;
247
    }
248
}
249