Ethereum-Wallet-Dapp
嘗試通過乙太坊錢包購買時,代幣合約失敗
在發布這個問題之前,我已經多次搜尋了所有此類相關問題,但找不到合適的解決方案。讓我敘述一下我所做的步驟和我遇到的問題。
我在 Rinkeby 網路中完成了所有這些步驟。
- 我在 Windows 8.1(64 位)上使用了乙太坊錢包(0.9.2)並部署了與(https://www.ethereum.org/token)中提到的相同的合約;使用頁面底部的完整硬幣程式碼。
- 我設定銷售價格。賣出價格為 100000000000000,買入價格為 10000000000000,合約管理頁面顯示的總代幣為 10000000000000000000000。
- 由於我在錢包中有兩個帳戶,因此嘗試將乙太幣(2 個乙太幣)發送到聯繫地址,但收到錯誤消息“似乎此交易將失敗。如果您送出它,它可能會消耗您提供的所有氣體。”
我確保沒有
throw
聲明,因為我使用的是solidity 0.4.16版本。另一個帳戶也有足夠的乙太幣剩餘。在點擊發送按鈕之前,我嘗試使用滑塊中顯示的最大氣體。有沒有其他人對錢包有類似的問題,並以某種方式解決了這個問題?
我知道我可以在評論中添加這些步驟,但這對我可以在適當的地方找到答案的人很有幫助。
- 在部署合約時,要有足夠的乙太幣,因為當有人試圖執行合約的方法時,它會被消耗在 gas 中。
- 將所有權轉移給契約。這可以通過乙太坊錢包的Contracts Admin頁面完成,並選擇功能TransferOwnership並執行它
- 如果仍然失敗,將一些代幣轉移到合約地址。
- 現在,允許其他人通過訪問合約選項卡來查看乙太坊錢包中的合約,然後點擊 Watch Contract。他們將需要合約地址和 ABI JSON 介面程式碼。一旦他們將這個合約添加到他們的錢包中,他們將有類似合約管理頁面中顯示的界面,並且他們可以通過執行
buy
合約的功能來購買代幣,他們可以傳遞參數來獲取他們的等價代幣帳戶。- 請記住在部署合約時設置價格,以便他們獲得相關數量的代幣。
實際上有幾件事你不應該忘記:
- 將乙太幣發送到上述代幣合約肯定會失敗,因為它沒有實現應付回退功能。稍後您應該呼叫應付
buy()
函式,但在此之前,- 確保代幣合約地址有一些代幣。如果沒有,那麼沒有人能夠購買代幣,因為每次購買都不是來自代幣的所有者,而是來自代幣合約地址 (
this
)。如果您查看連結的原始碼,您可以
Transfer(this, msg.sender, amount)
在購買功能中看到該行。這意味著合約試圖從自己的餘額中發送代幣,但在創建代幣合約時,只有代幣合約的所有者擁有代幣,而不是合約本身。因此,只需將一些代幣從合約的所有者發送到代幣合約本身!