01 · 安全中心
先驗證,再信任:OpenVPT 安全中心
02 · 資金
我們能與不能對你的款項做什麼
付款進入 VPTEscrow 合約。只有當三方(買家、賣家、平台)中的兩個不同方簽署同一個分配方案,合約才會放款。OpenVPT 只持有三把金鑰中的一把。
合約擁有者可以
四個管理開關,沒有一個能動用款項。
暫停新的付款
停止新的 fund() 呼叫。合約暫停期間,已付款的訂單仍可正常結算。更換平台簽署金鑰
替換平台的金鑰。它仍然只是三把中的一把:每筆結算都還需要買家或賣家簽名。調整代幣白名單
決定新訂單可使用哪些代幣(MVP 為 USDC)。已付款的訂單不受影響。設定手續費收款地址
決定之後的結算中,平台分得的部分要付到哪個地址。
任何人都不能,包括我們
由合約程式碼強制執行,而不是靠政策。
提領託管中的款項
合約沒有任何提領或清空函式,款項只能透過 settle() 離開合約。只用一把金鑰放款
settle() 需要兩個不同方的有效簽名。同一把金鑰簽兩次會被拒絕。付出超過付款金額的錢
賣家、買家與平台的金額相加必須剛好等於付款金額,而且每筆訂單只能結算一次。棄置合約
合約擁有權無法放棄,只能透過兩步驟轉移,而且必須由新擁有者確認接受。
- 簽名
- {buyer, seller, platform} 中兩個不同方
- 分配
- toSeller + toBuyer + toPlatform == amount
- 平台分得
- toPlatform >= fee * toSeller / amount
- 重放
- 只結算一次,之後即關閉
- 送出者
- 任何人皆可;權限來自簽名
坦白說的限制
- 結算簽名沒有期限,也無法撤回。因此平台對每筆訂單最多只簽一次結算。
- 如果 OpenVPT 停止營運,合約仍會接受由買家與賣家共同簽署的結算。沒有任何一方能單獨放款。
- 合約規定的是平台分得的下限,不是上限。在請你的錢包簽名之前,網站會先檢查分配方案是否與畫面上的訂單一致。
03 · 金鑰
三把金鑰,一把在我們手上:金鑰管理
誰持有哪把金鑰、能簽什麼,以及每個部分目前是已寫進程式碼,還是仍屬於設計。
- 已實作
買家金鑰
用 fund() 付款,並簽署你對結算的同意。OpenVPT 從不會看到或保存你的私鑰或助記詞。- 持有者
- 你的錢包
- 已實作
賣家金鑰
接收款項,也可以共同簽署結算。款項會付到訂單上記錄的錢包地址。- 持有者
- 你的錢包
- 已實作
平台簽署金鑰
共同簽署每筆 CreateOrder,讓金額、手續費與賣家無法被竄改,也共同簽署結算提案。在本機開發環境中,這把金鑰由環境變數讀取。- 持有者
- OpenVPT API
- 設計
放在 KMS / HSM 的平台金鑰
在正式環境中,平台金鑰預定保存在雲端 KMS / HSM 內部並在那裡簽署摘要,私鑰不會被匯出。API 已實作 KMS 簽署器(AWS KMS、secp256k1),並以模擬的 KMS 測試過;正式上線要等主網部署。- 持有者
- 正式環境設計
- 已實作
中繼金鑰
在已有兩個簽名後支付 gas 送出 settle()。它無法修改分配,也無法代任何人簽名:合約檢查的是簽名,不是送出者。- 持有者
- OpenVPT API
- 規劃中
合約擁有者
只持有上面四個管理開關。部署腳本可以把擁有權交給另一個地址,例如多簽保險箱;主網上改用多簽擁有者仍在規劃中。- 持有者
- OpenVPT 管理員
04 · 合約
可自行核對的合約資訊
簽名前,請把這些數值和錢包顯示的內容比對。如果付款或結算訊息的鏈、合約、訂單或金額與畫面上的訂單不符,網站會拒絕把它交給你的錢包。
- name
- "VPTEscrow"
- version
- "1"
- chainId
- 84532
- 網路
- Base Sepolia 測試網
- verifyingContract
0x0000000000000000000000000000000000000000
主網部署尚未完成。此地址屬於Base Sepolia 測試網上的部署,不是正式環境的合約。
你可能會被要求簽署的結構化資料
CreateOrder(bytes32 orderId,address buyer,address seller,address token,uint256 amount,uint256 fee,uint64 expiresAt)- 由平台簽署;由 fund() 檢查,最長 15 分鐘後失效。
Settle(bytes32 orderId,uint256 toSeller,uint256 toBuyer,uint256 toPlatform)- 由買家、賣家與平台其中兩方簽署;由 settle() 檢查。
orderId = 訂單 UUID 的 keccak256
使用技術
Solidity 0.8.24 與 OpenZeppelin v5:EIP712、ECDSA、SafeERC20、ReentrancyGuard、Ownable2Step、Pausable。
05 · 帳號
帳號安全
帳號層面的保護,以及帳號被停權時會發生什麼事。
兩步驟登入(TOTP)
在帳號設定中為登入加上驗證器 App 的動態碼。密鑰加密保存,多次輸入錯誤的驗證碼會被限制嘗試。密碼
至少 12 個字元,只以 Argon2 雜湊保存。多次登入失敗後會暫時封鎖登入。錢包驗證(SIWE)
錢包以 Sign-In with Ethereum(EIP-4361)綁定。每個 nonce 只能用一次,10 分鐘後失效,簽名無法被重放。登入工作階段
每次使用 refresh token 都會換發新的。即時連線會在 token 到期時中斷。被停權的帳號
停權會立即撤銷所有登入工作階段、封鎖所有需登入的請求與即時連線,並暫停該使用者的商品。進行中的訂單不會被凍結:會透過另一方、自動期限與仲裁繼續進行。
06 · 資料
我們保存什麼、如何保存
我們只保存服務運作所需的資料,並保護其中敏感的部分。
| 資料 | 保存方式 |
|---|---|
| 聯絡表單的 IP 位址 | 只保存加鹽的 SHA-256 雜湊,從不保存原始 IP。 |
| 交付給買家的授權金鑰 | 以 AES-256-GCM 加密,並綁定該筆訂單。 |
| 交付的檔案 | 上傳時記錄 SHA-256 雜湊,下載使用短時效的簽章連結。 |
| 兩步驟驗證密鑰 | 以 AES-256-GCM 加密,並綁定該帳號。 |
| 密碼 | 只保存 Argon2 雜湊。 |
| 錢包地址 | 你驗證過的公開地址,從不保存私鑰或助記詞。 |
| 訂單聊天 | 隨訂單保存。含有聯絡方式或站外付款連結的訊息會帶有警示標記。 |
我們從不收集信用卡號:付款是從你自己的錢包以 USDC 支付。
07 · 防詐指南
防詐指南:留在平台上交易
數位商品交易的損失,大多發生在託管之外。五個習慣讓你留在託管的保護裡。
只透過託管付款
不要把 USDC 直接轉到賣家的錢包,也不要理會 OpenVPT 以外的「託管」連結。只有在 OpenVPT 合約上的 fund() 受到保護。
認真看待聯絡方式警示
訂單聊天會標記電子郵件、電話號碼、Telegram、WhatsApp、微信與站外付款連結。被標記的訊息不會被擋下,但把交易移到站外是常見的詐騙第一步。
核對地址
簽名前,把錢包顯示的合約地址與鏈,和本頁的合約資訊比對。只要不一致,就停下來。
絕不分享機密
OpenVPT 絕不會向你索取助記詞、私鑰、密碼或兩步驟驗證碼,不論在聊天、電子郵件或任何地方。
驗收後再確認
在驗收期內檢查交付內容。確認收貨就會放款,已結算的訂單無法重新開啟;如果有問題,請改為提出爭議。
08 · 負責任揭露
發現漏洞?負責任揭露
如果你認為在 OpenVPT 的合約、API 或應用程式中發現了漏洞,請先私下告訴我們。
- 使用聯絡表單並選擇「資安」主題。安全回報會被特別標記給團隊。
- 請附上受影響的元件、重現步驟與你預期的影響。
- 只用你自己的帳號,在本機或測試網路上測試。不要存取他人的資料或款項,也不要進行阻斷服務測試。
- 在公開任何內容之前,請給我們合理的時間修正問題。
目前尚未提供
- 規劃中
漏洞獎勵計畫
規劃中。目前沒有提供獎金。 - 規劃中
第三方稽核
規劃中。託管合約尚未經外部機構稽核;目前由專案本身的自動化測試涵蓋。
本頁說明系統如何建構,不構成法律、財務或投資建議。
09 · 延伸閱讀