Solidity 合约不起作用

Posted

技术标签:

【中文标题】Solidity 合约不起作用【英文标题】:Solidity contract not working 【发布时间】: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););

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于Solidity 合约不起作用的主要内容,如果未能解决你的问题,请参考以下文章

主网在 Remix Solidity 智能合约中部署地址数组作为构造函数参数不起作用

Solidity:使用 waffle + chai 测试恢复的断言不起作用

当结构有两个以上参数时,带有 array.push() 的 Solidity 函数不起作用

web3 从合约调用的函数不起作用

为啥这个智能合约功能在使用 web3 提供程序的 Remix IDE 上不起作用?

简单传输在注入的 Web3 中不起作用