1

我在 remix ethereum 和 web3 中运行我的第一个 Solidity 合约时遇到问题,所以我猜我的合约代码有问题:

pragma solidity ^0.4.0;

contract cntrct 
{
  uint public aaa; 

  function() payable public
  {
    create(msg.value);
  }

  function create(uint _value) internal
  {
    require(_value>0);
    aaa = _value;
  }

  function reader() view public returns(uint)
  {
    return aaa;
  }
} 

我成功地在 remix 和 web3 中部署了合约。但是,在向合约发送交易后,aaa变量仍然是0。我想要这段代码做的是将aaa变量更新为最后存入的金额,以便我稍后可以通过调用该reader函数来读取它。在混音中,它不显示aaa变量的任何输入字段。此外,在 MetaMask 中,发送到合约的交易即使已经完成也保持待处理状态(余额在 remix 和 testRPC 中更新。)

在节点中,我使用以下行来尝试执行该reader函数,但我不确定这是否可行。

contract.methods.reader().call(0, (error, result) => { if(!error){console.log(result);}});
4

2 回答 2

0

除非您需要维护分布在多个地址的余额映射,否则没有理由将发送的以太币存储在状态变量中。总余额保存在合同中,可通过 访问this.balance

此外,后备功能仅限于 2300 gas。您不能在该限制内写入存储(即更新状态变量)。您的变量未更新,因为它失败了。有关更多信息,请参阅此处的第二个要点。

于 2018-03-06T06:29:31.247 回答
0

在solidity合约中,你可以通过调用field作为方法来读取public字段的值。这里,aaa()

我已经在私有网络下部署了雾浏览器,并成功向该合约发送了 10 个以太币。

部署了 10 ehter 的合约

于 2018-03-19T08:55:35.210 回答