Skip to content

Commit 70cb6e7

Browse files
committed
feat: use JSON payload for tx replay set
1 parent e97ef7c commit 70cb6e7

File tree

4 files changed

+15
-25
lines changed

4 files changed

+15
-25
lines changed

stacks-signer/src/client/stacks_client.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ impl StacksClient {
321321
let block_proposal = NakamotoBlockProposal {
322322
block,
323323
chain_id: self.chain_id,
324+
replay_txs: None,
324325
};
325326
let timer = crate::monitoring::actions::new_rpc_call_timer(
326327
&self.block_proposal_path(),

stackslib/src/net/api/postblock_proposal.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
// You should have received a copy of the GNU General Public License
1515
// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

17+
use std::collections::VecDeque;
1718
use std::io::{Read, Write};
1819
#[cfg(any(test, feature = "testing"))]
1920
use std::sync::LazyLock;
@@ -215,6 +216,8 @@ pub struct NakamotoBlockProposal {
215216
pub block: NakamotoBlock,
216217
/// Identifies which chain block is for (Mainnet, Testnet, etc.)
217218
pub chain_id: u32,
219+
/// Optional transaction replay set
220+
pub replay_txs: Option<Vec<StacksTransaction>>,
218221
}
219222

220223
impl NakamotoBlockProposal {
@@ -554,11 +557,8 @@ impl NakamotoBlockProposal {
554557
builder.load_tenure_info(chainstate, &burn_dbconn, tenure_cause)?;
555558
let mut tenure_tx = builder.tenure_begin(&burn_dbconn, &mut miner_tenure_info)?;
556559

557-
// TODO: get replay set from stackerdb
558-
#[cfg(any(test, feature = "testing"))]
559-
let mut replay_txs_maybe = TEST_REPLAY_TRANSACTIONS.0.lock().unwrap().clone();
560-
#[cfg(not(any(test, feature = "testing")))]
561-
let mut replay_txs_maybe = None;
560+
let mut replay_txs_maybe: Option<VecDeque<StacksTransaction>> =
561+
self.replay_txs.clone().map(|txs| txs.into());
562562

563563
for (i, tx) in self.block.txs.iter().enumerate() {
564564
let tx_len = tx.tx_len();

stackslib/src/net/api/tests/postblock_proposal.rs

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ fn test_try_parse_request() {
5555
let proposal = NakamotoBlockProposal {
5656
block: block.clone(),
5757
chain_id: 0x80000000,
58+
replay_txs: None,
5859
};
5960
let mut request = StacksHttpRequest::new_for_peer(
6061
addr.into(),
@@ -99,7 +100,8 @@ fn test_try_parse_request() {
99100
handler.block_proposal,
100101
Some(NakamotoBlockProposal {
101102
block,
102-
chain_id: 0x80000000
103+
chain_id: 0x80000000,
104+
replay_txs: None,
103105
})
104106
);
105107

@@ -299,6 +301,7 @@ fn test_try_make_response() {
299301
let proposal = NakamotoBlockProposal {
300302
block: good_block.clone(),
301303
chain_id: 0x80000000,
304+
replay_txs: None,
302305
};
303306

304307
let mut request = StacksHttpRequest::new_for_peer(
@@ -323,6 +326,7 @@ fn test_try_make_response() {
323326
let proposal = NakamotoBlockProposal {
324327
block: early_time_block,
325328
chain_id: 0x80000000,
329+
replay_txs: None,
326330
};
327331

328332
let mut request = StacksHttpRequest::new_for_peer(
@@ -347,6 +351,7 @@ fn test_try_make_response() {
347351
let proposal = NakamotoBlockProposal {
348352
block: late_time_block,
349353
chain_id: 0x80000000,
354+
replay_txs: None,
350355
};
351356

352357
let mut request = StacksHttpRequest::new_for_peer(
@@ -368,6 +373,7 @@ fn test_try_make_response() {
368373
let proposal = NakamotoBlockProposal {
369374
block: stale_block,
370375
chain_id: 0x80000000,
376+
replay_txs: None,
371377
};
372378

373379
let mut request = StacksHttpRequest::new_for_peer(
@@ -537,28 +543,10 @@ fn replay_validation_test(
537543
.miner
538544
.sign_nakamoto_block(&mut proposed_block);
539545

540-
// post the valid block proposal
541-
let proposal = NakamotoBlockProposal {
542-
block: proposed_block.clone(),
543-
chain_id: 0x80000000,
544-
};
545-
546-
let mut request = StacksHttpRequest::new_for_peer(
547-
rpc_test.peer_1.to_peer_host(),
548-
"POST".into(),
549-
"/v3/block_proposal".into(),
550-
HttpRequestContents::new().payload_json(serde_json::to_value(proposal).unwrap()),
551-
)
552-
.expect("failed to construct request");
553-
request.add_header("authorization".into(), "password".into());
554-
requests.push(request);
555-
556-
TEST_REPLAY_TRANSACTIONS.set(expected_replay_txs);
557-
558-
// Post the block proposal
559546
let proposal = NakamotoBlockProposal {
560547
block: proposed_block.clone(),
561548
chain_id: 0x80000000,
549+
replay_txs: Some(expected_replay_txs.into()),
562550
};
563551

564552
let mut request = StacksHttpRequest::new_for_peer(

testnet/stacks-node/src/tests/nakamoto_integrations.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3097,6 +3097,7 @@ fn block_proposal_api_endpoint() {
30973097
let proposal = NakamotoBlockProposal {
30983098
block,
30993099
chain_id: chainstate.chain_id,
3100+
replay_txs: None,
31003101
};
31013102

31023103
const HTTP_ACCEPTED: u16 = 202;

0 commit comments

Comments
 (0)