Skip to content

Commit c49b702

Browse files
committed
chore: refactor attestation creation
1 parent e538d20 commit c49b702

File tree

12 files changed

+422
-317
lines changed

12 files changed

+422
-317
lines changed

.github/workflows/playwright.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
- name: Install dependencies
1717
run: npm ci
1818
working-directory: crates/rust-sample-wallet
19-
- run: cargo install trunk
19+
- run: cargo install trunk --locked
2020
- name: Install Playwright Browsers
2121
run: npx playwright install --with-deps
2222
working-directory: crates/rust-sample-wallet

crates/yttrium/src/sign/client.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,18 @@ use {
2020
SessionRequestJsonRpcResponse, SessionSettle, SessionUpdate,
2121
SettleNamespace,
2222
},
23-
relay::IncomingSessionMessage,
23+
relay::{Attestation, AttestationCallback, IncomingSessionMessage},
2424
storage::Storage,
2525
utils::{
2626
diffie_hellman, generate_rpc_id, is_expired,
2727
serialize_and_encrypt_message_type0_envelope,
2828
serialize_and_encrypt_message_type0_envelope_with_ids,
2929
topic_from_sym_key, DecryptedHash, EncryptedHash,
3030
},
31-
verify::{handle_verify, VerifyContext, VERIFY_SERVER_URL},
31+
verify::{
32+
validate::{handle_verify, VerifyContext},
33+
VERIFY_SERVER_URL,
34+
},
3235
},
3336
relay_rpc::{
3437
auth::ed25519_dalek::{SecretKey, SigningKey},
@@ -49,9 +52,6 @@ pub fn get_relay_url() -> String {
4952
.unwrap_or_else(|_| "wss://relay.walletconnect.org".to_owned())
5053
}
5154

52-
// Type alias for the callback that creates params with attestation
53-
pub(crate) type AttestationCallback = Box<dyn Fn(String) -> Params + Send>;
54-
5555
// Abstraction for requests that may need Verify API attestation (internal)
5656
pub(crate) enum MaybeVerifiedRequest {
5757
Unverified(Params),
@@ -131,6 +131,7 @@ pub struct Client {
131131
// - memory leak slow tests, run for days?. Kill WS many times over and over again to test. Create many sessions over and over again, update sessions, session requests, etc.
132132
// - test killing the WS, not returning request, failing to connect, etc. in various stages of the lifecycle
133133
// - flow works even when Verify API isblocked: https://github.com/reown-com/appkit/pull/5023
134+
// - Verify API is down dapp-side. Public-key endpoint down wallet-side.
134135

135136
#[allow(unused)]
136137
impl Client {
@@ -426,11 +427,11 @@ impl Client {
426427
let pairing_topic = pairing_info.topic.clone();
427428
let session_proposal_message = message.clone();
428429
let correlation_id = rpc_id;
429-
move |attestation: String| {
430+
move |attestation: Attestation| {
430431
Params::ProposeSession(ProposeSession {
431432
pairing_topic: pairing_topic.clone(),
432433
session_proposal: session_proposal_message.clone(),
433-
attestation: Some(attestation.into()),
434+
attestation,
434435
analytics: Some(AnalyticsData {
435436
correlation_id: Some(
436437
correlation_id.try_into().unwrap(),
@@ -784,11 +785,11 @@ impl Client {
784785
Box::new({
785786
let publish_topic = topic.clone();
786787
let publish_message = message.clone();
787-
move |attestation: String| {
788+
move |attestation: Attestation| {
788789
Params::Publish(Publish {
789790
topic: publish_topic.clone(),
790791
message: publish_message.clone(),
791-
attestation: Some(attestation.into()),
792+
attestation,
792793
ttl_secs: 300,
793794
tag: 1108,
794795
prompt: false,

crates/yttrium/src/sign/incoming.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use {
1616
utils::{
1717
diffie_hellman, topic_from_sym_key, DecryptedHash, EncryptedHash,
1818
},
19-
verify::{handle_verify, VERIFY_SERVER_URL},
19+
verify::{validate::handle_verify, VERIFY_SERVER_URL},
2020
},
2121
chacha20poly1305::{aead::Aead, ChaCha20Poly1305, KeyInit, Nonce},
2222
data_encoding::BASE64,

crates/yttrium/src/sign/mod.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ pub use {
55
domain::Topic,
66
rpc::ErrorData,
77
},
8+
verify::validate::VerifyContext,
89
};
910

1011
pub mod client;
@@ -25,6 +26,3 @@ pub mod test_helpers;
2526
mod tests;
2627
pub mod utils;
2728
mod verify;
28-
#[cfg(target_arch = "wasm32")]
29-
mod verify_attestation;
30-
pub use verify::{VerifyContext, VerifyValidation};

crates/yttrium/src/sign/readme.md

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,32 @@ stateDiagram-v2
1414
Backoff --> [*]: cleanup_rx
1515
Connected --> MaybeReconnect: disconnected
1616
Connected --> AwaitingRequestResponse: unverified request
17-
Connected --> ConnectedAwaitingAttestation: verified request
17+
Connected --> ConnectedAwaitingAttestation: verified request (wasm32)
18+
Connected --> ConnectedAttestationReady: verified request (non-wasm32)
19+
Connected --> Connected: irn_subscription
1820
Connected --> [*]: cleanup_rx
19-
ConnectedAwaitingAttestation --> AwaitingRequestResponse: attestation received
21+
ConnectedAwaitingAttestation --> ConnectedAttestationReady: attestation received/timeout
2022
ConnectedAwaitingAttestation --> MaybeReconnect: disconnected
2123
ConnectedAwaitingAttestation --> Poisoned: auth error
2224
ConnectedAwaitingAttestation --> [*]: cleanup_rx
25+
ConnectedAttestationReady --> AwaitingRequestResponse: sent
26+
ConnectedAttestationReady --> MaybeReconnect: send error
2327
AwaitingSubscribeResponse --> Connected: response received
2428
AwaitingSubscribeResponse --> Poisoned: auth error
2529
AwaitingSubscribeResponse --> [*]: cleanup_rx
2630
AwaitingConnectRequestResponse --> Poisoned: auth error
2731
ConnectRequest --> AwaitingConnectRequestResponse: unverified connected
28-
ConnectRequest --> ConnectRequestAwaitingAttestation: verified connected
32+
ConnectRequest --> ConnectRequestAwaitingAttestation: verified connected (wasm32)
33+
ConnectRequest --> ConnectRequestAttestationReady: verified connected (non-wasm32)
2934
ConnectRequest --> MaybeReconnect: error/timeout
30-
ConnectRequestAwaitingAttestation --> AwaitingConnectRequestResponse: attestation received
35+
ConnectRequest --> Poisoned: InvalidAuth
36+
ConnectRequest --> Idle: ShouldNeverHappen
37+
ConnectRequestAwaitingAttestation --> ConnectRequestAttestationReady: attestation received/timeout
3138
ConnectRequestAwaitingAttestation --> MaybeReconnect: disconnected
3239
ConnectRequestAwaitingAttestation --> Poisoned: auth error
3340
ConnectRequestAwaitingAttestation --> [*]: cleanup_rx
41+
ConnectRequestAttestationReady --> AwaitingConnectRequestResponse: sent
42+
ConnectRequestAttestationReady --> MaybeReconnect: send error
3443
AwaitingConnectRequestResponse --> Connected: response received
3544
AwaitingConnectRequestResponse --> MaybeReconnect: error/timeout
3645
Poisoned --> Poisoned: request_rx
@@ -40,11 +49,14 @@ stateDiagram-v2
4049
AwaitingRequestResponse --> ConnectRetryRequest: error/timeout
4150
AwaitingRequestResponse --> Poisoned: auth error
4251
AwaitingRequestResponse --> Connected: response received
52+
AwaitingRequestResponse --> AwaitingRequestResponse: irn_subscription
4353
AwaitingRequestResponse --> [*]: cleanup_rx
54+
ConnectRetryRequest --> AwaitingConnectRetryRequestResponse: connected
4455
ConnectRetryRequest --> MaybeReconnect: error/timeout
45-
AwaitingConnectRetryRequestResponse --> MaybeReconnect: error/timeout
46-
AwaitingConnectRetryRequestResponse --> Poisoned: auth error
56+
ConnectRetryRequest --> Poisoned: InvalidAuth
57+
ConnectRetryRequest --> [*]: cleanup_rx
4758
AwaitingConnectRetryRequestResponse --> Connected: response received
48-
ConnectRetryRequest --> AwaitingConnectRetryRequestResponse: connected
59+
AwaitingConnectRetryRequestResponse --> Poisoned: auth error
60+
AwaitingConnectRetryRequestResponse --> MaybeReconnect: error/timeout
4961
AwaitingConnectRetryRequestResponse --> [*]: cleanup_rx
5062
```

0 commit comments

Comments
 (0)