Completed
Pull Request — master (#222)
by thomas
24:34
created

TransactionInputSerializer::parse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1
Metric Value
dl 0
loc 5
ccs 3
cts 3
cp 1
rs 9.4286
cc 1
eloc 3
nc 1
nop 1
crap 1
1
<?php
2
3
namespace BitWasp\Bitcoin\Serializer\Transaction;
4
5
use BitWasp\Buffertools\Buffertools;
6
use BitWasp\Buffertools\Parser;
7
use BitWasp\Buffertools\Buffer;
8
use BitWasp\Bitcoin\Script\Script;
9
use BitWasp\Bitcoin\Transaction\TransactionInput;
10
use BitWasp\Bitcoin\Transaction\TransactionInputInterface;
11
use BitWasp\Buffertools\TemplateFactory;
12
13
class TransactionInputSerializer
14
{
15
    /**
16
     * @var OutPointSerializer
17
     */
18
    private $outpointSerializer;
19
20
    /**
21
     * TransactionInputSerializer constructor.
22
     * @param OutPointSerializer $outPointSerializer
23
     */
24 345
    public function __construct(OutPointSerializer $outPointSerializer)
25
    {
26 345
        $this->outpointSerializer = $outPointSerializer;
27 345
    }
28
29
    /**
30
     * @return \BitWasp\Buffertools\Template
31
     */
32 321
    private function getInputTemplate()
33
    {
34 321
        return (new TemplateFactory())
35 321
            ->varstring()
36 321
            ->uint32le()
37 321
            ->getTemplate();
38
    }
39
40
    /**
41
     * @param TransactionInputInterface $input
42
     * @return Buffer
43
     */
44 291
    public function serialize(TransactionInputInterface $input)
45
    {
46 291
        return Buffertools::concat(
47 291
            $this->outpointSerializer->serialize($input->getOutPoint()),
48 291
            $this->getInputTemplate()->write([
49 291
                $input->getScript()->getBuffer(),
50 291
                $input->getSequence()
51 291
            ])
52 291
        );
53
    }
54
55
    /**
56
     * @param Parser $parser
57
     * @return TransactionInput
58
     * @throws \BitWasp\Buffertools\Exceptions\ParserOutOfRange
59
     */
60 240
    public function fromParser(Parser $parser)
61
    {
62 240
        $outpoint = $this->outpointSerializer->fromParser($parser);
63
64
        /**
65
         * @var Buffer $scriptBuf
66
         * @var int|string $sequence
67
         */
68 240
        list ($scriptBuf, $sequence) = $this->getInputTemplate()->parse($parser);
69
70 240
        return new TransactionInput(
71 240
            $outpoint,
72 240
            new Script($scriptBuf),
73
            $sequence
74 240
        );
75
    }
76
77
    /**
78
     * @param $string
79
     * @return TransactionInput
80
     * @throws \BitWasp\Buffertools\Exceptions\ParserOutOfRange
81
     */
82 12
    public function parse($string)
83
    {
84 12
        $parser = new Parser($string);
85 12
        return $this->fromParser($parser);
86
    }
87
}
88