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 信息):已恢复。
那我做错了什么?或者在一笔交易中只能调用一个合约函数?
不,您不能在单个事务中从以太坊客户端调用多个 non-constant 函数。但是,您可以向合约 A 发起交易,然后从同一交易中的第一个合约调用合约 B 中的函数。
也许这是个愚蠢的问题。但是我想知道是否可以在以太坊的一个交易中调用 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 信息):已恢复。
那我做错了什么?或者在一笔交易中只能调用一个合约函数?
不,您不能在单个事务中从以太坊客户端调用多个 non-constant 函数。但是,您可以向合约 A 发起交易,然后从同一交易中的第一个合约调用合约 B 中的函数。