Skip to content

Commit cf5fe59

Browse files
committed
fix: Build signature request before presignature is popped from asset queue
1 parent 1d14865 commit cf5fe59

1 file changed

Lines changed: 11 additions & 9 deletions

File tree

  • crates/node/src/providers/verify_foreign_tx

crates/node/src/providers/verify_foreign_tx/sign.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,17 @@ where
6565
) -> anyhow::Result<((dtos::ForeignTxSignPayload, Signature), VerifyingKey)> {
6666
let foreign_tx_request = self.verify_foreign_tx_request_store.get(id).await?;
6767

68+
let response_payload = self
69+
.execute_foreign_chain_request(
70+
&foreign_tx_request.request,
71+
foreign_tx_request.payload_version,
72+
)
73+
.await?;
74+
75+
// Build and validate the request before the presignature is popped, so invalid/malicious
76+
// requests don't cost a presignature.
77+
let sign_request = build_signature_request(&foreign_tx_request, &response_payload)?;
78+
6879
let keyshare = self
6980
.ecdsa_signature_provider
7081
.keyshare(foreign_tx_request.domain_id)?;
@@ -78,15 +89,6 @@ where
7889
participants,
7990
)?;
8091

81-
let response_payload = self
82-
.execute_foreign_chain_request(
83-
&foreign_tx_request.request,
84-
foreign_tx_request.payload_version,
85-
)
86-
.await?;
87-
88-
let sign_request = build_signature_request(&foreign_tx_request, &response_payload)?;
89-
9092
let response = self
9193
.ecdsa_signature_provider
9294
.make_signature_leader_given_parameters(sign_request, presignature, channel)

0 commit comments

Comments
 (0)