Ví multisig Solana tự khởi tạo

·7 phút đọc·Bởi SSP Editorial Team
Sơ đồ ví multisig Solana tự khởi tạo của SSP trên nền bìa màu xanh navy mang thương hiệu SSP

multisig Solana nơi địa chỉ chính là tập hợp thành viên

Một ví multisig cần hai hoặc nhiều khóa hơn để phê duyệt bất kỳ khoản chi nào. Trên Bitcoin, địa chỉ ví chỉ đơn giản là một bản băm của chính các quy tắc của nó: danh sách khóa công khai và con số "cần bao nhiêu chữ ký". Bạn có thể tính địa chỉ đó trên một tờ giấy nháp, đem chia sẻ và nhận tiền từ rất lâu trước khi có ai chạm đến blockchain.

Solana theo truyền thống không làm được điều này. Như bài viết đầu tiên trong loạt bài này giải thích, các multisig phổ biến của Solana yêu cầu bạn chạy một giao dịch tạo lập với phần ngẫu nhiên do người tạo chọn, trước cả khi địa chỉ ví tồn tại. Chương trình multisig Solana của riêng SSP lại chọn cách tiếp cận của Bitcoin. Nó tự khởi tạo: địa chỉ ví chính là tập hợp thành viên.

Một lưu ý ngay từ đầu: chương trình multisig Solana của SSP là mã nguồn mở (RunOnFlux/Solana-Multisig) và hiện chỉ chạy trên devnet — mạng thử nghiệm của Solana. Việc triển khai lên mainnet phụ thuộc vào một cuộc kiểm toán bảo mật từ bên ngoài.

Hai địa chỉ: multisig và vault

Thiết kế của SSP dùng hai địa chỉ riêng biệt cho mỗi ví multisig.

Địa chỉ multisig giữ các quy tắc — danh sách khóa thành viên đã sắp xếp, ngưỡng (chữ M trong "M-trên-N") và một bộ đếm các giao dịch được đề xuất. Nó thuộc về chương trình của SSP.

Địa chỉ vault giữ tiền — SOL và token SPL. Nó thuộc về System Program tích hợp sẵn của Solana và không lưu dữ liệu riêng. Vault là địa chỉ nạp tiền: địa chỉ bạn đưa cho bất kỳ ai muốn trả tiền cho bạn.

Cả hai đều là một Program Derived Address, hay PDA — một địa chỉ không có khóa riêng, được đặt một cách có chủ ý bên ngoài đường cong mật mã để không khóa nào có thể kiểm soát nó. Chỉ chương trình đã suy ra nó mới có thể cho phép các khoản chuyển từ nó. Chi tiết đó có ý nghĩa ở phần cuối.

Địa chỉ được tính từ các thành viên như thế nào

Đây chính là phần khiến ví tự khởi tạo. Để suy ra địa chỉ multisig, nói một cách đơn giản: lấy nhãn nguyên văn multisig, một bản băm SHA-256 của danh sách thành viên đã sắp xếp, và ngưỡng; rồi đưa những thứ đó, cùng với ID chương trình của SSP, vào hàm suy ra địa chỉ của Solana. Ba chi tiết đáng chú ý.

Các thành viên được sắp xếp và loại trùng trước tiên. Một ví 2-trên-3 với các thành viên A, B, C cho ra đúng cùng một địa chỉ dù bạn liệt kê họ là C, A, B hay B, C, A. Thứ tự không quan trọng; chỉ tập hợp mới quan trọng.

Bản băm đầy đủ 32 byte được dùng — không bao giờ là phiên bản rút ngắn. Cắt ngắn bản băm sẽ mở ra một cuộc tấn công thực sự: kẻ tấn công có thể tìm một tập thành viên khác băm ra cùng giá trị rút ngắn, rồi đăng ký các thành viên của hắn tại địa chỉ của bạn và rút sạch bất kỳ khoản tiền nào bạn đã nạp trước. Bản băm đầy đủ 32 byte khiến cuộc tìm kiếm đó đắt đỏ đến mức thiên văn, nên điều đó không bao giờ xảy ra.

Ngưỡng là một phần của địa chỉ. Một ví 2-trên-3 và một ví 3-trên-3 với đúng cùng các thành viên là những ví khác nhau ở những địa chỉ khác nhau. Các quy tắc được khắc vào danh tính.

Địa chỉ vault sau đó được suy ra từ địa chỉ multisig cộng với một số chỉ mục nhỏ (SSP luôn dùng chỉ mục 0), nên vault cũng được xác định hoàn toàn bởi tập thành viên và ngưỡng.

Kết quả thực tế: bất kỳ ai cũng có thể tính cả hai địa chỉ ngoại tuyến, trước khi gửi đi một giao dịch nào. Bạn có thể chia sẻ địa chỉ vault và nhận tiền vào một ví mà, trên chuỗi, chưa hề tồn tại — đặc tính của Bitcoin, được đưa sang Solana.

Đăng ký không cần cấp phép: bất kỳ ai cũng có thể bật nó lên

Địa chỉ ví tồn tại ngay khoảnh khắc bạn biết các thành viên. Nhưng để chi tiêu từ nó, các quy tắc rốt cuộc cần được ghi lên chuỗi — chương trình gọi bước này là initialize.

Trên hầu hết các multisig của Solana, chỉ một người tạo có đặc quyền mới làm được bước tương đương. Trong chương trình của SSP, việc khởi tạo không cần cấp phép: bất kỳ ai cũng làm được. Không tài khoản người tạo, không chữ ký thành viên, không quyền đặc biệt. Thường thì dịch vụ relay của SSP trả khoản phí thuê nhỏ và bật ví lên, nhưng thực sự ai làm điều đó cũng không quan trọng.

Điều này nghe đáng lo cho đến khi bạn thấy phép kiểm tra an toàn. Khi ai đó khởi tạo ví, chương trình tính lại bản băm SHA-256 của danh sách thành viên mà người đó cung cấp và từ chối giao dịch trừ khi bản băm đó khớp với bản băm được khắc vào địa chỉ. Khung tài khoản của Solana một cách độc lập ràng buộc địa chỉ với cùng bản băm đó. Cùng nhau, hai phép kiểm tra này có nghĩa địa chỉ chính tắc chỉ có thể giữ tập thành viên chính tắc. Không ai có thể đăng ký địa chỉ của bạn với một danh sách thành viên do họ chọn — bản băm sẽ không khớp, và giao dịch thất bại.

Vì sao một người lạ khởi tạo ví của bạn không thể gây hại

Hãy lần qua những gì kẻ tấn công thực sự có thể thử.

Hắn khởi tạo với một tập thành viên khác. Một tập khác băm ra một giá trị khác, suy ra một địa chỉ khác. Kẻ tấn công chỉ đơn giản tạo ra ví của riêng hắn, không liên quan, ở đâu đó khác trên Solana — không có kết nối với vault của bạn, không có quyền đòi với tiền của bạn.

Hắn khởi tạo với tập thành viên của bạn. Bản băm khớp, nên giao dịch thành công — nhưng tất cả những gì hắn làm là trả khoản phí thuê thay cho bạn. Ví giờ được đăng ký đúng với các quy tắc bạn mong đợi, và kẻ tấn công không phải thành viên, nên hắn không thể đề xuất, phê duyệt hay thực thi bất cứ điều gì. Tiền không bao giờ nằm tại chính địa chỉ multisig — nó nằm trong vault, vốn thuộc về hệ thống và không thể bị chiếm đoạt. Dù ai khởi tạo ví và khởi tạo lúc nào, kết quả vẫn là cùng một ví chính tắc với các quy tắc đúng.

Ngưỡng được kiểm tra khi bạn chi, không phải khi bạn đăng ký

Đây là cùng mô hình mà multisig P2WSH của Bitcoin dùng, và đáng nói thẳng: ngưỡng M-trên-N chỉ được thực thi khi tiền di chuyển — không bao giờ khi đăng ký.

Việc đăng ký chỉ ghi lại "đây là các thành viên, đây là ngưỡng". Nó không đòi chữ ký vì nó không thể gây hại gì. Cánh cổng thực sự là luồng chi tiêu, nơi chương trình đếm các phê duyệt và từ chối hành động cho đến khi đủ số thành viên đồng ý. Địa chỉ là bản băm của các quy tắc; bất kỳ ai cũng có thể nạp tiền cho nó; chỉ chữ ký hợp lệ mới có thể chi. Để ôn lại "M-trên-N" nghĩa là gì, xem 2-trên-2 vs 2-trên-3 vs M-trên-N multisig.

Toàn bộ vòng đời, từ đầu đến cuối

Ghép các mảnh lại với nhau, đây là vòng đời của một ví multisig Solana của SSP:

  1. Suy ra. Bất kỳ ai cũng tính các địa chỉ multisig và vault ngoại tuyến từ các thành viên và ngưỡng. Không blockchain, không tốn phí.
  2. Nạp tiền trước. Bất kỳ ai cũng gửi SOL hoặc token tới địa chỉ vault — điều này hoạt động ngay cả trước khi ví được đăng ký.
  3. Khởi tạo. Bất kỳ ai, thường là relay của SSP, gửi giao dịch đăng ký không cần cấp phép. Chương trình xác minh bản băm thành viên và ghi các quy tắc chính tắc lên chuỗi.
  4. Đề xuất. Một thành viên tạo một đề xuất giao dịch, được lưu gọn gàng trên một tài khoản đề xuất chuyên dụng.
  5. Phê duyệt. Mỗi thành viên phê duyệt đề xuất, mỗi người một lần. Các phê duyệt tích lũy trên chuỗi.
  6. Thực thi. Khi các phê duyệt đạt ngưỡng, bất kỳ ai cũng có thể kích hoạt việc thực thi. Chương trình trước tiên đánh dấu đề xuất là đã thực thi — một biện pháp bảo vệ có chủ ý để nó không bao giờ chạy hai lần — rồi thực hiện từng lệnh, với chính vault đóng vai người ký.

Bước cuối cùng đó là nơi địa chỉ vault không khóa phát huy giá trị. Vì vault là một PDA không có khóa riêng, không người nào và không chương trình nào có thể di chuyển tiền của nó bằng cách ký theo cách thông thường. Lối ra duy nhất là chương trình của SSP thực thi một đề xuất đã được phê duyệt, đã đạt ngưỡng — nó "ký" thay cho vault bằng cách trình công thức suy ra vault cho runtime của Solana, một quyền nó có được hoàn toàn vì nó là chủ sở hữu của địa chỉ.

Không người tạo, không quản trị viên, không thay khóa tại chỗ

Hai đặc tính cuối cùng gắn kết thiết kế lại với nhau.

Tập thành viên và ngưỡng là bất biến. Một khi ví đã được khởi tạo, không lệnh nào trong chương trình có thể thay đổi các thành viên hay ngưỡng của nó — không có đường mã nào cho việc đó. Để thay đổi ai kiểm soát một ví — điều mà các hệ thống khác gọi một cách lỏng lẻo là "thay khóa" — bạn tạo một multisig mới với tập thành viên mới và chuyển tiền sang đó. Địa chỉ cũ giữ các quy tắc cũ của nó mãi mãi.

Không có vai trò người tạo và không có khóa quản trị, không bao giờ. Nhiều thiết kế multisig giữ một tài khoản có đặc quyền có thể vượt quyền các thành viên hoặc thay đổi cấu hình. Chương trình của SSP không có cái nào — không gì để xâm phạm, không khóa quản trị để lừa đảo, không người tạo để cưỡng ép. Các thành viên và ngưỡng là toàn bộ câu chuyện.

Sự tối giản đó là một sự đánh đổi có chủ ý: SSP đã xây một nguyên thủy nhỏ, tất định thay vì một nền tảng quản trị giàu tính năng. Bài tiếp theo, Multisig Solana của SSP so với Squads, so sánh thiết kế này một cách trung thực với Squads V4 — multisig Solana trưởng thành, đã được kiểm toán và chiếm ưu thế. Về bối cảnh sản phẩm, thông báo ra mắt hỗ trợ Solana bao quát những gì đã có trong SSP Wallet v1.39.0.

Ý tưởng cốt lõi đủ nhỏ để giữ trong đầu: trên multisig Solana của SSP, địa chỉ ví là một dấu vân tay của chính các quy tắc của nó. Biết các thành viên và ngưỡng, là bạn biết địa chỉ. Không cần gì khác, và không tin gì khác.

Chia sẻ bài viết này

Bài viết liên quan