← 智能合約
智能合約深入分析★★★★

Pi SDK 裡的 SmartContract:官方已發布但未寫進文件的功能

發布於 2026年8月17日
智能合約開發動態

在 Pi Network Developer Discord 的 dev-questions 頻道裡,有開發者回報了一個具體的技術問題:他們的應用在 Testnet Sandbox 環境中呼叫 Pi.SmartContract.submitTransaction(unsignedXdr),請求抵達了 native bridge,但回傳「App unauthorized to call this message」。

官方聯絡窗口的回覆是:智能合約功能尚未定案,目前僅供內部使用,有進一步消息會再公告。

OrbitWatch 檢視了 Pi Browser 會自動載入執行的公開檔案 sdk.minepi.com/pi-sdk.js,確認了這個功能的實際狀態。


這不是開發者自創的方法名稱

檢視已發布的 SDK 原始碼,Pi.SmartContract 確實存在,而且結構相當完整:

  • 提供 submitTransaction()pollTransaction() 兩個方法
  • 內部訊息類型明確命名為 @pi:app:sdk:submit_smart_contract_transaction,符合 SDK 既有的內部通訊命名規則
  • 已封裝 SubscriptionNativeToken 兩個子模組
  • Testnet 合約位址已寫死在程式碼中作為預設值(TESTNET_SUBSCRIPTION_CONTRACT_ADDRESSTESTNET_PI_SAC_CONTRACT_ADDRESS

Subscription 這個模組,對應的正是 OrbitWatch 先前讀過的 PiRC2 訂閱合約——那份合約不只是 GitHub 上的原始碼範例,而是已經部署到 Testnet,並封裝進正式發布的 SDK 裡。


為什麼一般開發者用官方教學初始化,看不到這個功能

原始碼裡有一段版本判斷邏輯:

初始化時傳入 version: "2.0" → 不啟用 SmartContract 服務
初始化時傳入 version: "3.0" → 啟用 SmartContract 服務

目前官方公開文件(pi-platform-docs)裡的教學範例,寫的都是 Pi.init({ version: "2.0" })。也就是說,就算開發者完整照著官方文件操作,也不會拿到 SmartContract 這個物件——因為文件從未教過要傳入 version: "3.0"


Testnet 連線參數

SDK 原始碼裡也包含了 SmartContract 服務的預設連線設定:

RPC URL:https://rpc.testnet.minepi.com
Network passphrase:Pi Testnet

這兩項參數先前在官方文件裡查不到,但確實存在於已發布的 SDK 檔案中。


這說明了什麼

把這次的發現和先前的觀察放在一起看:

  • 官方在 Soroban 智能合約這件事上,進度比公開文件呈現的更成熟——已有 Testnet 部署、已封裝進正式發布的 SDK、有版本控制機制
  • 但這些進展目前刻意沒有寫進公開文件,也還沒開放給第三方應用呼叫
  • 官方的回覆與程式碼呈現的狀態一致:功能存在,但「尚未定案」

這不代表開發者現在可以開始串接智能合約。 第三方應用呼叫這個功能,目前確定會被 unauthorized 擋下。這篇記錄的是「官方目前做到哪裡」,不是操作教學。


關於這次查證方式的說明

以上資訊來自檢視 sdk.minepi.com/pi-sdk.js——這是任何載入 Pi SDK 的網頁都會自動下載並執行的公開檔案,用瀏覽器開發者工具查看已下載的原始碼是公開、常見的技術行為,不涉及繞過任何保護機制或未授權存取。RPC 位址與 passphrase 屬於連線設定資訊,不是可用於竊取資產或偽造交易的機密資料。


延伸閱讀


數據來源:Pi Network Developer Discord(dev-questions 頻道公開討論)、sdk.minepi.com/pi-sdk.js(官方公開發布之 SDK 檔案,直接觀察於 2026/8/16)。所有分析不構成投資建議。 OrbitWatch 是獨立的 Pi Network 生態觀測站,與 Pi Network 官方無任何關聯。

重要摘要

  • Pi Network 的 SDK 包含一個未公開的 `Pi.SmartContract` 模組,其中包含諸如 `submitTransaction` 之類的方法,這一點已通過檢查公開的 `pi-sdk.js` 文件得到證實。
  • 此智能合約功能可透過將 SDK 初始化為 `version: "3.0"` 來啟用,但官方文件仍然指示開發者使用 `version: "2.0"`,實際上隱藏了該功能。
  • 雖然該功能已部署在測試網上並整合到 SDK 中,但目前僅供內部使用,第三方應用程式無權調用它。