aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorbas-vk <bas-vk@users.noreply.github.com>2017-01-21 06:32:16 +0800
committerFelix Lange <fjl@users.noreply.github.com>2017-01-21 06:32:16 +0800
commit0126d014351bc4f58e2d7e6564a054fb80f87153 (patch)
treee1af30aa2d59a3e012d004d73d90010d9794abe1 /core
parent946db8ba6547e5b18c5af701eb0e9e49a4298cbe (diff)
downloaddexon-0126d014351bc4f58e2d7e6564a054fb80f87153.tar.gz
dexon-0126d014351bc4f58e2d7e6564a054fb80f87153.tar.zst
dexon-0126d014351bc4f58e2d7e6564a054fb80f87153.zip
types: bugfix invalid V derivation on tx json unmarshal (#3594)
Diffstat (limited to 'core')
-rw-r--r--core/types/transaction.go3
-rw-r--r--core/types/transaction_signing.go2
2 files changed, 3 insertions, 2 deletions
diff --git a/core/types/transaction.go b/core/types/transaction.go
index e610671d3..0b6d24268 100644
--- a/core/types/transaction.go
+++ b/core/types/transaction.go
@@ -198,7 +198,8 @@ func (tx *Transaction) UnmarshalJSON(input []byte) error {
var V byte
if isProtectedV((*big.Int)(dec.V)) {
- V = byte((new(big.Int).Sub((*big.Int)(dec.V), deriveChainId((*big.Int)(dec.V))).Uint64()) - 35)
+ chainId := deriveChainId((*big.Int)(dec.V)).Uint64()
+ V = byte(dec.V.ToInt().Uint64() - 35 - 2*chainId)
} else {
V = byte(((*big.Int)(dec.V)).Uint64() - 27)
}
diff --git a/core/types/transaction_signing.go b/core/types/transaction_signing.go
index 4ebc789a5..7d7b63e9f 100644
--- a/core/types/transaction_signing.go
+++ b/core/types/transaction_signing.go
@@ -160,7 +160,7 @@ func (s EIP155Signer) PublicKey(tx *Transaction) ([]byte, error) {
// needs to be in the [R || S || V] format where V is 0 or 1.
func (s EIP155Signer) WithSignature(tx *Transaction, sig []byte) (*Transaction, error) {
if len(sig) != 65 {
- panic(fmt.Sprintf("wrong size for snature: got %d, want 65", len(sig)))
+ panic(fmt.Sprintf("wrong size for signature: got %d, want 65", len(sig)))
}
cpy := &Transaction{data: tx.data}