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
Claude Codeから見る、エンジニアの世界の変容とその先
oikon48
5
3.7k
dbt Semantic Layerで進めるenechainのデータ民主化
akizhou
1
260
Steerable Visual Representations
sansantech
PRO
0
430
Metadata - Section 2: Simple Metadata & Meta Tags
mohab1
0
140
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
3
290
データマネジメント × 法務で作りあげる、 freeeの新しいデータガバナンスへの軌跡
freee
PRO
1
380
Codex を使った障害対応机上演習の実際
orgachem
PRO
0
360
AIをリアル世界に解き放つ 〜M5Stack×AIであなたのアイディアを手の平に〜
hamadakoji
1
530
freeeにおける AI を用いた ブラウザ動作確認の自動化の取り組み
freee
PRO
0
210
ビジネス部門からPOを迎えての半年間の進歩と課題
zozotech
PRO
0
110
reInvent2026stby LT00 "Change your life!"
shinichirokawano
1
220
「Learning Outcome」を書きたくない私が、Learning Outcomeと折り合いをつけるまで
mhlyc
0
240
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
First, design no harm
axbom
PRO
2
1.4k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Paper Plane
katiecoart
PRO
5
54k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
620
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
640
Test your architecture with Archunit
thirion
2
2.5k
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 を使ってクロスプラットフォームなデスクトップアプリを作ろう