Solidity 意外响应

Solidity unexpected response

我正在 solidity unexpected response 创建一个实体 class 和一个与 ethers.js 的接口用于投票区块链

这是稳固函数

function addVoter(string memory _email) public returns (string memory) {
  return string('test');

  string memory key = random(_email);
  require(emailExists[key] == false);
  emailExists[key] = true;
  voters[key] = Voter({auth_code:key, authorized:true, candidate_id:0, email:_email, voted:false, voter_address:msg.sender});

  return key;
}

该函数将创建一个新的 "Voter" 结构并为其分配一个随机数。

要测试函数,请在函数的开头放置 return。

return应该是系统响应。

所以我希望得到包含 "test" 字符串的东西。 相反,我得到如下内容:

{ hash: '0x2c9a61d3e903d706ca829d009d4fdd9f4c2972f17e7b0fb5e1c65b9a0f73436d', blockHash: '0x690948bea16c079b1ba33a0c79aa76e987b828e92aebacc477ec6f6a9152416e', blockNumber: 266, transactionIndex: 0, confirmations: 1, from: '0x6002D48140d30B26C0B8A7B77D7Fa11A41a61a9F', gasPrice: BigNumber { _hex: '0x4a817c800' }, gasLimit: BigNumber { _hex: '0x5a53' }, to: '0xaa0E1b62f1de3fdEC6474FFb78714b18b5477e4b', value: BigNumber { _hex: '0x0' }, nonce: 227, data: '0xaca84892000000000000000000000000000000000000...', r: '0xe9aef9a334b805240a4450845a640153292578b122ce487604ed3e4f135f70a3', s: '0x0eddc482b19115e983018e4b9fe1541b325096ff61c581c559cc54f153527ae8', v: 27, creates: null, raw: '0xf8ca81e38504a817c800825a5394aa0e1b62f...', networkId: 0, wait: [Function] }

以上是用ethers.js

构建以下函数的结果
contract.addVoter('some_email').then((par) => {
    registered = par;
    console.log(par);
});

问题是,我们是在代码中做错了什么还是误解了什么?

  1. 在智能合约中,将该值存储在变量中,并在交易确认后使用call获取该值。

  2. 使用event记录值