我使用https://trezor.io/发送已签名的交易
我成功地将交易发送到:
-
松露开发网络
-
Ropsten
现在我正在使用私有本地go-ethereum节点,签名事务的调用与truffle和ropsten的代码完全相同,并且在发送事务时我得到 Invalid sender
在对此进行一些研究时,我发现这个错误是由于没有相同的chainId和networkId而产生的,我检查我的配置以及我如何运行geth节点和chainId与networkId相同
我在我的geth节点的genesis.json中指定了链ID 10
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"clique": {
"period": 15,
"epoch": 30000
}
}
我用networkId 10运行节点:
geth --datadir node1/ --syncmode 'full' --port 30311 --rpc --rpcport 8545 --rpcaddr '192.168.1.244' --rpccorsdomain="*" --ws --wsaddr "192.168.1.244" --wsorigins "http://192.168.1.182" --wsport 8546 --wsapi 'personal,db,eth,net,web3,txpool,miner' --rpcapi 'personal,db,eth,net,web3,txpool,miner' --bootnodes 'enode://8235e42bec82ad8944dcf65b57d25b7a970d6e94f35961a188b2dfd306c6964f2d00d078e3bf1d9ccc6664112669d7ea9c04aa45a8ab9113aa8fe8a04b088f80@127.0.0.1:30310' --networkid 10 --gasprice '1' -unlock 'd770217581e0ca1265c88c9faaff81f5038b129f' --password node1/password.txt --mine console
为什么会发生这种情况的任何想法?
我使用geth 1.8和web3 1.0-beta33
我认为这是geth的配置,因为正如我所说,我已经用相同的代码向Truffle dev和Ropsten发送了交易
以下是我发送交易的方式(源代码)https://github.com/ethereum/web3.js/issues/1669
2 回答
签字前:
rawTx.v = Buffer.from([chainId]) rawTx.nonce = await web3.utils.toHex(web3.eth.getTransactionCount(account))
我设法解决了这个问题,
除了在geth配置中指定chain id之外,当运行节点时,还需要在要签名的事务中指明它
所以,正确的方法是:
1)
2)
3)创建原始事务(note chainId)
4)然后签署交易(注意这里的chainId):
EDIT :跨平台帖子:Send signed transactions to Ropsten or Truffle develop network with Trezor (Hardware Wallet)