Wallet
錢包如何從地址獲取公鑰?
我的印像是地址只是一個帶有前綴的編碼、散列的公鑰,並且只有公鑰在區塊鏈(而不是地址)上用於交易。但是如果公鑰經過雜湊處理,錢包如何從地址中獲取公鑰來創建交易呢?
我做了一些研究,證實了我的懷疑,即這是不可能的。所以我想知道,如果錢包沒有公鑰,它如何創建交易?
編輯:我的意思是試圖發送 10 BTC 的人如何獲得接收者的公鑰,以便從接收者向公鑰支付地址。我完全理解私鑰和公鑰對的加密元素以及比特幣是如何使用的,而不是接收者的公鑰是如何從地址中派生的。我所看到的是(最常見的)交易是支付給公鑰雜湊(P2PKH),而不是我最初認為的所有 txns 都是支付給公鑰(P2PK)的。
簡單地說,你沒有。地址是帶有校驗和和前綴 (1) 的公鑰的散列。地址不僅僅是公鑰的原因是未知的,你必須問 satoshi,但它可能會使它們更短。BTC 確實有 P2PK,但它不常用,因為公鑰比地址長得多。希望這可以幫助!
也許你對“錢包”這個片語感到困惑,因為只有接收者的錢包需要知道公鑰,而他擁有它,因為他首先創建了地址。
在下文中,我將假設一個標準的 1… 地址(支付給 pubkey 雜湊)。這不是唯一的地址類型,但類似的反應適用於每種類型的地址。
在正常的工作流程中,涉及兩個錢包。我們稱他們為 Suzy(發送者)和 Rudy(接收者)。
- Rudy 生成一個私鑰 x。
- Rudy 計算對應於 x 的公鑰,稱為 P。
- Rudy 通過散列計算與 P 對應的地址 A。
- Rudy 將 A 發送給 Suzy(通過親自發送,或將其放在網站上,或將其顯示為 QR 碼,或……)。
- Suzy 構造了一個包含發送給 A 的輸出的事務。Suzy 不知道公鑰 A 對應於什麼,但也不在乎。這個地址真正編碼了“需要一個公鑰和一個對該密鑰有效的簽名,並且公鑰的散列需要是 A”。
- Suzy 在網路上廣播交易,礦工將在其中將其放入一個區塊中,從而完成轉移。
- 現在,當 Rudy 想要花掉從 Suzy 那裡收到的硬幣時,他需要滿足 Suzy 在交易中提出的條件。這需要公鑰 P(因為這是唯一已知的散列為 A 的公鑰),以及使用私鑰 x 創建的簽名(這是唯一可以構造對 P 有效的簽名的私鑰)。值得慶幸的是,魯迪同時擁有 x 和 P,因為他是創造它們的人。