Contract-Development
合約可以控制另一個地址嗎?
假設我可以控制地址 A 和 B,並且我正在編寫合約 C。當我在區塊鏈上部署 C 時,它將擁有自己的地址,可以發送和接收乙太幣。但是我想在 C 上有一個方法,當呼叫它時,將乙太從地址 A 發送到地址 B,而不是從 C 發送或發送。
當然,我可以通過將 A 的私鑰儲存在 C 中來做到這一點,但是任何人都可以查看 C,將密鑰複製出來,然後自己使用它。我只想允許C從 A 發送乙太幣,而不是其他任何人。
有沒有辦法讓合約控制另一個地址,而不讓該地址的密鑰公開訪問?
如果 A 是契約,那麼是的。如果不是,那麼您的推理是正確的,因為在這種情況下 C 需要 A 的私鑰,並且任何執行乙太坊客戶端或可以直接從乙太坊區塊鏈讀取的人都可以訪問該私鑰。
如果 A 是合約,您可以在 A 中進行檢查,這樣只有 C 可以發起從 A 到 B 的乙太幣轉移。
在 A 中它可能看起來像這樣:
if (msg.sender != "0xb7cB1C96dB6B22b0D3d9536E0108d062BD488F74"){ return false; } /// Code to transfer ether
您可以通過簡單地將 C 的地址硬編碼到合約 A 中來做到這一點,然後將 C 的地址與
msg.sender
返回呼叫者地址的地址進行比較。由於乙太坊地址是確定性的,基於創建者地址及其 nonce,您甚至可以在部署 C 之前硬編碼和部署 A。
不,除非 A 是智能合約,否則你不能這樣做。