Về cơ bản tôi đã làm theo các hướng dẫn ở đây làm thế nào để tạo địa chỉ sợi nấm từ 12 từ trong Python
Vì vậy, mã của tôi tương tự:
from bip32utils import BIP32Key
from bip32utils import BIP32_HARDEN
from bip32utils import Base58
import os, bip39
strength_bits = 128
entropy = os.urandom[strength_bits // 8]
wallet_generator = bip39.Mnemonic['english']
mnemonic = wallet_generator.to_mnemonic[entropy]
assert wallet_generator.to_entropy[mnemonic] == entropy # see, bijective!
# Or specify the mnemonic directly if you prefer:
mnemonic = 'aware report movie exile buyer drum poverty supreme gym oppose float elegant'
passphrase = 'test'
seed = bip39.Mnemonic.to_seed[mnemonic, passphrase=passphrase]
key = BIP32Key.fromEntropy[seed]
account_number = 0
i = 0
print "Address: " + key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.Address[]
Và tôi đã xác minh nó bằng cách sử dụng //iancoleman.io/bip39/#english rằng địa chỉ được tạo thực sự là địa chỉ đầu tiên mà trang web này được tạo. Tuy nhiên, tôi cũng muốn có được các cặp khóa công khai và riêng tư bằng cách sử dụng cùng một thư viện này. Ban đầu tôi đã thử:
print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PublicKey[]]
print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PrivateKey[]]
Tuy nhiên, đầu ra của hai cuộc gọi này không giống với các cuộc gọi được cung cấp bởi trang web ở trên cho cùng một địa chỉ.
Vì vậy, câu hỏi của tôi là: cách thích hợp để tôi tạo ra các cặp khóa công khai và riêng tư là gì?
Chỉnh sửa: Để làm rõ, để biết chính xác ghi nhớ và cụm mật khẩu ở trên, trang web tôi đang sử dụng để tham khảo cho tôi biết địa chỉ đầu tiên và bàn phím nên là:
Mặc dù đầu ra của mã Python ở trên là:
Address: 1K6WQtD7bLQ5nQ14GyBV33mBWSbkiRKhQs
Public Key: 62Yi9HBYYagf8CY1Ve2fquHKjBqAA7GFjGUUtkUHbkP5PHzv3W
Private Key: EGHMsAp7nY7Jo9F589zCU227KBLTDhiwRq5vYVvRVZxJNPJn4
Vì vậy, địa chỉ khớp, nhưng không phải là bàn phím.
Ví BIP32 là gì? Việc thực hiện tham chiếu BIP-0039: Mã ghi nhớ để tạo khóa xác định trừu tượng Xem //github.com/bitcoin/bips/blob/master/bip-0039.mediawiki để biết thông số kỹ thuật đầy đủpython-mnemonic
BIP 32 là đề xuất cải tiến Bitcoin đã đưa ra tiêu chuẩn của ví xác định phân cấp [HD] và các khóa mở rộng cho Bitcoin. BIP 32 là một cải tiến đáng kể cho ví bitcoin theo nhiều cách.
Giấy Bip
Cài đặt
Để cài đặt thư viện này và các phụ thuộc của nó sử dụng:
7print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \ .ChildKey[0 + BIP32_HARDEN] \ .ChildKey[account_number + BIP32_HARDEN] \ .ChildKey[0] \ .ChildKey[i] \ .PublicKey[]] print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \ .ChildKey[0 + BIP32_HARDEN] \ .ChildKey[account_number + BIP32_HARDEN] \ .ChildKey[0] \ .ChildKey[i] \ .PrivateKey[]]
Ví dụ sử dụng
Nhập thư viện vào dự án Python thông qua:
from mnemonic import Mnemonic
Khởi tạo thể hiện lớp, chọn từ từ điển có sẵn:
- Anh
- chinese_simplified
- chinese_traditional
- người Pháp
- người Ý
- tiếng Nhật
- Hàn Quốc
- người Tây Ban Nha
mnemo = Mnemonic[language] mnemo = Mnemonic["english"]
Tạo danh sách từ được đưa ra sức mạnh [128 - 256]:
words = mnemo.generate[strength=256]
Đưa ra danh sách từ và cụm mật khẩu tùy chỉnh [ví dụ trống], tạo hạt giống:
seed = mnemo.to_seed[words, passphrase=""]
Đưa ra danh sách từ, tính toán entropy gốc:
entropy = mnemo.to_entropy[words]
Thư viện tiện ích BIP
Giới thiệu
Gói này cho phép tạo ra mnemonics, hạt giống, khóa riêng/công cộng và địa chỉ cho các loại tiền điện tử khác nhau. Đặc biệt:
- MNEMONIC VÀ SEED SVERATION Theo định nghĩa của BIP-0039
- Mã hóa khóa/giải mã riêng tư như được định nghĩa bởi BIP-0038
- Khóa dẫn phái từ được định nghĩa bởi:
- BIP-0032
- SLIP-0010
- BIP32-ED25519 [Khovratovich/Law]
- Đạo hàm của một hệ thống các phím như được định nghĩa bởi:
- BIP-0044
- BIP-0049 [Bitcoin Segwit]
- BIP-0084 [Segwit bản địa Bitcoin]
- BIP-0086 [Bitcoin Taproot]
- CIP-1852
- MNEMONIC VÀ SEED SENTRATION CHO NỀN TẢNG [Hệ sinh thái Polkadot/Kusama]
- Khóa dẫn xuất cho chất nền [Hệ sinh thái Polkadot/Kusama, cùng của Polkadot-JS]
- Chìa khóa và địa chỉ Thế hệ cho Cardano [Byron-Legacy, Byron-Icarus và Shelley, cùng sổ cái và ví Adalite/Yoroi]
- MNEMONIC VÀ SEED SVERATION cho Monero
- Chìa khóa và địa chỉ/thế hệ phụ cho Monero [cùng một ví Monero chính thức]
- Mnemonic và tạo hạt cho Algorand [Algorand 25 từ Mnemonic]
- MNEMONIC VÀ SEED SELEATION như ví điện tử [V1 và V2]
- Khóa dẫn xuất như ví điện [V1 và V2]
Các chức năng được triển khai khác:
- Phân tích con đường dẫn xuất BIP-0032
- Đường dẫn dẫn xuất phát cơ chất
- Tuần tự hóa khóa mở rộng như được định nghĩa bởi SLIP-0032
- Mã hóa/giải mã địa chỉ cho tất cả các đồng tiền được hỗ trợ
- Mã hóa/giải mã wif
- Encode/Decode Base58 và Base58 Monero
- Mã hóa/giải mã SS58
- Mã hóa/giải mã bech32 và bech32m
- Mã hóa/giải mã Bitcoin Cash Bech32
- Nhận địa chỉ tài khoản mã thông báo cho mã thông báo SPL [tức là mã thông báo Solana]
Phụ thuộc gói:
- CBOR2 để mã hóa/giải mã CBOR
- CRCMOD cho tính toán CRC
- pycryptodome cho các chức năng mật mã
- trùng khớp với đường cong Secp256K1
- ECDSA cho các đường cong NIST256P1 và SECP256K1
- ED25519-BLAKE2B cho đường cong ED25519-BLAKE2B
- Pynacl cho đường cong ED25519
- PY-SR25519-Bindings cho đường cong SR25519
Xin lưu ý rằng, đối với thư viện PY-SR25519-Bindings, phải cài đặt Rust được cài đặt.
Tiền hỗ trợ
Tiền BIP được hỗ trợ:
- Mạng Akash
- Algorand
- Avalanche [tất cả 3 chuỗi]
- Axelar
- Giao thức ban nhạc
- Chuỗi binance
- Chuỗi thông minh Binance
- Bitcoin [và mạng thử nghiệm liên quan]
- Bitcoin Cash [và mạng thử nghiệm liên quan]
- Bitcoin Cash Simple Sổ cái Sổ cái [và mạng thử nghiệm liên quan]
- BitcoInsv [và mạng thử nghiệm liên quan]
- Cardano [Byron-Legacy, Byron-Icarus và Shelley]
- Celo
- Certik
- Vũ trụ
- Dash [và mạng thử nghiệm liên quan]
- Dogecoin [và mạng thử nghiệm liên quan]
- ECASH [và mạng thử nghiệm liên quan]
- Elrond
- EOS
- ERGO [và mạng thử nghiệm liên quan]
- Ethereum
- Ethereum Classic
- Fantom Opera
- Filecoin
- Harmony One [Địa chỉ Ethereum và Cosmos]
- Chuỗi Huobi Heco
- Mạng Iris
- Kava
- Kusama [dựa trên BIP44 và ED25519 SLIP-0010, như TrustWallet, nó sẽ không tạo ra cùng một địa chỉ của Polkadot-JS]
- Litecoin [và mạng thử nghiệm liên quan]
- Monero [dựa trên BIP44 và SECP256K1 hoặc ED25519 SLIP-0010, nó sẽ không tạo ra các địa chỉ tương tự của ví chính thức, nhưng nó hỗ trợ thế hệ con]
- Nano
- Giao thức gần
- Neo
- Chuỗi OKEX [Địa chỉ Ethereum và Cosmos]
- Bản thể học
- Thẩm thấu
- Polkadot [dựa trên BIP44 và ED25519 Slip-0010, như TrustWallet, nó sẽ không tạo ra các địa chỉ tương tự của Polkadot-JS]
- Đa giác
- Gợn sóng
- Mạng bí mật
- Solana
- Thuộc về sao
- TERRA
- Tezos
- Mạng Theta
- Tron
- Vechain
- Bờ vực
- ZCASH [và mạng thử nghiệm liên quan]
- Zilliqa
Các đồng tiền được hỗ trợ:
- Acala
- BIFROST
- Chainx
- Phần mềm
- Karura
- Kusama
- Mặt trăng
- Dòng sông trăng
- Mạng phala
- Mạng plasm
- Sora
- Stafi
- Polkadot
- Đồng xu cơ chất chung
Đối với những gì liên quan đến Monero, cũng có thể tạo ra các địa chỉ tương tự của ví chính thức mà không cần sử dụng đạo hàm BIP44.
Rõ ràng, đối với những đồng tiền hỗ trợ các hợp đồng thông minh [ví dụ: Ethereum, Tron, ...], các khóa và địa chỉ được tạo là hợp lệ cho tất cả các mã thông báo liên quan.
Cài đặt gói
Đối với đường cong SECP256K1, có thể sử dụng thư viện Coincurve hoặc ECDSA. Coincurve nhanh hơn nhiều vì đây là một trình bao bọc Python cho thư viện SecP256K1 C, trong khi ECDSA là một triển khai Python thuần túy. Theo mặc định Coincurve sẽ được sử dụng, nhưng có thể vô hiệu hóa nó khi cài đặt.
By default coincurve will be used, but it's possible to
disable it when installing.
Để cài đặt gói:
Cài đặt mặc định [Coincurve sẽ được sử dụng cho SECP256K1]
Sử dụng PIP, từ thư mục này [cục bộ]:
pip install .
Sử dụng PIP, từ PYPI:
pip install bip_utils
Cài đặt thay thế [ECDSA sẽ được sử dụng cho SECP256K1]
Sử dụng setuptools:
0print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \ .ChildKey[0 + BIP32_HARDEN] \ .ChildKey[account_number + BIP32_HARDEN] \ .ChildKey[0] \ .ChildKey[i] \ .PublicKey[]] print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \ .ChildKey[0 + BIP32_HARDEN] \ .ChildKey[account_number + BIP32_HARDEN] \ .ChildKey[0] \ .ChildKey[i] \ .PrivateKey[]]
Sử dụng PIP, từ thư mục này [cục bộ]:
1print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \ .ChildKey[0 + BIP32_HARDEN] \ .ChildKey[account_number + BIP32_HARDEN] \ .ChildKey[0] \ .ChildKey[i] \ .PublicKey[]] print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \ .ChildKey[0 + BIP32_HARDEN] \ .ChildKey[account_number + BIP32_HARDEN] \ .ChildKey[0] \ .ChildKey[i] \ .PrivateKey[]]
Sử dụng PIP, từ PYPI:
2print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \ .ChildKey[0 + BIP32_HARDEN] \ .ChildKey[account_number + BIP32_HARDEN] \ .ChildKey[0] \ .ChildKey[i] \ .PublicKey[]] print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \ .ChildKey[0 + BIP32_HARDEN] \ .ChildKey[account_number + BIP32_HARDEN] \ .ChildKey[0] \ .ChildKey[i] \ .PrivateKey[]]
Cài đặt thay thế [ECDSA sẽ được sử dụng cho SECP256K1] if you are using an Apple M1, please make sure to update coincurve to version 17.0.0 otherwise it won't work.
Sử dụng setuptools:
print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PublicKey[]]
print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PrivateKey[]]
3Lưu ý: Nếu bạn đang sử dụng Apple M1, vui lòng đảm bảo cập nhật Coincurve lên phiên bản 17.0.0 nếu không nó sẽ không hoạt động.
print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PublicKey[]]
print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PrivateKey[]]
4Để chạy các bài kiểm tra:
print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PublicKey[]]
print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PrivateKey[]]
5Hoặc bạn có thể cài đặt TOX:
For quick test:
print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PublicKey[]]
print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PrivateKey[]]
6Và sau đó chỉ cần chạy nó:
- BIP-0039
- Điều này sẽ chạy phạm vi bảo hiểm mã với các phiên bản Python khác nhau và thực hiện phân tích mã và kiểu mã. Để kiểm tra nhanh:
- Mô -đun Mô tả
- Algorand Mnemonic
- BIP-0038
- BIP-0032
- BIP-0044
- Electrum mnemonic
- Monero Mnemonic
- Cardano
- Electrum
- Monero
Cơ chất
Thư viện tiện ích
Tài liệu
Tài liệu thư viện có sẵn tại BIP-UTILS.READTHEDOCS.IO.
Ví dụ mã
Đối với một số ví dụ mã hoàn chỉnh [từ tạo khóa đến tạo khóa], hãy tham khảo thư mục ví dụ.
- Mua cho tôi một ly cà phê
- Bạn biết đấy, tôi là người Ý và tôi thích uống cà phê [đặc biệt là trong khi mã hóa 😃]. Vì vậy, nếu bạn muốn mua cho tôi một cái:
BTC:
print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PublicKey[]]
print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PrivateKey[]]
8ERC20/BEP20: print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PublicKey[]]
print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PrivateKey[]]
9
print "Public Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PublicKey[]]
print "Private Key: " + Base58.check_encode[key.ChildKey[44 + BIP32_HARDEN] \
.ChildKey[0 + BIP32_HARDEN] \
.ChildKey[account_number + BIP32_HARDEN] \
.ChildKey[0] \
.ChildKey[i] \
.PrivateKey[]]
Cảm ơn bạn rất nhiều vì sự hỗ trợ của bạn.