Một chiếc ví không có chủ. Mỗi thành viên giữ khoá của riêng mình trên thiết bị của riêng mình, và tiền chỉ chuyển động khi đã đủ số người ký — hai trong ba bất kỳ, năm trong chín bất kỳ, tuỳ theo điều nhóm đặt ra lúc tạo ví.
Không có gì bên dưới là do chúng tôi bịa ra. Mỗi chuỗi vốn đã có sẵn một cách để nhiều người cùng giữ một địa chỉ, và đây dùng đúng cách đó: P2WSH trên Bitcoin, Safe trên các chuỗi EVM, hệ thống permission của chính tài khoản trên Tron, Squads V4 trên Solana. Các địa chỉ ở những trang tiếp theo là những deployment mà ứng dụng này nói chuyện với.
NÓ HOẠT ĐỘNG THẾ NÀO
Bốn bước, và chỉ bước cuối nằm trên một chuỗi
Một khoản thanh toán là một cuộc trò chuyện trước khi nó là một giao dịch. Ở đây đó không phải phép ẩn dụ: nó diễn ra trong luồng, dưới dạng tin nhắn, và chuỗi chỉ thấy nó khi nhóm đã đồng ý.
1
Nhóm định ra quy tắc
Ai ký, và cần bao nhiêu người trong số đó. Điều này được ghi vào ví ngay lúc ví được tạo, và nó nằm trên chuỗi chứ không nằm trong ứng dụng này.
Quy tắc ở đây về sau không được sửa: một quy tắc khác là một chiếc ví khác, với địa chỉ riêng phải nạp tiền vào và phải chuyển sang. Một số chuỗi sẽ cho phép thay đổi đó còn ứng dụng này thì không làm, nên màn hình nói rõ điều đó trước khi hỏi cú chạm thứ hai.
2
Ai đó đề xuất một khoản thanh toán
Nó đến trong cuộc trò chuyện như một tin nhắn, từ người đã tạo ra nó, nói rõ trả cái gì và cho ai. Chừng nào chưa được ký, nó chỉ là một yêu cầu, không hơn.
Đề xuất được chính nhóm mã hoá đang dùng cho cuộc trò chuyện mang đi, nên máy chủ chở nó mà không đọc được nó.
3
Mỗi người ký ký trên thiết bị của mình
Bạn đọc, chạm một lần, và nó được ký bằng một khoá chưa bao giờ rời khỏi chiếc điện thoại nơi nó sinh ra. Mọi người đều thấy bộ đếm nhích lên.
Không thiết bị nào giữ khoá của người thứ hai, nên không có thiết bị nào mà mất nó là trao chiếc ví cho ai đó.
4
Đến ngưỡng thì nó đi lên chuỗi
Các chữ ký được ghép lại và phát đi. Từ đó trở đi, cái thi hành quy tắc là chuỗi chứ không phải ứng dụng này — và đó chính là lý do đặt quy tắc ở đó.
Nếu ngày mai ứng dụng này biến mất, chiếc ví vẫn là một chiếc ví và quy tắc vẫn còn hiệu lực.
NĂM CHUỖI
Một giao diện thống nhất
Năm chuỗi, bên dưới là bốn cơ chế khác nhau: Bitcoin, Ethereum, BNB Smart Chain, Tron và Solana mỗi chuỗi giữ một địa chỉ chung theo cách riêng của mình. Không điều nào trong đó lên đến màn hình: đề xuất một khoản thanh toán, ký nó và gửi đi đều giống nhau ở cả năm chuỗi.
Bitcoin
P2WSH multisig · BIP 67 · PSBT
Một witness script đọc ra là “m trong n khoá này”, và một địa chỉ chính là hash của nó. Các khoá được sắp theo thứ tự từ điển, nên ai dựng script từ cùng một tập khoá cũng đi đến cùng một địa chỉ, chứ không phải n! địa chỉ khác nhau.
Khoản thanh toán đi dưới dạng một PSBT: một tệp đi vòng qua những người ký để thu chữ ký, và được hoàn tất khi đã đủ.
Script
OP_m <key>… OP_n OP_CHECKMULTISIG
Người ký
tối đa 15, ngưỡng ở bất kỳ đâu trong khoảng đó
Dữ liệu chuỗi
một máy chủ Electrum
Ethereum
Safe · canonical deployment
Hợp đồng mà phần lớn số tiền các nhóm đang giữ trên Ethereum vốn đã nằm trong đó. Một proxy được factory chuẩn tắc tạo ra và trỏ tới singleton chuẩn tắc; chủ sở hữu và ngưỡng được đặt ngay trong lời gọi tạo ra nó.
Không có gì bị fork và không có gì được triển khai lại. Phiên bản được đọc từ hợp đồng thay vì được giả định, bởi một Safe do người khác tạo ra cũng là một Safe mà cái này mở được.
Singleton
0x41675C099F32341bf84BFc5382aF534df5C7461a
Factory
0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67
Gộp lệnh
MultiSend — nhiều lần chuyển, một lần phê duyệt
BNB Smart Chain
Safe · the same addresses
Cùng những hợp đồng ấy ở cùng những địa chỉ ấy. Các deployment của Safe là tất định trên khắp các chuỗi EVM, nên ở đây không có gì riêng của chuỗi để phải học, và cũng không có gì riêng của chuỗi trong mã nguồn.
Đó cũng là lý do một tài khoản trên Ethereum chính là tài khoản đó trên BNB Smart Chain: một loại coin, một khoá, hai chuỗi.
Hợp đồng
giống hệt của Ethereum, ở trên
Loại coin
60 — dùng chung với Ethereum
Tron
Account permissions · no contract
Tron có quy tắc gắn sẵn trong tài khoản. Một permission mang một danh sách khoá, một trọng số cho mỗi khoá và một ngưỡng, và nó được ghi vào chính tài khoản — không có hợp đồng nào phải triển khai và không có hợp đồng nào phải tin.
Trọng số nghĩa là quy tắc có thể là thứ khác ngoài đếm đầu người: một khoá đáng hai phiếu, ba khoá mỗi khoá một phiếu.
Được ghi bởi
AccountPermissionUpdate
Quy tắc
khoá có trọng số, một ngưỡng
Ghi chú
bản cập nhật thay thế cả danh sách chứ không sửa nó
Solana
Squads Protocol V4
Chương trình đa chữ ký mà phần lớn ngân quỹ trên Solana đang dùng. Đề xuất là một tài khoản trên chuỗi: các thành viên phê duyệt đối với nó, và nó thực thi khi số phê duyệt chạm ngưỡng.
Id chương trình quyết định mọi tài khoản của ví được dẫn xuất từ đâu, nên nó được ghim vào deployment đã công bố, và một id khác sẽ bị từ chối chứ không được tin.
Chương trình
SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf
Đề xuất
trên chuỗi, được phê duyệt đối với nó
VÌ SAO DÙNG CÁI CHUẨN
Chiếc ví chỉ mở được ở đây là chiếc ví thuộc về người khác
Có một cách dễ hơn để dựng cái này: một hợp đồng của riêng chúng tôi trên mỗi chuỗi, một định dạng của riêng chúng tôi, một ứng dụng hiểu nó. Sẽ ít mã hơn và sẽ tệ hơn, bởi khi đó tiền của nhóm sẽ phụ thuộc vào việc ứng dụng này còn tồn tại hay không.
Dùng cái chuẩn thì được gì
Mỗi điều dưới đây là hệ quả của lựa chọn ấy, không phải một tính năng được thêm vào.
Được nhiều người kiểm toán hơn chúng tôi. Safe và Squads cộng lại giữ hàng tỷ và đã được soi xét tương xứng. P2WSH và permissions của Tron là quy tắc đồng thuận.
Công cụ khác đọc được. Địa chỉ là một Safe bình thường, một multisig Squads bình thường, một địa chỉ P2WSH bình thường, một permission Tron bình thường — các trình duyệt khối và giao diện của chính các giao thức đó đọc được chúng mà không cần biết ứng dụng này tồn tại.
Không có gì để phải rời bỏ. Không có định dạng riêng nào để bị kẹt trong đó, nên cũng không có một thời điểm sau này mà ra đi phải trả giá.
Quy tắc sống lâu hơn chúng tôi. Ngưỡng do chuỗi thi hành. Ứng dụng này là nơi nhóm bàn về khoản thanh toán, chứ không phải thứ cho phép nó.
AUDITS
Read by people who are not us
This is the argument for using each chain’s own multisig rather than writing one: the reports below exist, they were paid for by somebody else, and they are about exactly the contracts a wallet made here is made of. Every address and every program id on this page was checked against the projects’ own published deployment records while this section was written.
Safe
Ethereum · BNB Smart Chain
2 reports
The four contracts this application talks to are the canonical v1.4.1 deployments — singleton, proxy factory, fallback handler and MultiSend — each one matching the address in Safe’s own deployment registry.
Four reports, three firms and a formal verification. The program id this application pins is the one the program declares for itself in its own source.
There is nothing here for an auditor to be hired for, and that is the point: a multisig on Bitcoin is not a deployed program but a script the network’s own rules evaluate. What is worth reading instead is the specification.
The same again: the rule is a property of the account, enforced by the nodes rather than by code somebody deployed. There is no contract to audit because there is no contract.
Nothing to link, and that is the honest answer
An audit is a reading of a codebase at a commit, not a guarantee about the money in it — and none of these reports is about this application. They are about the contracts underneath it, which is exactly why they are worth more than a report we commissioned about ourselves would be.
NẾU BẠN MANG THEO MỘT CỤM TỪ
Hai mươi tư từ mà bạn đã dùng ở nơi khác
Cụm từ khôi phục không phải một quy ước, mà là vài quy ước, và chúng bất đồng đúng ở một điểm: phần tử nào của đường dẫn dịch chuyển khi bạn hỏi “tài khoản 2”. Quy ước nào cũng đúng cả, và một cụm từ đọc theo quy ước sai sẽ hiển thị số dư bằng không cho số tiền chỉ cách đúng một dòng số học. Vì thế quy ước ở đây không được đoán — nó là một thiết lập, mỗi chuỗi một cái, và nó đưa ra danh sách ứng dụng chứ không phải danh sách đặc tả. Tiền trông như đã mất là tiền nằm ở một đường dẫn mà ứng dụng này không nhìn tới.
Bitcoin
Native SegWitmặc định
m/84'/0'/{account}'/0/0
Electrum
BlueWallet
Sparrow
Exodus
Chỉ số địa chỉ
m/84'/0'/0'/0/{account}
Trust Wallet
Muun
Phoenix
Ethereum & BNB Smart Chain
Chỉ số địa chỉmặc định
m/44'/60'/0'/0/{account}
MetaMask
Rabby
Trust Wallet
Rainbow
Phantom
Tài khoản hardened
m/44'/60'/{account}'/0/0
Ledger Live
Trezor Suite
Exodus
Bốn phần tử
m/44'/60'/0'/{account}
MyEtherWallet (legacy)
Ledger (legacy)
Tron
Chỉ số địa chỉmặc định
m/44'/195'/0'/0/{account}
TronLink
Trust Wallet
Tài khoản hardened
m/44'/195'/{account}'/0/0
Ledger Live
Trezor Suite
Solana
Bốn phần tửmặc định
m/44'/501'/{account}'/0'
Phantom
Solflare
Backpack
Chỉ tài khoản
m/44'/501'/{account}'
Ledger Live
Solflare (hardware)
Legacy
m/501'/{account}'/0/0
Sollet (legacy)
Các bố cục legacy và lồng nhau của Bitcoin cố ý vắng mặt. Bộ dựng địa chỉ chỉ dẫn xuất native SegWit và không gì khác, nên một m/44'/0'/… ở đây sẽ cho ra một bc1… ở chỗ mọi ví khác hiển thị một 1… hoặc một 3… — một chuỗi ký tự trông có vẻ đúng, thuộc về cụm từ của bạn, và không phải địa chỉ mà bất kỳ ai khác đọc ra ở đường dẫn đó. Một lựa chọn lặng lẽ mang nghĩa khác với điều nó nói còn tệ hơn là không có lựa chọn nào.
NẾU BẠN MANG THEO MỘT CHIẾC VÍ
Nếu bạn đến từ nơi khác
Hai lối vào, và chúng đang ở hai giai đoạn khác nhau
Nói thẳng, bởi một trang mô tả điều dự định bằng đúng giọng của điều đã làm xong là một trang bạn không thể dùng để quyết định bất cứ điều gì.
Cụm từ khôi phục của bạn — đã có ngay bây giờ. Hai mươi tư từ, và câu hỏi bạn đã dùng chúng trong chiếc ví nào. Mọi địa chỉ mà bảng phía trên mô tả đều được dẫn xuất ngay trên thiết bị của bạn từ cụm từ đó và không được lưu ở đâu cả; một tài khoản EVM, một tài khoản Tron và một tài khoản Solana là cùng một địa chỉ trên mọi mạng của chuỗi tương ứng.
Một multisig đã tồn tại sẵn — chưa được. Việc đọc thì đã xong: thư viện bên dưới mở một Safe theo địa chỉ và báo cáo chủ sở hữu, ngưỡng và phiên bản của nó; nó đọc thành viên và ngưỡng của một multisig Squads, người ký và trọng số của một permission Tron, và giải mã một witness script Bitcoin trở lại thành địa chỉ, ngưỡng và các khoá. Cái chưa dựng là màn hình dẫn bạn đi qua chuyện đó và gắn nó vào một cuộc trò chuyện. Chừng nào chưa có, trang này sẽ không giả vờ là đã có.
Trong lúc chờ, không gì cản bạn cả: một Safe hay một multisig Squads bạn đã có vẫn chạy tiếp trong giao diện nơi bạn tạo ra nó, bởi nó chưa bao giờ là gì khác ngoài một Safe hay một multisig Squads.
Không có gì trên trang này là lời khuyên tài chính: ví dụ chỉ là ví dụ, và tiền — cùng rủi ro — là của bạn. Tuyên bố miễn trừ.