У меня следующий контракт, и я просто хочу обновить его значения переменных состояния, т.е. totalSupply. Но когда я пытаюсь выполнить эту задачу через код JavaScript (приведенный ниже), вызывая его функцию, т.е. setTotalSupply, значения tts не обновляются.
pragma solidity 0.5.1;
contract MyContract {
uint256 totalSupply;
mapping(address => uint256) public balances;
address owner;
constructor(address payable _wallet) public {
totalSupply = 10;
owner = _wallet;
}
function () external payable{
buyToken();
}
function buyToken() public payable {
require(totalSupply >= (msg.value/1000000000000000000)*2);
balances[msg.sender] += (msg.value/1000000000000000000)*2;
// wallet.tranfer(msg.value);
totalSupply -=(msg.value/1000000000000000000)*2;
}
function getTotalSupply()public view returns (uint256 ){
return totalSupply;
}
function setTotalSupply(uint256 newSupply)public {
require(msg.sender == owner && totalSupply<1);
totalSupply = newSupply;
}
function getBalance() public view returns (uint) {
return address(this).balance;
}
}
Я просто хочу обновить его значение, т.е. общее предложение. ниже мой код JavaScript для вышеуказанной цели
var Tx = require('ethereumjs-tx').Transaction
const Web3 = require('web3');
const provider = new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/7fb0bdc97c.....");
const web3 = new Web3(provider);
var contract1 = new web3.eth.Contract(contractABI, contractAddress1)
const txData2 = contract1.methods.setTotalSupply(10).encodeABI();
setSupplyBalance(contractAddress1, txData2);
function setSupplyBalance(contractAddress, txData ){
web3.eth.getTransactionCount(account1, (err, txCount) => {
txObject = {
nonce: web3.utils.toHex(txCount),
gasLimit: web3.utils.toHex(1000000),
gasPrice: web3.utils.toHex(web3.utils.toWei('100', 'gwei')),
to: contractAddress,
value: web3.utils.toHex(web3.utils.toWei('0', 'ether')),
data:txData
}
const tx = new Tx(txObject, {chain:'ropsten', hardfork: 'petersburg'})
// sign the trx
tx.sign(privateKey1)
serializedTx = tx.serialize()
raw = '0x' + serializedTx.toString('hex')
web3.eth.sendSignedTransaction (raw, (err, txHash)=> {
console.log('err:', err)
console.log('txHash', txHash)
})
})
}