Json-Rpc

使用 Python 乙太坊包部署智能合約時出現數據不足錯誤

  • July 25, 2019

要將合約部署到網路上,我們有不止一種方法,您可以選擇使用霧,也可以使用 rpc 介面。我選擇python中的rpc介面。我像這樣部署契約:

contract_tx = c.create_contract(c.eth_coinbase(), compiled_code, gas = 3000000)

(我使用eth_compilesolidity命令獲取編譯後的程式碼)。但在那之後,當我用它的查詢功能測試契約時,出了點問題。錯誤資訊如下圖所示在此處輸入圖像描述

有人可以幫我糾正嗎?

相比之下,我用mist部署了相同的合約,在獲得地址後,我還使用python中的rpc介面對那個mist-deployed合約進行查詢,這次它可以工作,為什麼?

   p_attach=Popen("\Users\wzy20\Desktop\geth attach",shell=True,stdin=PIPE,stdout=PIPE,stderr=PIPE)
p_attach.communicate(input="admin.setSolc(\"C:\\\Program Files\\\Ethereum\\\solc.exe\")")
c=EthJsonRpc('127.0.0.1',8545)
f=open(r'C:\\Users\\wzy20\\Desktop\\blackjack\\contract.txt','r')
contract_source=f.read()
compiled_code=c.eth_compileSolidity(contract_source)[unicode("blackjack")][unicode("code")]
passwd=getpass.getpass("password:")
print "unlocking and deploying the game contract"
try:
   p_attach=Popen("\Users\wzy20\Desktop\geth attach",shell=True,stdin=PIPE,stdout=PIPE,stderr=PIPE)
   p_attach.communicate(input="personal.unlockAccount(eth.coinbase,\"%s\")"%passwd)
   time.sleep(5)
   contract_tx = c.create_contract(c.eth_coinbase(), compiled_code, gas = 3000000)   
   p_attach=Popen("\Users\wzy20\Desktop\geth attach",shell=True,stdin=PIPE,stdout=PIPE,stderr=PIPE)
   p_attach.communicate(input="personal.lockAccount(eth.coinbase)")   
except:
   print "wrong password"
   os._exit(0)
for x in range(100):
   try:
       contract_addr=c.get_contract_address(contract_tx)   
       print 'contract_address: '+contract_addr
       break
   except:
       x+=1
       print str(x*3) + 's' + "waiting to be mined!"

這可能是因為你還沒有探勘交易,如果你想公開呼叫它的函式,你必須探勘(也就是在區塊鏈中驗證它)它。

檢查您是否有足夠的氣體(嘗試增加氣體限制)-我使用 ethjsonrpc 遇到了同樣的錯誤,但是在我的氣體限制中添加另一個零可以解決此問題。

一般來說,我意識到解決問題的第一步應該是首先增加氣體限制……然後只有在這不起作用時才仔細檢查程式碼。

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