562eba5b64
The new SIGHASH_UTXO has a possible attack vector where prepared huge outputs are used and required to be hashed for the signing preimage. At most you can force the full node to prepare 20GB of (utxo) data _prior_ to creation of the preimage. Which is a big issue when it comes to memory usage of the node. What this change does is we ensure that the class used for this data is a ConstBuf as given to us from the utxo. Which are just pointers and not full data, the data is memory mapped. So we ensure shallow copies to avoid actually requiring the data to be in memory until the point where it is used. And it can get swapped out immediately after. This ensures we are immune to the SIGHASH_UTXO attack vector.
28 lines
994 B
C++
28 lines
994 B
C++
/*
|
|
* This file is part of the Flowee project
|
|
* Copyright (C) 2026 Tom Zander <tom@flowee.org>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "prevector.h"
|
|
#include "streaming/BufferPool.h"
|
|
|
|
Streaming::ConstBuffer Streaming::bufferFrom(const prevector<28, unsigned char> &v)
|
|
{
|
|
BufferPool pool(v.size());
|
|
pool.write(&v.begin()[0], v.size());
|
|
return pool.commit();
|
|
}
|