Solidity

為什麼字元串 getter 返回一個空響應?

  • August 11, 2017

這是我問的另一個問題的序列。

我有以下契約

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;
   }

}

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