Solidity

如何讀取智能合約中收到的任何代幣單元?(乙太幣和其他代幣)

  • November 12, 2018

我想知道如何辨識智能合約中收到的特定代幣的單位。

我正在建構一個可以接收乙太幣或其他乙太坊代幣的智能合約,並以收到的代幣作為交換,將發行另一個代幣。

我可以在智能合約中使用哪個程式碼來辨識收到了多少乙太幣或任何其他代幣?

應該在哪個功能中使用它?

到目前為止給出的答案並沒有解決這個問題。這個想法是你創建一個智能合約。該智能合約可以接收乙太幣或其他代幣。問題是,如何檢查收到了多少特定“類型”的令牌?

一般來說,一個代幣(類似 ERC20)只是一個餘額。當您在錢包中看到代幣時,這是訪問合約中餘額的錢包(因為該代幣的合約已發出指示余額變化的事件)。這意味著,您並沒有真正收到錢包中的代幣。

現在,假設您使用合約創建了 token_1。另一個合約創建了 token_2。如果我將 token_2 發送到您的合約地址,會發生什麼情況是創建 Token_2 的合約的餘額會更新余額並將您的合約地址添加到簿記中。你的合約不會對此做出反應,這就是為什麼通常將代幣發送到錯誤的合約地址會導致資金損失的原因。

您需要監聽另一個合約的事件,以了解特定代幣的發送者和數量,但這不能在智能合約中完成,您需要一個鏈下程式碼來讀取事件。

我希望這會有所幫助。

要知道你收到了多少乙太幣,你可以msg.value照常使用。只是不要忘記包含payable修飾符。

關於代幣,標準是:

  1. 使用者approveAndCall在代幣合約中執行以允許您的合約移動他的代幣。
  2. 在同一個交易中,您的合約receiveApproval 在執行任何其他功能的同時執行並移動代幣(如果需要)。要知道你的合約可以訪問多少代幣,你可以從你的合約中執行tokenContract.allowance(msg.sender, this)

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