环境Node version: v10.15.3 Web3: ^1.0.0-beta.50 Net: Ropsten
我的smart合同是一个非常简单的应付款/余额合同,我的目标是使用web3贡献0.1ETH来提高合同余额:
pragma solidity >=0.4.25 <0.6.0;
contract Demo {
uint public balance;
constructor() public
{
balance = 0;
}
function contribute() public payable
{
balance += msg.value;
}
}我试着用web3调用贡献函数:
import Web3 from "web3";
import Tx from "ethereumjs-tx";
import contractAbi from "./contractAbi";
const web3 = new Web3("https://ropsten.infura.io/v3/xxxxxxx");
const contractAdress = "xxxx";
const my_public_key_address_1 = "yyyy";
const privateKey1 = "vvv";
const txCount = await web3.eth.getTransactionCount(my_public_key_address_1);
const contract = await new web3.eth.Contract(contractAbi, contractAdress);
const txObject = {
nonce: web3.utils.toHex(txCount),
to: "xxx",
gasLimit: web3.utils.toHex(41000),
gasPrice: web3.utils.toHex(web3.utils.toWei("4", "gwei")),
data: contract.methods.contribute(100000000000000000).encodeABI(),
chainId: 3,
};
//
const tx = new Tx(txObject);
tx.sign(privateKey1)
const serializedTx = tx.serialize()
const raw = '0x' + serializedTx.toString('hex')
const txHash = await web3.eth.sendSignedTransaction(raw)我得到了这个错误:

发布于 2019-03-27 17:16:34
contribute不接受任何参数,但您正在尝试传递一个参数。相反,您可能希望调用不带参数的函数,但将以太附加到事务:
const txObject = {
nonce: web3.utils.toHex(txCount),
to: "xxx",
gasLimit: web3.utils.toHex(41000),
gasPrice: web3.utils.toHex(web3.utils.toWei("4", "gwei")),
// NOTE: Drop the parameter here:
data: contract.methods.contribute().encodeABI(),
chainId: 3,
// NOTE: Add a value (in wei) here:
value: "100000000000000000",
};https://ethereum.stackexchange.com/questions/68928
复制相似问题