Solidity

範例令牌契約不起作用 - “契約不允許執行此交易”

  • February 21, 2018

此處的範例“高級代幣”合約: https ://www.ethereum.org/token

部署在測試網上時不起作用。嘗試向合約發送乙太幣以購買代幣會導致錯誤消息:

合約不允許執行此交易

本教程中沒有任何內容解釋為什麼會發生這種情況。

編輯 所以,我發現了這個問題。我的“應付”函式稱為buy()。我假設合約在發送乙太幣時會自動選擇應付函式,但看起來你需要一個包羅萬象的應付函式,而不是一個指定的函式來接收任意乙太幣支付。一旦我刪除了函式名稱,它就全部起作用了。

**編輯:**雖然以下資訊是問題的一部分,但具體解決方案在上面。

所以盡我所能告訴這裡是問題所在……

  • 在創建時,合約程式碼為所有者帳戶提供初始代幣供應
  • 所以隱含地,合約賬戶的代幣為零
  • buy() 操作預計將從合約賬戶中提取

因此,要讓 buy() 工作,有幾個選項(按照複雜性增加的順序)

  • 將初始供應添加到契約帳戶而不是所有者帳戶。(需要更改合約程式碼)
  • 將一些代幣從所有者那裡轉移到合約賬戶,創建後。(需要 1 次額外交易,無需程式碼)
  • 向合約賬戶發送一些乙太幣並將所有者的代幣賣回合約(需要 1 次額外交易並花費乙太幣)

詳細查看程式碼非常有意義,只是沒有抓住所有者地址的方面,引用為“msg.sender”而不是契約地址,引用為“this”。

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