SlideShare a Scribd company logo
Solanaで始める
Rustプログラミング
Superteam Japan Developer Event
Kouta Ozaki / k-kinzal
Solana 大好きおじさん
Solanaとは
ブロックチェーンの一種
インターネット上で分散したデータベース
+
データベースに書き込むためのスマートコントラクト
データベースとAPIを扱えるPaaSのようなものと捉えると理解しやすい
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
SPL-Styleプログラミング
Solana Program Library
公式で提供されている標準的なプログラム群
基礎としてどう書くか学ぶさいにここで書かれているやり方に則るのが望ましい
SPLに出てくる概念と流れ
Entrypoint
entrypointマクロに関数を登録してRuntimeから呼び出し可能にする
unsafe extern "C"と見慣れない形だがFFIのときの定型句
*mut u8 -> u64
というので書き換え可能なポインタを受け取り、成否を返すシグネチャ
deserializeした値はinputの参照であり、これを書き換えることでチェーンに書き込みを行う
Processor
Entrypointで復号した値を使って手続き的に処理を実行
ここでAccountを書き換えることでチェーンに書き込みを行う
Instruction
1つのプログラムで複数の指示を扱う
今回は手間なのでBorshという形式を使用しているが
SPLでは fn unpack(input: &'a [u8]) -> Result<Self, ProgramError> と独自のdeserializeを実装していることも多い
このあたりはプログラムの要件に合わせてserialize/deserialize形式を選ぶこと
Account
AccountはMeta情報とStateのデータ部に分かれる
lamportsとdataの2箇所が書き換え可能な型となる
(ただしプログラムが所有していないアカウントを変更してもエラーになる)
Account State
Stateは必要な構造に合わせて定義する
今回は手間なのでBorsh形式を利用しているがSPLではSealed/IsInitialized/Packトレイトで独自形式の実装をすることが多い
Stateの利用としてはAccountから取り出したものを変換し、変更内容を書き戻すことでAccountにデータを反映する
考え方としてIoTのプログラミングが近い
低レイヤーでWebアプリケーションに出てこないRustの機能が出てきやすい
このあたりはリソース、パフォーマンスというものがSolanaにおいて重要であり
そこに最適化した書き方をされていると認識すると読みやすくなる
注意点
注意点としてRustのstdなど一部のライブラリは使用できない
これはSolanaの独自環境で実行されるためであり制約の1つになる
こういった面からもIoTプログラミングに近いものがある
まとめ
Solanaは楽しい!
おわり

More Related Content

More from K Kinzal

シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHubシンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
K Kinzal
 
解説: Token Extensions - Solana Developer Hub Online #SolDevHub
解説: Token Extensions - Solana Developer Hub Online #SolDevHub解説: Token Extensions - Solana Developer Hub Online #SolDevHub
解説: Token Extensions - Solana Developer Hub Online #SolDevHub
K Kinzal
 
コントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHub
コントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHubコントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHub
コントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHub
K Kinzal
 
Solana Pay入門 on Solana Developer Hub #1 #SolDevHub
Solana Pay入門 on Solana Developer Hub #1 #SolDevHubSolana Pay入門 on Solana Developer Hub #1 #SolDevHub
Solana Pay入門 on Solana Developer Hub #1 #SolDevHub
K Kinzal
 
AIで始めるRustプログラミング #SolDevHub
AIで始めるRustプログラミング #SolDevHubAIで始めるRustプログラミング #SolDevHub
AIで始めるRustプログラミング #SolDevHub
K Kinzal
 
Rust 入門 in Solana #SolDevHub
Rust 入門 in Solana #SolDevHubRust 入門 in Solana #SolDevHub
Rust 入門 in Solana #SolDevHub
K Kinzal
 
ChatGPTをシステムに組み込むためのプロンプト技法 #chatgptjp
ChatGPTをシステムに組み込むためのプロンプト技法 #chatgptjpChatGPTをシステムに組み込むためのプロンプト技法 #chatgptjp
ChatGPTをシステムに組み込むためのプロンプト技法 #chatgptjp
K Kinzal
 
What is GraphQL
What is GraphQLWhat is GraphQL
What is GraphQL
K Kinzal
 
地層化の力学 書きかけ版
地層化の力学 書きかけ版地層化の力学 書きかけ版
地層化の力学 書きかけ版
K Kinzal
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
 
Scala.jsはじめました?
Scala.jsはじめました?Scala.jsはじめました?
Scala.jsはじめました?
K Kinzal
 
Dgeni with AngularJS Application
Dgeni with AngularJS ApplicationDgeni with AngularJS Application
Dgeni with AngularJS Application
K Kinzal
 
Dgeniで始めるドキュメントジェネレーション
Dgeniで始めるドキュメントジェネレーションDgeniで始めるドキュメントジェネレーション
Dgeniで始めるドキュメントジェネレーション
K Kinzal
 
超音波通信という怪しい技術 In html5minutes 7 #tritonjs
超音波通信という怪しい技術 In html5minutes 7 #tritonjs超音波通信という怪しい技術 In html5minutes 7 #tritonjs
超音波通信という怪しい技術 In html5minutes 7 #tritonjs
K Kinzal
 
PHP+伺かで始める新しい通知の形
PHP+伺かで始める新しい通知の形PHP+伺かで始める新しい通知の形
PHP+伺かで始める新しい通知の形
K Kinzal
 

More from K Kinzal (15)

シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHubシンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
シンプルなNFTをMintするアプリケーション作ってみた - Solana Developer Hub Online 5 #SolDevHub
 
解説: Token Extensions - Solana Developer Hub Online #SolDevHub
解説: Token Extensions - Solana Developer Hub Online #SolDevHub解説: Token Extensions - Solana Developer Hub Online #SolDevHub
解説: Token Extensions - Solana Developer Hub Online #SolDevHub
 
コントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHub
コントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHubコントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHub
コントラクトを作らない ブロックチェーンアプリケーション開発 #SolDevHub
 
Solana Pay入門 on Solana Developer Hub #1 #SolDevHub
Solana Pay入門 on Solana Developer Hub #1 #SolDevHubSolana Pay入門 on Solana Developer Hub #1 #SolDevHub
Solana Pay入門 on Solana Developer Hub #1 #SolDevHub
 
AIで始めるRustプログラミング #SolDevHub
AIで始めるRustプログラミング #SolDevHubAIで始めるRustプログラミング #SolDevHub
AIで始めるRustプログラミング #SolDevHub
 
Rust 入門 in Solana #SolDevHub
Rust 入門 in Solana #SolDevHubRust 入門 in Solana #SolDevHub
Rust 入門 in Solana #SolDevHub
 
ChatGPTをシステムに組み込むためのプロンプト技法 #chatgptjp
ChatGPTをシステムに組み込むためのプロンプト技法 #chatgptjpChatGPTをシステムに組み込むためのプロンプト技法 #chatgptjp
ChatGPTをシステムに組み込むためのプロンプト技法 #chatgptjp
 
What is GraphQL
What is GraphQLWhat is GraphQL
What is GraphQL
 
地層化の力学 書きかけ版
地層化の力学 書きかけ版地層化の力学 書きかけ版
地層化の力学 書きかけ版
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
Scala.jsはじめました?
Scala.jsはじめました?Scala.jsはじめました?
Scala.jsはじめました?
 
Dgeni with AngularJS Application
Dgeni with AngularJS ApplicationDgeni with AngularJS Application
Dgeni with AngularJS Application
 
Dgeniで始めるドキュメントジェネレーション
Dgeniで始めるドキュメントジェネレーションDgeniで始めるドキュメントジェネレーション
Dgeniで始めるドキュメントジェネレーション
 
超音波通信という怪しい技術 In html5minutes 7 #tritonjs
超音波通信という怪しい技術 In html5minutes 7 #tritonjs超音波通信という怪しい技術 In html5minutes 7 #tritonjs
超音波通信という怪しい技術 In html5minutes 7 #tritonjs
 
PHP+伺かで始める新しい通知の形
PHP+伺かで始める新しい通知の形PHP+伺かで始める新しい通知の形
PHP+伺かで始める新しい通知の形
 

Solanaで始めるRustプログラミング - Superteam Japan Developer Event