【问题标题】:Solidity contract not workingSolidity 合约不起作用
【发布时间】:2018-08-13 20:09:28
【问题描述】:

我在 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);}});

【问题讨论】:

    标签: solidity web3js remix


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2022-08-20
        • 1970-01-01
        • 1970-01-01
        • 2021-06-26
        • 2018-02-04
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多