gst refactor: share the same tx.getSender with rest of Nimbus
This commit is contained in:
parent
4db43dcd7e
commit
38757c956d
|
@ -10,7 +10,7 @@ import
|
||||||
byteutils, ranges/typedranges, nimcrypto/[keccak, hash], options,
|
byteutils, ranges/typedranges, nimcrypto/[keccak, hash], options,
|
||||||
eth/[rlp, common, keys], eth/trie/db, chronicles,
|
eth/[rlp, common, keys], eth/trie/db, chronicles,
|
||||||
./test_helpers, ../nimbus/p2p/executor,
|
./test_helpers, ../nimbus/p2p/executor,
|
||||||
../nimbus/[constants, errors],
|
../nimbus/[constants, errors, transaction],
|
||||||
../nimbus/[vm_state, vm_types, vm_state_transactions, utils],
|
../nimbus/[vm_state, vm_types, vm_state_transactions, utils],
|
||||||
../nimbus/vm/interpreter,
|
../nimbus/vm/interpreter,
|
||||||
../nimbus/db/[db_chain, state_db]
|
../nimbus/db/[db_chain, state_db]
|
||||||
|
@ -24,7 +24,7 @@ suite "generalstate json tests":
|
||||||
jsonTest("GeneralStateTests", testFixture)
|
jsonTest("GeneralStateTests", testFixture)
|
||||||
|
|
||||||
proc testFixtureIndexes(prevStateRoot: Hash256, header: BlockHeader, pre: JsonNode, tx: Transaction,
|
proc testFixtureIndexes(prevStateRoot: Hash256, header: BlockHeader, pre: JsonNode, tx: Transaction,
|
||||||
sender: EthAddress, expectedHash, expectedLogs: string, testStatusIMPL: var TestStatus, fork: Fork) =
|
expectedHash, expectedLogs: string, testStatusIMPL: var TestStatus, fork: Fork) =
|
||||||
when enabledLogLevel <= TRACE:
|
when enabledLogLevel <= TRACE:
|
||||||
let tracerFlags = {TracerFlags.EnableTracing}
|
let tracerFlags = {TracerFlags.EnableTracing}
|
||||||
else:
|
else:
|
||||||
|
@ -42,6 +42,7 @@ proc testFixtureIndexes(prevStateRoot: Hash256, header: BlockHeader, pre: JsonNo
|
||||||
let expectedLogsHash = toLowerAscii(expectedLogs)
|
let expectedLogsHash = toLowerAscii(expectedLogs)
|
||||||
check(expectedLogsHash == actualLogsHash)
|
check(expectedLogsHash == actualLogsHash)
|
||||||
|
|
||||||
|
let sender = tx.getSender()
|
||||||
if not validateTransaction(vmState, tx, sender):
|
if not validateTransaction(vmState, tx, sender):
|
||||||
vmState.mutateStateDB:
|
vmState.mutateStateDB:
|
||||||
# pre-EIP158 (e.g., Byzantium) should ensure currentCoinbase exists
|
# pre-EIP158 (e.g., Byzantium) should ensure currentCoinbase exists
|
||||||
|
@ -89,7 +90,5 @@ proc testFixture(fixtures: JsonNode, testStatusIMPL: var TestStatus) =
|
||||||
gasIndex = indexes["gas"].getInt
|
gasIndex = indexes["gas"].getInt
|
||||||
valueIndex = indexes["value"].getInt
|
valueIndex = indexes["value"].getInt
|
||||||
let transaction = ftrans.getFixtureTransaction(dataIndex, gasIndex, valueIndex)
|
let transaction = ftrans.getFixtureTransaction(dataIndex, gasIndex, valueIndex)
|
||||||
let sender = ftrans.getFixtureTransactionSender
|
|
||||||
testFixtureIndexes(emptyRlpHash, header, fixture["pre"], transaction,
|
testFixtureIndexes(emptyRlpHash, header, fixture["pre"], transaction,
|
||||||
sender, expectedHash, expectedLogs, testStatusIMPL, fork)
|
expectedHash, expectedLogs, testStatusIMPL, fork)
|
||||||
|
|
||||||
|
|
|
@ -277,17 +277,12 @@ proc getFixtureTransaction*(j: JsonNode, dataIndex, gasIndex, valueIndex: int):
|
||||||
result.value = fromHex(UInt256, j["value"][valueIndex].getStr)
|
result.value = fromHex(UInt256, j["value"][valueIndex].getStr)
|
||||||
result.payload = j["data"][dataIndex].getStr.safeHexToSeqByte
|
result.payload = j["data"][dataIndex].getStr.safeHexToSeqByte
|
||||||
|
|
||||||
proc getFixtureTransactionSender*(j: JsonNode): EthAddress =
|
|
||||||
var secretKey = j["secretKey"].getStr
|
var secretKey = j["secretKey"].getStr
|
||||||
removePrefix(secretKey, "0x")
|
removePrefix(secretKey, "0x")
|
||||||
let privateKey = initPrivateKey(secretKey)
|
let privateKey = initPrivateKey(secretKey)
|
||||||
|
let sig = signMessage(privateKey, result.rlpEncode)
|
||||||
|
let raw = sig.getRaw()
|
||||||
|
|
||||||
var pubKey: PublicKey
|
result.R = fromBytesBE(Uint256, raw[0..31])
|
||||||
let transaction = j.getFixtureTransaction(0, 0, 0)
|
result.S = fromBytesBE(Uint256, raw[32..63])
|
||||||
if recoverSignatureKey(signMessage(privateKey, transaction.rlpEncode),
|
result.V = raw[64] + 27.byte
|
||||||
transaction.txHashNoSignature.data,
|
|
||||||
pubKey) == EthKeysStatus.Success:
|
|
||||||
return pubKey.toCanonicalAddress()
|
|
||||||
else:
|
|
||||||
# XXX: appropriate failure mode; probably raise something
|
|
||||||
discard
|
|
||||||
|
|
Loading…
Reference in New Issue