Вызов функции set () (с web3js) договора о солидности создает новый адрес договора. Зачем? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть простой контракт на солидность с функцией 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 Ответ

0 голосов
/ 09 ноября 2018

Добавление 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!

...