Вызов функции set() (с web3js) договора о солидности создает новый адрес договора. Зачем?
У меня есть простой контракт солидности с функцией set(). Когда я вызываю функцию set() контракта, результирующая транзакция выполняется по вновь созданному адресу контракта, а не по адресу контракта, в котором находится код солидности.
Если я использую пользовательский интерфейс в Remix, новые транзакции (с обновленными строковыми значениями) связаны с исходным контрактом. Когда я пытаюсь сделать то же самое с web3js, создаются новые контракты.
Я хочу, чтобы все новые вызовы get() с web3js были связаны с первоначальным контрактом.
Код солидности
pragma solidity ^0.4.0;
contract HashRecord {
string public hashValue;
function setHashValue(string newHashValue) public {
hashValue = newHashValue;
}
function getHashValue() public view returns (string) {
return hashValue;
}
}
Код web3js
var Tx = require('ethereumjs-tx')
const Web3 = require('web3')
const web3 = new Web3('https://ropsten.infura.io/v3/d55489f8ea264a1484c293b05ed7eb85')
const abi = [ABI_CODE]
const contractAddress = '0x6c716feb775d5e7b34856edf75048a13fe0c16b0'
const myAccount = '0x59f568176e21EF86017EfED3660625F4397A2ecE'
const privateKey1 = new Buffer('PRIVATE_KEY', 'hex')
hashValue = 'newly updated value'
const contract = new web3.eth.Contract(abi, contractAddress,{
from: myAccount,
web3.eth.getTransactionCount(myAccount, (err, txCount) => {
//Smart contract data
const data = contract.methods.setHashValue(hashValue).encodeABI()
// Build the transaction
const txObject = {
nonce: web3.utils.toHex(txCount),
gasLimit: web3.utils.toHex(1000000),
gasPrice: '5000',
data: data,
from: myAccount,
}
// Sign the transaction
const tx = new Tx(txObject)
tx.sign(privateKey1)
const serializedTx = tx.serialize()
// Broadcast the transaction
web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex')).
on('receipt', console.log)
})
Я думаю, это связано с const contract = new web3.eth.Contract
создание нового контракта. Я не могу найти другой способ сделать это, хотя.
Опять же, я хотел бы, чтобы новые значения сохранялись в переменной hashValue
быть связанным с первоначальным адресом договора const contractAddress = '0x6c716feb775d5e7b34856edf75048a13fe0c16b0'
Спасибо!!!
1 ответ
Добавление to: contractAddress,
в следующем блоке кода
const txObject = {
nonce: web3.utils.toHex(txCount),
// value: web3.utils.toHex(web3.utils.toWei('0.1', 'ether')),
gasLimit: web3.utils.toHex(1000000),
gasPrice: '5000',
// gasPrice: '0x' + estimatedGas,
data: data,
from: myAccount,
to: contractAddress,
решает проблему.
Спасибо @smarx!