Giữ khóa trading và secret của ứng dụng ngoài ổ đĩa của server
erpc worker lưu khóa trading và các secret của ứng dụng trong 1Password, chuỗi khóa của bạn hoặc một keystore mã hóa, và giao chúng cho ứng dụng trong bộ nhớ, không bao giờ ghi ra ổ đĩa của server.Trang này mô tả ERPC CLI
v0.1.0-rc.4, một bản pre-release.Khóa trading đến với ứng dụng như thế nào
Một ứng dụng có ví nhận khóa của nó qua một pipe khi khởi động. Không có
wallet.json, không có .env và không có bản sao nào trên server. erpc không ghi khóa ở dạng chưa mã hóa ra bất kỳ ổ đĩa nào: tệp duy nhất mà nó đặt khóa vào là tệp của keystore, trên máy của bạn, được mã hóa bằng cụm mật khẩu của bạn.- Nơi lưu khóa:
erpc worker key newtạo khóa trong 1Password khierpc loginlưu phiên ở đó, nếu không thì trong chuỗi khóa, nếu không nữa thì trong keystore.erpc.tomlghi lại tham chiếu của khóa và khóa công khai của nó. - Trên server: agent của erpc worker chỉ giữ khóa trong bộ nhớ. Agent tự đặt mình ở trạng thái không thể dump và khóa bộ nhớ của mình lại, rồi giao khóa cho ứng dụng trên một file descriptor; ứng dụng xóa sạch khóa sau khi đọc.
- Sau khi khởi động lại máy, worker trở lại ở trạng thái bị khóa: ứng dụng không chạy cho đến khi
erpc worker startgửi lại khóa. Một agent bị lỗi hoặc bị kill sẽ được systemd khởi động lại và cũng trở lại ở trạng thái bị khóa như vậy. - Một lần cập nhật package không khởi động lại worker.
deployyêu cầuneedrestartđể yên các unit của worker: ở chế độ tự động, nó hoãn các unit này, và khi được hỏi ở terminal, câu trả lời mặc định của nó cho các unit này là không, nên một bản cập nhật bảo mật chạy không người giám sát sẽ không khởi động lại ứng dụng. Khi quy tắc đó không ghi được, lần triển khai sẽ thông báo điều đó và tiếp tục, và khi đó worker chạy mà không có sự bảo vệ này.
Khóa trading được chỉ định bởi
[wallet] và không bởi thứ gì khác, và erpc chỉ đọc nó khi có người ở terminal: không đọc cho công cụ AI, và không đọc bằng tài khoản dịch vụ 1Password. Một dòng [secrets] chỉ đến tham chiếu của [wallet], hoặc một tài khoản keychain: hay keystore: có tên kết thúc bằng .wallet, sẽ bị từ chối. Trong keystore, một mục được lưu dưới dạng khóa sẽ không mở được như một secret. Trong 1Password, và dưới một tài khoản chuỗi khóa có tên khác, không có gì đánh dấu một khóa: một erpc.toml không có [wallet] mà chỉ định một item như vậy dưới [secrets] sẽ khiến item đó bị đọc như một secret.Chọn nơi lưu giá trị
1Password không bắt buộc.
erpc worker key new và erpc worker secret put lưu những gì chúng nhận được vào nơi đầu tiên áp dụng được trong danh sách sau, trừ khi --store chỉ định một nơi (--store 1password --vault <id>, --store keychain, --store keystore):- 1Password, khi
erpc loginlưu phiên ở đó hoặc khi có--vault. - Chuỗi khóa của hệ điều hành, trên các hệ thống mà chuỗi khóa giữ được giá trị sau khi khởi động lại: macOS, Windows, và Linux có keyring desktop trong một phiên đã đăng nhập.
- Keystore của erpc, trên một máy Linux không có keyring như vậy: server headless, WSL, một phiên đăng nhập SSH.
--store keychaintrên máy như vậy sẽ bị từ chối.
Trong chuỗi khóa hoặc keystore, khóa chỉ tồn tại trên đúng một máy đó, không có bản sao và không đồng bộ, và máy khác không thể đọc tham chiếu
keychain: hay keystore:.Mất máy hoặc máy bị xóa sạch nghĩa là ví cũng mất: hãy giữ ít tài sản trong ví, hoặc dùng 1Password, nơi mọi máy đã đăng nhập vào vault đều đọc được. Đăng nhập 1Password bằng
erpc login --store 1password-desktop, hoặc qua op signin ở nơi không có ứng dụng desktop.Một tài khoản dịch vụ 1Password có thể giữ các secret của ứng dụng, nhưng erpc không đọc khóa trading bằng tài khoản đó. Với 1Password, mỗi lần đọc có thể hiện một lời nhắc phê duyệt trong ứng dụng 1Password, và erpc hiển thị một spinner trong khi chờ.
Lưu một secret
Các secret, như token API và khóa RPC, được lưu theo cùng cách, nhưng đến ứng dụng dưới dạng biến môi trường, không qua pipe.
erpc worker secret put <NAME> lưu giá trị, và [secrets] trong erpc.toml chỉ giữ tham chiếu của nó.bash
--generatetạo giá trị: 32 byte ngẫu nhiên, dưới dạng 64 ký tự thập lục phân.--from-accountlưu khóa RPC đầu tiên của tài khoản mà RPC dùng chung chấp nhận. Các khóa được thử theo thứ tự, khóa chính trước tiên, mỗi khóa một lần gọigetHealth, với 8 giây để phản hồi. Khóa nhận phản hồi 401 hoặc 403 sẽ bị từ chối và khóa tiếp theo được thử, và chỉ khóa mà RPC chấp nhận mới được lưu. Lệnh cho biết đó là khóa chính của tài khoản hay một khóa khác (account_keyvới--json).- Cả hai giá trị đều không được in ra, kể cả với
--json. Lần đầu dùng keystore, hoặc khi keystore đang bị khóa, cần có người ở terminal. - Các khóa được thử từ máy này, nên một khóa bị giới hạn theo địa chỉ của server sẽ bị từ chối ở đây dù nó hoạt động ở đó. Khi mọi khóa đều bị từ chối,
--from-accountkhông lưu gì, và bạn tự lưu khóa mình muốn bằng tay, nhập ẩn hoặc truyền qua pipe. Khi không truy vấn được RPC, lệnh không lưu gì vàerpc.tomlgiữ nguyên như trước; hãy chạy lại cùng lệnh đó.
Để lưu một khóa bằng tay:
bash
--replacelưu giá trị mới cho một tên đã được đặt.erpc worker secret listliệt kê các thiết lập secret theo tên và nơi lưu từng thiết lập.- Một thiết lập do đường truyền dữ liệu cung cấp (
GRPC_ENDPOINT,SHREDS_ENDPOINT,SOLANA_SEND_RPC_ENDPOINT) không bao giờ là secret:--grpc,--shredsvà--unlimitedđặt nó.
Một tham chiếu trong
[secrets] hoặc [wallet] có một trong các dạng sau:Keystore
Keystore là thư mục
~/.erpc/keystore (keystore dưới ERPC_HOME khi biến này được đặt). Trên Linux và macOS, các thư mục của nó có quyền 0700 và các tệp có quyền 0600; trên Windows, erpc không tự đặt quyền nào.master.jsongiữ một khóa master ngẫu nhiên 32 byte, được niêm phong bằng một khóa mà PBKDF2-HMAC-SHA256 (600.000 vòng lặp) tạo ra từ cụm mật khẩu của bạn. Mỗi mục giữ một giá trị, được niêm phong bằng ChaCha20-Poly1305 với một khóa riêng.- Cụm mật khẩu: lần
key newhoặcsecret putđầu tiên dùng keystore sẽ yêu cầu bạn chọn nó, nhập hai lần ở terminal, từ 12 ký tự trở lên. erpc chỉ nhận nó từ lời nhắc ẩn đó, không bao giờ từ một đối số, một biến môi trường hay một pipe. - Mở khóa trên Linux: khi cụm mật khẩu đã mở keystore, trạng thái mở khóa được giữ trong keyring bền vững của kernel, trong bộ nhớ, cho đến khi máy khởi động lại, keyring không được dùng quá thời gian hết hạn khi nhàn rỗi (ba ngày, trừ khi hệ thống quy định khác), hoặc cho đến khi chạy
erpc worker secret lock.erpc worker secret unlockhỏi cụm mật khẩu trước và cho biết trạng thái mở khóa kéo dài đến khi nào. Trong một shell được khởi động mà không có lần đăng nhập riêng (sukhông có-,sudo -E), không có trạng thái mở khóa nào được giữ và mỗi lệnh đều hỏi. - Khi không có ai ở terminal, một lệnh cần keystore sẽ dùng trạng thái mở khóa nếu có, và nếu không thì thất bại, kèm tên lệnh
erpc worker secret unlock. Một keystore đã mở khóa giao ra các secret, không giao khóa trading. - Trên macOS và Windows (
--store keystore), không có trạng thái mở khóa nào được giữ: mỗi lệnh cần keystore hỏi cụm mật khẩu một lần, nên cần có terminal.
Những gì keystore bảo vệ và không bảo vệ
- Hãy sao lưu thư mục
keystorevà nhớ cụm mật khẩu. erpc không thể khôi phục cái nào trong hai thứ đó, và nếu không có đủ cả hai, những gì keystore lưu giữ sẽ mất. - Ai có các tệp keystore và cụm mật khẩu thì có khóa. PBKDF2 làm mỗi lần đoán trở nên chậm, nhưng không làm cho một cụm mật khẩu dễ đoán trở nên an toàn.
- Trong khi keystore đang mở khóa, bất kỳ chương trình nào chạy dưới quyền của bạn đều có thể đọc khóa master từ keyring của kernel (một chương trình có phiên không giữ keyring của bạn vẫn có thể liên kết nó vào phiên của mình) và mở mọi mục, kể cả mục của một khóa. Các quy tắc riêng của erpc (chỉ đọc khóa mà
[wallet]chỉ định khi có người ở terminal, không bao giờ đọc cho công cụ AI; không bao giờ mở một khóa lưu trong keystore như một secret) là những gì erpc làm; chúng không ràng buộc các chương trình khác chạy dưới quyền của bạn. Hãy chạyerpc worker secret lockkhi bạn xong việc. - Tên của các mục không bị ẩn, và kích thước của một mục cho thấy giá trị dài bao nhiêu.
- Một tệp bị thay đổi sẽ không mở được; một bản sao cũ hơn của cùng mục đó được đặt lại vào chỗ của nó thì vẫn mở được.
erpc worker secret rmxóa mục keystore của một secret cùng với dòng của nó trongerpc.toml(trừ khi một thiết lập khác của ứng dụng chỉ đến cùng mục đó), và để nguyên giá trị trong 1Password hoặc chuỗi khóa. Lệnh này không xóa sạch dữ liệu trên ổ đĩa, và các bản sao trong bản sao lưu của bạn vẫn còn.- erpc không bao giờ xóa hay ghi đè mục của khóa trading. Để thay một khóa, hãy chuyển tiền đi trước, rồi tự xóa tệp của khóa và
[wallet]. - Một thiết lập không thể có tên
WALLET, dù viết hoa, viết thường hay kết hợp cả hai, trong keystore hoặc chuỗi khóa;--store 1passwordchấp nhận tên này.
Làm việc với khóa trading
Khi erpc kết thúc mà không biết một giao dịch chuyển tiền đã lên chain hay chưa, hãy tra cứu chữ ký của giao dịch đó trước khi gửi lại: lần gửi thứ hai là một giao dịch chuyển tiền thứ hai.






