Ошибка «неверный отправитель» с web3 в частной сети PoA

Я использую web3, чтобы подписать следующую транзакцию и отправить ее на узел с помощью sendSignedTransaction. Однако я продолжаю получать сообщение об ошибке «неверный отправитель».

Я установил идентификатор сети на 6454 в genesis.json, и узел был запущен с тем же идентификатором сети. Я использовал то же самое для подписания транзакции.

{
"to": "0x609be532b4411da754c55295f9a067819d2b563c",
"value": "0xff",
"gas": "0x61a8",
"gasPrice": "0x1e8f1c10800",
"from": "0x55eb76b1d8ff63ffbe211913a7f91a17cb98063c",
"nonce": "0x0",
"chainId": 6454,
"data": ""

}

РЕДАКТИРОВАТЬ; Вот мой genesis.json

{
"config": {
    "chainId": 6454,
    "homesteadBlock": 1,
    "eip150Block": 2,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 3,
    "eip158Block": 3,
    "byzantiumBlock": 4,
    "clique": {
    "period": 1,
    "epoch": 30000
    }
},
"nonce": "0x0",
"timestamp": "0x5b33af98",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000240ebbd4e36bce0071994d62c78319d028fb651bac65b46b5c6257bd7c790fa51eb54d9f68f559d20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
    "240ebbd4e36bce0071994d62c78319d028fb651b": {
    "balance": "0x500000000000000000000000000000000000000000000000000000000000000"
    },
    "ac65b46b5c6257bd7c790fa51eb54d9f68f559d2": {
    "balance": "0x500000000000000000000000000000000000000000000000000000000000000"
    }
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

Ответы (3)

Наиболее вероятная ошибка заключается в том, что вы использовали неправильный chainId, или ваша приватная цепочка не настроила номер блока EIP155. Установите номер блока EIP155 равным 1, чтобы исправить это. Кроме того, кошелек, который вы используете для отправки транзакции, должен поддерживать протокол EIP155.

В противном случае вам придется отладить процесс подписания, потому что ваш вопрос не содержит подробной информации, позволяющей сделать более точное предположение.

Из источников:

// Make sure the transaction is signed properly
from, err := types.Sender(pool.signer, tx)
if err != nil {
    return ErrInvalidSender
}
Я отредактировал свой вопрос, включив в него файл genesis.json. Как видите, я установил для config.eip155Block значение 3. «Кроме того, кошелек, который вы используете для отправки транзакции, должен поддерживать EIP155». Как мне это сделать? Я использую закрытый ключ для подписи транзакции и использую networkId при подписании. Все хорошо?
все, что я могу сказать, это то, что транзакция не подписана должным образом или, другими словами, gethне может получить исходный адрес из вашей подписи. выполните getTransaction() и добавьте вывод к вашему вопросу, возможно, кто-то обнаружит ошибку в ваших полях R, S, V.
кстати, когда вы редактируете genesis.json, вам нужно воссоздать блокчейн из блока 0, потому что блок генезиса считывается из базы данных LevelDB, а не из genesis.json

Еще одна вещь, которую нужно проверить, — использует ли ваш узел POA ssl, если да, укажите URL-адрес на основе https при подключении узла. У меня была такая же проблема, и я долго боролся с идентификатором цепочки. Затем, в конце концов, проверьте, что URL-адрес узла был https вместо http, и он работал как шарм.

Это похоже на проблему с версией 2.0.0 ethereumjs-tx:

https://github.com/ethereumjs/ethereumjs-tx/issues/165 16

Вам нужно будет построить транзакцию, как показано ниже:

const tx = new Tx(txObject, {chain:'ropsten', hardfork: 'petersburg'})