多年來,大多數關於區塊鏈基礎設施的討論都聚焦在:當一筆交易到達智能合約之後會發生什麼。我們會比較執行速度、gas 效率、安全模型或授權機制。但在閱讀 @NewtonProtocol 背後的工程文檔時,我逐漸意識到,它最重要的架構思路之一,比交易執行要早得多就已經出現了。
它改變了軟件在部署之後如何演進。
這可能聽起來有點不尋常,因爲區塊鏈開發讓我們習慣於認爲業務邏輯應該寫在 Solidity 裏面。一個智能合約被部署後就會變得不可變,而對業務行爲的任何重要變更,通常都會帶來一套熟悉的工程流程:合約升級、代理管理、治理提案、安全審查、迴歸測試、前端更新以及運營協調。
大多數開發者只是把這當作去中心化軟件的正常生命週期來接受。
牛頓(Newton)架構悄然提出了某種不同的方案。
文檔並不再假設應用程序的演進應該發生在合約代碼內部,而是把執行邏輯與授權邏輯分離。智能合約仍負責確定性的執行以及對證明(attestations)的驗證;而企業決策則以 Rego 策略(Rego Policies)的形式被獨立描述。
乍一看,這似乎是一項授權功能。
在花時間閱讀文檔之後,我覺得它更像是一項軟件架構層面的決策。
促使我得出這一結論的細節之一在於:策略有自己的工程生命週期。文檔並不把它們描述成附着在合約上的靜態配置文件。它們是被編寫、測試、仿真、部署,並且獨立於 Solidity 合約進行更新的。
這種區分很重要。
在許多區塊鏈應用中,改變一條業務規則往往意味着要改合約代碼。在牛頓(Newton)中,改變業務規則反而可以意味着發佈一份新的策略(Policy),同時保持執行合約不變。
這些本質上是不同的維護模型。
文檔通過把 Rego 策略描述爲純函數來強化這種分離。它們的輸出只取決於所提供的輸入,包括 Intent、data.params 和 data.wasm。由於策略評估本身不涉及任何隱藏的區塊鏈狀態,開發者甚至可以在完全不與區塊鏈交互之前,就驗證策略行爲是否正確。
這也許是該架構最不常被討論的工程後果之一。
傳統的智能合約開發通常把區塊鏈部署視爲:軟件在現實條件下變得可測試的時刻。牛頓(Newton)將其中一部分驗證提前得更多。由於授權邏輯與執行邏輯分離,策略可以在不依賴合約部署的情況下被獨立評估。
這也解釋了爲什麼文檔引入了專門的策略開發生命週期(Policy Development Lifecycle),而不是把策略創建當作 Solidity 開發的一個擴展。
這種分離一直延伸到策略本身之外。
另一個有趣的細節是:PolicyData 遵循它自己獨立的生命週期。
起初我以爲外部數據檢索只是策略執行的另一部分。文檔明確建議應當把 PolicyData 視爲一個獨立的工程組件。在測試消費該數據的策略之前,會鼓勵開發者驗證每個 PolicyData 模塊都能產生預期的輸出結構。
這條建議進一步揭示了另一個架構邊界。
獲取外部信息並做出授權決策,被視爲兩個不同的工程問題。
PolicyData 模塊會檢索信息。
策略決定這些信息意味着什麼。
分別對每個模塊進行測試,會降低開發者在排查授權規則時投入時間的可能性——因爲真正的問題往往源自外部數據獲取。
這個工作流在很大程度上更像傳統的後端軟件工程,而不是傳統的智能合約開發。
在部署期間又會再次出現同樣的理念。
文檔把仿真(simulation)描述爲生產部署之前的一個明確步驟。牛頓不再把部署視爲驗證的起點,而是鼓勵開發者先仿真策略行爲、驗證預期輸出、驗證 PolicyData,最後再發布將參與授權的組件。
這將軟件維護從被動的調試轉向可控的迭代。
從這個視角看,策略層(Policy Layer)開始更像一個持續演進的應用層,而 Solidity 則相對更穩定,成爲基礎設施。
這是一處微妙但重要的變化。
開發者不再反覆修改負責執行的組件,而是主要演進負責決策的組件。
合約的改動頻率更低。
策略演進得更頻繁。
文檔從未把這一點當作營銷特性來呈現,但其工程層面的影響非常實質。
如果企業行爲可以通過策略(Policies)來演進,而不是通過合約升級來實現,那麼維護長期存在的去中心化應用的成本也會隨之變化。某些未來的修改可能不再需要替換已部署的執行邏輯。迴歸測試會變得更局部化,因爲變更發生在授權規則內部,而不是發生在負責狀態轉換的字節碼內部。運營工作流越來越像持續的軟件維護,而不是反覆的合約演進。
這些都並不能消除審計或周密工程的需求。
它只是改變了大部分工程投入在何處被集中。
用這種方式閱讀文檔,也會改變我對 $NEWT 本身的思考方式。
大多數對話中會把牛頓(Newton)描述爲一種授權協議。這個說法是正確的,但它可能沒有把更廣泛的架構後果講全。該協議還在重新定義:部署之後,應用程序的行爲應當駐留在哪裏。
執行仍然保留在合約內部。
業務演進進入策略層(Policy Layer)。
這種分離最終或許會像對交易授權同樣重要——對軟件維護同樣重要。
由 #Newt 提出的,也許是最有趣的問題,並不是授權在執行之前是否更安全。
關鍵在於:區塊鏈應用是否正在朝着與傳統軟件多年前採用的相同架構方向前進——一個穩定的執行核心,被獨立演進的業務邏輯包圍。
如果這最終成爲持久的模式,那麼 @NewtonProtocol 也許不僅會因改變交易被批准的方式而被人記住,還會因爲在部署很久之後,悄悄改變去中心化軟件的演進方式。
