繁体   English   中英

Web3.js以太坊-可以在一个事务中调用2个函数吗?

[英]Web3.js Ethereum - Is it possible to call 2 functions in one transaction?

也许这是一个愚蠢的问题。 但是我想知道是否有可能在以太坊的单个交易中放置2个(或更多)智能合约方法调用。

我在单个事务中调用一个函数的代码部分:

var data = self.MyContract.MyFunc1.getData(
        param1);
const options = {
    gasPrice: gasPrice,
    gasLimit: gasLimit,
    nonce,
    data,
    to: addressContract,
};
const tx = new Tx(options);
tx.sign(new Buffer(private_key, 'hex'));
const rawTx = `0x${tx.serialize().toString('hex')}`;
self.web3.eth.sendRawTransaction(rawTx, (err, result) => {
    if (err)
        reject(err);
    resolve(result);
});

它运作完美。 我试图以这种方式向数据变量添加另一个函数调用:

var data = self.MyContract.MyFunc1.getData(
        param1);
var data2 = self.MyContract.MyFunc2.getData(
        param2);
data += data2;
const options = {
    gasPrice: gasPrice,
    gasLimit: gasLimit,
    nonce,
    data,
    to: addressContract,
};
const tx = new Tx(options);
tx.sign(new Buffer(private_key, 'hex'));
const rawTx = `0x${tx.serialize().toString('hex')}`;
self.web3.eth.sendRawTransaction(rawTx, (err, result) => {
    if (err)
        reject(err);
    resolve(result);
});

这次事务失败是有原因的(根据etherscan.io信息):已还原。

那我在做什么错? 也许一次交易中可能只有一次合约功能调用?

不,您不能在单个事务中从以太坊客户端调用多个非恒定函数。 但是,您可以启动与合同A的交易,然后从同一交易中的第一个合同中调用合同B中的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM