我需要更新已部署合同的价值(我既没有解决方案,也没有将其部署在我的平台上) 我想用合约中的setter更新param并调用getter以查看更改后的值..始终会返回默认值!
这是我使用的代码:
new web3.eth.Contract(HelloWorld.abi,'0x085Ab4C596535FFCE5B520D277f1C01236a656CB').methods.setMessage('Hi').call()
=>结果{}
然后致电:
new web3.eth.Contract(HelloWorld.abi,'0x085Ab4C596535FFCE5B520D277f1C01236a656CB').methods.getMessage().call()
=> 'hello world10'?
我正在使用Truffle控制台:
truffle console --network ropsten
如果我使用一个评论:
HelloWorld.deployed().then(instance => instance.setMessage('new Hi').call())
然后致电:
HelloWorld.deployed().then(instance => instance.getMessage.call()).then(result => message = result)
然后我得到了预期的价值..但我没有部署合同。都不是溶胶。我所拥有的全部ABI
应该异步的呼叫是否出错..或者我需要重新部署合同?
在这个加密货币世界中我还是新手
答案 0 :(得分:1)
欢迎使用您命名的“密码世界”。
我对您的问题有些迷惑,但是您想要的是部署带有初始消息的合同,然后使用setMessage
方法更改消息,整个控制台中。
您做错的第一件事是使用.call()
调用“ setMessage”方法。当您想更改区块链中的某些内容时,您将发送一个交易,并且要发送交易,您需要指定一个帐户。正确的方法应该是.send({ from: "you-account-address" })
。
为了简化一点,让我先展示一些可以使用的行,然后进行解释
$ > truffle console --network ropsten
$ (truffle) > helloInstance = await HelloWorld.deployed()
$ (truffle) > await helloInstance.getMessage()
$ (truffle) > await helloInstance.setMessage("new Hi", { from: "you-account-address" })
因此,基本上,所有调用都是异步的。首先,您调用HelloWorld.deployed()
是因为当您使用松露部署合同时,松露创建了一个名为“ build”的文件夹,在其中保存了包含所有必要数据的合同,这就是为什么您既无需指定地址又无需指定地址的原因。阿比。这与使用web3.js(您需要同时指定两者)完全不同。
然后,您可以只调用方法。
您可以在https://www.trufflesuite.com/docs/truffle/getting-started/interacting-with-your-contracts
中找到更多详细信息