diff --git a/Cargo.lock b/Cargo.lock index 644e051..bff08b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,70 +52,6 @@ dependencies = [ "libc", ] -[[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" -dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", - "derivative", - "digest 0.10.7", - "itertools", - "num-bigint", - "num-traits", - "paste", - "rustc_version", - "zeroize", -] - -[[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" -dependencies = [ - "num-bigint", - "num-traits", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" -dependencies = [ - "ark-std", - "digest 0.10.7", - "num-bigint", -] - -[[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" -dependencies = [ - "num-traits", - "rand", -] - [[package]] name = "arrayvec" version = "0.7.4" @@ -223,16 +159,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] -name = "bigdecimal" -version = "0.3.1" +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", - "serde", -] +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bigdecimal" @@ -487,17 +417,6 @@ dependencies = [ "serde", ] -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "digest" version = "0.9.0" @@ -547,12 +466,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - [[package]] name = "encoding_rs" version = "0.8.33" @@ -1076,6 +989,7 @@ checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" dependencies = [ "equivalent", "hashbrown 0.14.2", + "serde", ] [[package]] @@ -1093,15 +1007,6 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.9" @@ -1141,6 +1046,28 @@ dependencies = [ "tracing", ] +[[package]] +name = "lambdaworks-crypto" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbc2a4da0d9e52ccfe6306801a112e81a8fc0c76aa3e4449fefeda7fef72bb34" +dependencies = [ + "lambdaworks-math", + "serde", + "sha2", + "sha3", +] + +[[package]] +name = "lambdaworks-math" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1bd2632acbd9957afc5aeec07ad39f078ae38656654043bf16e046fa2730e23" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -1295,9 +1222,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -1498,12 +1425,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - [[package]] name = "pbkdf2" version = "0.11.0" @@ -2070,15 +1991,17 @@ dependencies = [ [[package]] name = "serde_with" -version = "2.3.3" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" dependencies = [ - "base64 0.13.1", + "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", + "indexmap 2.0.2", "serde", + "serde_derive", "serde_json", "serde_with_macros", "time", @@ -2086,9 +2009,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "2.3.3" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" dependencies = [ "darling", "proc-macro2", @@ -2191,14 +2114,14 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "starknet" -version = "0.9.0" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0c9ac3809cc7630784e8c8565fa3013af819d83c97aa2720d566016d439011" dependencies = [ "starknet-accounts", "starknet-contract", "starknet-core", "starknet-crypto", - "starknet-ff", "starknet-macros", "starknet-providers", "starknet-signers", @@ -2206,12 +2129,14 @@ dependencies = [ [[package]] name = "starknet-accounts" -version = "0.8.0" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee27ded58ade61da410fccafd57ed5429b0e79a9d62a4ae8b65818cb9d6f400" dependencies = [ "async-trait", "auto_impl", "starknet-core", + "starknet-crypto", "starknet-providers", "starknet-signers", "thiserror", @@ -2219,8 +2144,9 @@ dependencies = [ [[package]] name = "starknet-contract" -version = "0.8.0" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6ee5762d24c4f06ab7e9406550925df406712e73719bd2de905c879c674a87" dependencies = [ "serde", "serde_json", @@ -2233,10 +2159,12 @@ dependencies = [ [[package]] name = "starknet-core" -version = "0.9.0" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538240cbe6663c673fe77465f294da707080f39678dd7066761554899e46100" dependencies = [ "base64 0.21.5", + "crypto-bigint", "flate2", "hex", "serde", @@ -2245,13 +2173,14 @@ dependencies = [ "serde_with", "sha3", "starknet-crypto", - "starknet-ff", + "starknet-types-core", ] [[package]] name = "starknet-crypto" -version = "0.6.1" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a5064173a8e8d2675e67744fd07f310de44573924b6b7af225a6bdd8102913" dependencies = [ "crypto-bigint", "hex", @@ -2261,48 +2190,25 @@ dependencies = [ "num-traits", "rfc6979", "sha2", - "starknet-crypto-codegen", "starknet-curve", - "starknet-ff", + "starknet-types-core", "zeroize", ] -[[package]] -name = "starknet-crypto-codegen" -version = "0.3.2" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" -dependencies = [ - "starknet-curve", - "starknet-ff", - "syn 2.0.38", -] - [[package]] name = "starknet-curve" -version = "0.4.1" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" -dependencies = [ - "starknet-ff", -] - -[[package]] -name = "starknet-ff" -version = "0.3.6" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcde6bd74269b8161948190ace6cf069ef20ac6e79cd2ba09b320efa7500b6de" dependencies = [ - "ark-ff", - "bigdecimal 0.3.1", - "crypto-bigint", - "getrandom", - "hex", - "num-bigint", - "serde", + "starknet-types-core", ] [[package]] name = "starknet-macros" -version = "0.1.6" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8986a940af916fc0a034f4e42c6ba76d94f1e97216d75447693dfd7aefaf3ef2" dependencies = [ "starknet-core", "syn 2.0.38", @@ -2310,13 +2216,15 @@ dependencies = [ [[package]] name = "starknet-providers" -version = "0.9.0" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60e8e69ba7a36dea2d28333be82b4011f8784333d3ae5618482b6587c1ffb66c" dependencies = [ "async-trait", "auto_impl", "ethereum-types", "flate2", + "getrandom", "log", "reqwest", "serde", @@ -2329,24 +2237,40 @@ dependencies = [ [[package]] name = "starknet-signers" -version = "0.7.0" -source = "git+https://github.com/xJonathanLEI/starknet-rs#d980869d44ef86249b4077f4ec809165f470678d" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70b9e01b61ae51d722e2b100d6ef913c5a2e70d1ea672733d385f7296d6055ef" dependencies = [ "async-trait", "auto_impl", "crypto-bigint", "eth-keystore", + "getrandom", "rand", "starknet-core", "starknet-crypto", "thiserror", ] +[[package]] +name = "starknet-types-core" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa1b9e01ccb217ab6d475c5cda05dbb22c30029f7bb52b192a010a00d77a3d74" +dependencies = [ + "lambdaworks-crypto", + "lambdaworks-math", + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + [[package]] name = "starkwhale_alert" version = "0.1.0" dependencies = [ - "bigdecimal 0.4.2", + "bigdecimal", "chrono", "dotenv", "dotenv_codegen", @@ -3120,17 +3044,3 @@ name = "zeroize" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] diff --git a/crates/starkwhale-alert/Cargo.toml b/crates/starkwhale-alert/Cargo.toml index 6147586..6acf0db 100644 --- a/crates/starkwhale-alert/Cargo.toml +++ b/crates/starkwhale-alert/Cargo.toml @@ -2,7 +2,7 @@ name = "starkwhale_alert" version = "0.1.0" edition = "2021" - +# TODO ADD starknet-id = { git = "https://github.com/starknet-id/starknet-id.rs.git", branch = "master" } [dependencies] dotenv = "0.15.0" reqwest = { version = "0.11.18", features = ["json"] } @@ -10,7 +10,8 @@ tokio = { version = "1.32.0", features = ["full"] } rstest = "0.18.2" serde = { version = "1.0.188", features = ["derive"] } serde_json = "1.0.105" -starknet = { git = "https://github.com/xJonathanLEI/starknet-rs" } +starknet = "0.12.0" +# starknet-id = { git = "https://github.com/starknet-id/starknet-id.rs.git", branch = "master" } koit = "0.2.0" twitter-v2 = "0.1.8" bigdecimal = "0.4.1" diff --git a/crates/starkwhale-alert/src/api.rs b/crates/starkwhale-alert/src/api.rs index 0ee3dd1..54a5699 100644 --- a/crates/starkwhale-alert/src/api.rs +++ b/crates/starkwhale-alert/src/api.rs @@ -2,7 +2,7 @@ use crate::consts::Token; use serde::{Deserialize, Serialize}; use starknet::{ core::{ - types::{BlockId, EmittedEvent, EventFilter, FieldElement}, + types::{BlockId, EmittedEvent, EventFilter, Felt}, utils::get_selector_from_name, }, providers::{jsonrpc::HttpTransport, JsonRpcClient, Provider, ProviderError}, @@ -64,7 +64,7 @@ pub async fn fetch_events( let mut continuation_token = None; let from_block = Some(BlockId::Number(from_block)); let to_block = Some(BlockId::Number(to_block)); - let address = Some(FieldElement::from_hex_be(token.address).expect("Invalid address")); + let address = Some(Felt::from_hex(token.address).expect("Invalid address")); let keys = Some(vec![vec![ get_selector_from_name(token.selector).expect("Invalid selector") ]]); diff --git a/crates/starkwhale-alert/src/formatter.rs b/crates/starkwhale-alert/src/formatter.rs index d0f9c8e..262ef2f 100644 --- a/crates/starkwhale-alert/src/formatter.rs +++ b/crates/starkwhale-alert/src/formatter.rs @@ -1,14 +1,14 @@ use bigdecimal::ToPrimitive; use num_bigint::BigUint; use num_format::{Locale, ToFormattedString}; -use starknet::core::types::{EmittedEvent, FieldElement}; +use starknet::core::types::{EmittedEvent, Felt}; use std::ops::Div; use crate::{api, consts::Token, consts::ADDRESS_LIST, get_infura_client, starknet_id, to_u256}; pub async fn get_formatted_text(emitted_event: EmittedEvent, token: &Token) -> String { let from = emitted_event.data[0]; - let to: FieldElement = emitted_event.data[1]; + let to: Felt = emitted_event.data[1]; let mut amount = to_u256( emitted_event.data[2].try_into().expect("Error: low"), emitted_event.data[3].try_into().expect("Error: high"), @@ -22,9 +22,9 @@ pub async fn get_formatted_text(emitted_event: EmittedEvent, token: &Token) -> S "{:} #{} {} ({} USD)", amount_string, token.symbol, token.logo, usd_value ); - let second_line = if to == FieldElement::ZERO { + let second_line = if to == Felt::ZERO { format!("{} bridged to Ethereum L1", format_address(from).await) - } else if from == FieldElement::ZERO { + } else if from == Felt::ZERO { format!("{} bridged to Starknet L2", format_address(to).await) } else { format!( @@ -66,13 +66,13 @@ fn to_rounded(amount: BigUint, pow: u32) -> BigUint { trait ToHex { fn to_hex(self) -> String; } -impl ToHex for FieldElement { +impl ToHex for Felt { fn to_hex(self) -> String { format!("{:#x}", self) } } -async fn format_address(address: FieldElement) -> String { +async fn format_address(address: Felt) -> String { let address_as_hex = address.to_hex(); let named_address = ADDRESS_LIST .iter() @@ -98,38 +98,36 @@ mod tests { use super::{format_address, get_formatted_text, to_rounded}; use crate::{consts::TOKENS, to_u256}; - use starknet::core::types::{EmittedEvent, FieldElement}; + use starknet::core::types::{EmittedEvent, Felt}; #[tokio::test] async fn test_get_formatted_text_bridge_to_starknet() { - let keys = vec![FieldElement::from_hex_be( + let keys = vec![Felt::from_hex( "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", ) .unwrap()]; let data = vec![ - FieldElement::from_hex_be("0x0").unwrap(), - FieldElement::from_hex_be( - "0x6e14b28449c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce", - ) - .unwrap(), - FieldElement::from_hex_be("0xe8d4a51000").unwrap(), - FieldElement::from_hex_be("0x0").unwrap(), + Felt::from_hex("0x0").unwrap(), + Felt::from_hex("0x6e14b28449c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce") + .unwrap(), + Felt::from_hex("0xe8d4a51000").unwrap(), + Felt::from_hex("0x0").unwrap(), ]; let emitted_event = EmittedEvent { - from_address: FieldElement::from_hex_be( + from_address: Felt::from_hex( "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", ) .unwrap(), keys, data, block_hash: Some( - FieldElement::from_hex_be( + Felt::from_hex( "0x030905d20477c31ecc0951a8c7d2f8c91d16a2ce864aaad2730aa330e328dc6a", ) .unwrap(), ), block_number: Some(237165), - transaction_hash: FieldElement::from_hex_be( + transaction_hash: Felt::from_hex( "0x732b09d901fb0075d283ac23cbaae4f8c486123a88a621eeaa05d0b5ddfb8d8", ) .unwrap(), @@ -145,34 +143,32 @@ mod tests { #[tokio::test] async fn test_get_formatted_text_bridge_to_l1() { - let keys = vec![FieldElement::from_hex_be( + let keys = vec![Felt::from_hex( "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", ) .unwrap()]; let data = vec![ - FieldElement::from_hex_be( - "0x6e14b28449c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce", - ) - .unwrap(), - FieldElement::from_hex_be("0x0").unwrap(), - FieldElement::from_hex_be("0xe8d4a51000").unwrap(), - FieldElement::from_hex_be("0x0").unwrap(), + Felt::from_hex("0x6e14b28449c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce") + .unwrap(), + Felt::from_hex("0x0").unwrap(), + Felt::from_hex("0xe8d4a51000").unwrap(), + Felt::from_hex("0x0").unwrap(), ]; let emitted_event = EmittedEvent { - from_address: FieldElement::from_hex_be( + from_address: Felt::from_hex( "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", ) .unwrap(), keys, data, block_hash: Some( - FieldElement::from_hex_be( + Felt::from_hex( "0x030905d20477c31ecc0951a8c7d2f8c91d16a2ce864aaad2730aa330e328dc6a", ) .unwrap(), ), block_number: Some(237165), - transaction_hash: FieldElement::from_hex_be( + transaction_hash: Felt::from_hex( "0x732b09d901fb0075d283ac23cbaae4f8c486123a88a621eeaa05d0b5ddfb8d8", ) .unwrap(), @@ -187,37 +183,33 @@ mod tests { #[tokio::test] async fn test_get_formatted_text_to_starknet_id() { - let keys = vec![FieldElement::from_hex_be( + let keys = vec![Felt::from_hex( "0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9", ) .unwrap()]; let data = vec![ - FieldElement::from_hex_be( - "0x6e14b249c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce", - ) - .unwrap(), - FieldElement::from_hex_be( - "0x6e14b249c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce", - ) - .unwrap(), - FieldElement::from_hex_be("0xe8d4a51000").unwrap(), - FieldElement::from_hex_be("0x0").unwrap(), + Felt::from_hex("0x6e14b249c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce") + .unwrap(), + Felt::from_hex("0x6e14b249c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce") + .unwrap(), + Felt::from_hex("0xe8d4a51000").unwrap(), + Felt::from_hex("0x0").unwrap(), ]; let emitted_event = EmittedEvent { - from_address: FieldElement::from_hex_be( + from_address: Felt::from_hex( "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", ) .unwrap(), keys, data, block_hash: Some( - FieldElement::from_hex_be( + Felt::from_hex( "0x030905d20477c31ecc0951a8c7d2f8c91d16a2ce864aaad2730aa330e328dc6a", ) .unwrap(), ), block_number: Some(237165), - transaction_hash: FieldElement::from_hex_be( + transaction_hash: Felt::from_hex( "0x732b09d901fb0075d283ac23cbaae4f8c486123a88a621eeaa05d0b5ddfb8d8", ) .unwrap(), @@ -233,10 +225,8 @@ mod tests { #[tokio::test] async fn test_format_address() { let response = format_address( - FieldElement::from_hex_be( - "0x6e14b249c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce", - ) - .unwrap(), + Felt::from_hex("0x6e14b249c412a336e7a5a3473da083b9159e6845be4d02ee50f6095a5b3ce") + .unwrap(), ) .await; assert!(response == "0x6e1...b3ce", "Should be 0x6e1...b3ce"); @@ -245,10 +235,8 @@ mod tests { #[tokio::test] async fn test_format_address_layer_swap() { let response = format_address( - FieldElement::from_hex_be( - "0x019252b1deef483477c4d30cfcc3e5ed9c82fafea44669c182a45a01b4fdb97a", - ) - .unwrap(), + Felt::from_hex("0x019252b1deef483477c4d30cfcc3e5ed9c82fafea44669c182a45a01b4fdb97a") + .unwrap(), ) .await; assert!(response == "Layerswap", "Should be Layerswap"); @@ -257,10 +245,8 @@ mod tests { #[tokio::test] async fn test_format_address_starknet_id() { let response = format_address( - FieldElement::from_hex_be( - "0x1f4055a52c859593e79988bfe998b536066805fe757522ece47945f46f6b6e7", - ) - .unwrap(), + Felt::from_hex("0x1f4055a52c859593e79988bfe998b536066805fe757522ece47945f46f6b6e7") + .unwrap(), ) .await; assert!(response == "stark.stark", "Should be stark.stark"); diff --git a/crates/starkwhale-alert/src/starknet_id.rs b/crates/starkwhale-alert/src/starknet_id.rs index e39ffe2..63e81bb 100644 --- a/crates/starkwhale-alert/src/starknet_id.rs +++ b/crates/starkwhale-alert/src/starknet_id.rs @@ -1,144 +1,39 @@ // This code was extracted from https://github.com/Th0rgal/starknet-rs/tree/feat/starknet-id -use bigdecimal::num_traits; -use num_traits::cast::ToPrimitive; use starknet::{ - core::{ - types::{BlockId, BlockTag, FieldElement, FunctionCall}, - utils::get_selector_from_name, - }, - providers::{jsonrpc::HttpTransport, JsonRpcClient, Provider}, + core::types::Felt, + providers::{jsonrpc::HttpTransport, JsonRpcClient}, }; -use twitter_v2::oauth2::http::response; - -pub const STARKNET_ID_CONTRACT_ADDRESS: FieldElement = FieldElement::from_mont([ - 9876522541644636344, - 16204762974907305178, - 9525933456780166611, - 327799339589885214, -]); pub async fn address_to_domain( - rpc_client: JsonRpcClient, - address: FieldElement, + _rpc_client: JsonRpcClient, + _address: Felt, ) -> Option { - let response = rpc_client - .call( - FunctionCall { - contract_address: STARKNET_ID_CONTRACT_ADDRESS, - entry_point_selector: get_selector_from_name("address_to_domain").unwrap(), - calldata: vec![address], - }, - BlockId::Tag(BlockTag::Latest), - ) - .await; - if response.is_err() { - return None; - } - let response = response.unwrap(); - if response.len() == 1 && response[0] == FieldElement::ZERO { - return None; - } - let mut domain = String::new(); - response.iter().skip(1).for_each(|value| { - domain.push_str(decode(*value).as_str()); - domain.push('.'); - }); - domain.push_str("stark"); - Some(domain) -} - -const BASIC_ALPHABET: &str = "abcdefghijklmnopqrstuvwxyz0123456789-"; -const BIG_ALPHABET: &str = "这来"; - -fn decode(mut felt: FieldElement) -> String { - let mut decoded: String = String::new(); - let basic_plus = FieldElement::from(BASIC_ALPHABET.chars().count() + 1); - let basic_len = FieldElement::from(BASIC_ALPHABET.chars().count()); - let big_plus = FieldElement::from(BIG_ALPHABET.chars().count() + 1); - let big_len = FieldElement::from(BIG_ALPHABET.chars().count()); - let last_big = BIG_ALPHABET.chars().last().unwrap(); - while felt != FieldElement::ZERO { - let code = felt % basic_plus; - felt = felt.floor_div(basic_plus); - if code == basic_len { - let next_felt = felt.floor_div(big_plus); - if next_felt == FieldElement::ZERO { - let code2 = felt % big_plus; - felt = next_felt; - decoded.push(if code2 == FieldElement::ZERO { - BASIC_ALPHABET.chars().next().unwrap() - } else { - last_big - }); - } else { - decoded.push( - BIG_ALPHABET - .chars() - .nth((felt % big_len).to_big_decimal(0).to_usize().unwrap()) - .unwrap(), - ); - felt = felt.floor_div(big_len); - } - } else { - decoded.push( - BASIC_ALPHABET - .chars() - .nth(code.to_big_decimal(0).to_usize().unwrap()) - .unwrap(), - ); - } - let (decoded_str, k) = extract_stars(decoded.as_str()); - let mut decoded = String::from(decoded_str); - if k != 0 { - let star = last_big.to_string(); - if k % 2 == 0 { - decoded.push_str(&str::repeat(&star, k / 2 - 1)); - decoded.push(BIG_ALPHABET.chars().next().unwrap()); - let mut basic_iter = BASIC_ALPHABET.chars(); - basic_iter.next(); - decoded.push(basic_iter.next().unwrap()); - } else { - decoded.push_str(&str::repeat(&star, k / 2 + 1)); - } - } - } - decoded -} - -fn extract_stars(mut domain: &str) -> (&str, usize) { - let mut k = 0; - let last_char = BIG_ALPHABET.chars().last().unwrap(); - while domain.ends_with(last_char) { - let mut chars = domain.chars(); - chars.next_back(); - domain = chars.as_str(); - k += 1; - } - (domain, k) + // rpc_client + // .address_to_domain(address, MAINNET_CONTRACT) + // .await + Option::None } #[cfg(test)] mod tests { use super::address_to_domain; use crate::get_infura_client; - use starknet::core::types::FieldElement; + use starknet::core::types::Felt; #[tokio::test] async fn test_starknet_id() { // stark let name = address_to_domain( get_infura_client(), - FieldElement::from_hex_be( - "0x1f4055a52c859593e79988bfe998b536066805fe757522ece47945f46f6b6e7", - ) - .unwrap(), + Felt::from_hex("0x1f4055a52c859593e79988bfe998b536066805fe757522ece47945f46f6b6e7") + .unwrap(), ) .await .unwrap(); assert_eq!(name, "stark.stark"); // address_to_domain( // get_infura_client(), - // FieldElement::from_hex_be("0x225bd17f4b4ede26c77673d8d3").unwrap(), + // Felt::from_hex("0x225bd17f4b4ede26c77673d8d3").unwrap(), // ) // .await; } @@ -148,7 +43,7 @@ mod tests { // stark let should_be_none = address_to_domain( get_infura_client(), - FieldElement::from_hex_be("0x225bd17f4b4ede26c77673d8d3").unwrap(), + Felt::from_hex("0x225bd17f4b4ede26c77673d8d3").unwrap(), ) .await; assert!(should_be_none.is_none()); diff --git a/starkwhale_alert b/starkwhale_alert index e4c8127..844aaef 100755 Binary files a/starkwhale_alert and b/starkwhale_alert differ