Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
TauriとRustとSolidJSで作るEthereum Address生成機 / Ethe...
Search
serinuntius
July 02, 2022
Technology
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TauriとRustとSolidJSで作るEthereum Address生成機 / Ethereum Address Generator made by Tauri, Rust, SolidJS
社内勉強会の資料です。
https://github.com/serinuntius/ethereum-address-generator
serinuntius
July 02, 2022
More Decks by serinuntius
See All by serinuntius
NFTのインデクシングとGraphQLのすゝめ / NFT indexing and GraphQL
serinuntius
0
220
世界最速でArbitrumで NFTを作って震えたい!!!!/ I want to make NFT with Arbitrum in the fastest way in the world and tremble !!!!
serinuntius
0
680
なぜフラッシュローンという概念が俺達の魂を震えさせるのか / Why does the concept of flash loans make our souls tremble?
serinuntius
0
1k
Why does the concept of DeFi make our souls tremble? / なぜDeFiという概念が俺達の魂を震えさせるのか ~DEX(AMM)まで~
serinuntius
0
1.3k
NotionがCMS代わりに!? / Notion replaces CMS!?
serinuntius
0
1k
ont hackathon
serinuntius
0
98
Golangでリクエストごとのクエリログが見たい!! kamakura.go #4 / go-query-and-request-logger
serinuntius
1
1k
新卒Rubyistが1ヶ月で Perl Mongerになった話
serinuntius
0
550
Other Decks in Technology
See All in Technology
企業の現実世界をグラフで写し取る
sansantech
PRO
0
240
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
220
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
270
形式手法を使って仕様をコーディングしよう
mikanichinose
0
160
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
150
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
350
20260930_Gemma4_Hands-on
tsho
0
210
BedrockとLambdaで作る リアルタイム進行型推理ゲーム
kawametho
0
160
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
320
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
290
[2026 Oracle Technical Deep Dive] エンタープライズAIエージェントを支えるOCIソリューション。ラインナップと特徴を理解しよう! (2026年9月17日開催)
oracle4engineer
PRO
0
190
並行性の問題を防げ!実践トランザクション入門
occhi
0
140
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Thoughts on Productivity
jonyablonski
76
5.4k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
260
Ethics towards AI in product and experience design
skipperchong
2
410
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
250
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Abbi's Birthday
coloredviolet
4
10k
Designing for humans not robots
tammielis
254
26k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Transcript
Tauri とRust とSolidJS で作る Ethereum Address 生成機
What is Tauri? 🪶 軽量 - アプリのサイズがElectron 比で1/16 です 💻
省メモリ - メモリ使用量がElectron 比で 60% 少ないです ⚡️ 起動が速い - 起動もめちゃんこ速いです 🔥 No Chromium - Chromium に依存していません 🌈 並列処理も得意 - バックエンドはRust なのでマルチスレッドも得意だよ 📱 モバイルも対応予定 - iOS やAndroid やWASM にも対応予定です(soon ) 🔑 セキュア - allowlist でAPI ごとに詳細に権限を分けれるので安全です Tauri はRust 製のアプリフレームワークです
What is Ethereum Address Generator ? 好きなEthereum のアドレスを生成するヤツ CPU で計算すると先頭4桁ぐらいのマッチングが限界か
GPU で計算すると先頭8 桁ぐらいであれば現実的な速度で出る 詳細はこちら これを利用したハックとか😈 リテラシーが高い人はアドレス先頭4桁と後部4桁でアドレスが正規のものかチェックする その習性を利用してよくハッキングに使われる ex) 正しいアドレス: 0x abcd 1234000ae1c8e8ac27103e4ff65f42a4e 0000 悪意のあるアドレス: 0x abcd e4a24f56ff4e30172ca8e8c1ea0004321 0000 ` ` ` ` ` ` ` `
Demo 0:00
What is SolidJS ? ⚡ ハイパフォーマンス - UI のスピードとメモリ使用率のベンチで常にトップらしい 💻
React っぽい - JSX で書ける! useState 的な概念もだいたい似てる ㌰㌍️ 簡単 - React のhooks は初心者にはとっつき辛いルールの上で成り立っているが、SolidJS はその辺をカ バーしている感じがする ちなみにTauri は別にSolidJS は マストではない! React, Vue, Vanilla 等々なんでも書ける。 ` `
コードの解説とか(Tauri 側) view full page #[tauri::command(async)] async fn generate_address(start_with: String)
-> Result<(String, String), ()> { ... 省略 let key = Wallet::<SigningKey>::new(&mut rand::thread_rng()); let address = key.address().to_string(); if address.starts_with(start_with.as_str()) { let hex_key = key.signer().to_bytes().encode_hex(); println!("hex_key: {}", hex_key); if let Some(err) = tx.send((format!("{:?}", key.address()), hex_key)).err() { println!("err: {}", err); } break; } ... 省略 let answer = rx.recv().expect("failed to recvs"); Ok(answer) }
コードの解説とか(SolidJS 側) React と違うのは const calcByRust = async (target: string):
Promise<string[]> => { // await invoke(' 関数名') ってやるだけで非同期でRust の関数呼び出せる! // お手軽!!! const result = await invoke('generate_address', {startWith: target}) as string[]; return [result[0],`0x${result[1]}`]; } // `useState` の代わりに `createSignal` を使う const [address, setAddress] = createSignal<string>(''); const [secretKey, setSecretKey] = createSignal<string>(''); // しかも `createSignal` はどこにでも置ける const [address, setAddress] = createSignal<string>(''); const Component = () => { return ( <div> {address()} </div> ); }
仕事で実際に使ってみてわかったRust のいいところ Result 型がいい! あえて冗長に書いてます。 fn get_file(path: Path) -> Result<(),
Error> { // 戻り値がResult 型で、Ok かErr が入ってる let file = File::open(path); let mut contents = String::new(); match file { Ok(f) => f.read_to_string(&mut contents).unwrap(), Err(err) => panic!("panic!!! {:?}", err), } Ok(()) }
Result 型 Result<T,E> は失敗するかもしれない処理の結果を表現する列挙型です。 Result を無視するとwarning が出るのでエラーハンドリングを強制& 可視化できる! Rust には例外がない
エラーハンドリングをサボると可視化される仕組みがすごい let ok_value: Result<usize, &'static str> = Ok(1); match ok_value { Ok(v) => println!("ok value = {}", v), Err(e) => println!("err value = {}", e), }; // どちらか片方の場合だけ処理したいならif let が便利 if let Ok(v) = ok_value { println!("ok value = {}", v); } // Ok の場合は中身を返し、Err の場合はpanic する assert_eq!(ok_value.unwrap(), 1); // unwrap と同じだが、panic 時のエラーメッセージを指定できる assert_eq!(ok_value.expect("panic"), 1);
? でエラーを返す Go が嫌いって言う人がよく言う if err != nil { return
err } を書かなくていいw 間違いなくスマートではある。ちなみにそんなに気にならない派。 ? 演算子 というシンタックスシュガーがあり、エラーをそのまま返せる ` ` fn get_hoge() -> Result<(), Error> { let err_value: Result<usize, &'static str> = Err("error message"); // err がある場合はerr をreturn する, no_err にはOk 時のあたいが入る let no_err = err_value?; // err の場合はここにはもう到達しない } ` ` // こんなやつ if err := get_hoge(); err != nil { return nil, err; }
さっきの冗長なコードを ? で書くとこんな感じ ` ` fn get_file(path: Path) -> Result<(),
Error> { let mut contents = String::new(); File::open(path)?.read_to_string(&mut contents)?; Ok(()) }
コンパイラがめちゃくちゃ賢い なんで君それがやばいってわかるの?ってレベルで丁寧に検査されている 最初はコンパイル通すのが大変だけど、通った時の安心感はやばい 100% バグなく正しく動きそうな気がするw ( 決してそんなことはないけど、それぐらい型付けもしっかりしてる)
学習曲線云々は、間違いなく誇大広告だと思う いざ仕事で書かなきゃいけない状況に追い込まれると、書けるようになる(経験談 コンパイラエラーは、慣れるとすぐに解決できるようになるし、コンパイラのお気持ちもわかってくる Rust 書いたこともないのに、学習コストが〜〜〜とか言ってる エアプおじさん は無視して🆗 あと書く環境が大事 特にこだわりがなければ、VS Code
で rust-analyzer 入れれば神 静的型付け言語やったことがあって、参照とかのスタックとヒープの話がわかってればOK 型推論も効くし最高 ` `
まとめ Rust 最高 Tauri 最高 SolidJS 最高
参考文献 Rust のOption とResult Rust GUI の決定版! Tauri を使ってクロスプラットフォームなデスクトップアプリを作ろう