From dec696dfc48481e89e39cd61d7d96dc8725f38d0 Mon Sep 17 00:00:00 2001 From: peer2 Date: Tue, 27 Jan 2026 05:34:02 +0000 Subject: [PATCH] chore: removes eip712 signatures --- .../tests/universal_account.rs | 19 -- .../src/route/universal_account/mod.rs | 9 +- .../src/authentication/eip712/mod.rs | 209 ------------------ universal-account/src/authentication/mod.rs | 1 - universal-account/src/execute_args.rs | 20 +- universal-account/src/key_id.rs | 17 +- 6 files changed, 6 insertions(+), 269 deletions(-) delete mode 100644 universal-account/src/authentication/eip712/mod.rs diff --git a/contract/universal-account/tests/universal_account.rs b/contract/universal-account/tests/universal_account.rs index 86fabafd3..91ae49334 100644 --- a/contract/universal-account/tests/universal_account.rs +++ b/contract/universal-account/tests/universal_account.rs @@ -12,7 +12,6 @@ use rstest::rstest; use templar_universal_account::{ authentication::{ ed25519::{eip191, raw, sep53}, - eip712, passkey::{ self, data::{AuthenticatorData, ClientDataJson}, @@ -46,7 +45,6 @@ fn mint(amount: u128) -> FunctionCallAction { enum TestSigner { Passkey(p256::SecretKey), Ed25519Raw(ed25519_dalek::SigningKey), - Eip712(alloy::signers::local::PrivateKeySigner), Sep53(ed25519_dalek::SigningKey), Eip191(alloy::signers::local::PrivateKeySigner), } @@ -60,10 +58,6 @@ impl TestSigner { Self::Ed25519Raw(ed25519_dalek::SigningKey::generate(&mut OsRng)) } - fn random_eip712() -> Self { - Self::Eip712(alloy::signers::local::PrivateKeySigner::random()) - } - fn random_sep53() -> Self { Self::Sep53(ed25519_dalek::SigningKey::generate(&mut OsRng)) } @@ -76,7 +70,6 @@ impl TestSigner { match self { Self::Passkey(key) => passkey::VerifyKey(key.public_key().into()).into(), Self::Ed25519Raw(key) => raw::VerifyKey(key.verifying_key().to_bytes().into()).into(), - Self::Eip712(key) => eip712::VerifyKey(key.address().into()).into(), Self::Sep53(key) => sep53::VerifyKey(key.verifying_key().to_bytes().into()).into(), Self::Eip191(key) => eip191::VerifyKey(key.address().into()).into(), } @@ -120,15 +113,6 @@ impl TestSigner { } .into() } - TestSigner::Eip712(key) => { - let message = eip712::Message(payload); - let mws = message.sign(key).unwrap(); - ExecuteArgsMessage { - key: eip712::VerifyKey(key.address().into()), - mws: Box::new(mws), - } - .into() - } TestSigner::Sep53(key) => { let message = sep53::Message::new(payload); let signature = key.sign(&message.hash_for_signing()).to_bytes().into(); @@ -233,7 +217,6 @@ pub async fn universal_account( (TestSigner::random_passkey(), true), (TestSigner::random_ed25519_raw(), false), (TestSigner::random_ed25519_raw(), true), - (TestSigner::random_eip712(), false), (TestSigner::random_sep53(), false), (TestSigner::random_eip191(), false), )] @@ -343,7 +326,6 @@ async fn skip_nonce( (TestSigner::random_passkey(), true), (TestSigner::random_ed25519_raw(), false), (TestSigner::random_ed25519_raw(), true), - (TestSigner::random_eip712(), false), (TestSigner::random_sep53(), false), (TestSigner::random_eip191(), false), )] @@ -420,7 +402,6 @@ async fn reuse_nonce( (TestSigner::random_passkey(), true), (TestSigner::random_ed25519_raw(), false), (TestSigner::random_ed25519_raw(), true), - (TestSigner::random_eip712(), false), (TestSigner::random_sep53(), false), (TestSigner::random_eip191(), false), )] diff --git a/service/relayer/src/route/universal_account/mod.rs b/service/relayer/src/route/universal_account/mod.rs index 2cf0188bd..5e60d4b36 100644 --- a/service/relayer/src/route/universal_account/mod.rs +++ b/service/relayer/src/route/universal_account/mod.rs @@ -15,7 +15,7 @@ use sha2::{Digest, Sha256}; use templar_universal_account::{ authentication::{ ed25519::{eip191, raw, sep53}, - eip712, passkey, + passkey, }, KeyId, }; @@ -77,7 +77,6 @@ pub async fn index(State(app): State) -> impl IntoResponse { pub enum KeyQuery { Passkey { key: passkey::VerifyKey }, Ed25519Raw { key: raw::VerifyKey }, - Eip712 { key: eip712::VerifyKey }, Sep53 { key: sep53::VerifyKey }, Eip191 { key: eip191::VerifyKey }, } @@ -87,7 +86,6 @@ impl From for KeyId { match value { KeyQuery::Passkey { key } => key.into(), KeyQuery::Ed25519Raw { key } => key.into(), - KeyQuery::Eip712 { key } => key.into(), KeyQuery::Sep53 { key } => key.into(), KeyQuery::Eip191 { key } => key.into(), } @@ -101,7 +99,6 @@ impl From for KeyQuery { match value { KeyId::Passkey(key) => Self::Passkey { key }, KeyId::Ed25519Raw(key) => Self::Ed25519Raw { key }, - KeyId::Eip712(key) => Self::Eip712 { key }, KeyId::Sep53(key) => Self::Sep53 { key }, KeyId::Eip191(key) => Self::Eip191 { key }, } @@ -140,10 +137,6 @@ mod tests { sep53::VerifyKey("GBPNJTA5DARWSGLGPAGUHZBE44IOCFSKCL525WK7VZK6BEX4DPLIJXZ7".parse().unwrap()).into(), "3ccc6b968690", )] - #[case::eip712( - eip712::VerifyKey("0xa2E641CcbEB84c6Ed1e1E43e18B720F6D5C5173E".parse().unwrap()).into(), - "8a98745b4d35", - )] #[case::eip191( eip191::VerifyKey("0x03a607faedb00b3f9c747a9cb303255ef86a4da8".parse().unwrap()).into(), "6616024d8ced", diff --git a/universal-account/src/authentication/eip712/mod.rs b/universal-account/src/authentication/eip712/mod.rs deleted file mode 100644 index dd1a61e30..000000000 --- a/universal-account/src/authentication/eip712/mod.rs +++ /dev/null @@ -1,209 +0,0 @@ -use alloy::sol_types::{Eip712Domain, SolStruct}; -use near_sdk::{ - near, - serde::{self, de::DeserializeOwned, Serialize}, -}; - -use super::{ - verify_key, with_raw_string::WithRawString, CheckSignatureError, ExecutionContextProvider, Key, - MessageWithValidSignature, Payload, SignableMessage, -}; - -verify_key!(crate::encoding::ethereum::Address); - -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] -#[near(serializers = [json])] -#[serde(bound = "T: DeserializeOwned")] -pub struct Message(pub WithRawString>); - -impl Message { - pub fn from_parsed(payload: Payload) -> Self - where - T: Serialize, - { - Self(WithRawString::from_parsed(payload)) - } -} - -impl SignableMessage for Message { - type Key = VerifyKey; - type Signature = crate::encoding::ethereum::Signature; - type Auxiliary = (); -} - -impl Key> for VerifyKey { - fn check_signature( - &self, - mws: &super::MessageWithSignature>, - ) -> Result<(), CheckSignatureError> { - let calculated_domain = Eip712Domain::from(mws.message.0.parsed.parameters()); - - let prehash = mws.message.eip712_prehash(&calculated_domain); - - let recovered_address = mws - .signature - .0 - .recover_address_from_prehash(&prehash) - .map_err(CheckSignatureError::other)?; - - (recovered_address == self.0 .0) - .then_some(()) - .ok_or(CheckSignatureError::InvalidSignature) - } -} - -impl Message { - /// # Errors - /// - /// - If serialization of `T` to bytes fails. - pub fn eip712_prehash(&self, domain: &Eip712Domain) -> alloy::primitives::FixedBytes<32> { - super::solidity::Payload { - payload: self.0.raw.clone(), - } - .eip712_signing_hash(domain) - } - - /// # Errors - /// - /// - Signing errors - #[cfg(any(test, feature = "signing"))] - pub fn sign( - self, - key: &alloy::signers::local::PrivateKeySigner, - ) -> Result, alloy::signers::Error> { - use alloy::signers::SignerSync; - let domain = Eip712Domain::from(self.0.parsed.parameters()); - let signature = key.sign_hash_sync(&self.eip712_prehash(&domain))?; - Ok(super::MessageWithSignature { - message: self, - signature: signature.into(), - auxiliary: (), - }) - } -} - -impl ExecutionContextProvider for MessageWithValidSignature> { - type Payload = T; - - fn payload(self) -> Payload { - self.0.message.0.parsed - } - - fn origin(&self) -> Option<&str> { - None - } -} - -#[cfg(test)] -mod tests { - use std::str::FromStr; - - use alloy::signers::local::PrivateKeySigner; - use near_sdk::{serde_json, AccountId}; - - use crate::{ - authentication::payload::Payload, - transaction::{Action, Transaction}, - PayloadExecutionParameters, NEAR_TESTNET_CHAIN_ID, - }; - - use super::*; - - #[test] - fn serialization() { - let m = Message::from_parsed(Payload::new( - PayloadExecutionParameters::builder(NEAR_TESTNET_CHAIN_ID) - .zero() - .verifying_contract(AccountId::from_str("account_id").unwrap()) - .build_salt(), - "hello, world".to_string(), - )); - - let json = serde_json::to_string(&m).unwrap(); - - eprintln!("{json:?}"); - - let parsed: Message = serde_json::from_str(&json).unwrap(); - - assert_eq!(m, parsed); - } - - fn signer() -> PrivateKeySigner { - PrivateKeySigner::from_bytes(&[0x55_u8; 32].into()).unwrap() - } - - fn signer2() -> PrivateKeySigner { - PrivateKeySigner::from_bytes(&[0x66_u8; 32].into()).unwrap() - } - - fn message() -> Message> { - Message::from_parsed(Payload::new( - PayloadExecutionParameters::new_empty("account_id".parse().unwrap()), - vec![Transaction { - receiver_id: "receiver".parse().unwrap(), - actions: vec![Action::CreateAccount].into_boxed_slice(), - }] - .into_boxed_slice(), - )) - } - - #[test] - fn sign_message() { - let signer = signer(); - let message = message(); - - let mws = message.sign(&signer).unwrap(); - - let verify_key = VerifyKey(signer.address().into()); - - verify_key.verify_signature(mws).unwrap(); - } - - #[test] - #[should_panic = "InvalidSignature"] - fn sign_message_fail_signer() { - let signer = signer(); - let message = message(); - - let mws = message.sign(&signer).unwrap(); - - let verify_key = VerifyKey(signer2().address().into()); - - verify_key.verify_signature(mws).unwrap(); - } - - #[test] - #[should_panic = "InvalidSignature"] - fn sign_message_fail_message() { - let signer = signer(); - let message = message(); - - let mut mws = message.sign(&signer).unwrap(); - - let verify_key = VerifyKey(signer.address().into()); - - let mut payload_parsed = mws.message.0.parsed; - payload_parsed.payload_mut()[0].receiver_id = "different".parse().unwrap(); - mws.message.0 = WithRawString::from_parsed(payload_parsed); - - verify_key.verify_signature(mws).unwrap(); - } - - #[test] - #[should_panic = "InvalidSignature"] - fn sign_message_fail_domain() { - let signer = signer(); - let message = message(); - - let mut mws = message.sign(&signer).unwrap(); - - let verify_key = VerifyKey(signer.address().into()); - - let mut parameters = mws.message.0.parsed.parameters(); - parameters.name = Some("different".to_string()); - mws.message.0 = - WithRawString::from_parsed(Payload::new(parameters, mws.message.0.parsed.payload())); - - verify_key.verify_signature(mws).unwrap(); - } -} diff --git a/universal-account/src/authentication/mod.rs b/universal-account/src/authentication/mod.rs index cada82e27..20ed9e1f3 100644 --- a/universal-account/src/authentication/mod.rs +++ b/universal-account/src/authentication/mod.rs @@ -10,7 +10,6 @@ use schemars::JsonSchema; use crate::PayloadExecutionParameters; pub mod ed25519; -pub mod eip712; pub mod passkey; mod payload; pub use payload::*; diff --git a/universal-account/src/execute_args.rs b/universal-account/src/execute_args.rs index 1d1a88444..3aabc8d1a 100644 --- a/universal-account/src/execute_args.rs +++ b/universal-account/src/execute_args.rs @@ -6,7 +6,7 @@ use near_sdk::{ use crate::{ authentication::{ ed25519::{eip191, raw, sep53}, - eip712, passkey, CheckSignatureError, ExecutionContextProvider, ExecutionError, Key, + passkey, CheckSignatureError, ExecutionContextProvider, ExecutionError, Key, MessageWithSignature, MessageWithValidSignature, SignableMessage, }, KeyId, PayloadExecutionParameters, @@ -66,7 +66,6 @@ macro_rules! execute_args { execute_args! { Passkey(passkey::VerifyKey, passkey::Message), Ed25519Raw(raw::VerifyKey, raw::Message), - Eip712(eip712::VerifyKey, eip712::Message), Sep53(sep53::VerifyKey, sep53::Message), Eip191(eip191::VerifyKey, eip191::Message) } @@ -211,20 +210,6 @@ mod tests { .into() } - fn eip712_execute_args() -> ExecuteArgs> { - let sk = PrivateKeySigner::random(); - - let message = eip712::Message::from_parsed(payload()); - - let signed_message = message.sign(&sk).unwrap(); - - ExecuteArgsMessage { - key: eip712::VerifyKey(sk.address().into()), - mws: Box::new(signed_message), - } - .into() - } - fn ed25519_raw_execute_args() -> ExecuteArgs> { let sk = Keypair::new(); @@ -293,7 +278,6 @@ mod tests { #[values( passkey_execute_args(), ed25519_raw_execute_args(), - eip712_execute_args(), sep53_execute_args(), eip191_execute_args() )] @@ -369,7 +353,6 @@ mod tests { #[rstest] #[case::passkey(r#"{"Passkey":{"key":"p256:R7J5Pp28zfnihdFnoTL1Ns7uLbow4LJbvmMzPg7MhKvroPthoVw88veNBpoyugC1zvpULndNtEBk9wBLytHnVau8","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":"MEUCIQDEZuomO2M0XhC_pRqXIZQH7Tv2x_IHEbjX7nluKB-66AIgYmah3iy9u5oudGc0qu8VLYM6p7AdUlqXYsrrkGpQF5E","authenticator_data":"0101010101010101010101010101010101010101010101010101010101010101","client_data_json":"{\"type\":\"type\",\"challenge\":\"cwNw1_U_XWfY9-P-7WQ3wyPUxzlUKdB3hVaTUjjxWGA\",\"origin\":\"origin\",\"crossOrigin\":null,\"topOrigin\":null}"}}"#)] #[case::ed25519_raw(r#"{"Ed25519Raw":{"key":"ed25519:8XxGb8AcgHB3xZhJ9q9mZpjwv1VYN3d5e9WPpQfzTwWT","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":"ed25519:5tR2qHLfP23vCVwfuFsZfFSjtUCV1CKXPyfjoEegbcpgri2cMohXHHaG5bZqGtcasnDHDLj5Btd6eGmnW4wRLS5h"}}"#)] - #[case::eip712(r#"{"Eip712":{"key":"0x12106199ccfb79eb650e73cdcc5349a40085eb71","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":{"r":"0xba2cf4a66e89a835e275d687e873401f2d5b2e39e8acb13c186c836756cf7d7f","s":"0x7c06faa007afdf67623ea9e19b4bbf038cf31769c3d821f23aa5d942617c5e3b","yParity":"0x0","v":"0x0"}}}"#)] #[case::sep53(r#"{"Sep53":{"key":"GBTSG6JQJN3FF443PWHWHRRSJOEX3INJ364HHI345S4HSUREQTHA5BRD","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":"ed25519:2XKrCfu8WufagnqSmMzycQugR453fq9nPGFeuxs4oVB8b3WJPRt8e6FrtKk1VvdMSsCVWNj29HGpwatUAhzM4E2U"}}"#)] #[case::eip191(r#"{"Eip191":{"key":"0x1494e3644415fcbb6ddc429e4caa1c885efef75b","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":{"r":"0x6ecfd6a8d1622a435da977a6c729c2520864547a59b18daf816a13f08e7f21d0","s":"0xf2122f2c7306bc963cdd855ab2401257e67434e55874698b6a4b7eb5bed7882","yParity":"0x1","v":"0x1"}}}"#)] fn parse_all_formats_with_chain_id(#[case] text: &str) { @@ -393,7 +376,6 @@ mod tests { #[rstest] #[case::passkey(r#"{"Passkey":{"key":"p256:R7J5Pp28zfnihdFnoTL1Ns7uLbow4LJbvmMzPg7MhKvroPthoVw88veNBpoyugC1zvpULndNtEBk9wBLytHnVau8","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":"MEUCIQDEZuomO2M0XhC_pRqXIZQH7Tv2x_IHEbjX7nluKB-66AIgYmah3iy9u5oudGc0q8uVLYM6p7AdUlqXYsrrkGpQF5E","authenticator_data":"0101010101010101010101010101010101010101010101010101010101010101","client_data_json":"{\"type\":\"type\",\"challenge\":\"cwNw1_U_XWfY9-P-7WQ3wyPUxzlUKdB3hVaTUjjxWGA\",\"origin\":\"origin\",\"crossOrigin\":null,\"topOrigin\":null}"}}"#)] #[case::ed25519_raw(r#"{"Ed25519Raw":{"key":"ed25519:8XxGb8AcgHB3xZhJ9q9mZpjwv1VYN3d5e9WPpQfzTwWT","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":"ed25519:5tR2qHLfP23vCVfwuFsZfFSjtUCV1CKXPyfjoEegbcpgri2cMohXHHaG5bZqGtcasnDHDLj5Btd6eGmnW4wRLS5h"}}"#)] - #[case::eip712(r#"{"Eip712":{"key":"0x6df4f5ccbe9b41418937640474ade95e4c2994fc","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":{"r":"0x648b99c53bc33fe5ba30293660e251772e9e9a8ddd12ee6be96821530d8f6729","s":"0x26dd0c40b6b63a8f14cd6cb58b1d90cefe2bbd9d7b656645ce9988b6a03a8aa4","yParity":"0x1","v":"0x1"}}}"#)] #[case::sep53(r#"{"Sep53":{"key":"GBTSG6JQJN3FF443PWHWHRRSJOEX3INJ364HHI345S4HSUREQTHA5BRD","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":"ed25519:2XKrCfu8WufagnqSmMzycQugR453fq9nPGFeuxs4oVB8b3WJPRt8e6FrtKk1VvdMSsCVWN2j9HGpwatUAhzM4E2U"}}"#)] #[case::eip191(r#"{"Eip191":{"key":"0x1494e3644415fcbb6ddc429e4caa1c885efef75b","message":"{\"version\":\"1\",\"parameters\":{\"block_height\":\"12345\",\"index\":\"1\",\"nonce\":\"44\",\"name\":\"Templar Universal Account\",\"version\":\"1.2.1\",\"chain_id\":\"398\",\"verifying_contract\":\"my-universal-account.near\",\"salt\":\"2vkBPYckQRiVSZ6mEDWAtpK8k9thWMc6MwnKQTR1zFuq\"},\"payload\":[{\"receiver_id\":\"token.near\",\"actions\":[{\"FunctionCall\":{\"function_name\":\"ft_transfer\",\"arguments\":\"eyJyZWNlaXZlcl9pZCI6InJlY2VpdmVyLm5lYXIiLCJhbW91bnQiOiIxMDAifQ==\",\"amount\":\"1\",\"gas\":\"30000000000000\"}}]}]}","signature":{"r":"0x6ecfd6a8d1622a435da977a6c729c2520864547a59b18daf816a13f08e7f21d0","s":"0xf2122f2c7306bc963cdd85a5b2401257e67434e55874698b6a4b7eb5bed7882","yParity":"0x1","v":"0x1"}}}"#)] fn parse_all_formats_with_chain_id_invalid_signature(#[case] text: &str) { diff --git a/universal-account/src/key_id.rs b/universal-account/src/key_id.rs index 90749377b..ddc1cbc6a 100644 --- a/universal-account/src/key_id.rs +++ b/universal-account/src/key_id.rs @@ -2,17 +2,15 @@ use near_sdk::near; use crate::authentication::{ ed25519::{eip191, raw, sep53}, - eip712, - passkey::VerifyKey, + passkey, }; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] #[near(serializers = [borsh, json])] pub enum KeyId { - Passkey(VerifyKey), + Passkey(passkey::VerifyKey), #[serde(rename = "Ed25519RawKey")] Ed25519Raw(raw::VerifyKey), - Eip712(eip712::VerifyKey), Sep53(sep53::VerifyKey), Eip191(eip191::VerifyKey), } @@ -22,15 +20,14 @@ impl std::fmt::Display for KeyId { match self { Self::Passkey(key) => write!(f, "{}", key.0), Self::Ed25519Raw(key) => write!(f, "{}", key.0), - Self::Eip712(key) => write!(f, "{}", key.0), Self::Sep53(key) => write!(f, "{}", key.0), Self::Eip191(key) => write!(f, "{}", key.0), } } } -impl From for KeyId { - fn from(value: VerifyKey) -> Self { +impl From for KeyId { + fn from(value: passkey::VerifyKey) -> Self { Self::Passkey(value) } } @@ -47,12 +44,6 @@ impl From for KeyId { } } -impl From for KeyId { - fn from(value: eip712::VerifyKey) -> Self { - Self::Eip712(value) - } -} - impl From for KeyId { fn from(value: eip191::VerifyKey) -> Self { Self::Eip191(value)