Contract-Development

無法測試 ERC20 合約中的配額和 transferFrom 功能?

  • August 23, 2018

我正在學習 ERC20 契約並堅持使用津貼transferFrom部分。

批准功能批准允許地址(支出者)將代幣從所有者的契約轉移到另一個地址。批准後,地址(消費方)可以呼叫transferFrom將所有者契約中的任何 amnt 發送到其他地址,批准的津貼。

我被卡住的一點是,我該如何測試這個。我嘗試使用測試節點在乙太坊錢包中進行 Remix 和部署,但徒勞無功。

Q1:在混音中,我可以創建所有者的合約,然後呼叫它的函式。但是我如何從另一個地址呼叫合約函式呢?例如,所有者的合約地址:0xca35b7d915458ef540ade6068dfe2f44e8fa733c 支出者地址:0x1111111111111111111111111111111111111111

如何呼叫 (0x111111111111111111111111111111111111111).approve 或 transferFrom 來執行此操作?

Q2:我嘗試在測試節點部署乙太坊錢包,但沒有成功。使用代幣成功創建合約,函式呼叫顯示為 transfer、approval、transferFrom 成功,但沒有顯示從所有者的合約中減少的值或接收者帳戶中收到的值。

任何人都可以請檢查我下面的程式碼並提供幫助嗎?(我無法以正確的格式在此處粘貼整個程式碼,因此提供連結) https://gist.github.com/parthi2929/f2d535253fcb0b9ebccbfb980ff52c1d

以下是我的謙虛建議。我對你的契約做了這些修改。

  1. (line3) 將“介面”更改為“契約”
  2. (第 69 行)到 ‘__allowances$$ _from $$$$ msg.sender $$-= _值;’
  3. 你沒有初始化’__totalSupply’,將’__totalSupply = initialSupply’添加到建構子中。

在進行了這些更改之後,我已將合約部署到 Ropsten 測試網,並且它適用於所有功能。我通過 geth 控制台客戶端測試了這些功能。說明如下。

  1. 變種兄弟=$$ … $$;
  2. var MyContract = web3.eth.contract(abi);
  3. var myContractInstance = MyContract.at(合約地址);
  4. myContractInstance.totalSupply.call();
  5. myContractInstance.balanceOf.call(address);
  6. myContractInstance.transfer(地址,令牌);
  7. myContractInstance.transferFrom(address1, address2, token);
  8. myContractInstance.approve(地址,令牌);
  9. myContractInstance.allowance(address1, address2);

地址需要引號。還需要注意的是,’.call()’ 不會發送交易,因此,即使您可以接收到正確的返回值,區塊鏈狀態也不會改變。

我希望這些能對你的問題有所啟發。

終於發現了一個不在程式碼中的錯誤(感謝 Jeff Liu,已更正),而是在我的工作流程中。

顯然,除了主賬戶之外,我的測試賬戶根本沒有乙太幣。作為新手,我沒有意識到,他們也應該首先擁有乙太幣來執行轉移我的代幣的操作。錢包也沒有就此發出任何警告。

毫無疑問,我首先將幾個測試乙太幣轉移到這些賬戶,然後現在一切正常。

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