Blockchain

如何在乙太坊區塊鏈中找到硬幣/代幣類型的加密支付者?

  • January 2, 2020

我是基於乙太坊的加密概念的新手。我想知道如何根據原始代幣類型來區分傳入的加密貨幣數量?

想像一下我在乙太坊區塊鏈上有一個地址。第一個人向我的地址發送了 0.1 個 Tether,第二個人向同一個地址發送了 0.2 個乙太幣。資源管理器如何檢測來源類型?發送時是否有任何標誌或其他定義令牌/硬幣類型的標誌?

您的理解是直覺的,但實際情況需要顛倒令牌的概念化。

首先,ETH 是一個特例,因為它是網路的原生貨幣。代幣是在網路上執行的合約。它們具有共性,因為它們通常遵循 ERC20 標準。

你的合約會知道它何時收到了 ETH,因為:

  1. 函式必須用payable修飾符顯式標記。
  2. 該功能將用於 msg.value檢查收到的錢。它可以做類似的事情if(msg.value == expectedAmount) { ...

令牌不同。它們是實現使用者地址和余額分類賬以及在賬戶之間轉移資金的方法的合約。這是一個細微的差別,但 Alice 並不完全擁有代幣……代幣合約表明 Alice 的賬戶中有一個代幣。

我想知道如何根據原始代幣類型來區分傳入的加密貨幣數量?

這很棘手,因為事情可以在其他契約中進行,並且沒有簡單的方法來監控它們。順便說一句,有 ERC223 試圖解決這個問題,但它不如 ERC20 常見。可能會出現這樣一種情況,即 Alice 在合約 (T) 中收到了一個令牌 (T),但 Alice 並不知道。

實際上這不是一個大問題。考慮一個現實世界的比較。如果有的話,一個人不會在不告訴那些人的情況下將隨機貨幣存入其他人的銀行賬戶。確實,在極少數情況下,有人會通知收款人(嘿,我在某處為您開了一個編號帳戶,並存了一些錢)-否則,收款人怎麼會知道這項善行呢?

同樣,一個人不會走進甜甜圈店,將隨機貨幣放在隨機的地方,並期望 a) 貨幣被接受並且 b) 收銀員知道。如果有人這樣做,那麼這筆現金很可能會失去。除非滿足這兩個條件,否則人們不會期望甜甜圈。也就是說,以特定方式將**可接受的貨幣提供給商店——通常是給操作收銀機的人,他們會被告知想買什麼。

大多數契約都在類似的基礎上運作,定義了一個或多個可接受的代幣以及下訂單和付款的特定方式。在 ERC20 合約中,有一種稱為approval 和transferFrom 的模式。由於代幣在另一個合約中並且商店將被通知轉移,因此流程是相反的:

  1. 客戶批准商店提取一定數量的代幣。
  2. 客戶下訂單。
  3. 商店合約嘗試transferFrom 以查看資金是否按預期獲得批准。如果可行,則代幣將被移至分類帳中的商店地址。
  4. 如果 transferFrom 成功,則商店傳遞產品。

有人可能會想,“嘿!一家不誠實的商店可能只是將代幣收入囊中”,這部分正確。但是,商店的合約可以並且應該將該過程包裝在原子交易中,以便移動代幣並傳遞產品,或者這些事情都沒有發生。商店合約應開放接受檢查,使用者不應將代幣發送給他們不信任的合約。該協議對什麼是誠實的過程沒有意見。畢竟,這可能是慈善捐贈。

在該流程中,商店在第 2 步中得到通知,並在第 3 步中了解它。使用者(或審核員)應該能夠看到第 3 步和第 4 步是不可分割的。

希望能幫助到你。

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