Json-Rpc
使用 Python 乙太坊包部署智能合約時出現數據不足錯誤
要將合約部署到網路上,我們有不止一種方法,您可以選擇使用霧,也可以使用 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 遇到了同樣的錯誤,但是在我的氣體限制中添加另一個零可以解決此問題。
一般來說,我意識到解決問題的第一步應該是首先增加氣體限制……然後只有在這不起作用時才仔細檢查程式碼。