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 函数不起作用