首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sendSignedTransaction web3js

sendSignedTransaction web3js
EN

Ethereum用户
提问于 2022-06-07 01:25:55
回答 2查看 572关注 0票数 0

我看到,使用sendTransaction,您可以指定maxFeePerGas

请看这里

但是,如果使用signTransaction,然后使用sendSignedTransaction,则只能发送gas还有这里

如何发送签名交易并指定gas?(最高优先级费用,类似于元问题)?

EN

回答 2

Ethereum用户

发布于 2022-06-10 14:50:04

文档并不是最新的,您可以使用maxPriorityFeePerGasmaxFeePerGas,没有问题.

gas是您愿意为tx花费的最大气体量,它必须用于每种类型的事务:0类型(遗留)、1 (使用访问列表)和2 (EIP-1559)。

为了方便起见,您可以找到web3.js 在回购中和下面的事务的完整定义:

代码语言:javascript
复制
export interface TransactionConfig {
    from?: string | number;
    to?: string;
    value?: number | string | BN;
    gas?: number | string;
    gasPrice?: number | string | BN;
    maxPriorityFeePerGas?: number | string | BN;
    maxFeePerGas?: number | string | BN;
    data?: string;
    nonce?: number;
    chainId?: number;
    common?: Common;
    chain?: string;
    hardfork?: string;
}

如果设置了maxPriorityFeePerGasmaxFeePerGas,并且设置了gasPrice参数,则为它们都将被设置为等于gasPrice

有关许多使用示例,请参见官方回购中的测试用例,如下所示。搜索postEip1559Block以查看包含maxPriorityFeePerGasmaxFeePerGas的示例。

代码语言:javascript
复制
it("signTransaction must compare to eth_signTransaction", function(done) {
    var provider = new FakeHttpProvider();
    var web3 = new Web3(provider);

    provider.injectResult(
        test.transaction.common.hardfork === 'london' ?
        postEip1559Block:
        preEip1559Block
    );
    provider.injectValidation(function (payload) {
        assert.equal(payload.jsonrpc, '2.0');
        assert.equal(payload.method, 'eth_getBlockByNumber');
        assert.deepEqual(payload.params, ['latest', false]);
    });
    provider.injectResult('0x5022');
    provider.injectValidation(function (payload) {
        assert.equal(payload.jsonrpc, '2.0');
        assert.equal(payload.method, 'eth_gasPrice');
        assert.deepEqual(payload.params, []);
    });

    var ethAccounts = new Accounts(web3);

    var testAccount = ethAccounts.privateKeyToAccount(test.privateKey);
    assert.equal(testAccount.address, test.address);

    testAccount.signTransaction(test.transaction).then(function (tx) {
        assert.equal(tx.messageHash, test.messageHash, "message hash failed");
        assert.equal(tx.transactionHash, test.transactionHash, "tx hash failed");
        assert.equal(tx.rawTransaction, test.rawTransaction, "rawtx failed");
        done();
    })
    .catch(e => {
        console.log(i, e)
        done(e);
    });
});
票数 1
EN

Ethereum用户

发布于 2022-06-10 13:27:12

sendSignedTransaction函数不接收gasPricegas,有参数-

代码语言:javascript
复制
web3.eth.sendSignedTransaction(signedTransactionData [, callback])
  1. 使用HEX格式的字符串签名事务数据
  2. 函数-(可选)可选回调,返回一个error对象作为第一个参数,结果作为第二个参数。

因此,您可以在maxFeePerGas中指定signTransaction并使用sendSignedTransaction发送。

代码语言:javascript
复制
var Tx = require('@ethereumjs/tx').Transaction;
var privateKey = Buffer.from('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex');

var rawTx = {
  nonce: '0x00',
  maxFeePerGas: '0x09184e72a000',
  maxPriorityFeePerGas: '0x1C9C380'
  gasLimit: '0x2710',
  to: '0x0000000000000000000000000000000000000000',
  value: '0x00',
  data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057'
}

var tx = new Tx(rawTx, {'chain':'ropsten'});
tx.sign(privateKey);

var serializedTx = tx.serialize();

web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'))
.on('receipt', console.log);
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/129703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档