Completed
Pull Request — master (#241)
by thomas
133:23 queued 63:06
created

TransactionWitnessSerializer::serialize()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 17
rs 9.4285
cc 3
eloc 11
nc 3
nop 1
1
<?php
2
3
namespace BitWasp\Bitcoin\Serializer\Transaction;
4
5
use BitWasp\Bitcoin\Collection\Transaction\TransactionWitnessCollection;
6
use BitWasp\Bitcoin\Script\ScriptWitness;
7
use BitWasp\Bitcoin\Transaction\TransactionInterface;
8
use BitWasp\Buffertools\Buffer;
9
use BitWasp\Buffertools\Parser;
10
use BitWasp\Buffertools\TemplateFactory;
11
12
class TransactionWitnessSerializer
13
{
14
15
    public function fromParser(Parser $parser, $count)
16
    {
17
        $varint = (new TemplateFactory())->varint()->getTemplate();
18
        $varstring = (new TemplateFactory())->varstring()->getTemplate();
19
20
        $vWit = array_fill(0, $count, []);
21
        for ($i = 0; $i < $count; $i++) {
22
            $size = $varint->parse($parser);
23
            $entries = [];
24
            for ($j = 0; $j < $size; $j++) {
25
                $entries[] = $varstring->parse($parser);
26
            }
27
28
            $vWit[] = new ScriptWitness($entries);
29
        }
30
31
        return new TransactionWitnessCollection($vWit);
32
    }
33
34
    public function serialize(TransactionInterface $transaction)
35
    {
36
        $varint = (new TemplateFactory())->varint()->getTemplate();
37
        $varstring = (new TemplateFactory())->varstring()->getTemplate();
38
39
        $count = count($transaction->getInputs());
40
        $value = '';
41
        for ($i = 0; $i < $count; $i++) {
42
            $witness = $transaction->getWitness($i);
43
            $value .= $varint->write([count($witness)])->getBinary();
44
            foreach ($witness as $value) {
45
                $value .= $varstring->write([$value]);
46
            }
47
        }
48
49
        return new Buffer($value);
50
    }
51
}
52