# 智能合約規格 * 2022/10/29 updated ## 關於此文件 此文件將說明《Positive Coin 帕斯堤貨幣》2022 版本中需要實作的智能合約。文件內容包含合約的功能需求,以及前端頁面呈現的需求。 ## 概念說明 《Positive Coin》想要處理的議題是關於愛滋認同,因此我們需要設計一個貨幣 -- 以下用 POS 代稱。該貨幣的漲跌、對價關係與市場無關,而是與愛滋認同有關。 為了「根據認同控制這個對價關係」,就無法把貨幣丟到實際上的市場,而是需要自訂一個智能合約處理對價關係。 ## 架構說明 NOTE: 以下`使用者`、`網路爬蟲`、`資料庫` 僅用來說明整體架構,不在這份文件中規範。 ```sequence 使用者->資料庫: 儲存問答結果 網路爬蟲->資料庫: 讀取使用者的回答 Note over 網路爬蟲: 根據回答定義 x 值 (POS 和 ETH 的兌換率) 網路爬蟲->智能合約: 更新 x 值 買幣者->智能合約: 發送 n*x 個 ETH 智能合約->買幣者: 回送 n 個 POS 網頁儀錶板->智能合約: 讀取 x 值 Note over 網頁儀錶板: 顯示 1 POS = x ETH 的對價關係 ``` ## 合約需求 以下是根據上述架構說明所制定的規格。如果有發現安全疑慮的部分,歡迎提出來討論。 * 合約可以部署在 Ethereum(ETH)、Solana(SOL) 或 Tezos(XTZ),xDAI?? 如果允許的話,建議優先選擇手續費低廉的鏈。以下描述假設是 ETH,但仍可替換為 SOL 或 XTZ。 * 合約本身能夠乘載 ETH,以及自行發行的 Positive Coin -- 代號 POS。 * 合約裡維護一個對價關係 x 全域變數,該 x 代表用多少 ETH 可以換得一個 POS -- `1 POS = x ETH` * 合約最重要的事情就是能接收買幣者的錢包地址發送的 ETH 並且回送 POS 給買幣者 ```sequence Note left of 買幣者: 接收 ETH 回 POS 買幣者->智能合約: 發送 n*x 個 ETH Note right of 智能合約: 假設 1 POS = x ETH Note over 智能合約: 計算 (n*x)/x=n (POS) 智能合約->買幣者: 回傳 n 個 POS ``` * 只有合約認可的管理者(紫彤)能夠將 ETH 轉出 ```sequence 其他人->智能合約: 允許存入 ETH 智能合約->其他人: 拒絕轉出 ETH 管理員->智能合約: 存入 ETH 智能合約->管理員: 提取 ETH ``` * POS 不夠的時候,能夠多次發行 -- 轉入合約 ```sequence Note over 智能合約: 目前持有 m POS 管理員->智能合約: 再次發幣 100 POS Note over 智能合約: 目前持有 m+100 POS ``` * 提供公開查詢 x (對價)的 API 介面 ```sequence Web3/Python->智能合約: 查詢 x Note over 智能合約: 目前 x = 0.001 智能合約->Web3/Python: 0.001 ``` * 提供以程式(ex: Python)設定 x (對價)的 API 介面 -- 但必須以管理員的身分 ```sequence Note over 智能合約: 目前 x = 0.001 Web3/Python(管理員)->智能合約: 設定 x = 0.002 Note over 智能合約: 目前 x = 0.002 ``` ## 網頁介面需求 ![](https://i.imgur.com/mWTqdYD.png) * 進入「Buy Positive Coin」頁面後,可以連結錢包。 * 顯示目前 1 POS 和 ETH 的對價關係(即 x 值) * 使用者輸入要購買的 POS 貨幣,自動計算需要支付多少 ETH * 按下 Buy It 觸發交易,與上述的合約互動