Solidity
為什麼字元串 getter 返回一個空響應?
這是我問的另一個問題的序列。
我有以下契約
contract User { string publicKey; function setPublicKey(string _publicKey) onlyOwner { publicKey = _publicKey; } function getPublicKey() returns (string _publicKey) { return publicKey; } }
我已將字元串設置為
5030480389847504049639477069961901518251822532055915812015454717740961852942027334498786032153069913846973579859702642411497486328669598344496363306620763652362226170692287240855050713537819594000868803228735504934019483458523068727831434237837325563417285328158635879852481735301070609988900677951635437637299660610442447448957534545817
我
setPublicKey()
用字元串值呼叫了該方法並取回了交易雜湊0x789894f0b5a85cc45e317cb51af27a4d28858e3b64c64ee00118f4543d7a5de7
(它是一條私有鏈)。然後我打電話
getPublicKey()
,但只是得到一個空的答复。為什麼會這樣?這似乎很基本,但我在這裡搜尋並檢查過,沒有找到任何可以回答它的資訊。
編輯:添加
getPublicKey()
功能// Example calling function function getPublicKey(publicAddress, contractAddress, contractName) { // Get the contract code from contracts const input = fs.readFileSync('contracts/' + contractName + '.sol').toString(); const output = solc.compile(input); // The trailing ':' is needed otherwise it crashes const bytecode = output.contracts[':' + contractName].bytecode; const abi = JSON.parse(output.contracts[':' + contractName].interface); const contract = web3.eth.contract(abi).at(contractAddress); contract.getPublicKey.call((err, res) => { if (err) { console.log(err); } else { console.log("Public Key is "); console.log(res); } }) }
這是我的節點應用程序中的一個功能。
抱歉,我之前沒有正確檢查您的程式碼,需要進行一些小的更改。
請檢查下面的程式碼,它對我有用。
pragma solidity ^0.4.8; contract MyTest { string public publicKey; function setPublicKey(string _publicKey) { publicKey = _publicKey; } function getPublicKey() constant returns (string _publicKey) { return publicKey; } }
getter 函式必須是常量才能返回值。這是主要的錯誤。
希望這可以幫助。
這對我有用。只需刪除返回字元串中的 _publicKey 即可。
contract User { string publicKey; function setPublicKey(string _publicKey) { publicKey = _publicKey; } function getPublicKey() returns (string) { return publicKey; } }