Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ jobs:


build-kotlin:
runs-on: [self-hosted, aws-ecs-8cpu-32mem-55disk-30m]
runs-on: [self-hosted, aws-ecs-8cpu-32mem-55disk-45m]

steps:
- uses: actions/checkout@v3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/playwright.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Install dependencies
run: npm ci
working-directory: crates/rust-sample-wallet
- run: cargo install trunk
- run: cargo install trunk --locked
- name: Install Playwright Browsers
run: npx playwright install --with-deps
working-directory: crates/rust-sample-wallet
Expand Down
1 change: 1 addition & 0 deletions crates/yttrium/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ sign_client = [

sign_canary = [
"sign_client",
"tokio/rt-multi-thread",
"dep:aws-config",
"dep:aws-sdk-cloudwatch",
]
Expand Down
4 changes: 2 additions & 2 deletions crates/yttrium/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ pub mod erc6492_client;
#[cfg(any(feature = "account_client", feature = "chain_abstraction_client"))]
pub mod erc7579;
pub mod error;
#[cfg(test)]
pub mod examples;
#[cfg(any(feature = "account_client", feature = "chain_abstraction_client"))]
pub mod jsonrpc;
#[cfg(any(
Expand Down Expand Up @@ -70,8 +72,6 @@ pub mod utils;
pub mod wallet_provider;
#[cfg(any(feature = "account_client", feature = "chain_abstraction_client"))]
pub mod wallet_service_api;
#[cfg(test)]
pub mod examples;

// Android JNI initialization for rustls-platform-verifier
// TODO try to move this to uniffi_compat or kotlin-ffi
Expand Down
19 changes: 10 additions & 9 deletions crates/yttrium/src/sign/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,18 @@ use {
SessionRequestJsonRpcResponse, SessionSettle, SessionUpdate,
SettleNamespace,
},
relay::IncomingSessionMessage,
relay::{Attestation, AttestationCallback, IncomingSessionMessage},
storage::Storage,
utils::{
diffie_hellman, generate_rpc_id, is_expired,
serialize_and_encrypt_message_type0_envelope,
serialize_and_encrypt_message_type0_envelope_with_ids,
topic_from_sym_key, DecryptedHash, EncryptedHash,
},
verify::{handle_verify, VerifyContext, VERIFY_SERVER_URL},
verify::{
validate::{handle_verify, VerifyContext},
VERIFY_SERVER_URL,
},
},
relay_rpc::{
auth::ed25519_dalek::{SecretKey, SigningKey},
Expand All @@ -49,9 +52,6 @@ pub fn get_relay_url() -> String {
.unwrap_or_else(|_| "wss://relay.walletconnect.org".to_owned())
}

// Type alias for the callback that creates params with attestation
pub(crate) type AttestationCallback = Box<dyn Fn(String) -> Params + Send>;

// Abstraction for requests that may need Verify API attestation (internal)
pub(crate) enum MaybeVerifiedRequest {
Unverified(Params),
Expand Down Expand Up @@ -131,6 +131,7 @@ pub struct Client {
// - 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.
// - test killing the WS, not returning request, failing to connect, etc. in various stages of the lifecycle
// - flow works even when Verify API isblocked: https://github.com/reown-com/appkit/pull/5023
// - Verify API is down dapp-side. Public-key endpoint down wallet-side.

#[allow(unused)]
impl Client {
Expand Down Expand Up @@ -426,11 +427,11 @@ impl Client {
let pairing_topic = pairing_info.topic.clone();
let session_proposal_message = message.clone();
let correlation_id = rpc_id;
move |attestation: String| {
move |attestation: Attestation| {
Params::ProposeSession(ProposeSession {
pairing_topic: pairing_topic.clone(),
session_proposal: session_proposal_message.clone(),
attestation: Some(attestation.into()),
attestation,
analytics: Some(AnalyticsData {
correlation_id: Some(
correlation_id.try_into().unwrap(),
Expand Down Expand Up @@ -784,11 +785,11 @@ impl Client {
Box::new({
let publish_topic = topic.clone();
let publish_message = message.clone();
move |attestation: String| {
move |attestation: Attestation| {
Params::Publish(Publish {
topic: publish_topic.clone(),
message: publish_message.clone(),
attestation: Some(attestation.into()),
attestation,
ttl_secs: 300,
tag: 1108,
prompt: false,
Expand Down
2 changes: 1 addition & 1 deletion crates/yttrium/src/sign/incoming.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use {
utils::{
diffie_hellman, topic_from_sym_key, DecryptedHash, EncryptedHash,
},
verify::{handle_verify, VERIFY_SERVER_URL},
verify::{validate::handle_verify, VERIFY_SERVER_URL},
},
chacha20poly1305::{aead::Aead, ChaCha20Poly1305, KeyInit, Nonce},
data_encoding::BASE64,
Expand Down
4 changes: 1 addition & 3 deletions crates/yttrium/src/sign/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ pub use {
domain::Topic,
rpc::ErrorData,
},
verify::validate::VerifyContext,
};

pub mod client;
Expand All @@ -25,6 +26,3 @@ pub mod test_helpers;
mod tests;
pub mod utils;
mod verify;
#[cfg(target_arch = "wasm32")]
mod verify_attestation;
pub use verify::{VerifyContext, VerifyValidation};
26 changes: 19 additions & 7 deletions crates/yttrium/src/sign/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,32 @@ stateDiagram-v2
Backoff --> [*]: cleanup_rx
Connected --> MaybeReconnect: disconnected
Connected --> AwaitingRequestResponse: unverified request
Connected --> ConnectedAwaitingAttestation: verified request
Connected --> ConnectedAwaitingAttestation: verified request (wasm32)
Connected --> ConnectedAttestationReady: verified request (non-wasm32)
Connected --> Connected: irn_subscription
Connected --> [*]: cleanup_rx
ConnectedAwaitingAttestation --> AwaitingRequestResponse: attestation received
ConnectedAwaitingAttestation --> ConnectedAttestationReady: attestation received/timeout
ConnectedAwaitingAttestation --> MaybeReconnect: disconnected
ConnectedAwaitingAttestation --> Poisoned: auth error
ConnectedAwaitingAttestation --> [*]: cleanup_rx
ConnectedAttestationReady --> AwaitingRequestResponse: sent
ConnectedAttestationReady --> MaybeReconnect: send error
AwaitingSubscribeResponse --> Connected: response received
AwaitingSubscribeResponse --> Poisoned: auth error
AwaitingSubscribeResponse --> [*]: cleanup_rx
AwaitingConnectRequestResponse --> Poisoned: auth error
ConnectRequest --> AwaitingConnectRequestResponse: unverified connected
ConnectRequest --> ConnectRequestAwaitingAttestation: verified connected
ConnectRequest --> ConnectRequestAwaitingAttestation: verified connected (wasm32)
ConnectRequest --> ConnectRequestAttestationReady: verified connected (non-wasm32)
ConnectRequest --> MaybeReconnect: error/timeout
ConnectRequestAwaitingAttestation --> AwaitingConnectRequestResponse: attestation received
ConnectRequest --> Poisoned: InvalidAuth
ConnectRequest --> Idle: ShouldNeverHappen
ConnectRequestAwaitingAttestation --> ConnectRequestAttestationReady: attestation received/timeout
ConnectRequestAwaitingAttestation --> MaybeReconnect: disconnected
ConnectRequestAwaitingAttestation --> Poisoned: auth error
ConnectRequestAwaitingAttestation --> [*]: cleanup_rx
ConnectRequestAttestationReady --> AwaitingConnectRequestResponse: sent
ConnectRequestAttestationReady --> MaybeReconnect: send error
AwaitingConnectRequestResponse --> Connected: response received
AwaitingConnectRequestResponse --> MaybeReconnect: error/timeout
Poisoned --> Poisoned: request_rx
Expand All @@ -40,11 +49,14 @@ stateDiagram-v2
AwaitingRequestResponse --> ConnectRetryRequest: error/timeout
AwaitingRequestResponse --> Poisoned: auth error
AwaitingRequestResponse --> Connected: response received
AwaitingRequestResponse --> AwaitingRequestResponse: irn_subscription
AwaitingRequestResponse --> [*]: cleanup_rx
ConnectRetryRequest --> AwaitingConnectRetryRequestResponse: connected
ConnectRetryRequest --> MaybeReconnect: error/timeout
AwaitingConnectRetryRequestResponse --> MaybeReconnect: error/timeout
AwaitingConnectRetryRequestResponse --> Poisoned: auth error
ConnectRetryRequest --> Poisoned: InvalidAuth
ConnectRetryRequest --> [*]: cleanup_rx
AwaitingConnectRetryRequestResponse --> Connected: response received
ConnectRetryRequest --> AwaitingConnectRetryRequestResponse: connected
AwaitingConnectRetryRequestResponse --> Poisoned: auth error
AwaitingConnectRetryRequestResponse --> MaybeReconnect: error/timeout
AwaitingConnectRetryRequestResponse --> [*]: cleanup_rx
```
Loading
Loading