Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TauriとRustとSolidJSで作るEthereum Address生成機 / Ethe...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
670
なぜフラッシュローンという概念が俺達の魂を震えさせるのか / 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
990
新卒Rubyistが1ヶ月で Perl Mongerになった話
serinuntius
0
550
Other Decks in Technology
See All in Technology
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
5
1.3k
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
540
老害フォレンジッカーはAI羊の夢を見るか?
tadmaddad
0
270
20260801_スクフェス大阪
kgnkhkr
2
1.2k
Pavlokで始める電撃駆動開発
sgrsn
0
170
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
200
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
620
MIRU 2026 チュートリアル
keisuke198619
0
860
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.7k
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
cygames
PRO
0
120
AIが自社のTableauを操作する世界へ:Tableau MCP超入門
tbtykk
0
120
モバイルアプリ開発概論2026
recruitengineers
PRO
3
480
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
470
sira's awesome portfolio website redesign presentation
elsirapls
0
320
AI: The stuff that nobody shows you
jnunemaker
PRO
9
890
エンジニアに許された特別な時間の終わり
watany
108
250k
GitHub's CSS Performance
jonrohan
1033
470k
Chasing Engaging Ingredients in Design
codingconduct
0
260
Building Adaptive Systems
keathley
44
3.2k
Being A Developer After 40
akosma
91
590k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Between Models and Reality
mayunak
4
390
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
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 を使ってクロスプラットフォームなデスクトップアプリを作ろう