fix: move signers stackerdb read limit to libsigner

This commit is contained in:
Hank Stoever
2024-04-09 20:55:04 -07:00
parent d700c85eec
commit ba68f02e42
3 changed files with 10 additions and 7 deletions

View File

@@ -17,11 +17,11 @@
use std::net::{SocketAddr, TcpStream};
use std::str;
use blockstack_lib::net::stackerdb::SIGNERS_STACKERDB_CHUNK_SIZE;
use clarity::vm::types::QualifiedContractIdentifier;
use libstackerdb::{
stackerdb_get_chunk_path, stackerdb_get_metadata_path, stackerdb_post_chunk_path, SlotMetadata,
StackerDBChunkAckData, StackerDBChunkData,
StackerDBChunkAckData, StackerDBChunkData, SIGNERS_STACKERDB_CHUNK_SIZE,
STACKERDB_MAX_CHUNK_SIZE,
};
use stacks_common::codec::StacksMessageCodec;
@@ -215,14 +215,17 @@ impl SignerSession for StackerDBSession {
/// query the replica for zero or more latest chunks
fn get_latest_chunks(&mut self, slot_ids: &[u32]) -> Result<Vec<Option<Vec<u8>>>, RPCError> {
let mut payloads = vec![];
let limit = if self.stackerdb_contract_id.name.starts_with("signer") {
SIGNERS_STACKERDB_CHUNK_SIZE
} else {
STACKERDB_MAX_CHUNK_SIZE as usize
};
for slot_id in slot_ids.iter() {
let path = stackerdb_get_chunk_path(self.stackerdb_contract_id.clone(), *slot_id, None);
let chunk = match self.rpc_request("GET", &path, None, &[]) {
Ok(body_bytes) => {
// Verify that the chunk is not too large
if body_bytes.len() > u32::MAX as usize {
None
} else if body_bytes.len() as u32 > SIGNERS_STACKERDB_CHUNK_SIZE {
if body_bytes.len() > limit {
None
} else {
Some(body_bytes)

View File

@@ -35,6 +35,8 @@ use stacks_common::util::secp256k1::MessageSignature;
/// maximum chunk size (16 MB; same as MAX_PAYLOAD_SIZE)
pub const STACKERDB_MAX_CHUNK_SIZE: u32 = 16 * 1024 * 1024;
/// CHUNK_SIZE constant for signers StackerDBs (2MB)
pub const SIGNERS_STACKERDB_CHUNK_SIZE: usize = 2 * 1024 * 1024; // 2MB
#[cfg(test)]
mod tests;

View File

@@ -148,8 +148,6 @@ pub const STACKERDB_INV_MAX: u32 = 4096;
pub const STACKERDB_PAGE_LIST_MAX: u32 = 4096;
/// maximum number of pages that can be used in a StackerDB contract
pub const STACKERDB_MAX_PAGE_COUNT: u32 = 2;
/// CHUNK_SIZE constant for signers StackerDBs
pub const SIGNERS_STACKERDB_CHUNK_SIZE: u32 = 2 * 1024 * 1024; // 2MB
pub const STACKERDB_SLOTS_FUNCTION: &str = "stackerdb-get-signer-slots";
pub const STACKERDB_CONFIG_FUNCTION: &str = "stackerdb-get-config";