From d24769636728fda39110f87317aee5e618ca8c78 Mon Sep 17 00:00:00 2001 From: Jacek Sieka Date: Fri, 4 Oct 2024 11:39:01 +0200 Subject: [PATCH 1/2] use common transaction signature helpers --- web3.nimble | 2 +- web3/transaction_signing.nim | 42 +++++++----------------------------- 2 files changed, 9 insertions(+), 35 deletions(-) diff --git a/web3.nimble b/web3.nimble index 9d962a6..590563b 100644 --- a/web3.nimble +++ b/web3.nimble @@ -18,7 +18,7 @@ requires "nim >= 2.0.0" requires "chronicles" requires "chronos" requires "bearssl" -requires "eth" +requires "eth@#tx-sign" requires "faststreams" requires "json_rpc" requires "json_serialization" diff --git a/web3/transaction_signing.nim b/web3/transaction_signing.nim index 3c07557..8abd656 100644 --- a/web3/transaction_signing.nim +++ b/web3/transaction_signing.nim @@ -9,34 +9,7 @@ import eth_api_types, - eth/common/[transactions_rlp, keys] - -func signTransaction(tr: var Transaction, pk: PrivateKey) = - let h = tr.txHashNoSignature - let s = sign(pk, SkMessage(h.data)) - - var r = toRaw(s) - let v = r[64] - - tr.R = fromBytesBE(UInt256, r.toOpenArray(0, 31)) - tr.S = fromBytesBE(UInt256, r.toOpenArray(32, 63)) - - tr.V = uint64(v) + 27 # TODO! Complete this - -func signTransactionEip155(tr: var Transaction, pk: PrivateKey) = - let chainId = tr.chainId - tr.V = uint64(chainId) * 2 + 35 - - let h = tr.txHashNoSignature - let s = sign(pk, SkMessage(h.data)) - - var r = toRaw(s) - let v = r[64] - - tr.R = fromBytesBE(UInt256, r.toOpenArray(0, 31)) - tr.S = fromBytesBE(UInt256, r.toOpenArray(32, 63)) - - tr.V = uint64(v) + uint64(chainId) * 2 + 35 + eth/common/[keys, transactions_rlp, transaction_utils] func encodeTransaction*(s: TransactionArgs, pk: PrivateKey): seq[byte] = var tr = Transaction(txType: TxLegacy) @@ -48,11 +21,12 @@ func encodeTransaction*(s: TransactionArgs, pk: PrivateKey): seq[byte] = tr.value = s.value.get tr.nonce = uint64(s.nonce.get) tr.payload = s.payload - if s.chainId.isSome(): - tr.chainId = ChainId(s.chainId.get) - signTransactionEip155(tr, pk) - else: - signTransaction(tr, pk) + tr.signature = + if s.chainId.isSome(): + tr.chainId = ChainId(s.chainId.get) + tr.sign(pk, true) + else: + tr.sign(pk, false) rlp.encode(tr) func encodeTransaction*(s: TransactionArgs, pk: PrivateKey, chainId: ChainId): seq[byte] {.deprecated: "Provide chainId in TransactionArgs".} = @@ -65,5 +39,5 @@ func encodeTransaction*(s: TransactionArgs, pk: PrivateKey, chainId: ChainId): s tr.value = s.value.get tr.nonce = uint64(s.nonce.get) tr.payload = s.payload - signTransactionEip155(tr, pk) + tr.signature = tr.sign(pk, true) rlp.encode(tr) From 3056a5228170a3fc1c012d89242b1866dfe48121 Mon Sep 17 00:00:00 2001 From: Jacek Sieka Date: Fri, 4 Oct 2024 13:47:49 +0200 Subject: [PATCH 2/2] bump --- web3.nimble | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web3.nimble b/web3.nimble index 590563b..9d962a6 100644 --- a/web3.nimble +++ b/web3.nimble @@ -18,7 +18,7 @@ requires "nim >= 2.0.0" requires "chronicles" requires "chronos" requires "bearssl" -requires "eth@#tx-sign" +requires "eth" requires "faststreams" requires "json_rpc" requires "json_serialization"