1. 自定義合約如何識別交易
這個一致沒有get到面試官的點,對這一樣了解的還是太少了
2. 鏈上多簽
區(qū)塊鏈上的多重簽名(Multisignature,簡稱多簽)是一種安全機制,要求多個密鑰持有者共同簽署交易或操作,才能獲得執(zhí)行權限。這種機制通常用于提高資產(chǎn)管理的安全性,防止單點故障或密鑰被盜引發(fā)的風險。
在鏈上多簽的典型應用包括:
- 資產(chǎn)管理:多人共同管理一個賬戶,所有人必須同意才可進行資金轉(zhuǎn)移。
- 去中心化組織(DAO)治理:多個成員共同簽署和決策操作。
- 合約管理:某個智能合約的關鍵操作需要多個授權人共同簽署才能執(zhí)行。
1. Solana 上的多簽
在 Solana 上,多簽賬戶通過 “Program Derived Addresses (PDA)” 或者 “多簽智能合約” 來實現(xiàn)。Solana 的多簽邏輯并沒有像其他鏈(例如以太坊)那樣直接由協(xié)議層提供,而是通過程序來實現(xiàn),常見的方式包括:
- 自定義多簽合約:開發(fā)者可以創(chuàng)建一個智能合約來管理多簽賬戶和權限。
-
系統(tǒng)級的多簽賬戶:利用 Solana 的
System Program來實現(xiàn)原生的多簽操作。
Solana 的多簽賬戶
Solana 的多簽賬戶是通過系統(tǒng)合約(System Program)創(chuàng)建的賬戶,支持多個簽名人(簽名者)。這些簽名人必須滿足一定的簽名數(shù)量要求(稱為“M-of-N”規(guī)則)才能批準交易。
基本原理:
- 一個多簽賬戶包含
N個授權簽名者,其中每次操作需要至少M個簽名來執(zhí)行交易。 - 使用者可以在創(chuàng)建賬戶時指定這些簽名者及簽名閾值
M。
指令支持:
-
CreateAccount:創(chuàng)建多簽賬戶。 -
Assign:將賬戶權限分配給多簽賬戶。 -
Approve:使用指定的簽名者批準某項交易。
2. 以太坊上的多簽
以太坊多簽最常見的實現(xiàn)是通過智能合約,例如 Gnosis Safe 等,這些合約提供了高度靈活的多簽方案。
Gnosis Safe 多簽
Gnosis Safe 是以太坊和其他 EVM 兼容鏈上使用最廣泛的多簽錢包,允許用戶在不信任其他參與者的情況下共同管理資產(chǎn)。
主要特性:
-
M-of-N簽名:你可以設置N個簽名者,并要求其中的M個簽名者共同簽署才能完成一筆交易。 - 模塊化擴展:Gnosis Safe 支持通過不同模塊擴展功能,比如批量交易、時間鎖、每日交易限額等。
部署和使用:
- 創(chuàng)建錢包:創(chuàng)建時需要指定簽名人和所需的簽名數(shù)量。
- 發(fā)起交易:任何一個簽名者都可以發(fā)起交易提案。
- 多簽審批:其他簽名者通過簽署來批準交易,達到閾值后交易會被執(zhí)行。
3. 多簽的應用場景
- 資產(chǎn)安全:企業(yè)或大型機構使用多簽賬戶來確保只有多方共同批準才能動用資金,這可以防止某個人單獨操作。
- 去中心化治理:DAO 等去中心化組織通過多簽錢包來管理共同資金,任何重大決策需要達成共識后才能執(zhí)行。
- 智能合約管理:在部署關鍵智能合約或進行升級時,使用多簽來確保合約操作的安全性和透明性。
4. 多簽的挑戰(zhàn)與安全考慮
- 簽名者管理:多簽機制需要多個密鑰持有者共同管理賬戶,因此簽名者的選擇和替換需要考慮安全和信任問題。
- 復雜性:多簽賬戶的操作相較單一簽名賬戶復雜,需要協(xié)調(diào)多方簽名,有時可能會導致操作不便。
- 密鑰丟失:如果多個簽名者的密鑰丟失,可能導致資產(chǎn)無法取出,因此需要制定應急措施,如支持恢復或更換簽名者。
- Gas 費用問題:在以太坊等區(qū)塊鏈上,每個簽名者的操作都會產(chǎn)生 Gas 費用,因此多簽交易的成本可能更高。
總結來說,鏈上多簽通過將權限分散到多個簽名者手中,極大提高了資金和關鍵操作的安全性。無論是 Solana 的多簽賬戶,還是以太坊的 Gnosis Safe 等智能合約,都提供了不同的靈活性和安全性來滿足多方管理資產(chǎn)和操作的需求。
3. sol 鏈的 nonce 邏輯
在 Solana 區(qū)塊鏈上,nonce 是一種用于確保交易唯一性和順序性的重要機制。與以太坊等其他區(qū)塊鏈不同,Solana 的賬戶模型和交易管理方式有所不同,因此 nonce 的處理邏輯也有自己的特點。
Solana 的 nonce 主要用于確保交易在較長時間內(nèi)不被重復執(zhí)行,避免雙重花費。具體來說,Solana 采用了一種稱為 "持久 nonce" (durable nonce) 的機制,以應對網(wǎng)絡擁堵或交易延遲時的重放攻擊問題。
Solana Nonce 邏輯
1. 持久 Nonce 賬戶 (Durable Nonce Account)
Solana 的 nonce 是通過一個專門的 nonce 賬戶 來實現(xiàn)的。這是一個特殊的賬戶,存儲了一個不會隨著時間變化的 nonce 值,并且在交易中使用該賬戶可以使交易保持有效,即使它不是在區(qū)塊鏈的下一次 slot 中立即執(zhí)行。
2. Nonce 生成與管理
-
nonce賬戶會生成一個由網(wǎng)絡時間戳或 slot 號派生的nonce值,這個值在賬戶被創(chuàng)建或更新時產(chǎn)生。 - 用戶可以通過交易來更新
nonce賬戶,使其生成一個新的nonce。 - 當你構建交易時,交易中會引用
nonce賬戶的當前nonce值,這個值會確保交易在提交之前的有效性,直到nonce被消耗或更新。
3. 使用 Nonce 的交易構建
當使用 nonce 時,交易需要引用這個特殊的 nonce 賬戶,而不是使用正常的交易順序(即 slot-based)。這使得交易可以在指定的 nonce 被使用或更新之前保持有效,而不會因為延遲而無效。
示例流程:
-
創(chuàng)建一個
Nonce賬戶:用戶首先需要創(chuàng)建一個nonce賬戶,并為其提供少量的 SOL 作為存儲費用。 -
獲取當前
Nonce值:通過對nonce賬戶發(fā)起Nonce指令獲取當前的nonce。 -
構建交易:在交易中引用
nonce賬戶及其值,使交易不依賴于當前的 slot。 -
提交交易:提交時,交易使用
nonce賬戶中的值,確保即使網(wǎng)絡有延遲,交易仍然可以有效。
4. Nonce 消耗和更新
當一筆交易使用了 nonce,該 nonce 就會被消耗,此時必須通過發(fā)起一個 Nonce 更新交易來獲取新的 nonce 值。如果 nonce 沒有被消耗,也可以通過手動更新來生成一個新的 nonce,以確保下一筆交易的唯一性。
Solana Nonce 相關指令
Solana 使用以下指令與 nonce 賬戶交互:
-
NonceInitialize:用于創(chuàng)建并初始化一個nonce賬戶。這個指令設置了賬戶的所有者并分配了所需的存儲。 -
AdvanceNonceAccount:消耗當前nonce并生成一個新的nonce。當一筆交易使用了nonce后,必須調(diào)用這個指令更新賬戶以獲取新的nonce。 -
WithdrawNonceAccount:從nonce賬戶中提取資金,并將賬戶清理。 -
AuthorizeNonceAccount:更改nonce賬戶的授權者,以允許其他賬戶管理nonce賬戶。
小結:
Solana 的 nonce 機制通過 nonce 賬戶來實現(xiàn)交易的可控性和唯一性。相比以太坊的交易 nonce,Solana 的 nonce 允許在較長時間內(nèi)保持交易有效,特別適合網(wǎng)絡擁堵或交易延遲的場景,同時也為開發(fā)者提供了更多的靈活性用于管理交易順序和重放問題。
4. 不換地址升級合約
- 代理合約(Proxy Contract)
- Eternal Storage 模式
- 多合約架構(Module-based Approach)
5. 大文本塊如何加密
使用 AES對稱加密,非對稱加密的效率低