Symbolは何をなめらかにするのか？

Symbolはいったい何をなめらかにするブロックチェーンなのか、という視点で、Symbolの基本概要、基本機能を中心にあらためてまとめたいと考え、ざっくりだがこの記事を作成した。
自分でもSymbolの概要一覧・基本機能一覧として使っていくイメージである。

## ブロック生成やトランザクションをなめらかにする

Symbolには、後述するアグリゲートトランザクションという機能があり、1つのトランザクション(Tx)の中に 100個 のTxを内包することができる（以降、内部Txと呼ぶことにする）。これにより、1ブロック内で、短時間で多くのTxの処理を実現している。

|項目|値|
|:---:|:---:|
|ブロック生成間隔|30 秒|
|1ブロック内最大tx数|6,000 tx

※アグリゲートトランザクションを含む

以上から、秒間Tx処理数は 200tx/秒 だ、と言うことができそうだが、
アグリゲートTxによる内部Txも含まれているため、一般的な秒間処理速度と比較しがたい面があるので、注意が必要である。

## アカウント/アドレスの運用をなめらかにする
- ネームスペースを使って、アドレスに名前をつけることが可能
- アカウント制限機能で、特定のアドレスからのみTxを受け取れるようにすることが可能
- アカウント制限機能で、特定のトークンの受け取りを自動的に拒否することが可能
→スパムを防止したり、不必要なトランザクションを避けたりできる

## トークノミクスをなめらかにする
- コンセンサスアルゴリズム：PoS+
- ハーベスティングするにはステーキング必要、しかし残高資産はロックされない。そのため、自由に資産を活用可能
　※ただし、ハーベスティング/委任ハーベスティングには、10,000XYM 以上の継続保有が必要
- ノード運営者のみならず、ノードへ委任することでハーベスティングが可能

## トークン(モザイク)をなめらかにする
- ウォレットを使って、ノンプログラミングで独自トークン(モザイク)の発行が誰でも簡単にできる
- ネームスペースを使って、トークン(モザイク)に名前をつけることが可能
→サブネームスペースによって、3層までの階層的な名前の運用ができる
例）
gocchi-token・・・ルートネームスペース
└ gocchi-token.food・・・2層目サブネームスペース
　└ gocchi-token.food.onigiri・・・3層目サブネームスペース
- 供給量の変更可能(発行時に供給量変更可能に設定した場合)
- 期限付きのトークンを発行可能
- 転送できないトークン(モザイク)を発行可能（発行者にのみ送信できる）
- 取り消し(回収)できるトークン(モザイク)を発行可能
- トークン(モザイク)にメタデータを付加可能(変更可能)
- モザイク制限機能によって、該当トークン(モザイク)を送受信できるアカウントを指定可能

## マルチシグをなめらかにする
- ウォレットを使って、ノンプログラミングでマルチシグの利用が可能
→マルチシグアカウントの作成・連署人の追加・連署人の削除など
- 3階層までの「マルチレベル・マルチシグ」機能あり
例）組織内の稟議に活用可能
役員クラス・・・A・B・C 署名
　↑部長クラス・・・D・E・F 署名
　　↑社員クラス・・・G・H・I 署名

## トランザクションをなめらかにする
- Txにメッセージを付加することができる
・平文でのメッセージ送信可能
・暗号化した上でのメッセージ送信可能
・ウォレットを使ってノンプログラミングでメッセージ付加可能
・0XYM 送信でメッセージのみを送ることもできる
・1つのTxにつき 1024KB までメッセージを送ることができる
→このメッセージ領域を活用してデータのフルオンチェーン保存が可能
- アグリゲート・トランザクション機能の利用が可能
→最大 100個 までの内部Txを1つのTxとして一括同時実行が可能
 ①アグリゲートボンデッドトランザクション
 　自分の署名のみでほかの必要な署名が揃っていない状態で、10XYM を担保として(ロックされ=ハッシュロックTx)ネットワークにアナウンスすることができる
  　※署名が揃ったら 10XYM が自動で返却される
  　※期限内に署名が揃わなかった場合、10XYM はネットワークに没収される
 ②アグリゲートコンプリートトランザクション
 　Tx送信時に必要な署名がすべて揃っている場合のアグリゲートTx
 　同一内容のTxを複数人に送信したい場合などに便利（例：NFTの配布）

## クロスチェーンスワップをなめらかにする
ハッシュタイムロックコントラクト(HTLC)相当のシークレットロックTxとシークレットプルーフTxを活用

### <font color="SteelBlue">【シークレットロックトランザクション】</font>
→秘密の値を知っている人のみがTx実行できる・・・秘密の値を含めたTxをアナウンス
→シークレットロックTxを2つのアカウント間で転送し、送信されたモザイクは、有効なシークレットプルーフTxによってロックが解除されるまでロックされたままとなる。
有効期限：デフォルトでアナウンス後 365日

### <font color="SteelBlue">【シークレットプルーフトランザクション】</font>
→シークレットプルーフTxを使って、シークレットロックTxでロックされた資金のロックを解除し、異なるチェーン間のトークン交換を完了する。（モザイクを解除する証拠「proof」を知っていることを証明する必要がある）

```
例） Alice と Bob が異なるチェーン間で、10 alice:tokens と 10 bob:tokens とを交換する場合
　※お互いに、各チェーンのアカウントを所有していることが必要
 
① Alice がランダムなバイト「proof」を生成(10-100バイト以内)
② Alice は「proof」をハッシュ化して「secret」を生成
③ Alice はシークレットロックTx：TX1 を定義
④ Alice は TX1 をプライベートネットワークへアナウンスし、Bob と「secret」を共有
⑤ Bob はチェーンからシークレットを取得し、次のシークレットロックTx：TX2 をパブリックネットワークへアナウンス
⑥ Alice はシークレットプルーフTx：TX3 をパブリックネットワークへアナウンス。このTxは使用している暗号化アルゴリズム、オリジナルの証明とシークレットを定義する。
⑦ TX3 が承認されると「proof」が明かされる。TX2 はアンロックされて Alice はロックされた資産を受け取る。
⑧ Bob は「proof」を手に入れてシークレットプルーフTx：TX4 をプライベートネットワークへアナウンスし、ロックされた資産を TX1 から受け取る。
```
## 世の中をなめらかにするために、Symbolを活用しよう！
![symbol-future.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299944/bea3151f-fea1-0cfa-77fa-1024ee97911d.png)

Symbol自体、このようにたくさんのことをなめらかにしている。
そんなSymbolをうまく活用することで、世の中をなめらかにしていくことができる。

さあ、みんなでSymbolを活用して社会をなめらかにしようではないか！