Solidity

EOA 是如何工作的,它們與智能合約的互動是什麼?

  • February 3, 2021

在網上閱讀和搜尋之後,我仍然對 EOA 的工作原理以及它們與智能合約的關係有很多疑問。我的 dapp 背後的想法是允許使用者進行預訂。如果不滿足某些條件,它還提供退款。我知道我必須在 web3.js 中實現一個組件來發送交易(我決定將其稱為合約管理器)和可靠的智能合約。我對如何開始這個過程有疑問。我的想法是只有一個 EOA(我假設在契約管理器中(?))收集客戶數據(客戶 ID 和付款)並通過交易將其發送到智能合約。

我的問題是:

  • 是否可以只有一個 EOA 收集所有前端請求(客戶 ID + 付款)?這個 id 是客戶的 EOA 嗎?那麼一個EOA(契約經理)收集許多EOA +付款?
  • 每個客戶的付款(由契約經理收取)必須是乙太幣還是真錢?
  • 說我的合約經理(用 web3.js 實現)擁有唯一一個向智能合約發送交易的 EOA 是否正確?

這涉及到乙太坊如何運作的幾個部分。我將嘗試以一種可以理解的方式來解釋它:

1.) 乙太坊有“外部賬戶”(EOA)和“合約賬戶”。EOA 很像普通的銀行賬戶。他們有一個地址(IBAN)和一個餘額(乙太幣)。本質上,EOA 所有者擁有一對公鑰,其中只有他知道私鑰。匹配的公鑰“是”EOA“地址”——“IBAN”。現在,只有 EOA 的所有者可以從該帳戶轉移 Ether(“取款或電匯”)——通過在此過程中使用私鑰。簡而言之,EOA 由其各自所有者“直接擁有和控制”。合約賬戶不“屬於”任何人。它們只是獨立存在並儲存智能合約程式碼。他們也有地址等,但沒有人擁有匹配的私鑰。所以,包含的智能合約邏輯控制合約賬戶。如需更好的解釋,另請參閱:https://github.com/ethereumbook/ethereumbook。如果您使用乙太坊,請考慮購買這本書。每一分錢都值得!

2.)您描述的場景可能有一個智能合約(即合約賬戶,而不是 EOA),它接受來自客戶(即來自 EOA)的付款,然後儲存誰(=哪個地址)付款的列表。在智能合約中,這可以通過例如mapping. 然後可以將支付給智能合約的錢轉發到“企業主”地址(EOA)。

總而言之,對於您的問題:

  • 不,您將有一個接受預訂的契約帳戶
  • 從技術上講,您也可以通過 VISA 進行支付,並將“收據”儲存在鏈中。雖然不建議你!!!您也可以使用自己的預訂令牌。我想用乙太幣支付是這裡最好的方法。無論如何:你為什麼首先考慮在乙太坊中實現這個?
  • 您的 web3.js 只是將交易發送到區塊鏈。我猜你會有一個網路應用程序,它允許客戶進行預訂,然後在區塊鏈上支付(並記錄)。在這裡,客戶將使用他的錢包(例如 Metamask)向您的帳戶付款,而您的後端將監聽一個事件,告訴您預訂和付款已通過。

3.) 根據您想要做什麼,您還可以發布一個(不可替代的)代幣進行預訂。想要“購買”預訂的客戶會購買代幣。有關此類令牌的標準,請參見例如https://ethereum.org/en/developers/docs/standards/tokens/erc-721/

4.) 無論如何,考慮到將個人資訊儲存在區塊鏈上是不好的做法,因為一切都是公開的,之後無法刪除。一種更好的方法可能是您的客戶向您付款(例如以乙太幣),然後您為他發出所謂的“可驗證索賠”,聲明您確認他的預訂和付款。這發生在鏈下,只有一個雜湊儲存在區塊鏈上。一般方法稱為“自我主權身份”(SSI)。如果您想對此進行跟進,請參閱“Sovrin”或“uPort”等系統。https://medium.com/uport/erc1056-erc780-an-open-identity-and-claims-protocol-for-ethereum-aef7207bc744

希望這可以幫助你。

引用自:https://ethereum.stackexchange.com/questions/93082