【问题标题】:How to update deployed Ethereum smart contract with ABI only through console (Truffle)如何仅通过控制台(Truffle)使用 ABI 更新已部署的以太坊智能合约
【发布时间】:2019-07-11 13:53:14
【问题描述】:

我需要更新已部署合同的价值(我没有 sol 也没有部署在我的平台上) 我想用合同中的 setter 更新参数并调用 getter 以查看更改的值.. 总是默认值回来!

这是我使用的代码:

new web3.eth.Contract(HelloWorld.abi,'0x085Ab4C596535FFCE5B520D277f1C01236a656CB').methods.setMessage('Hi').call()

=> 结果{}

然后调用:

new web3.eth.Contract(HelloWorld.abi,'0x085Ab4C596535FFCE5B520D277f1C01236a656CB').methods.getMessage().call()

=> '你好 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

我的呼叫应该是异步的..或者我需要重新部署合同是否有问题?

我还是这个加密世界的新手 ????

【问题讨论】:

    标签: solidity smartcontracts truffle go-ethereum


    【解决方案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(),因为当您使用 truffle 部署合约时,truffle 创建了一个名为“build”的文件夹,其中保存了包含所有必要数据的合约,这就是为什么您不需要指定地址和 abi.xml 的原因。这与使用需要同时指定两者的 web3.js 完全不同。

    然后,您可以调用方法。

    您可以在这里找到更多详细信息https://www.trufflesuite.com/docs/truffle/getting-started/interacting-with-your-contracts

    【讨论】:

    • 谢谢 .. 它有很大帮助 .. 我仍然需要使用 ABI(作为 JSON)来做这件事 我无法像你提到的那样部署该合同,因为我没有 sol
    • 我不认为使用';'在这里是正确的..控制台显示错误
    • 你说得对,我删除了 ;谢谢你。 “我没有溶胶”是什么意思?使用命令行,您可以执行我上面显示的操作,在前端,如果您想简化,可以使用一个 truffle-contract 包,它可以简化很多。另外,我建议您在这里查看反应框truffle-box.github.io
    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 2019-04-07
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多