Как обновить развернутый смарт-контракт Ethereum с ABI только через консоль (Truffle) - PullRequest
0 голосов
/ 11 июля 2019

Мне нужно обновить значение в развернутом контракте (у меня нет sol, и он не был развернут на моей платформе) Я хочу обновить параметр с помощью setter в контракте и вызвать getter, чтобы увидеть измененное значение. Всегда возвращается значение по умолчанию!

вот код, который я использую:

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

=> Результат {}

затем позвоните:

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

=> «Привет, мир10» 101

Я использую консоль трюфеля:

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

Это неправильно с моими вызовами, которые должны быть асинхронными ... или мне нужно повторно развернуть контракт?

Я все еще новичок в этом криптом мире ?

1 Ответ

1 голос
/ 11 июля 2019

добро пожаловать в «криптомир», как вы его назвали.

Я немного заблудился в вашем вопросе, но вам нужно развернуть контракт с исходным сообщением, а затем изменить это сообщение, используя метод setMessage, через консоль.

Первое, что вы делаете неправильно, вызывает метод "setMessage", используя .call(). Если вы хотите что-то изменить в цепочке блоков, вы отправите транзакцию, а для отправки транзакции вам необходимо указать учетную запись. Правильный метод должен быть .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», в которой сохраняются контракты со всеми необходимыми данными, поэтому вам не нужно указывать адрес или abi. Это полностью отличается от использования web3.js, в котором вам нужно указать оба.

Тогда вы можете просто вызывать методы.

Более подробную информацию вы можете найти здесь https://www.trufflesuite.com/docs/truffle/getting-started/interacting-with-your-contracts

...