Bitcoin ABC
0.26.3
P2P Digital Currency
Loading...
Searching...
No Matches
src
script
bitfield.cpp
Go to the documentation of this file.
1
// Copyright (c) 2019 The Bitcoin developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <
script/bitfield.h
>
6
7
#include <
script/script_error.h
>
8
9
#include <cstddef>
10
#include <limits>
11
12
bool
DecodeBitfield
(
const
std::vector<uint8_t> &vch,
unsigned
size,
13
uint32_t
&
bitfield
,
ScriptError
*
serror
) {
14
if
(size > 32) {
15
return
set_error
(
serror
,
ScriptError::INVALID_BITFIELD_SIZE
);
16
}
17
18
const
size_t
bitfield_size
= (size + 7) / 8;
19
if
(vch.size() !=
bitfield_size
) {
20
return
set_error
(
serror
,
ScriptError::INVALID_BITFIELD_SIZE
);
21
}
22
23
bitfield
= 0;
24
for
(
size_t
i = 0; i <
bitfield_size
; i++) {
25
// Decode the bitfield as little endian.
26
bitfield
|=
uint32_t
(vch[i]) << (8 * i);
27
}
28
29
const
uint32_t
mask
= (
uint64_t
(1) << size) - 1;
30
if
((
bitfield
&
mask
) !=
bitfield
) {
31
return
set_error
(
serror
,
ScriptError::INVALID_BIT_RANGE
);
32
}
33
34
return
true
;
35
}
DecodeBitfield
bool DecodeBitfield(const std::vector< uint8_t > &vch, unsigned size, uint32_t &bitfield, ScriptError *serror)
Definition
bitfield.cpp:12
bitfield.h
GetRand
T GetRand(T nMax=std::numeric_limits< T >::max()) noexcept
Generate a uniform random integer of type T in the range [0..nMax) nMax defaults to std::numeric_limi...
Definition
random.h:85
script_error.h
ScriptError
ScriptError
Definition
script_error.h:11
ScriptError::INVALID_BITFIELD_SIZE
@ INVALID_BITFIELD_SIZE
ScriptError::INVALID_BIT_RANGE
@ INVALID_BIT_RANGE
Generated on Sat Nov 23 2024 02:38:00 for Bitcoin ABC by
1.9.8