---
# System prepended metadata

title: Aptos Dev

---

---
type: slide
---
<!-- .slide: data-background="https://upload.cc/i1/2022/10/24/Zacl5b.png"-->
<style>
.small {font-size: 24px;}
.medium {font-size: 30px;}
.hl {color: #fcba03;}
</style>
# Aptos Dev

## @MH

參考資料：
[Aptos Development Doc](https://aptos.dev/)
[Aptos 白皮書](https://github.com/aptos-labs/aptos-core/blob/main/developer-docs-site/static/papers/whitepaper.pdf)
[FTX Aptos Research](https://help.ftx.com/hc/en-us/articles/10138760727956-Aptos-Research-Report)
[0xnz.com](https://0xnz.com/why-move-will-overtake-solidity-as-the-mainstream-programming-language/)

---

# MH 自介 

## Software Architect

- Fintech 公司共同創辦人&技術長
- 製作一付款使用ERC20的電商網站 (2017)
- 交易策略撰寫
- USDT/USDC 放貸腳本

---

# Agenda

- Move語言的起源
- Aptos 跟其他公鏈差異
-- 以資源(resource)為核心
-- 安全
-- 快速
-- 可升級
- Aptos 生態系

---

# Move語言的起源

- 2019 原為facebook(fb)的穩定幣項目Libra
- 2020 Libra項目脫離fb，改由獨立機構運作，改名為 Diem 
- 2022 Diem 還是無法突破監管壓力，賣給了Silvergate

---

# Aptos
# 跟其他公鏈差異

---

# 以資源為核心
# 安全

----

# Move語言

## 繼承 Rust 優秀特性
## 同時又針對區塊鏈的需求作特化

- 強調資源稀缺性(resource scarcity), 保存性（preservation), 和存取控制(access control)
- 每個資源皆有：生命週期(lifetime), 存儲(storage), 和存取控制
- Move Prover: 官方bytecode驗證器，確保型別跟記憶體安全

----

## 資源導向的語言Move

1. 資源定義與控制權限分離
2. 靜態型別 (static typing)
3. 泛型 (generics)
4. 模組系統 (module)
5. 形式化驗證 (formal verification)

----

![](https://i.imgur.com/INbWY2T.png =800x)

```js
    // 'store' ability represent value stored in global storage
    struct Coin<phantom CoinType> has store {
        value: u64,
    }
    // 'key' ability represents the coin for each address (as key)
    struct CoinStore<phantom CoinType> has key {
        coin: Coin<CoinType>
    }
```

<span class='small'>[Reference](https://github.com/move-language/move/tree/main/language/documentation/tutorial)</span>

----

![](https://i.imgur.com/CcgAW0l.png =800x)

mapping(address => uint256)


----

## 資源的屬性

| ability | 描述    |
| ------- | ------ |
| key     | 可索引，此型別可以存在帳號下，可成為Resource |
| store   | 可存儲，可以存儲在 ledger state (gloabl storage)，不只是模組內計算方便而定義 |
| copy   | 可複製 |
| drop   | 可銷毀 |

----

## 資源權限分離

- Solidity 的資源存儲在合約下，透過 Map 形式儲存用戶的資產，若是合約的 owner 私鑰被取得。所有用戶的資產都會被攻擊
- Move 的資源存儲在每個用戶的帳戶下，真正的作到資源的所有權歸屬於用戶。合約的 owner 沒有修改數據的權限

----

## 資產轉移的差異

- Solidity: 資產轉移是透過加減法
（可override把實作任意增減)

![](https://i.imgur.com/uagEYDt.png)

----

## 資產轉移的差異

- Move: 資產轉移是`移出`再`移入`

![](https://i.imgur.com/IDvKNKp.png)

---

## 靜態型別 (static typing)

- 變數宣告時，型別即確認
- 型別不能任意轉換
- 若有誤用，編譯階段便可以發現。不至於在執行階段產生錯誤

---

## 泛型 (generics)

- 強型別
- 不需做轉換

![](https://i.imgur.com/4U9dsXb.png)

---

# 模組系統 (Module)

合約的可組合性
- 包含資料型別(struct)以及操作介面(function)
- Solidity 的可組合性建立在Interface間透過消息傳遞進行的組合 （輪胎規格)
- Move 則是透過 Module 間可升級的組合 (輪胎跟規格)

---

# 形式化驗證 (formal verification)

- Move Prover (MVP) 防止Move語言編寫合約存在錯誤而設計

---

# 快速

----

## 並行處理(Parallel Execution)

![](https://i.imgur.com/1ljlwF2.png =800x)

- Sequential Execution: EVM
- Parallel Execution
    - UTXO: Bitcoin
    - Block STM: Aptos
<!--     - Sui -->

----

# Block STM

- STM: Software transactional memory
    - Detech & manage memory conflict
- Optimistic concurrency control

![](https://i.imgur.com/XBldrX5.png)

無關聯交易 => 同時執行
有關聯交易 => 依序執行


<span class='small'>[Reference](https://blog.chain.link/block-stm/)</span>

---

# Aptos explorer

![](https://i.imgur.com/McIoWht.png)

---

# 可升級性

- 升級會根據upgrade policy (compatible/immutable)
- default policy：compatible
- 升級只會發生在
    - 沒有已存在的 public APIs
    - 沒有破壞原有的 resource storage

Move.toml
```yaml= [3-4]
[package]
name = "MyApp"
version = "0.0.1"
upgrade_policy = "compatible"
...
```

----

# 升級竄改底層邏輯？

- 合約能升級，但是有限制
    - 在 mint 完初始規劃的總數後，會把 mint 權限拿掉 => 無法憑空創建更多資源
- 合約升級只是個工具，不是個目的。需要治理來協作

---

# Q & A

---
