diff --git a/nimbus/transaction.nim b/nimbus/transaction.nim index 6f8ce2ced..6b7e7242d 100644 --- a/nimbus/transaction.nim +++ b/nimbus/transaction.nim @@ -8,18 +8,8 @@ import constants, errors, eth/[common, rlp, keys], nimcrypto, utils -proc initTransaction*(nonce: AccountNonce, gasPrice, gasLimit: GasInt, to: EthAddress, - value: UInt256, payload: Blob, V: byte, R, S: UInt256, isContractCreation = false): Transaction = - result.accountNonce = nonce - result.gasPrice = gasPrice - result.gasLimit = gasLimit - result.to = to - result.value = value - result.payload = payload - result.V = V - result.R = R - result.S = S - result.isContractCreation = isContractCreation +import eth/common/transaction as common_transaction +export common_transaction func intrinsicGas*(data: openarray[byte]): GasInt = result = 21_000 # GasTransaction @@ -42,63 +32,6 @@ proc validate*(t: Transaction) = raise newException(ValidationError, "Insufficient gas") # self.check_signature_validity() -type - TransHashObj = object - accountNonce: AccountNonce - gasPrice: GasInt - gasLimit: GasInt - to {.rlpCustomSerialization.}: EthAddress - value: UInt256 - payload: Blob - mIsContractCreation {.rlpIgnore.}: bool - -proc read(rlp: var Rlp, t: var TransHashObj, _: type EthAddress): EthAddress {.inline.} = - if rlp.blobLen != 0: - result = rlp.read(EthAddress) - else: - t.mIsContractCreation = true - -proc append(rlpWriter: var RlpWriter, t: TransHashObj, a: EthAddress) {.inline.} = - if t.mIsContractCreation: - rlpWriter.append("") - else: - rlpWriter.append(a) - -const - EIP155_CHAIN_ID_OFFSET = 35 - -func rlpEncode*(transaction: Transaction): auto = - # Encode transaction without signature - return rlp.encode(TransHashObj( - accountNonce: transaction.accountNonce, - gasPrice: transaction.gasPrice, - gasLimit: transaction.gasLimit, - to: transaction.to, - value: transaction.value, - payload: transaction.payload, - mIsContractCreation: transaction.isContractCreation - )) - -func rlpEncodeEIP155*(tx: Transaction): auto = - let V = (tx.V.int - EIP155_CHAIN_ID_OFFSET) div 2 - # Encode transaction without signature - return rlp.encode(Transaction( - accountNonce: tx.accountNonce, - gasPrice: tx.gasPrice, - gasLimit: tx.gasLimit, - to: tx.to, - value: tx.value, - payload: tx.payload, - isContractCreation: tx.isContractCreation, - V: V.byte, - R: 0.u256, - S: 0.u256 - )) - -func txHashNoSignature*(tx: Transaction): Hash256 = - # Hash transaction without signature - return keccak256.digest(if tx.V.int >= EIP155_CHAIN_ID_OFFSET: tx.rlpEncodeEIP155 else: tx.rlpEncode) - proc getSignature*(transaction: Transaction, output: var Signature): bool = var bytes: array[65, byte] bytes[0..31] = transaction.R.toByteArrayBE()