From 23ec552affee522443a327c306d763bad7497727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20Mo=CC=88ser?= Date: Fri, 21 Feb 2020 11:26:51 -0500 Subject: [PATCH 1/4] deps: replace patched range-v3 with default --- .gitmodules | 2 +- external/range-v3 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6b3d9464..a9d10a24 100644 --- a/.gitmodules +++ b/.gitmodules @@ -12,7 +12,7 @@ url = https://github.com/mpark/variant.git [submodule "libs/range-v3"] path = external/range-v3 - url = https://github.com/hkalodner/range-v3.git + url = https://github.com/ericniebler/range-v3.git [submodule "Notebooks/blocksci/Blockchain-Known-Pools"] path = blockscipy/blocksci/Blockchain-Known-Pools url = https://github.com/blockchain/Blockchain-Known-Pools diff --git a/external/range-v3 b/external/range-v3 index 2258fd18..5f51a81d 160000 --- a/external/range-v3 +++ b/external/range-v3 @@ -1 +1 @@ -Subproject commit 2258fd1870b42a32810aee3358834ecf6e1ea80a +Subproject commit 5f51a81d4de57f7c563ec25fdc19b295ad94c7d8 From e1188ab6cb19b60a81e3da487db73829e2176449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20Mo=CC=88ser?= Date: Fri, 21 Feb 2020 11:30:51 -0500 Subject: [PATCH 2/4] fix: range-v3 API changes for blocksci --- include/blocksci/address/address.hpp | 1 + include/blocksci/chain/algorithms.hpp | 54 +++++++++---------- include/blocksci/chain/block_range.hpp | 14 ++--- include/blocksci/chain/input_range.hpp | 16 +++--- include/blocksci/chain/output_range.hpp | 16 +++--- include/blocksci/cluster/cluster.hpp | 8 +-- .../blocksci/heuristics/change_address.hpp | 4 +- src/address/address.cpp | 4 +- src/address/equiv_address.cpp | 6 +-- src/chain/blockchain.cpp | 2 +- src/chain/transaction_range.cpp | 16 +++--- src/cluster/cluster.cpp | 14 ++--- src/heuristics/change_address.cpp | 8 +-- src/internal/address_index.hpp | 1 + src/internal/address_output_range.cpp | 2 +- src/internal/address_output_range.hpp | 6 +-- src/internal/cluster_access.hpp | 6 +-- src/internal/column_iterator.hpp | 6 +-- src/internal/hash_index.hpp | 1 + src/internal/mempool_index.hpp | 4 +- src/internal/script_view.cpp | 16 +++--- src/internal/script_view.hpp | 24 ++++----- tools/parser/address_db.cpp | 2 +- tools/parser/hash_index_creator.cpp | 4 +- tools/parser/preproccessed_block.cpp | 4 +- tools/parser/script_input.cpp | 16 +++--- tools/parser/script_output.cpp | 28 +++++----- tools/parser/script_output.hpp | 8 +-- 28 files changed, 147 insertions(+), 144 deletions(-) diff --git a/include/blocksci/address/address.hpp b/include/blocksci/address/address.hpp index b003f9ce..548e3c50 100644 --- a/include/blocksci/address/address.hpp +++ b/include/blocksci/address/address.hpp @@ -18,6 +18,7 @@ #include #include +#include #include #include diff --git a/include/blocksci/chain/algorithms.hpp b/include/blocksci/chain/algorithms.hpp index c3ec3b49..589d696f 100644 --- a/include/blocksci/chain/algorithms.hpp +++ b/include/blocksci/chain/algorithms.hpp @@ -24,49 +24,49 @@ namespace blocksci { - template - constexpr bool isOutputPointerRange = std::is_same, OutputPointer>::value; + CPP_template(typename B)(requires ranges::range) + CPP_concept_bool isOutputPointerRange = std::is_same, OutputPointer>::value; - template - constexpr bool isInputRange = std::is_same, Input>::value; + CPP_template(typename B)(requires ranges::range) + CPP_concept_bool isInputRange = std::is_same, Input>::value; - template - constexpr bool isOutputRange = std::is_same, Output>::value; + CPP_template(typename B)(requires ranges::range) + CPP_concept_bool isOutputRange = std::is_same, Output>::value; - template - constexpr bool isTxRange = std::is_same, Transaction>::value; + CPP_template(typename B)(requires ranges::range) + CPP_concept_bool isTxRange = std::is_same, Transaction>::value; - template - constexpr bool isBlockRange = std::is_same, Block>::value; + CPP_template(typename B)(requires ranges::range) + CPP_concept_bool isBlockRange = std::is_same, Block>::value; template - constexpr bool isTx = std::is_same::value; + CPP_concept_bool isTx = std::is_same::value; template - constexpr bool isBlockchain = std::is_same::value; + CPP_concept_bool isBlockchain = std::is_same::value; - template - constexpr bool isOptionalInputRange = std::is_same, ranges::optional>::value; + CPP_template(typename B)(requires ranges::range) + CPP_concept_bool isOptionalInputRange = std::is_same, ranges::optional>::value; - template - constexpr bool isOptionalOutputRange = std::is_same, ranges::optional>::value; + CPP_template(typename B)(requires ranges::range) + CPP_concept_bool isOptionalOutputRange = std::is_same, ranges::optional>::value; - template - constexpr bool isOptionalTxRange = std::is_same, ranges::optional>::value; + CPP_template(typename B)(requires ranges::range) + CPP_concept_bool isOptionalTxRange = std::is_same, ranges::optional>::value; - template - constexpr bool isOptionalBlockRange = std::is_same, ranges::optional>::value; + CPP_template(typename B)(requires ranges::range) + CPP_concept_bool isOptionalBlockRange = std::is_same, ranges::optional>::value; template struct fail_helper : std::false_type { }; - template ()), std::enable_if_t, int> = 0> + CPP_template(typename B)(requires isTxRange) inline auto BLOCKSCI_EXPORT txes(B && b) { return std::forward(b); } - template ()), std::enable_if_t, int> = 0> + CPP_template(typename B)(requires isBlockRange) inline auto BLOCKSCI_EXPORT txes(B && b) { return std::forward(b) | ranges::view::join; } @@ -79,12 +79,12 @@ namespace blocksci { return tx.inputs(); } - template ()), std::enable_if_t, int> = 0> + CPP_template(typename B)(requires isInputRange) inline auto BLOCKSCI_EXPORT inputs(B && b) { return std::forward(b); } - template ()), std::enable_if_t || isBlockRange, int> = 0> + CPP_template(typename B)(requires isTxRange || isBlockRange) inline auto BLOCKSCI_EXPORT inputs(B && b) { return txes(std::forward(b)) | ranges::view::transform([](const Transaction &tx) { return tx.inputs(); }) | ranges::view::join; } @@ -97,17 +97,17 @@ namespace blocksci { return tx.outputs(); } - template ()), std::enable_if_t, int> = 0> + CPP_template(typename B)(requires isOutputRange) inline auto BLOCKSCI_EXPORT outputs(B && b) { return std::forward(b); } - template ()), std::enable_if_t || isBlockRange, int> = 0> + CPP_template(typename B)(requires isTxRange || isBlockRange) inline auto BLOCKSCI_EXPORT outputs(B && b) { return txes(std::forward(b)) | ranges::view::transform([](const Transaction &tx) { return tx.outputs(); }) | ranges::view::join; } - template ()), std::enable_if_t, int> = 0> + CPP_template(typename B)(requires isOutputPointerRange) inline auto BLOCKSCI_EXPORT outputs(B && b, DataAccess &access) { return std::forward(b) | ranges::view::transform([&access](const OutputPointer &pointer) { return Output(pointer, access); }); } diff --git a/include/blocksci/chain/block_range.hpp b/include/blocksci/chain/block_range.hpp index ec4eddd8..b01d4b82 100644 --- a/include/blocksci/chain/block_range.hpp +++ b/include/blocksci/chain/block_range.hpp @@ -217,13 +217,13 @@ namespace blocksci { return it + i; } - CONCEPT_ASSERT(ranges::BidirectionalRange()); - CONCEPT_ASSERT(ranges::BidirectionalIterator()); - CONCEPT_ASSERT(ranges::SizedSentinel()); - CONCEPT_ASSERT(ranges::TotallyOrdered()); - CONCEPT_ASSERT(ranges::RandomAccessIterator()); - CONCEPT_ASSERT(ranges::RandomAccessRange()); - CONCEPT_ASSERT(ranges::SizedRange()); + CPP_assert(ranges::bidirectional_range); + CPP_assert(ranges::bidirectional_iterator); + CPP_assert(ranges::sized_sentinel_for); + CPP_assert(ranges::totally_ordered); + CPP_assert(ranges::random_access_iterator); + CPP_assert(ranges::random_access_range); + CPP_assert(ranges::sized_range); } // namespace blocksci diff --git a/include/blocksci/chain/input_range.hpp b/include/blocksci/chain/input_range.hpp index 38e00bd7..9a8fb2ea 100644 --- a/include/blocksci/chain/input_range.hpp +++ b/include/blocksci/chain/input_range.hpp @@ -12,7 +12,7 @@ #include #include -#include +#include namespace blocksci { class ChainAccess; @@ -106,13 +106,13 @@ namespace blocksci { return it + i; } - CONCEPT_ASSERT(ranges::BidirectionalRange()); - CONCEPT_ASSERT(ranges::BidirectionalIterator()); - CONCEPT_ASSERT(ranges::SizedSentinel()); - CONCEPT_ASSERT(ranges::TotallyOrdered()); - CONCEPT_ASSERT(ranges::RandomAccessIterator()); - CONCEPT_ASSERT(ranges::RandomAccessRange()); - CONCEPT_ASSERT(ranges::SizedRange()); + CPP_assert(ranges::bidirectional_range); + CPP_assert(ranges::bidirectional_iterator); + CPP_assert(ranges::sized_sentinel_for); + CPP_assert(ranges::totally_ordered); + CPP_assert(ranges::random_access_iterator); + CPP_assert(ranges::random_access_range); + CPP_assert(ranges::sized_range); } #endif /* blocksci_input_range_hpp */ diff --git a/include/blocksci/chain/output_range.hpp b/include/blocksci/chain/output_range.hpp index b6b14b24..74522eba 100644 --- a/include/blocksci/chain/output_range.hpp +++ b/include/blocksci/chain/output_range.hpp @@ -12,7 +12,7 @@ #include #include -#include +#include namespace blocksci { class ChainAccess; @@ -97,13 +97,13 @@ namespace blocksci { return it + i; } - CONCEPT_ASSERT(ranges::BidirectionalRange()); - CONCEPT_ASSERT(ranges::BidirectionalIterator()); - CONCEPT_ASSERT(ranges::SizedSentinel()); - CONCEPT_ASSERT(ranges::TotallyOrdered()); - CONCEPT_ASSERT(ranges::RandomAccessIterator()); - CONCEPT_ASSERT(ranges::RandomAccessRange()); - CONCEPT_ASSERT(ranges::SizedRange()); + CPP_assert(ranges::bidirectional_range); + CPP_assert(ranges::bidirectional_iterator); + CPP_assert(ranges::sized_sentinel_for); + CPP_assert(ranges::totally_ordered); + CPP_assert(ranges::random_access_iterator); + CPP_assert(ranges::random_access_range); + CPP_assert(ranges::sized_range); } #endif /* blocksci_output_range_hpp */ diff --git a/include/blocksci/cluster/cluster.hpp b/include/blocksci/cluster/cluster.hpp index 84041dbc..dab6c092 100644 --- a/include/blocksci/cluster/cluster.hpp +++ b/include/blocksci/cluster/cluster.hpp @@ -67,14 +67,14 @@ namespace blocksci { struct PossibleAddressesGetter { DataAccess *access; - ranges::transform_view, ClusterAddressCreator> + ranges::transform_view, ClusterAddressCreator> operator()(const DedupAddress &dedupAddress) const; }; struct AddressRangeTagChecker { TagChecker tagCheck; - auto operator()(ranges::transform_view, ClusterAddressCreator> && rng) const { + auto operator()(ranges::transform_view, ClusterAddressCreator> && rng) const { return std::move(rng) | ranges::view::transform(tagCheck) | flatMapOptionals(); } }; @@ -82,7 +82,7 @@ namespace blocksci { class BLOCKSCI_EXPORT Cluster { const ClusterAccess *clusterAccess; - ranges::iterator_range getDedupAddresses() const; + ranges::subrange getDedupAddresses() const; // Only holds tags by reference so it must remain alive while this range exists ranges::any_view taggedAddressesUnsafe(const std::unordered_map &tags) const; @@ -97,7 +97,7 @@ namespace blocksci { ranges::any_view taggedAddresses(const std::unordered_map &tags) const; - ranges::transform_view, PossibleAddressesGetter>, AddressRangeTagChecker> + ranges::transform_view, PossibleAddressesGetter>, AddressRangeTagChecker> taggedAddressesNested(const std::unordered_map &tags) const; ranges::optional getTaggedUnsafe(const std::unordered_map &tags) const; diff --git a/include/blocksci/heuristics/change_address.hpp b/include/blocksci/heuristics/change_address.hpp index ff571d62..4df084ed 100644 --- a/include/blocksci/heuristics/change_address.hpp +++ b/include/blocksci/heuristics/change_address.hpp @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include @@ -83,7 +83,7 @@ namespace heuristics { if (ranges::distance(c) == 1) { return c; } else { - ranges::any_view empty = ranges::view::empty(); + ranges::any_view empty = ranges::view::empty; return empty; } }}}; diff --git a/src/address/address.cpp b/src/address/address.cpp index 905e4138..401a4dc3 100644 --- a/src/address/address.cpp +++ b/src/address/address.cpp @@ -167,7 +167,7 @@ namespace blocksci { } } - bool equal(ranges::default_sentinel) const { + bool equal(ranges::default_sentinel_t) const { return it == end; } @@ -184,7 +184,7 @@ namespace blocksci { return cursor{pointers.begin(), pointers.end(), searchAddress, access}; } - ranges::default_sentinel end_cursor() { + ranges::default_sentinel_t end_cursor() { return {}; } diff --git a/src/address/equiv_address.cpp b/src/address/equiv_address.cpp index 432e8f9b..8318fc96 100644 --- a/src/address/equiv_address.cpp +++ b/src/address/equiv_address.cpp @@ -125,15 +125,15 @@ namespace blocksci { } std::vector EquivAddress::getTransactions() const { - return blocksci::getTransactions(getOutputPointers(), *access); + return blocksci::getTransactions(getOutputPointers() | ranges::to_vector, *access); } std::vector EquivAddress::getOutputTransactions() const { - return blocksci::getOutputTransactions(getOutputPointers(), *access); + return blocksci::getOutputTransactions(getOutputPointers() | ranges::to_vector, *access); } std::vector EquivAddress::getInputTransactions() const { - return blocksci::getInputTransactions(getOutputPointers(), *access); + return blocksci::getInputTransactions(getOutputPointers() | ranges::to_vector, *access); } } diff --git a/src/chain/blockchain.cpp b/src/chain/blockchain.cpp index ee693e18..3825b3b5 100644 --- a/src/chain/blockchain.cpp +++ b/src/chain/blockchain.cpp @@ -17,7 +17,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/chain/transaction_range.cpp b/src/chain/transaction_range.cpp index 742314e4..89a694f8 100644 --- a/src/chain/transaction_range.cpp +++ b/src/chain/transaction_range.cpp @@ -10,7 +10,7 @@ #include #include -#include +#include namespace blocksci { @@ -46,11 +46,11 @@ namespace blocksci { return {data, index, height, firstTx.maxTxCount, firstTx.getAccess()}; } - CONCEPT_ASSERT(ranges::BidirectionalRange()); - CONCEPT_ASSERT(ranges::BidirectionalIterator()); - CONCEPT_ASSERT(ranges::SizedSentinel()); - CONCEPT_ASSERT(ranges::TotallyOrdered()); - CONCEPT_ASSERT(ranges::RandomAccessIterator()); - CONCEPT_ASSERT(ranges::RandomAccessRange()); - CONCEPT_ASSERT(ranges::SizedRange()); + CPP_assert(ranges::bidirectional_range); + CPP_assert(ranges::bidirectional_iterator); + CPP_assert(ranges::sized_sentinel_for); + CPP_assert(ranges::totally_ordered); + CPP_assert(ranges::random_access_iterator); + CPP_assert(ranges::random_access_range); + CPP_assert(ranges::sized_range); } // namespace blocksci diff --git a/src/cluster/cluster.cpp b/src/cluster/cluster.cpp index 52500a20..e0421607 100644 --- a/src/cluster/cluster.cpp +++ b/src/cluster/cluster.cpp @@ -22,7 +22,7 @@ #include #include -#include +#include #include namespace { @@ -30,13 +30,13 @@ namespace { template struct DedupAddressTypesRangeFunctor { - static ranges::iterator_range f() { + static ranges::subrange f() { auto &types = DedupAddressInfo::equivTypes; - return ranges::iterator_range{types.begin(), types.end()}; + return ranges::subrange{types.begin(), types.end()}; } }; - inline ranges::iterator_range addressTypesRange(DedupAddressType::Enum t) { + inline ranges::subrange addressTypesRange(DedupAddressType::Enum t) { static auto &dedupAddressTypesRangeTable = *[]() { auto nameTable = make_static_table(); return new decltype(nameTable){nameTable}; @@ -48,11 +48,11 @@ namespace { namespace blocksci { - ranges::iterator_range Cluster::getDedupAddresses() const { + ranges::subrange Cluster::getDedupAddresses() const { return clusterAccess->getClusterScripts(clusterNum); } - ranges::transform_view, ClusterAddressCreator> + ranges::transform_view, ClusterAddressCreator> PossibleAddressesGetter::operator()(const DedupAddress &dedupAddress) const { ClusterAddressCreator creator{access, dedupAddress.scriptNum}; return addressTypesRange(dedupAddress.type) | ranges::view::transform(creator); @@ -173,7 +173,7 @@ namespace blocksci { }) | flatMapOptionals(); } - ranges::transform_view, PossibleAddressesGetter>, AddressRangeTagChecker> + ranges::transform_view, PossibleAddressesGetter>, AddressRangeTagChecker> Cluster::taggedAddressesNested(const std::unordered_map &tags) const { AddressRangeTagChecker tagCheck{tags}; diff --git a/src/heuristics/change_address.cpp b/src/heuristics/change_address.cpp index ccfe4379..1689f8e4 100644 --- a/src/heuristics/change_address.cpp +++ b/src/heuristics/change_address.cpp @@ -40,7 +40,7 @@ namespace blocksci { namespace heuristics { ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &tx) const { // If current tx is not a peeling chain, return an empty set if (!isPeelingChain(tx)) { - return ranges::view::empty(); + return ranges::view::empty; } // Check which output(s) continue the peeling chain @@ -102,7 +102,7 @@ namespace blocksci { namespace heuristics { if (allInputsSameType) { return tx.outputs() | ranges::view::filter([inputType](Output o){return o.getType() == inputType;}) | ranges::view::filter(filterOpReturn); } else { - return ranges::view::empty(); + return ranges::view::empty; } } @@ -179,7 +179,7 @@ namespace blocksci { namespace heuristics { if (c.has_value()) { return ranges::view::single(c.value()); } - return ranges::view::empty(); + return ranges::view::empty; } /** Clients may choose a fixed fee per kb instead of using one based on the current fee market. */ @@ -192,7 +192,7 @@ namespace blocksci { namespace heuristics { /** Disables change address clustering by returning an empty set. */ template<> ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &) const { - return ranges::view::empty(); + return ranges::view::empty; } /** Returns all outputs that have been spent. diff --git a/src/internal/address_index.hpp b/src/internal/address_index.hpp index e3a5cfeb..244c86f8 100644 --- a/src/internal/address_index.hpp +++ b/src/internal/address_index.hpp @@ -13,6 +13,7 @@ #include #include +#include #include diff --git a/src/internal/address_output_range.cpp b/src/internal/address_output_range.cpp index b0c8fad9..58d03378 100644 --- a/src/internal/address_output_range.cpp +++ b/src/internal/address_output_range.cpp @@ -68,7 +68,7 @@ namespace blocksci { } } - bool RawAddressOutputRange::cursor::equal(ranges::default_sentinel) const { + bool RawAddressOutputRange::cursor::equal(ranges::default_sentinel_t) const { return !it->Valid() && currentTypeIndex == AddressType::size; } diff --git a/src/internal/address_output_range.hpp b/src/internal/address_output_range.hpp index 18eb9471..ee613275 100644 --- a/src/internal/address_output_range.hpp +++ b/src/internal/address_output_range.hpp @@ -10,7 +10,7 @@ #include -#include +#include namespace rocksdb { class Iterator; @@ -41,7 +41,7 @@ namespace blocksci { std::pair read() const; - bool equal(ranges::default_sentinel) const; + bool equal(ranges::default_sentinel_t) const; bool equal(cursor const &that) const { return rowNum == that.rowNum; @@ -57,7 +57,7 @@ namespace blocksci { return cursor{*index}; } - ranges::default_sentinel end_cursor() const { + ranges::default_sentinel_t end_cursor() const { return {}; } diff --git a/src/internal/cluster_access.hpp b/src/internal/cluster_access.hpp index e0c62a4e..0027d966 100644 --- a/src/internal/cluster_access.hpp +++ b/src/internal/cluster_access.hpp @@ -15,7 +15,7 @@ #include #include -#include +#include #include @@ -104,7 +104,7 @@ namespace blocksci { return static_cast(clusterOffsetFile.size()) - 1; } - ranges::iterator_range getClusterScripts(uint32_t clusterNum) const { + ranges::subrange getClusterScripts(uint32_t clusterNum) const { auto nextClusterOffset = *clusterOffsetFile[clusterNum]; uint32_t clusterOffset = 0; if (clusterNum > 0) { @@ -114,7 +114,7 @@ namespace blocksci { auto firstAddressOffset = clusterScriptsFile[clusterOffset]; - return ranges::make_iterator_range(firstAddressOffset, firstAddressOffset + clusterSize); + return ranges::make_subrange(firstAddressOffset, firstAddressOffset + clusterSize); } std::vector getClusterSizes() const { diff --git a/src/internal/column_iterator.hpp b/src/internal/column_iterator.hpp index 93b35aa2..541a6d94 100644 --- a/src/internal/column_iterator.hpp +++ b/src/internal/column_iterator.hpp @@ -10,7 +10,7 @@ #include "memory_view.hpp" -#include +#include #include @@ -54,7 +54,7 @@ namespace blocksci { return {{key.data(), key.size()}, {value.data(), value.size()}}; } - bool equal(ranges::default_sentinel) const { + bool equal(ranges::default_sentinel_t) const { rocksdb::Slice key(prefixBytes.data(), prefixBytes.size()); return !it->Valid() || !it->key().starts_with(key); } @@ -77,7 +77,7 @@ namespace blocksci { return cursor{db, column, prefixBytes}; } - ranges::default_sentinel end_cursor() const { + ranges::default_sentinel_t end_cursor() const { return {}; } diff --git a/src/internal/hash_index.hpp b/src/internal/hash_index.hpp index 81618cae..cd5cd4f1 100644 --- a/src/internal/hash_index.hpp +++ b/src/internal/hash_index.hpp @@ -13,6 +13,7 @@ #include "memory_view.hpp" #include +#include #include diff --git a/src/internal/mempool_index.hpp b/src/internal/mempool_index.hpp index 6353df56..d00e9016 100644 --- a/src/internal/mempool_index.hpp +++ b/src/internal/mempool_index.hpp @@ -149,7 +149,7 @@ namespace blocksci { ranges::optional> selectPossibleTxRecording(uint32_t txIndex) const { if (timestampFiles.size() > 0) { - auto it = ranges::upper_bound(timestampFiles, txIndex, ranges::ordered_less(), &TimestampIndex::firstTxIndex); + auto it = ranges::upper_bound(timestampFiles, txIndex, ranges::less(), &TimestampIndex::firstTxIndex); if (it != timestampFiles.begin()) { --it; } @@ -162,7 +162,7 @@ namespace blocksci { ranges::optional> selectPossibleBlockRecording(int height) const { if (blockTimeFiles.size() > 0) { - auto it = ranges::upper_bound(blockTimeFiles, height, ranges::ordered_less(), &BlocktimeIndex::firstBlockNum); + auto it = ranges::upper_bound(blockTimeFiles, height, ranges::less(), &BlocktimeIndex::firstBlockNum); if (it != blockTimeFiles.begin()) { --it; } diff --git a/src/internal/script_view.cpp b/src/internal/script_view.cpp index 7d53fd27..59d6c5d4 100644 --- a/src/internal/script_view.cpp +++ b/src/internal/script_view.cpp @@ -15,7 +15,7 @@ namespace blocksci { unsigned int CScriptView::GetSigOpCount(bool fAccurate) const { unsigned int n = 0; - const_iterator pc = begin(); + iterator pc = begin(); opcodetype lastOpcode = OP_INVALIDOPCODE; while (pc < end()) { @@ -46,8 +46,8 @@ namespace blocksci { // This is a pay-to-script-hash scriptPubKey; // get the last item that the scriptSig // pushes onto the stack: - const_iterator pc = scriptSig.begin(); - ranges::iterator_range vData; + iterator pc = scriptSig.begin(); + ranges::subrange vData; while (pc < scriptSig.end()) { opcodetype opcode; if (!scriptSig.GetOp(pc, opcode, vData)) { @@ -80,7 +80,7 @@ namespace blocksci { // A witness program is any valid CScript that consists of a 1-byte push opcode // followed by a data push between 2 and 40 bytes. - bool CScriptView::IsWitnessProgram(uint8_t& version, ranges::iterator_range& program) const { + bool CScriptView::IsWitnessProgram(uint8_t& version, ranges::subrange& program) const { if (this->size() < 4 || this->size() > 42) { return false; } @@ -105,7 +105,7 @@ namespace blocksci { return (static_cast((*this)[1] + 2) == this->size()); } - bool CScriptView::IsPushOnly(const_iterator pc) const { + bool CScriptView::IsPushOnly(iterator pc) const { while (pc < end()) { opcodetype opcode; if (!GetOp(pc, opcode)) { @@ -129,8 +129,8 @@ namespace blocksci { std::string ScriptToAsmStr(const CScriptView& script, const bool fAttemptSighashDecode) { std::stringstream ss; opcodetype opcode; - ranges::iterator_range vch; - CScriptView::const_iterator pc = script.begin(); + ranges::subrange vch; + CScriptView::iterator pc = script.begin(); while (pc < script.end()) { if (!ss.str().empty()) { ss << " "; @@ -141,7 +141,7 @@ namespace blocksci { } if (0 <= opcode && opcode <= OP_PUSHDATA4) { if (vch.size() <= static_cast::size_type>(4)) { - ss << CScriptNum(vch, false).getint(); + ss << CScriptNum(vch | ranges::to_vector, false).getint(); } else { // the IsUnspendable check makes sure not to try to decode OP_RETURN data that may match the format of a signature if (fAttemptSighashDecode && !script.IsUnspendable()) { diff --git a/src/internal/script_view.hpp b/src/internal/script_view.hpp index d2ecb90e..6bc5c5a1 100644 --- a/src/internal/script_view.hpp +++ b/src/internal/script_view.hpp @@ -10,7 +10,7 @@ #include "bitcoin_script.hpp" -#include +#include #include #include @@ -21,26 +21,26 @@ namespace blocksci { /** Serialized script, used inside transaction inputs and outputs */ - class CScriptView : public ranges::iterator_range { + class CScriptView : public ranges::subrange { public: - CScriptView() : ranges::iterator_range() {} - CScriptView(const unsigned char* pbegin, const unsigned char* pend) : ranges::iterator_range(pbegin, pend) {} + CScriptView() : ranges::subrange() {} + CScriptView(const unsigned char* pbegin, const unsigned char* pend) : ranges::subrange(pbegin, pend) {} - bool GetOp(const_iterator& pc, opcodetype& opcodeRet, ranges::iterator_range& vchRet) const + bool GetOp(iterator& pc, opcodetype& opcodeRet, ranges::subrange& vchRet) const { return GetOp2(pc, opcodeRet, &vchRet); } - bool GetOp(const_iterator& pc, opcodetype& opcodeRet) const + bool GetOp(iterator& pc, opcodetype& opcodeRet) const { return GetOp2(pc, opcodeRet, nullptr); } - bool GetOp2(const_iterator& pc, opcodetype& opcodeRet, ranges::iterator_range* pvchRet) const + bool GetOp2(iterator& pc, opcodetype& opcodeRet, ranges::subrange* pvchRet) const { opcodeRet = OP_INVALIDOPCODE; if (pvchRet) - *pvchRet = ranges::iterator_range(); + *pvchRet = ranges::subrange(); if (pc >= end()) return false; @@ -84,7 +84,7 @@ namespace blocksci { if (end() - pc < 0 || static_cast(end() - pc) < nSize) return false; if (pvchRet) - *pvchRet = ranges::iterator_range(pc, pc + nSize); + *pvchRet = ranges::subrange(pc, pc + nSize); pc += nSize; } @@ -96,7 +96,7 @@ namespace blocksci { { int nFound = 0; opcodetype opcode = OP_0; - for (const_iterator pc = begin(); pc != end() && GetOp(pc, opcode);) + for (iterator pc = begin(); pc != end() && GetOp(pc, opcode);) if (opcode == op) ++nFound; return nFound; @@ -119,11 +119,11 @@ namespace blocksci { bool IsPayToScriptHash() const; bool IsPayToWitnessScriptHash() const; - bool IsWitnessProgram(uint8_t& version, ranges::iterator_range& program) const; + bool IsWitnessProgram(uint8_t& version, ranges::subrange& program) const; bool IsWitnessProgram() const; /** Called by IsStandardTx and P2SH/BIP62 VerifyScript (which makes it consensus-critical). */ - bool IsPushOnly(const_iterator pc) const; + bool IsPushOnly(iterator pc) const; bool IsPushOnly() const; /** diff --git a/tools/parser/address_db.cpp b/tools/parser/address_db.cpp index 0801510b..afee1c30 100644 --- a/tools/parser/address_db.cpp +++ b/tools/parser/address_db.cpp @@ -47,7 +47,7 @@ void AddressDB::processTx(const blocksci::RawTransaction *tx, uint32_t txNum, co return false; } }; - auto inputs = ranges::make_iterator_range(tx->beginInputs(), tx->endInputs()); + auto inputs = ranges::make_subrange(tx->beginInputs(), tx->endInputs()); for (auto &input : inputs) { visit(RawAddress{input.getAddressNum(), input.getType()}, visitFunc, scripts); } diff --git a/tools/parser/hash_index_creator.cpp b/tools/parser/hash_index_creator.cpp index 60e29a51..4a497c80 100644 --- a/tools/parser/hash_index_creator.cpp +++ b/tools/parser/hash_index_creator.cpp @@ -67,13 +67,13 @@ void HashIndexCreator::processTx(const blocksci::RawTransaction *tx, uint32_t tx return false; } }; - auto inputs = ranges::make_iterator_range(tx->beginInputs(), tx->endInputs()); + auto inputs = ranges::make_subrange(tx->beginInputs(), tx->endInputs()); for (auto input : inputs) { insideP2SH = false; visit(blocksci::RawAddress{input.getAddressNum(), input.getType()}, inputVisitFunc, scripts); } - auto outputs = ranges::make_iterator_range(tx->beginOutputs(), tx->endOutputs()); + auto outputs = ranges::make_subrange(tx->beginOutputs(), tx->endOutputs()); for (auto &txout : outputs) { if (txout.getType() == blocksci::AddressType::WITNESS_SCRIPTHASH) { auto script = scripts.getScriptData(txout.getAddressNum()); diff --git a/tools/parser/preproccessed_block.cpp b/tools/parser/preproccessed_block.cpp index 7b58dce7..9554f95e 100644 --- a/tools/parser/preproccessed_block.cpp +++ b/tools/parser/preproccessed_block.cpp @@ -297,8 +297,8 @@ blocksci::uint256 RawTransaction::getHash(const InputView &info, const blocksci: // Blank out other inputs' signatures s.serializeCompact(0); } else { - blocksci::CScriptView::const_iterator it = scriptView.begin(); - blocksci::CScriptView::const_iterator itBegin = it; + blocksci::CScriptView::iterator it = scriptView.begin(); + blocksci::CScriptView::iterator itBegin = it; blocksci::opcodetype opcode; unsigned int nCodeSeparators = 0; while (scriptView.GetOp(it, opcode)) { diff --git a/tools/parser/script_input.cpp b/tools/parser/script_input.cpp index 4e044c51..39a2fc59 100644 --- a/tools/parser/script_input.cpp +++ b/tools/parser/script_input.cpp @@ -43,13 +43,13 @@ blocksci::RawAddress AnyScriptInput::address() const { } std::pair> p2shGenerate(const InputView &inputView, const blocksci::CScriptView &scriptView, const RawTransaction &tx, const SpendData &) { - blocksci::CScriptView::const_iterator pc1 = scriptView.begin(); - blocksci::CScriptView::const_iterator prevpc = scriptView.begin(); - blocksci::CScriptView::const_iterator prevprevpc = scriptView.begin(); + blocksci::CScriptView::iterator pc1 = scriptView.begin(); + blocksci::CScriptView::iterator prevpc = scriptView.begin(); + blocksci::CScriptView::iterator prevprevpc = scriptView.begin(); blocksci::opcodetype opcode1; - ranges::iterator_range vch1; + ranges::subrange vch1; - ranges::iterator_range lastScript; + ranges::subrange lastScript; while(true) { prevprevpc = prevpc; prevpc = pc1; @@ -59,7 +59,7 @@ std::pair> p2shGenerate(const I } } - blocksci::CScriptView::const_iterator begin = scriptView.begin(); + blocksci::CScriptView::iterator begin = scriptView.begin(); auto wrappedInputBegin = &*begin; auto wrappedInputLength = static_cast(std::distance(begin, prevprevpc)); @@ -84,8 +84,8 @@ ScriptInputData::ScriptInputData(const if (scriptView.size() > 0) { auto pc = scriptView.begin(); blocksci::opcodetype opcode = blocksci::OP_0; - ranges::iterator_range vchSig; - ranges::iterator_range vchSig2; + ranges::subrange vchSig; + ranges::subrange vchSig2; // tx 1b008139698117162a9539295ada34fc745f06f733b5f400674f15bf47e720a5 contains a OP_0 before the signature // tx bcd1835ebd7e0d44abcab84ec64a488eefd9fa048d2e11a5a24b197838d8af11 (testnet) contains an Push(13) before the real data // tx 4c65efdf4e60e9c1bbc1a1a452c3c758789efc7894bff9ed694305eb9c389e7b (testnet) super weird diff --git a/tools/parser/script_output.cpp b/tools/parser/script_output.cpp index 35107b49..7d660530 100644 --- a/tools/parser/script_output.cpp +++ b/tools/parser/script_output.cpp @@ -16,7 +16,7 @@ using namespace blocksci; -bool isValidPubkey(ranges::iterator_range &vch1) { +bool isValidPubkey(ranges::subrange &vch1) { if (vch1.size() < 33 || vch1.size() > 65) { return false; } @@ -32,17 +32,17 @@ bool isValidPubkey(ranges::iterator_range &vch1) { } using ScriptOutputDataType = blocksci::to_variadic_t, mpark::variant>; -using valtype = ranges::iterator_range; +using valtype = ranges::subrange; static bool MatchPayToPubkey(const CScriptView& script, valtype& pubkey) { if (script.size() == CPubKey::PUBLIC_KEY_SIZE + 2 && script[0] == CPubKey::PUBLIC_KEY_SIZE && script.back() == OP_CHECKSIG) { pubkey = valtype(script.begin() + 1, script.begin() + blocksci::CPubKey::PUBLIC_KEY_SIZE + 1); - return CPubKey::ValidSize(pubkey); + return CPubKey::ValidSize(pubkey | ranges::to_vector); } if (script.size() == CPubKey::COMPRESSED_PUBLIC_KEY_SIZE + 2 && script[0] == CPubKey::COMPRESSED_PUBLIC_KEY_SIZE && script.back() == OP_CHECKSIG) { pubkey = valtype(script.begin() + 1, script.begin() + CPubKey::COMPRESSED_PUBLIC_KEY_SIZE + 1); - return CPubKey::ValidSize(pubkey); + return CPubKey::ValidSize(pubkey | ranges::to_vector); } return false; } @@ -66,12 +66,12 @@ static bool MatchMultisig(const CScriptView& script, ScriptOutputData witnessprogram; + ranges::subrange witnessprogram; if (witnessActivated && scriptPubKey.IsWitnessProgram(witnessversion, witnessprogram)) { if (witnessversion == 0) { if (witnessprogram.size() == 20) { @@ -122,7 +122,7 @@ ScriptOutputDataType extractScriptData(const blocksci::CScriptView &scriptPubKey return ScriptOutputData{scriptPubKey}; } - ranges::iterator_range data; + ranges::subrange data; if (MatchPayToPubkey(scriptPubKey, data)) { return ScriptOutputData{data}; } @@ -171,7 +171,7 @@ uint32_t AnyScriptOutput::resolve(AddressState &state) { // MARK: TX_PUBKEY -ScriptOutputData::ScriptOutputData(const ranges::iterator_range &vch1) { +ScriptOutputData::ScriptOutputData(const ranges::subrange &vch1) { pubkey.fill(0); std::copy(vch1.begin(), vch1.end(), pubkey.begin()); } @@ -201,7 +201,7 @@ blocksci::PubkeyData ScriptOutputData:: // MARK: MULTISIG_PUBKEY -ScriptOutputData::ScriptOutputData(const ranges::iterator_range &vch1) { +ScriptOutputData::ScriptOutputData(const ranges::subrange &vch1) { std::copy(vch1.begin(), vch1.end(), pubkey.begin()); } @@ -279,7 +279,7 @@ blocksci::uint160 ScriptOutputData::getHa return ripemd160(sigData.data(), sigData.size()); } -void ScriptOutputData::addAddress(const ranges::iterator_range &vch1) { +void ScriptOutputData::addAddress(const ranges::subrange &vch1) { blocksci::RawPubkey pubkey; pubkey.fill(0); std::copy(vch1.begin(), vch1.end(), pubkey.begin()); @@ -312,9 +312,9 @@ blocksci::ArbitraryLengthData ScriptOutputData< // MARK: TX_NULL_DATA ScriptOutputData::ScriptOutputData(const blocksci::CScriptView &script){ - blocksci::CScriptView::const_iterator pc1 = script.begin(); + blocksci::CScriptView::iterator pc1 = script.begin(); blocksci::opcodetype opcode1; - ranges::iterator_range vch1; + ranges::subrange vch1; while(true) { if(!script.GetOp(pc1, opcode1, vch1)) { break; @@ -333,7 +333,7 @@ blocksci::ArbitraryLengthData ScriptOutputData::ScriptOutputData(uint8_t witnessVersion_, const ranges::iterator_range &witnessData_) : witnessVersion(witnessVersion_) { +ScriptOutputData::ScriptOutputData(uint8_t witnessVersion_, const ranges::subrange &witnessData_) : witnessVersion(witnessVersion_) { witnessData.assign(witnessData_.begin(), witnessData_.end()); } diff --git a/tools/parser/script_output.hpp b/tools/parser/script_output.hpp index f1d6878f..0eca0843 100644 --- a/tools/parser/script_output.hpp +++ b/tools/parser/script_output.hpp @@ -56,7 +56,7 @@ struct ScriptOutputData : public ScriptOutp blocksci::RawPubkey pubkey; - ScriptOutputData(const ranges::iterator_range &vch1); + ScriptOutputData(const ranges::subrange &vch1); ScriptOutputData(const blocksci::RawPubkey &pub) { pubkey.fill(0); pubkey = pub; @@ -86,7 +86,7 @@ struct ScriptOutputData : public S blocksci::RawPubkey pubkey; - ScriptOutputData(const ranges::iterator_range &vch1); + ScriptOutputData(const ranges::subrange &vch1); ScriptOutputData(const blocksci::RawPubkey &pub) { pubkey.fill(0); pubkey = pub; @@ -145,7 +145,7 @@ struct ScriptOutputData : public ScriptOu ScriptOutputData() : addressCount(0) {} - void addAddress(const ranges::iterator_range &vch1); + void addAddress(const ranges::subrange &vch1); bool isValid() const { return numRequired <= numTotal && numTotal == addressCount; @@ -195,7 +195,7 @@ struct ScriptOutputData : public S std::vector witnessData; ScriptOutputData() {} - ScriptOutputData(uint8_t witnessVersion, const ranges::iterator_range &witnessData); + ScriptOutputData(uint8_t witnessVersion, const ranges::subrange &witnessData); blocksci::ArbitraryLengthData getData(uint32_t txNum, bool topLevel) const; }; From 5459a83dce792dcbc3d8235a4f47a52441aa5574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20Mo=CC=88ser?= Date: Fri, 21 Feb 2020 11:46:45 -0500 Subject: [PATCH 3/4] fix: range-v3 API changes for blockscipy --- blockscipy/src/blocksci_type_converter.hpp | 7 ++++--- blockscipy/src/generic_proxy.hpp | 1 + blockscipy/src/generic_sequence.hpp | 4 ++-- blockscipy/src/proxy.hpp | 4 ++-- blockscipy/src/proxy/proxy_flow_functions_impl.hpp | 2 +- blockscipy/src/proxy/range.hpp | 7 +++---- blockscipy/src/proxy_create.hpp | 4 ++-- blockscipy/src/proxy_type_check.hpp | 1 + blockscipy/src/sequence.hpp | 12 ++++++------ 9 files changed, 22 insertions(+), 20 deletions(-) diff --git a/blockscipy/src/blocksci_type_converter.hpp b/blockscipy/src/blocksci_type_converter.hpp index 85e899f6..eb1eafa0 100644 --- a/blockscipy/src/blocksci_type_converter.hpp +++ b/blockscipy/src/blocksci_type_converter.hpp @@ -16,6 +16,7 @@ #include #include +#include struct BlockSciTypeConverter { @@ -62,13 +63,13 @@ struct BlockSciTypeConverter { template auto operator()(Iterator &val) -> Iteratoroperator()(*val))> { - return val | ranges::view::transform(this); + return val | ranges::views::transform(this); } template auto operator()(Range &val) -> Rangeoperator()(*val))> { - return val | ranges::view::transform(this); + return val | ranges::views::transform(this); } }; -#endif /* blocksci_type_converter_h */ \ No newline at end of file +#endif /* blocksci_type_converter_h */ diff --git a/blockscipy/src/generic_proxy.hpp b/blockscipy/src/generic_proxy.hpp index d93ce923..72dcd3e0 100644 --- a/blockscipy/src/generic_proxy.hpp +++ b/blockscipy/src/generic_proxy.hpp @@ -11,6 +11,7 @@ #include "python_fwd.hpp" #include +#include #include #include diff --git a/blockscipy/src/generic_sequence.hpp b/blockscipy/src/generic_sequence.hpp index 18e06040..833e361c 100644 --- a/blockscipy/src/generic_sequence.hpp +++ b/blockscipy/src/generic_sequence.hpp @@ -46,8 +46,8 @@ struct GenericIterator { struct GenericRange : public GenericIterator { virtual BlocksciRangeType getGenericRange() = 0; - virtual int64_t size() const = 0; - virtual bool empty() const = 0; + virtual int64_t size() = 0; + virtual bool empty() = 0; virtual ~GenericRange() = default; BlocksciIteratorType getGenericIterator() override; diff --git a/blockscipy/src/proxy.hpp b/blockscipy/src/proxy.hpp index 6401d7fe..f33ed560 100644 --- a/blockscipy/src/proxy.hpp +++ b/blockscipy/src/proxy.hpp @@ -107,9 +107,9 @@ struct Proxy> : public OptionalProxy { return [f = this->func](std::any &val) -> BlocksciRangeType { auto v = f(val); if (v) { - return BlocksciRangeType{RawRange{ranges::view::single(*v)}}; + return BlocksciRangeType{RawRange{ranges::views::single(*v)}}; } else { - return BlocksciRangeType{RawRange{ranges::view::empty()}}; + return BlocksciRangeType{RawRange{ranges::views::empty}}; } }; } diff --git a/blockscipy/src/proxy/proxy_flow_functions_impl.hpp b/blockscipy/src/proxy/proxy_flow_functions_impl.hpp index 709a0f68..a8e014fc 100644 --- a/blockscipy/src/proxy/proxy_flow_functions_impl.hpp +++ b/blockscipy/src/proxy/proxy_flow_functions_impl.hpp @@ -27,7 +27,7 @@ class take_while_range : public ranges::view_facade> { return *v; } - bool equal(ranges::default_sentinel) const { + bool equal(ranges::default_sentinel_t) const { return !v; } diff --git a/blockscipy/src/proxy/range.hpp b/blockscipy/src/proxy/range.hpp index fe0890de..f77c9a51 100644 --- a/blockscipy/src/proxy/range.hpp +++ b/blockscipy/src/proxy/range.hpp @@ -22,7 +22,7 @@ void setupRangesProxy(AllProxyClasses &cls) { cls.sequence .def("_where", [](SequenceProxy &p, Proxy &p2) -> Proxy> { return liftSequence(p, [p2](auto && seq) -> RawIterator { - return ranges::view::filter(std::forward(seq), [p2](T item) { + return ranges::views::filter(std::forward(seq), [p2](T item) { return p2(std::move(item)); }); }); @@ -86,13 +86,12 @@ void setupRangesProxy(AllProxyClasses &cls) { .def("__getitem__", [](Proxy> &p, pybind11::slice slice) -> Proxy> { return lift(p, [slice](auto && range) -> RawRange { size_t start, stop, step, slicelength; - const auto &constRange = range; - auto chainSize = ranges::size(constRange); + auto chainSize = ranges::size(range); if (!slice.compute(chainSize, &start, &stop, &step, &slicelength)) throw pybind11::error_already_set(); auto subset = range[{static_cast>>(start), static_cast>>(stop)}]; - return subset | ranges::view::stride(step); + return subset | ranges::views::stride(step); }); }, pybind11::arg("slice")) ; diff --git a/blockscipy/src/proxy_create.hpp b/blockscipy/src/proxy_create.hpp index 5c3d24b3..f7d41622 100644 --- a/blockscipy/src/proxy_create.hpp +++ b/blockscipy/src/proxy_create.hpp @@ -50,7 +50,7 @@ Proxy> makeIteratorProxy() { return {std::function(std::any &)>{[](std::any &t) -> RawIterator { RawIterator *rawIt = std::any_cast>(&t); if (rawIt != nullptr) { - return ranges::view::transform(*rawIt, [](BlocksciType && r) -> T { return mpark::get(r.var); }); + return ranges::views::transform(*rawIt, [](BlocksciType && r) -> T { return mpark::get(r.var); }); } return std::any_cast>(t); }}, createProxyTypeInfo>()}; @@ -61,7 +61,7 @@ Proxy> makeRangeProxy() { return {std::function(std::any &)>{[](std::any &t) -> RawRange { RawRange *rawIt = std::any_cast>(&t); if (rawIt != nullptr) { - return ranges::view::transform(*rawIt, [](BlocksciType && r) -> T { return mpark::get(r.var); }); + return ranges::views::transform(*rawIt, [](BlocksciType && r) -> T { return mpark::get(r.var); }); } return std::any_cast>(t); }}, createProxyTypeInfo>()}; diff --git a/blockscipy/src/proxy_type_check.hpp b/blockscipy/src/proxy_type_check.hpp index abf76abb..925c7e61 100644 --- a/blockscipy/src/proxy_type_check.hpp +++ b/blockscipy/src/proxy_type_check.hpp @@ -10,6 +10,7 @@ #define blocksci_proxy_type_check_hpp #include "python_fwd.hpp" +#include #include diff --git a/blockscipy/src/sequence.hpp b/blockscipy/src/sequence.hpp index 96addb6d..17394a51 100644 --- a/blockscipy/src/sequence.hpp +++ b/blockscipy/src/sequence.hpp @@ -28,11 +28,11 @@ struct Range : public Sequence, public GenericRange { return BlocksciRangeType{rng}; } - int64_t size() const override { + int64_t size() override { return rng.size(); } - bool empty() const override { + bool empty() override { return ranges::empty(rng); } }; @@ -54,11 +54,11 @@ struct Range : public Sequence, public return BlocksciRangeType{rng}; } - int64_t size() const override { + int64_t size() override { return rng.size(); } - bool empty() const override { + bool empty() override { return ranges::empty(rng); } }; @@ -80,11 +80,11 @@ struct Range> : public Sequence Date: Fri, 21 Feb 2020 14:13:42 -0500 Subject: [PATCH 4/4] fix: replace range::view with range::views --- blockscipy/src/blocksci_iterator_type.cpp | 4 +- blockscipy/src/blocksci_range_type.cpp | 4 +- blockscipy/src/chain/blockchain_py.cpp | 2 +- .../src/cluster/cluster/cluster_proxy_py.cpp | 2 +- blockscipy/src/generic_proxy.cpp | 4 +- .../generic_proxy/range_map_optional_impl.hpp | 4 +- .../generic_proxy/range_map_sequence_impl.hpp | 2 +- .../generic_proxy/range_map_simple_impl.hpp | 2 +- blockscipy/src/generic_sequence.cpp | 4 +- blockscipy/src/proxy_py_create.hpp | 4 +- blockscipy/src/python_range_conversion.cpp | 8 ++-- .../equiv_address/equiv_address_proxy_py.cpp | 14 +++--- .../src/scripts/pubkey/pubkey_proxy_impl.hpp | 2 +- .../witness_unknown_proxy_py.cpp | 2 +- include/blocksci/chain/algorithms.hpp | 46 +++++++++---------- include/blocksci/chain/range_util.hpp | 4 +- include/blocksci/cluster/cluster.hpp | 2 +- .../blocksci/heuristics/change_address.hpp | 8 ++-- include/blocksci/scripts/script_range.hpp | 2 +- src/address/address.cpp | 14 +++--- src/address/equiv_address.cpp | 12 ++--- src/chain/block_range.cpp | 4 +- src/chain/output_pointer.cpp | 8 ++-- src/cluster/cluster.cpp | 44 +++++++++--------- src/cluster/cluster_manager.cpp | 6 +-- src/heuristics/change_address.cpp | 28 +++++------ src/internal/address_index.cpp | 4 +- src/internal/hash_index.cpp | 2 +- src/scripts/multisig_script.cpp | 4 +- src/scripts/pubkey_base_script.cpp | 2 +- src/scripts/witness_unknown_script.cpp | 2 +- 31 files changed, 125 insertions(+), 125 deletions(-) diff --git a/blockscipy/src/blocksci_iterator_type.cpp b/blockscipy/src/blocksci_iterator_type.cpp index 26ff7a78..c3367fe5 100644 --- a/blockscipy/src/blocksci_iterator_type.cpp +++ b/blockscipy/src/blocksci_iterator_type.cpp @@ -26,7 +26,7 @@ pybind11::object BlocksciIteratorType::toObject() const { RawIterator BlocksciIteratorType::toGeneric() { return mpark::visit([&](auto &r) -> RawIterator { - return r | ranges::view::transform([](auto && v) -> BlocksciType { + return r | ranges::views::transform([](auto && v) -> BlocksciType { return BlocksciType{std::forward(v)}; }); }, var); @@ -34,7 +34,7 @@ RawIterator BlocksciIteratorType::toGeneric() { RawIterator BlocksciIteratorType::toAnySequence() { return mpark::visit([&](auto &r) -> RawIterator { - return r | ranges::view::transform([](auto && v) -> std::any { + return r | ranges::views::transform([](auto && v) -> std::any { return std::forward(v); }); }, var); diff --git a/blockscipy/src/blocksci_range_type.cpp b/blockscipy/src/blocksci_range_type.cpp index eb615f4e..2b42e74a 100644 --- a/blockscipy/src/blocksci_range_type.cpp +++ b/blockscipy/src/blocksci_range_type.cpp @@ -38,7 +38,7 @@ BlocksciIteratorType BlocksciRangeType::toIterator() { RawRange BlocksciRangeType::toGeneric() { return mpark::visit([&](auto &r) -> RawRange { - return r | ranges::view::transform([](auto && v) -> BlocksciType { + return r | ranges::views::transform([](auto && v) -> BlocksciType { return BlocksciType{std::forward(v)}; }); }, var); @@ -46,7 +46,7 @@ RawRange BlocksciRangeType::toGeneric() { RawRange BlocksciRangeType::toAnySequence() { return mpark::visit([&](auto &r) -> RawRange { - return r | ranges::view::transform([](auto && v) -> std::any { + return r | ranges::views::transform([](auto && v) -> std::any { return std::forward(v); }); }, var); diff --git a/blockscipy/src/chain/blockchain_py.cpp b/blockscipy/src/chain/blockchain_py.cpp index 7e7b6272..9d538d82 100644 --- a/blockscipy/src/chain/blockchain_py.cpp +++ b/blockscipy/src/chain/blockchain_py.cpp @@ -29,7 +29,7 @@ namespace { struct PythonScriptRangeFunctor { static PythonScriptRangeVariant f(blocksci::DataAccess &access) { auto scriptCount = getScriptCount(type, access); - return PythonScriptRange{ranges::view::ints(uint32_t{1}, scriptCount + 1) | ranges::view::transform([&](uint32_t scriptNum) { + return PythonScriptRange{ranges::views::ints(uint32_t{1}, scriptCount + 1) | ranges::views::transform([&](uint32_t scriptNum) { return ScriptAddress(scriptNum, access); })}; } diff --git a/blockscipy/src/cluster/cluster/cluster_proxy_py.cpp b/blockscipy/src/cluster/cluster/cluster_proxy_py.cpp index 6870d720..150fdd6a 100644 --- a/blockscipy/src/cluster/cluster/cluster_proxy_py.cpp +++ b/blockscipy/src/cluster/cluster/cluster_proxy_py.cpp @@ -37,7 +37,7 @@ struct AddClusterMethods { return cluster.getInputs(); }, "Returns an iterator over all inputs spent from this cluster"); func(property_tag, "addresses", +[](const Cluster &cluster) -> RawIterator { - return ranges::any_view{ranges::view::transform(cluster.getAddresses(), [](Address && address) -> AnyScript { + return ranges::any_view{ranges::views::transform(cluster.getAddresses(), [](Address && address) -> AnyScript { return address.getScript(); })}; }, "Get a iterable over all the addresses in the cluster"); diff --git a/blockscipy/src/generic_proxy.cpp b/blockscipy/src/generic_proxy.cpp index d4d6faa3..7ff01a90 100644 --- a/blockscipy/src/generic_proxy.cpp +++ b/blockscipy/src/generic_proxy.cpp @@ -50,7 +50,7 @@ std::function(std::any &)> SimpleProxy::getGeneri std::function SimpleProxy::getGenericRange() const { return [generic = getGenericSimple()](std::any &v) -> BlocksciRangeType { return mpark::visit([](auto && val) -> BlocksciRangeType { - return BlocksciRangeType{RawRange>{ranges::view::single(std::forward(val))}}; + return BlocksciRangeType{RawRange>{ranges::views::single(std::forward(val))}}; }, generic(v).var); }; } @@ -59,4 +59,4 @@ std::function ProxyAddress::getGenericSimple() const { return [generic = getGenericScript()](std::any &val) -> BlocksciType { return BlocksciType{generic(val)}; }; - } \ No newline at end of file + } diff --git a/blockscipy/src/generic_proxy/range_map_optional_impl.hpp b/blockscipy/src/generic_proxy/range_map_optional_impl.hpp index 230c0b02..9b5d1d71 100644 --- a/blockscipy/src/generic_proxy/range_map_optional_impl.hpp +++ b/blockscipy/src/generic_proxy/range_map_optional_impl.hpp @@ -26,14 +26,14 @@ namespace { template RawIterator::value_type> flattenOptional(T && t) { - return ranges::view::transform(ranges::view::filter(std::forward(t), isOptional), derefOptional); + return ranges::views::transform(ranges::views::filter(std::forward(t), isOptional), derefOptional); } } template Proxy> mapOptional(IteratorProxy &p, Proxy> &p2) { return liftGeneric(p, [p2](auto && seq) -> RawIterator { - return flattenOptional(ranges::view::transform(std::forward(seq).toAnySequence(), p2)); + return flattenOptional(ranges::views::transform(std::forward(seq).toAnySequence(), p2)); }); } diff --git a/blockscipy/src/generic_proxy/range_map_sequence_impl.hpp b/blockscipy/src/generic_proxy/range_map_sequence_impl.hpp index a9751a1b..e284bb56 100644 --- a/blockscipy/src/generic_proxy/range_map_sequence_impl.hpp +++ b/blockscipy/src/generic_proxy/range_map_sequence_impl.hpp @@ -18,7 +18,7 @@ template Proxy> mapSequence(IteratorProxy &p, Proxy> &p2) { return liftGeneric(p, [p2](auto && seq) -> RawIterator { - return ranges::view::join(ranges::view::transform(std::forward(seq).toAnySequence(), p2)); + return ranges::views::join(ranges::views::transform(std::forward(seq).toAnySequence(), p2)); }); } diff --git a/blockscipy/src/generic_proxy/range_map_simple_impl.hpp b/blockscipy/src/generic_proxy/range_map_simple_impl.hpp index 0e2e985a..1bd940de 100644 --- a/blockscipy/src/generic_proxy/range_map_simple_impl.hpp +++ b/blockscipy/src/generic_proxy/range_map_simple_impl.hpp @@ -21,7 +21,7 @@ template Proxy> mapSimple(proxy_sequence &p, Proxy &p2) { return liftGeneric(p, [p2](auto && seq) -> ranges::any_view { - return ranges::view::transform(std::forward(seq).toAnySequence(), p2); + return ranges::views::transform(std::forward(seq).toAnySequence(), p2); }); } diff --git a/blockscipy/src/generic_sequence.cpp b/blockscipy/src/generic_sequence.cpp index 06048f2b..e3fa629a 100644 --- a/blockscipy/src/generic_sequence.cpp +++ b/blockscipy/src/generic_sequence.cpp @@ -11,7 +11,7 @@ RawIterator GenericIterator::getAllIterator() { return mpark::visit([](auto && seq) -> RawIterator { - return ranges::view::transform(std::forward(seq), [](auto && item) -> std::any { + return ranges::views::transform(std::forward(seq), [](auto && item) -> std::any { return std::forward(item); }); }, getGenericIterator().var); @@ -20,7 +20,7 @@ RawIterator GenericIterator::getAllIterator() { RawRange GenericRange::getAllRange() { return mpark::visit([](auto && seq) -> RawRange { - return ranges::view::transform(std::forward(seq), [](auto && item) -> std::any { + return ranges::views::transform(std::forward(seq), [](auto && item) -> std::any { return std::forward(item); }); }, getGenericRange().var); diff --git a/blockscipy/src/proxy_py_create.hpp b/blockscipy/src/proxy_py_create.hpp index 6db294bb..cfc52638 100644 --- a/blockscipy/src/proxy_py_create.hpp +++ b/blockscipy/src/proxy_py_create.hpp @@ -61,9 +61,9 @@ AllProxyClasses createProxyClasses(pybind11::module &m) { return {std::function(std::any &)>{[p](std::any & v) -> RawRange { auto val = p(v); if (val) { - return ranges::view::single(*val); + return ranges::views::single(*val); } else { - return ranges::view::empty(); + return ranges::views::empty; } }}, p.sourceType}; })) diff --git a/blockscipy/src/python_range_conversion.cpp b/blockscipy/src/python_range_conversion.cpp index 2883d9a3..81192b89 100644 --- a/blockscipy/src/python_range_conversion.cpp +++ b/blockscipy/src/python_range_conversion.cpp @@ -59,7 +59,7 @@ struct NumpyConverter { template pybind11::array_t>()))> convertRandomSizedNumpy(T && t) { - auto numpy_converted = ranges::view::transform(std::move(t), NumpyConverter{}); + auto numpy_converted = ranges::views::transform(std::move(t), NumpyConverter{}); auto rangeSize = static_cast(ranges::size(numpy_converted)); pybind11::array_t> ret{rangeSize}; auto retPtr = ret.mutable_data(); @@ -70,7 +70,7 @@ convertRandomSizedNumpy(T && t) { template pybind11::array_t>()))> convertInputNumpy(T && t) { - auto ret = ranges::to_vector(ranges::view::transform(std::move(t), NumpyConverter{})); + auto ret = ranges::to_vector(ranges::views::transform(std::move(t), NumpyConverter{})); return pybind11::array_t{ret.size(), ret.data()}; } @@ -98,13 +98,13 @@ py::list convertInputPy(T && t) { template Iterator>()))> convertInputBlockSci(T && t) { - return ranges::any_view>()))>{ranges::view::transform(std::forward(t), BlockSciTypeConverter{})}; + return ranges::any_view>()))>{ranges::views::transform(std::forward(t), BlockSciTypeConverter{})}; } template Range>()))> convertRandomSizedBlockSci(T && t) { - return ranges::any_view>())), random_access_sized>{ranges::view::transform(std::forward(t), BlockSciTypeConverter{})}; + return ranges::any_view>())), random_access_sized>{ranges::views::transform(std::forward(t), BlockSciTypeConverter{})}; } diff --git a/blockscipy/src/scripts/equiv_address/equiv_address_proxy_py.cpp b/blockscipy/src/scripts/equiv_address/equiv_address_proxy_py.cpp index e66761fc..c7912ab7 100644 --- a/blockscipy/src/scripts/equiv_address/equiv_address_proxy_py.cpp +++ b/blockscipy/src/scripts/equiv_address/equiv_address_proxy_py.cpp @@ -29,21 +29,21 @@ struct AddEquivAddressMethods { func(property_tag, "is_script_equiv", &EquivAddress::isScriptEquiv, "Returns whether this equiv address is script equivalent or not"); func(method_tag, "balance", &EquivAddress::calculateBalance, "Calculates the balance held by these equivalent addresses at the height (Defaults to the full chain)", py::arg("height") = -1); func(property_tag, "addresses", +[](const EquivAddress &address) -> RawIterator { - return ranges::view::ints(0, 1) | ranges::view::transform([address](int) { - return address | ranges::view::transform([](const Address &address) { + return ranges::views::ints(0, 1) | ranges::views::transform([address](int) { + return address | ranges::views::transform([](const Address &address) { return address.getScript(); }); - }) | ranges::view::join; + }) | ranges::views::join; }, "Calculate balance"); func(property_tag, "outs", +[](const EquivAddress &address) -> RawIterator { - return ranges::view::ints(0, 1) | ranges::view::transform([address](int) { + return ranges::views::ints(0, 1) | ranges::views::transform([address](int) { return address.getOutputs(); - }) | ranges::view::join; + }) | ranges::views::join; }, "Returns an iterator over all outputs sent to these equivalent addresses"); func(property_tag, "ins", +[](EquivAddress &address) -> RawIterator { - return ranges::view::ints(0, 1) | ranges::view::transform([address](int) { + return ranges::views::ints(0, 1) | ranges::views::transform([address](int) { return address.getInputs(); - }) | ranges::view::join; + }) | ranges::views::join; }, "Returns an iterator over all inputs spent from these equivalent addresses"); func(method_tag, "out_txes_count", +[](EquivAddress &address) -> int64_t { return address.getOutputTransactions().size(); diff --git a/blockscipy/src/scripts/pubkey/pubkey_proxy_impl.hpp b/blockscipy/src/scripts/pubkey/pubkey_proxy_impl.hpp index 53262209..77b526aa 100644 --- a/blockscipy/src/scripts/pubkey/pubkey_proxy_impl.hpp +++ b/blockscipy/src/scripts/pubkey/pubkey_proxy_impl.hpp @@ -26,7 +26,7 @@ struct AddPubkeyBaseMethods { void operator()(FuncApplication func) { using namespace blocksci; func(method_tag, "find_multisigs", +[](const T &script) -> RawIterator { - return script.getIncludingMultisigs() | ranges::view::transform([](Address && address) -> script::Multisig { + return script.getIncludingMultisigs() | ranges::views::transform([](Address && address) -> script::Multisig { return mpark::get(address.getScript().wrapped); }); }, "List of multisigs which include this public key"); diff --git a/blockscipy/src/scripts/witness_unknown/witness_unknown_proxy_py.cpp b/blockscipy/src/scripts/witness_unknown/witness_unknown_proxy_py.cpp index c62a181a..9a9e69b5 100644 --- a/blockscipy/src/scripts/witness_unknown/witness_unknown_proxy_py.cpp +++ b/blockscipy/src/scripts/witness_unknown/witness_unknown_proxy_py.cpp @@ -34,7 +34,7 @@ struct AddWitnessUnknownMethods { if (stack) { py::list list; RANGES_FOR(auto && item, *stack) { - auto charVector = item | ranges::view::transform([](auto && c) -> char { return c; } ) | ranges::to_vector; + auto charVector = item | ranges::views::transform([](auto && c) -> char { return c; } ) | ranges::to_vector; list.append(py::bytes(std::string{charVector.begin(), charVector.end()})); } return list; diff --git a/include/blocksci/chain/algorithms.hpp b/include/blocksci/chain/algorithms.hpp index 589d696f..09a5363b 100644 --- a/include/blocksci/chain/algorithms.hpp +++ b/include/blocksci/chain/algorithms.hpp @@ -68,7 +68,7 @@ namespace blocksci { CPP_template(typename B)(requires isBlockRange) inline auto BLOCKSCI_EXPORT txes(B && b) { - return std::forward(b) | ranges::view::join; + return std::forward(b) | ranges::views::join; } inline auto BLOCKSCI_EXPORT inputs(const Transaction &tx) { @@ -86,7 +86,7 @@ namespace blocksci { CPP_template(typename B)(requires isTxRange || isBlockRange) inline auto BLOCKSCI_EXPORT inputs(B && b) { - return txes(std::forward(b)) | ranges::view::transform([](const Transaction &tx) { return tx.inputs(); }) | ranges::view::join; + return txes(std::forward(b)) | ranges::views::transform([](const Transaction &tx) { return tx.inputs(); }) | ranges::views::join; } inline auto BLOCKSCI_EXPORT outputs(const Transaction &tx) { @@ -104,98 +104,98 @@ namespace blocksci { CPP_template(typename B)(requires isTxRange || isBlockRange) inline auto BLOCKSCI_EXPORT outputs(B && b) { - return txes(std::forward(b)) | ranges::view::transform([](const Transaction &tx) { return tx.outputs(); }) | ranges::view::join; + return txes(std::forward(b)) | ranges::views::transform([](const Transaction &tx) { return tx.outputs(); }) | ranges::views::join; } CPP_template(typename B)(requires isOutputPointerRange) inline auto BLOCKSCI_EXPORT outputs(B && b, DataAccess &access) { - return std::forward(b) | ranges::view::transform([&access](const OutputPointer &pointer) { return Output(pointer, access); }); + return std::forward(b) | ranges::views::transform([&access](const OutputPointer &pointer) { return Output(pointer, access); }); } template inline auto BLOCKSCI_EXPORT outputsUnspent(T && t) { - return outputs(std::forward(t)) | ranges::view::remove_if([](const Output &output) { return output.isSpent(); }); + return outputs(std::forward(t)) | ranges::views::remove_if([](const Output &output) { return output.isSpent(); }); } template inline auto BLOCKSCI_EXPORT outputsSpentBeforeHeight(T && t, blocksci::BlockHeight blockHeight) { - return outputs(std::forward(t)) | ranges::view::filter([=](const Output &output) { return output.isSpent() && output.getSpendingTx()->getBlockHeight() < blockHeight; }); + return outputs(std::forward(t)) | ranges::views::filter([=](const Output &output) { return output.isSpent() && output.getSpendingTx()->getBlockHeight() < blockHeight; }); } template inline auto BLOCKSCI_EXPORT outputsSpentAfterHeight(T && t, blocksci::BlockHeight blockHeight) { - return outputs(std::forward(t)) | ranges::view::filter([=](const Output &output) { return output.isSpent() && output.getSpendingTx()->getBlockHeight() >= blockHeight; }); + return outputs(std::forward(t)) | ranges::views::filter([=](const Output &output) { return output.isSpent() && output.getSpendingTx()->getBlockHeight() >= blockHeight; }); } template inline auto BLOCKSCI_EXPORT inputsCreatedAfterHeight(T && t, blocksci::BlockHeight blockHeight) { - return inputs(std::forward(t)) | ranges::view::filter([=](const Input &input) { return input.getSpentTx().getBlockHeight() >= blockHeight; }); + return inputs(std::forward(t)) | ranges::views::filter([=](const Input &input) { return input.getSpentTx().getBlockHeight() >= blockHeight; }); } template inline auto BLOCKSCI_EXPORT inputsCreatedBeforeHeight(T && t, blocksci::BlockHeight blockHeight) { - return inputs(std::forward(t)) | ranges::view::filter([=](const Input &input) { return input.getSpentTx().getBlockHeight() < blockHeight; }); + return inputs(std::forward(t)) | ranges::views::filter([=](const Input &input) { return input.getSpentTx().getBlockHeight() < blockHeight; }); } template inline auto BLOCKSCI_EXPORT outputsSpentWithinRelativeHeight(T && t, blocksci::BlockHeight difference) { - return outputs(std::forward(t)) | ranges::view::filter([=](const Output &output) { + return outputs(std::forward(t)) | ranges::views::filter([=](const Output &output) { return output.isSpent() && output.getSpendingTx()->getBlockHeight() - output.getBlockHeight() < difference; }); } template inline auto BLOCKSCI_EXPORT outputsSpentOutsideRelativeHeight(T && t, blocksci::BlockHeight difference) { - return outputs(std::forward(t)) | ranges::view::filter([=](const Output &output) { + return outputs(std::forward(t)) | ranges::views::filter([=](const Output &output) { return output.isSpent() && output.getSpendingTx()->getBlockHeight() - output.getBlockHeight() >= difference; }); } template inline auto BLOCKSCI_EXPORT inputsCreatedWithinRelativeHeight(T && t, blocksci::BlockHeight difference) { - return inputs(std::forward(t)) | ranges::view::filter([=](const Input &input) { + return inputs(std::forward(t)) | ranges::views::filter([=](const Input &input) { return input.blockHeight - input.getSpentTx().getBlockHeight() < difference; }); } template inline auto BLOCKSCI_EXPORT inputsCreatedOutsideRelativeHeight(T && t, blocksci::BlockHeight difference) { - return inputs(std::forward(t)) | ranges::view::filter([=](const Input &input) { + return inputs(std::forward(t)) | ranges::views::filter([=](const Input &input) { return input.blockHeight - input.getSpentTx().getBlockHeight() >= difference; }); } template inline auto BLOCKSCI_EXPORT outputsOfType(T && t, AddressType::Enum type) { - return outputs(std::forward(t)) | ranges::view::filter([=](const Output &output) { return output.getType() == type; }); + return outputs(std::forward(t)) | ranges::views::filter([=](const Output &output) { return output.getType() == type; }); } template inline auto BLOCKSCI_EXPORT inputsOfType(T && t, AddressType::Enum type) { - return inputs(std::forward(t)) | ranges::view::filter([=](const Input &input) { return input.getType() == type; }); + return inputs(std::forward(t)) | ranges::views::filter([=](const Input &input) { return input.getType() == type; }); } template inline uint64_t BLOCKSCI_EXPORT inputCount(T && t) { - auto values = txes(std::forward(t)) | ranges::view::transform([](const Transaction &tx) { return tx.inputCount(); }); + auto values = txes(std::forward(t)) | ranges::views::transform([](const Transaction &tx) { return tx.inputCount(); }); return ranges::accumulate(values, uint64_t{0}); } template inline uint64_t BLOCKSCI_EXPORT outputCount(T && t) { - auto values = txes(std::forward(t)) | ranges::view::transform([](const Transaction &tx) { return tx.outputCount(); }); + auto values = txes(std::forward(t)) | ranges::views::transform([](const Transaction &tx) { return tx.outputCount(); }); return ranges::accumulate(values, uint64_t{0}); } template inline int64_t BLOCKSCI_EXPORT totalInputValue(T && t) { - auto values = inputs(std::forward(t)) | ranges::view::transform([](const Input &a) { return a.getValue(); }); + auto values = inputs(std::forward(t)) | ranges::views::transform([](const Input &a) { return a.getValue(); }); return ranges::accumulate(values, int64_t{0}); } template inline int64_t BLOCKSCI_EXPORT totalOutputValue(T && t) { - auto values = outputs(std::forward(t)) | ranges::view::transform([](const Output &a) { return a.getValue(); }); + auto values = outputs(std::forward(t)) | ranges::views::transform([](const Output &a) { return a.getValue(); }); return ranges::accumulate(values, int64_t{0}); } @@ -225,21 +225,21 @@ namespace blocksci { template inline auto BLOCKSCI_EXPORT feeLessThan(T &t, int64_t value) { - return txes(t) | ranges::view::filter([=](const Transaction &tx) { + return txes(t) | ranges::views::filter([=](const Transaction &tx) { return fee(tx) < value; }); } template inline auto BLOCKSCI_EXPORT feeGreaterThan(T &t, int64_t value) { - return txes(t) | ranges::view::filter([=](const Transaction &tx) { + return txes(t) | ranges::views::filter([=](const Transaction &tx) { return fee(tx) > value; }); } template inline auto BLOCKSCI_EXPORT fees(T &t) { - return ranges::view::transform(txes(t), [](Transaction && tx) { + return ranges::views::transform(txes(t), [](Transaction && tx) { return fee(tx); }); } @@ -250,7 +250,7 @@ namespace blocksci { template inline auto BLOCKSCI_EXPORT feesPerByte(T &t) { - return ranges::view::transform(txes(t), feePerByte); + return ranges::views::transform(txes(t), feePerByte); } template diff --git a/include/blocksci/chain/range_util.hpp b/include/blocksci/chain/range_util.hpp index 3fda7884..3c12991a 100644 --- a/include/blocksci/chain/range_util.hpp +++ b/include/blocksci/chain/range_util.hpp @@ -30,8 +30,8 @@ namespace blocksci { }; inline auto BLOCKSCI_EXPORT flatMapOptionals() { - return ranges::view::filter(FlatMapOptionalsFilter{}) - | ranges::view::transform(FlatMapOptionalsTransform{}); + return ranges::views::filter(FlatMapOptionalsFilter{}) + | ranges::views::transform(FlatMapOptionalsTransform{}); } } // namespace blocksci diff --git a/include/blocksci/cluster/cluster.hpp b/include/blocksci/cluster/cluster.hpp index dab6c092..01f2ffa5 100644 --- a/include/blocksci/cluster/cluster.hpp +++ b/include/blocksci/cluster/cluster.hpp @@ -75,7 +75,7 @@ namespace blocksci { TagChecker tagCheck; auto operator()(ranges::transform_view, ClusterAddressCreator> && rng) const { - return std::move(rng) | ranges::view::transform(tagCheck) | flatMapOptionals(); + return std::move(rng) | ranges::views::transform(tagCheck) | flatMapOptionals(); } }; diff --git a/include/blocksci/heuristics/change_address.hpp b/include/blocksci/heuristics/change_address.hpp index 4df084ed..46de6f0a 100644 --- a/include/blocksci/heuristics/change_address.hpp +++ b/include/blocksci/heuristics/change_address.hpp @@ -83,7 +83,7 @@ namespace heuristics { if (ranges::distance(c) == 1) { return c; } else { - ranges::any_view empty = ranges::view::empty; + ranges::any_view empty = ranges::views::empty; return empty; } }}}; @@ -93,7 +93,7 @@ namespace heuristics { return ChangeHeuristic{HeuristicFunc{[=](const Transaction &tx) { auto first = a(tx); auto second = b(tx); - return ranges::view::set_intersection(first, second); + return ranges::views::set_intersection(first, second); }}}; } @@ -101,7 +101,7 @@ namespace heuristics { return ChangeHeuristic{HeuristicFunc{[=](const Transaction &tx) { auto first = a(tx); auto second = b(tx); - return ranges::view::set_union(first, second); + return ranges::views::set_union(first, second); }}}; } @@ -109,7 +109,7 @@ namespace heuristics { return ChangeHeuristic{HeuristicFunc{[=](const Transaction &tx) { auto first = a(tx); auto second = b(tx); - return ranges::view::set_difference(first, second); + return ranges::views::set_difference(first, second); }}}; } }; diff --git a/include/blocksci/scripts/script_range.hpp b/include/blocksci/scripts/script_range.hpp index d444ecc5..05f24aca 100644 --- a/include/blocksci/scripts/script_range.hpp +++ b/include/blocksci/scripts/script_range.hpp @@ -28,7 +28,7 @@ namespace blocksci { template ScriptRange BLOCKSCI_EXPORT scriptsRange(DataAccess &access) { auto scriptCount = getScriptCount(type, access); - return ranges::view::ints(uint32_t{1}, scriptCount + 1) | ranges::view::transform([&](uint32_t scriptNum) { + return ranges::views::ints(uint32_t{1}, scriptCount + 1) | ranges::views::transform([&](uint32_t scriptNum) { return ScriptAddress(scriptNum, access); }); } diff --git a/src/address/address.cpp b/src/address/address.cpp index 401a4dc3..d6039cbc 100644 --- a/src/address/address.cpp +++ b/src/address/address.cpp @@ -35,7 +35,7 @@ namespace blocksci { ranges::any_view Address::getOutputPointers() const { return access->getAddressIndex().getOutputPointers(*this) - | ranges::view::transform([](const InoutPointer &pointer) { return OutputPointer(pointer.txNum, pointer.inoutNum); }); + | ranges::views::transform([](const InoutPointer &pointer) { return OutputPointer(pointer.txNum, pointer.inoutNum); }); } ranges::any_view Address::getOutputs() const { @@ -45,23 +45,23 @@ namespace blocksci { ranges::any_view Address::getInputs() const { auto _access = access; return getOutputPointers() - | ranges::view::transform([_access](const OutputPointer &pointer) { return Output(pointer, *_access).getSpendingInput(); }) + | ranges::views::transform([_access](const OutputPointer &pointer) { return Output(pointer, *_access).getSpendingInput(); }) | flatMapOptionals(); } ranges::any_view Address::getOutputTransactions() const { auto _access = access; return _access->getAddressIndex().getOutputPointers(*this) - | ranges::view::transform([](const InoutPointer &pointer) -> uint32_t { return pointer.txNum; }) - | ranges::view::unique - | ranges::view::transform([_access](uint32_t txNum) { return Transaction(txNum, _access->getChain().getBlockHeight(txNum), *_access); }); + | ranges::views::transform([](const InoutPointer &pointer) -> uint32_t { return pointer.txNum; }) + | ranges::views::unique + | ranges::views::transform([_access](uint32_t txNum) { return Transaction(txNum, _access->getChain().getBlockHeight(txNum), *_access); }); } ranges::any_view Address::getInputTransactions() const { auto _access = access; Address searchAddress = *this; return getOutputPointers() - | ranges::view::transform([_access, searchAddress](auto pointer) -> ranges::optional { + | ranges::views::transform([_access, searchAddress](auto pointer) -> ranges::optional { auto spendingTx = Output(std::forward(pointer), *_access).getSpendingTx(); if (spendingTx) { RANGES_FOR(auto input, spendingTx->inputs()) { @@ -194,7 +194,7 @@ namespace blocksci { AddressAllTxRange(const Address &searchAddress_, DataAccess *access_) : access(access_), searchAddress(searchAddress_), pointers(access_->getAddressIndex().getOutputPointers(searchAddress_) - | ranges::view::transform([](const InoutPointer &pointer) { + | ranges::views::transform([](const InoutPointer &pointer) { return OutputPointer(pointer.txNum, pointer.inoutNum); })) {} }; diff --git a/src/address/equiv_address.cpp b/src/address/equiv_address.cpp index 8318fc96..c56be07d 100644 --- a/src/address/equiv_address.cpp +++ b/src/address/equiv_address.cpp @@ -101,8 +101,8 @@ namespace blocksci { ranges::any_view EquivAddress::getOutputPointers() const { return addresses - | ranges::view::transform([](const Address &address) { return address.getOutputPointers(); }) - | ranges::view::join + | ranges::views::transform([](const Address &address) { return address.getOutputPointers(); }) + | ranges::views::join ; } @@ -112,15 +112,15 @@ namespace blocksci { ranges::any_view EquivAddress::getOutputs() const { return addresses - | ranges::view::transform([](const Address &address) { return address.getOutputs(); }) - | ranges::view::join + | ranges::views::transform([](const Address &address) { return address.getOutputs(); }) + | ranges::views::join ; } ranges::any_view EquivAddress::getInputs() const { return addresses - | ranges::view::transform([](const Address &address) { return address.getInputs(); }) - | ranges::view::join + | ranges::views::transform([](const Address &address) { return address.getInputs(); }) + | ranges::views::join ; } diff --git a/src/chain/block_range.cpp b/src/chain/block_range.cpp index b7f098f0..65f3c11c 100644 --- a/src/chain/block_range.cpp +++ b/src/chain/block_range.cpp @@ -51,7 +51,7 @@ namespace blocksci { std::vector BlockRange::filter(std::function testFunc) { auto mapFunc = [&testFunc](const BlockRange &segment) -> std::vector { - return segment | ranges::view::filter(testFunc) | ranges::to_vector; + return segment | ranges::views::filter(testFunc) | ranges::to_vector; }; auto reduceFunc = [] (std::vector &vec1, std::vector &vec2) -> std::vector & { @@ -67,7 +67,7 @@ namespace blocksci { auto mapFunc = [&testFunc](const BlockRange &segment) -> std::vector { std::vector txes; for (auto block : segment) { - txes |= ranges::action::push_back(block | ranges::view::filter(testFunc)); + txes |= ranges::action::push_back(block | ranges::views::filter(testFunc)); } return txes; }; diff --git a/src/chain/output_pointer.cpp b/src/chain/output_pointer.cpp index 49389120..476a966d 100644 --- a/src/chain/output_pointer.cpp +++ b/src/chain/output_pointer.cpp @@ -44,7 +44,7 @@ namespace blocksci { } } return allPointers - | ranges::view::transform([&access](const InputPointer &pointer) { return Input(pointer, access); }) + | ranges::views::transform([&access](const InputPointer &pointer) { return Input(pointer, access); }) | ranges::to_vector; } @@ -62,13 +62,13 @@ namespace blocksci { } std::vector getOutputTransactions(const std::vector &pointers, DataAccess &access) { - auto txNums = pointers | ranges::view::transform([](const OutputPointer &pointer) { return pointer.txNum; }) | ranges::to_vector; + auto txNums = pointers | ranges::views::transform([](const OutputPointer &pointer) { return pointer.txNum; }) | ranges::to_vector; txNums |= ranges::action::sort | ranges::action::unique; - return txNums | ranges::view::transform([&access](uint32_t txNum) { return Transaction(txNum, access.getChain().getBlockHeight(txNum), access); }) | ranges::to_vector; + return txNums | ranges::views::transform([&access](uint32_t txNum) { return Transaction(txNum, access.getChain().getBlockHeight(txNum), access); }) | ranges::to_vector; } std::vector getInputTransactions(const std::vector &pointers, DataAccess &access) { - auto txes = pointers | ranges::view::transform([&access](const OutputPointer &pointer) { return Output(pointer, access).getSpendingTx(); }) | flatMapOptionals() | ranges::to_vector; + auto txes = pointers | ranges::views::transform([&access](const OutputPointer &pointer) { return Output(pointer, access).getSpendingTx(); }) | flatMapOptionals() | ranges::to_vector; txes |= ranges::action::sort | ranges::action::unique; return txes; } diff --git a/src/cluster/cluster.cpp b/src/cluster/cluster.cpp index e0421607..d86a3edf 100644 --- a/src/cluster/cluster.cpp +++ b/src/cluster/cluster.cpp @@ -55,26 +55,26 @@ namespace blocksci { ranges::transform_view, ClusterAddressCreator> PossibleAddressesGetter::operator()(const DedupAddress &dedupAddress) const { ClusterAddressCreator creator{access, dedupAddress.scriptNum}; - return addressTypesRange(dedupAddress.type) | ranges::view::transform(creator); + return addressTypesRange(dedupAddress.type) | ranges::views::transform(creator); } auto getPossibleAddressesNested(uint32_t clusterNum, const ClusterAccess *clusterAccess) { PossibleAddressesGetter getter{&clusterAccess->access}; - return clusterAccess->getClusterScripts(clusterNum) | ranges::view::transform(getter); + return clusterAccess->getClusterScripts(clusterNum) | ranges::views::transform(getter); } auto getPossibleAddresses(uint32_t clusterNum, const ClusterAccess *clusterAccess) { - return getPossibleAddressesNested(clusterNum, clusterAccess) | ranges::view::join; + return getPossibleAddressesNested(clusterNum, clusterAccess) | ranges::views::join; } auto getAddressesNested(uint32_t clusterNum, const ClusterAccess *clusterAccess) { DataAccess *access_ = &clusterAccess->access; - return clusterAccess->getClusterScripts(clusterNum) | ranges::view::transform([access_](const DedupAddress &address) { + return clusterAccess->getClusterScripts(clusterNum) | ranges::views::transform([access_](const DedupAddress &address) { auto header = access_->getScripts().getScriptHeader(address.scriptNum, address.type); uint32_t scriptNum = address.scriptNum; - return addressTypesRange(address.type) | ranges::view::filter([header](AddressType::Enum type) { + return addressTypesRange(address.type) | ranges::views::filter([header](AddressType::Enum type) { return header->seenTopLevel(type); - }) | ranges::view::transform([access_, scriptNum](AddressType::Enum addressType) { + }) | ranges::views::transform([access_, scriptNum](AddressType::Enum addressType) { return Address(scriptNum, addressType, *access_); }); }); @@ -82,15 +82,15 @@ namespace blocksci { ranges::any_view
Cluster::getAddresses() const { DataAccess *access_ = &clusterAccess->access; - return getDedupAddresses() | ranges::view::transform([access_](const DedupAddress &address) { + return getDedupAddresses() | ranges::views::transform([access_](const DedupAddress &address) { auto header = access_->getScripts().getScriptHeader(address.scriptNum, address.type); uint32_t scriptNum = address.scriptNum; - return addressTypesRange(address.type) | ranges::view::filter([header](AddressType::Enum type) { + return addressTypesRange(address.type) | ranges::views::filter([header](AddressType::Enum type) { return header->seenTopLevel(type); - }) | ranges::view::transform([access_, scriptNum](AddressType::Enum addressType) { + }) | ranges::views::transform([access_, scriptNum](AddressType::Enum addressType) { return Address(scriptNum, addressType, *access_); }); - }) | ranges::view::join; + }) | ranges::views::join; } bool Cluster::containsAddress(const Address &address) const { @@ -102,12 +102,12 @@ namespace blocksci { // ranges::category::random_access | ranges::category::sized // > Cluster::getAddressesNested() const { // DataAccess *access_ = &clusterAccess->access; -// return getDedupAddresses() | ranges::view::transform([access_](const DedupAddress &address) -> ranges::any_view { +// return getDedupAddresses() | ranges::views::transform([access_](const DedupAddress &address) -> ranges::any_view { // auto header = access_->getScripts().getScriptHeader(address.scriptNum, address.type); // uint32_t scriptNum = address.scriptNum; -// return addressTypesRange(address.type) | ranges::view::filter([header](AddressType::Enum type) { +// return addressTypesRange(address.type) | ranges::views::filter([header](AddressType::Enum type) { // return header->seenTopLevel(type); -// }) | ranges::view::transform([access_, scriptNum](AddressType::Enum addressType) { +// }) | ranges::views::transform([access_, scriptNum](AddressType::Enum addressType) { // return Address(scriptNum, addressType, *access_); // }); // }); @@ -152,7 +152,7 @@ namespace blocksci { } ranges::any_view Cluster::taggedAddressesUnsafe(const std::unordered_map &tags) const { - return getPossibleAddresses(clusterNum, clusterAccess) | ranges::view::transform([&tags](Address && address) -> ranges::optional { + return getPossibleAddresses(clusterNum, clusterAccess) | ranges::views::transform([&tags](Address && address) -> ranges::optional { auto it = tags.find(address); if (it != tags.end()) { return TaggedAddress{it->first, it->second}; @@ -163,7 +163,7 @@ namespace blocksci { } ranges::any_view Cluster::taggedAddresses(const std::unordered_map &tags) const { - return getPossibleAddresses(clusterNum, clusterAccess) | ranges::view::transform([tags](Address && address) -> ranges::optional { + return getPossibleAddresses(clusterNum, clusterAccess) | ranges::views::transform([tags](Address && address) -> ranges::optional { auto it = tags.find(address); if (it != tags.end()) { return TaggedAddress{it->first, it->second}; @@ -177,7 +177,7 @@ namespace blocksci { Cluster::taggedAddressesNested(const std::unordered_map &tags) const { AddressRangeTagChecker tagCheck{tags}; - return getPossibleAddressesNested(clusterNum, clusterAccess) | ranges::view::transform(tagCheck); + return getPossibleAddressesNested(clusterNum, clusterAccess) | ranges::views::transform(tagCheck); } uint32_t Cluster::countOfType(AddressType::Enum type) const { @@ -195,15 +195,15 @@ namespace blocksci { } ranges::any_view Cluster::getOutputPointers() const { - return getPossibleAddresses(clusterNum, clusterAccess) | ranges::view::transform([](auto && address) { return address.getOutputPointers(); }) | ranges::view::join; + return getPossibleAddresses(clusterNum, clusterAccess) | ranges::views::transform([](auto && address) { return address.getOutputPointers(); }) | ranges::views::join; } ranges::any_view Cluster::getOutputs() const { - return getPossibleAddresses(clusterNum, clusterAccess) | ranges::view::transform([](auto && address) { return address.getOutputs(); }) | ranges::view::join; + return getPossibleAddresses(clusterNum, clusterAccess) | ranges::views::transform([](auto && address) { return address.getOutputs(); }) | ranges::views::join; } ranges::any_view Cluster::getInputs() const { - return getPossibleAddresses(clusterNum, clusterAccess) | ranges::view::transform([](auto && address) { return address.getInputs(); }) | ranges::view::join; + return getPossibleAddresses(clusterNum, clusterAccess) | ranges::views::transform([](auto && address) { return address.getInputs(); }) | ranges::views::join; } std::vector Cluster::getTransactions() const { @@ -223,9 +223,9 @@ namespace blocksci { int64_t Cluster::calculateBalance(BlockHeight height) const { auto access_ = &clusterAccess->access; - auto balances = getDedupAddresses() | ranges::view::transform([access_, height](const DedupAddress &dedupAddress) { + auto balances = getDedupAddresses() | ranges::views::transform([access_, height](const DedupAddress &dedupAddress) { uint32_t scriptNum = dedupAddress.scriptNum; - auto possibleAddressBalances = addressTypesRange(dedupAddress.type) | ranges::view::transform([&access_, scriptNum, height](AddressType::Enum addressType) { + auto possibleAddressBalances = addressTypesRange(dedupAddress.type) | ranges::views::transform([&access_, scriptNum, height](AddressType::Enum addressType) { return Address(scriptNum, addressType, *access_).calculateBalance(height); }); return ranges::accumulate(possibleAddressBalances, int64_t{0}); @@ -234,7 +234,7 @@ namespace blocksci { } ranges::any_view TaggedCluster::getTaggedAddresses() const { - return ranges::view::join(taggedAddresses); + return ranges::views::join(taggedAddresses); } } diff --git a/src/cluster/cluster_manager.cpp b/src/cluster/cluster_manager.cpp index fc6d14e5..12452691 100644 --- a/src/cluster/cluster_manager.cpp +++ b/src/cluster/cluster_manager.cpp @@ -95,12 +95,12 @@ namespace blocksci { } ranges::any_view ClusterManager::getClusters() const { - return ranges::view::ints(0u, clusterCount) - | ranges::view::transform([&](uint32_t clusterNum) { return Cluster(clusterNum, *access); }); + return ranges::views::ints(0u, clusterCount) + | ranges::views::transform([&](uint32_t clusterNum) { return Cluster(clusterNum, *access); }); } ranges::any_view ClusterManager::taggedClusters(const std::unordered_map &tags) const { - return getClusters() | ranges::view::transform([tags](Cluster && cluster) -> ranges::optional { + return getClusters() | ranges::views::transform([tags](Cluster && cluster) -> ranges::optional { return cluster.getTaggedUnsafe(tags); }) | flatMapOptionals(); } diff --git a/src/heuristics/change_address.cpp b/src/heuristics/change_address.cpp index 1689f8e4..01e75515 100644 --- a/src/heuristics/change_address.cpp +++ b/src/heuristics/change_address.cpp @@ -40,11 +40,11 @@ namespace blocksci { namespace heuristics { ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &tx) const { // If current tx is not a peeling chain, return an empty set if (!isPeelingChain(tx)) { - return ranges::view::empty; + return ranges::views::empty; } // Check which output(s) continue the peeling chain - return tx.outputs() | ranges::view::filter([](Output o){return !o.isSpent() || isPeelingChain(*o.getSpendingTx());}) | ranges::view::filter(filterOpReturn); + return tx.outputs() | ranges::views::filter([](Output o){return !o.isSpent() || isPeelingChain(*o.getSpendingTx());}) | ranges::views::filter(filterOpReturn); } /** Returns 10^{digits} */ @@ -68,7 +68,7 @@ namespace blocksci { namespace heuristics { */ ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &tx) const { int64_t value = int_pow_ten(digits); - return tx.outputs() | ranges::view::filter([value](Output o){return o.getValue() % value != 0;}) | ranges::view::filter(filterOpReturn); + return tx.outputs() | ranges::views::filter([value](Output o){return o.getValue() % value != 0;}) | ranges::views::filter(filterOpReturn); } @@ -83,7 +83,7 @@ namespace blocksci { namespace heuristics { RANGES_FOR(auto input, tx.inputs()) { smallestInputValue = std::min(smallestInputValue, input.getValue()); } - return tx.outputs() | ranges::view::filter([smallestInputValue](Output o){return o.getValue() < smallestInputValue;}) | ranges::view::filter(filterOpReturn); + return tx.outputs() | ranges::views::filter([smallestInputValue](Output o){return o.getValue() < smallestInputValue;}) | ranges::views::filter(filterOpReturn); } /** If all inputs are of one address type (e.g., P2PKH or P2SH), it is likely that the change output has the same type. */ @@ -100,9 +100,9 @@ namespace blocksci { namespace heuristics { } if (allInputsSameType) { - return tx.outputs() | ranges::view::filter([inputType](Output o){return o.getType() == inputType;}) | ranges::view::filter(filterOpReturn); + return tx.outputs() | ranges::views::filter([inputType](Output o){return o.getType() == inputType;}) | ranges::views::filter(filterOpReturn); } else { - return ranges::view::empty; + return ranges::views::empty; } } @@ -117,7 +117,7 @@ namespace blocksci { namespace heuristics { template<> ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &tx) const { bool locktimeGreaterZero = tx.locktime() > 0; - return tx.outputs() | ranges::view::filter([locktimeGreaterZero](Output o){return !o.isSpent() || (o.getSpendingTx().value().locktime() > 0) == locktimeGreaterZero;}) | ranges::view::filter(filterOpReturn); + return tx.outputs() | ranges::views::filter([locktimeGreaterZero](Output o){return !o.isSpent() || (o.getSpendingTx().value().locktime() > 0) == locktimeGreaterZero;}) | ranges::views::filter(filterOpReturn); } /** If input addresses appear as an output address, the client might have reused addresses for change. */ @@ -128,7 +128,7 @@ namespace blocksci { namespace heuristics { inputAddresses.insert(input.getAddress()); } - return tx.outputs() | ranges::view::filter([inputAddresses](Output o){return inputAddresses.find(o.getAddress()) != inputAddresses.end();}) | ranges::view::filter(filterOpReturn); + return tx.outputs() | ranges::views::filter([inputAddresses](Output o){return inputAddresses.find(o.getAddress()) != inputAddresses.end();}) | ranges::views::filter(filterOpReturn); } /** Most clients will generate a fresh address for the change. @@ -137,7 +137,7 @@ namespace blocksci { namespace heuristics { */ template<> ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &tx) const { - return tx.outputs() | ranges::view::filter([tx](Output o){return o.getAddress().isSpendable() && o.getAddress().getBaseScript().getFirstTxIndex() == tx.txNum;}) | ranges::view::filter(filterOpReturn); + return tx.outputs() | ranges::views::filter([tx](Output o){return o.getAddress().isSpendable() && o.getAddress().getBaseScript().getFirstTxIndex() == tx.txNum;}) | ranges::views::filter(filterOpReturn); } /** Legacy heuristic used in previous versions of BlockSci */ @@ -177,22 +177,22 @@ namespace blocksci { namespace heuristics { ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &tx) const { auto c = uniqueChangeByLegacyHeuristic(tx); if (c.has_value()) { - return ranges::view::single(c.value()); + return ranges::views::single(c.value()); } - return ranges::view::empty; + return ranges::views::empty; } /** Clients may choose a fixed fee per kb instead of using one based on the current fee market. */ template<> ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &tx) const { auto fee = tx.fee() * 1000 / tx.virtualSize(); - return tx.outputs() | ranges::view::filter([fee](Output o) {return !o.isSpent() || (o.getSpendingTx()->fee() * 1000 / o.getSpendingTx()->virtualSize()) == fee;}) | ranges::view::filter(filterOpReturn); + return tx.outputs() | ranges::views::filter([fee](Output o) {return !o.isSpent() || (o.getSpendingTx()->fee() * 1000 / o.getSpendingTx()->virtualSize()) == fee;}) | ranges::views::filter(filterOpReturn); } /** Disables change address clustering by returning an empty set. */ template<> ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &) const { - return ranges::view::empty; + return ranges::views::empty; } /** Returns all outputs that have been spent. @@ -201,7 +201,7 @@ namespace blocksci { namespace heuristics { */ template<> ranges::any_view ChangeHeuristicImpl::operator()(const Transaction &tx) const { - return tx.outputs() | ranges::view::filter([](Output o){return o.isSpent();}); + return tx.outputs() | ranges::views::filter([](Output o){return o.isSpent();}); } } // namespace heuristics } // namespace blocksci diff --git a/src/internal/address_index.cpp b/src/internal/address_index.cpp index 6a5c6611..8752225a 100644 --- a/src/internal/address_index.cpp +++ b/src/internal/address_index.cpp @@ -90,7 +90,7 @@ namespace blocksci { auto prefixData = reinterpret_cast(&address.scriptNum); std::vector prefix(prefixData, prefixData + sizeof(address.scriptNum)); // vector with scriptNum bytes auto rawOutputPointerRange = ColumnIterator(db.get(), getOutputColumn(address.type).get(), prefix); - return rawOutputPointerRange | ranges::view::transform([](std::pair pair) -> InoutPointer { + return rawOutputPointerRange | ranges::views::transform([](std::pair pair) -> InoutPointer { InoutPointer outPoint; uint8_t txNumData[4]; uint8_t outputNumData[2]; @@ -114,7 +114,7 @@ namespace blocksci { auto prefixData = reinterpret_cast(&searchAddress.scriptNum); std::vector prefix(prefixData, prefixData + sizeof(searchAddress.scriptNum)); auto rawDedupAddressRange = ColumnIterator(db.get(), getNestedColumn(AddressType::MULTISIG_PUBKEY).get(), prefix); - return rawDedupAddressRange | ranges::view::transform([](std::pair pair) -> RawAddress { + return rawDedupAddressRange | ranges::views::transform([](std::pair pair) -> RawAddress { auto &key = pair.first; key.data += sizeof(uint32_t); DedupAddress rawParent; diff --git a/src/internal/hash_index.cpp b/src/internal/hash_index.cpp index 567b8520..10e29a8c 100644 --- a/src/internal/hash_index.cpp +++ b/src/internal/hash_index.cpp @@ -176,7 +176,7 @@ namespace blocksci { template ranges::any_view::IDType>> HashIndex::getAddressRange() { using IDType = typename blocksci::AddressInfo::IDType; - return getRawAddressRange(type) | ranges::view::transform([](std::pair pair) -> std::pair { + return getRawAddressRange(type) | ranges::views::transform([](std::pair pair) -> std::pair { auto &key = pair.first; auto &value = pair.second; uint32_t addressNum; diff --git a/src/scripts/multisig_script.cpp b/src/scripts/multisig_script.cpp index 814fcac4..d53a4f9a 100644 --- a/src/scripts/multisig_script.cpp +++ b/src/scripts/multisig_script.cpp @@ -28,13 +28,13 @@ namespace blocksci { ranges::any_view ScriptAddress::getAddresses() const { auto access_ = &getAccess(); auto data = getData(); - return data->addresses | ranges::view::transform([access_](uint32_t scriptNum) -> Address { + return data->addresses | ranges::views::transform([access_](uint32_t scriptNum) -> Address { return {scriptNum, AddressType::Enum::MULTISIG_PUBKEY, *access_}; }); } ranges::any_view ScriptAddress::pubkeyScripts() const { - return getAddresses() | ranges::view::transform([](Address address) -> script::MultisigPubkey { + return getAddresses() | ranges::views::transform([](Address address) -> script::MultisigPubkey { return {address.scriptNum, address.getAccess()}; }); } diff --git a/src/scripts/pubkey_base_script.cpp b/src/scripts/pubkey_base_script.cpp index e91f52a5..b47d6f09 100644 --- a/src/scripts/pubkey_base_script.cpp +++ b/src/scripts/pubkey_base_script.cpp @@ -36,6 +36,6 @@ namespace blocksci { ranges::any_view
PubkeyAddressBase::getIncludingMultisigs() const { auto access_ = &getAccess(); return getAccess().getAddressIndex().getIncludingMultisigs(*this) | - ranges::view::transform([access_](const RawAddress &raw) { return Address{raw, *access_}; }); + ranges::views::transform([access_](const RawAddress &raw) { return Address{raw, *access_}; }); } } // namespace blocksci diff --git a/src/scripts/witness_unknown_script.cpp b/src/scripts/witness_unknown_script.cpp index 5dc0d4aa..d2a4cdfe 100644 --- a/src/scripts/witness_unknown_script.cpp +++ b/src/scripts/witness_unknown_script.cpp @@ -26,7 +26,7 @@ namespace blocksci { ranges::optional>> ScriptAddress::getWitnessStack() const { if (rawInputData != nullptr) { - return rawInputData->scriptData | ranges::view::split(0xfe); + return rawInputData->scriptData | ranges::views::split(0xfe); } else { return ranges::nullopt; }