Completed
Pull Request — master (#744)
by thomas
23:27
created

MultisigScriptDataFactory::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 4
dl 0
loc 7
ccs 0
cts 7
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitWasp\Bitcoin\Key\KeyToScript\Factory;
6
7
use BitWasp\Bitcoin\Crypto\EcAdapter\Key\PublicKeyInterface;
8
use BitWasp\Bitcoin\Crypto\EcAdapter\Serializer\Key\PublicKeySerializerInterface;
9
use BitWasp\Bitcoin\Key\KeyToScript\ScriptAndSignData;
10
use BitWasp\Bitcoin\Script\ScriptFactory;
11
use BitWasp\Bitcoin\Script\ScriptType;
12
use BitWasp\Bitcoin\Transaction\Factory\SignData;
13
14
class MultisigScriptDataFactory extends KeyToScriptDataFactory
15
{
16
    /**
17
     * @var int
18
     */
19
    private $numSigners;
20
21
    /**
22
     * @var int
23
     */
24
    private $numKeys;
25
26
    /**
27
     * @var bool
28
     */
29
    private $sortKeys;
30
31
    public function __construct(int $numSigners, int $numKeys, bool $sortKeys, PublicKeySerializerInterface $pubKeySerializer = null)
32
    {
33
        $this->numSigners = $numSigners;
34
        $this->numKeys = $numKeys;
35
        $this->sortKeys = $sortKeys;
36
        parent::__construct($pubKeySerializer);
37
    }
38
39
    /**
40
     * @return string
41
     */
42
    public function getScriptType(): string
43
    {
44
        return ScriptType::MULTISIG;
45
    }
46
47
    /**
48
     * @param PublicKeyInterface ...$publicKeys
49
     * @return ScriptAndSignData
50
     */
51
    protected function convertKeyToScriptData(PublicKeyInterface... $publicKeys): ScriptAndSignData
52
    {
53
        if (count($publicKeys) !== $this->numKeys) {
54
            throw new \InvalidArgumentException("Incorrect number of keys");
55
        }
56
57
        return new ScriptAndSignData(
58
            ScriptFactory::scriptPubKey()->multisig($this->numSigners, $publicKeys, $this->sortKeys),
59
            new SignData()
60
        );
61
    }
62
}
63