From 153c8ef49da02c6891b393cf14e02b6e858eaf0f Mon Sep 17 00:00:00 2001 From: AnilChinchawale Date: Thu, 14 Mar 2019 15:58:42 +0530 Subject: [PATCH] File Updated | transaction & constants --- core/types/transaction.go | 73 +++++++++++++++++++ crypto/bn256/cloudflare/constants.go | 2 +- .../contrib/lax_der_privatekey_parsing.c | 8 +- 3 files changed, 78 insertions(+), 5 deletions(-) diff --git a/core/types/transaction.go b/core/types/transaction.go index 653498a851..339e3562f5 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -195,6 +195,19 @@ func (tx *Transaction) To() *common.Address { return &to } +func (tx *Transaction) From() *common.Address { + if tx.data.V != nil { + signer := deriveSigner(tx.data.V) + if f, err := Sender(signer, tx); err != nil { + return nil + } else { + return &f + } + } else { + return nil + } +} + // Hash hashes the RLP encoding of tx. // It uniquely identifies the transaction. func (tx *Transaction) Hash() common.Hash { @@ -274,6 +287,66 @@ func (tx *Transaction) IsSpecialTransaction() bool { return tx.To().String() == common.RandomizeSMC || tx.To().String() == common.BlockSigners } +func (tx *Transaction) IsSigningTransaction() bool { + if tx.To() == nil { + return false + } + + if tx.To().String() != common.BlockSigners { + return false + } + + method := common.ToHex(tx.Data()[0:4]) + + if method != common.SignMethod { + return false + } + + if len(tx.Data()) != (32*2 + 4) { + return false + } + + return true +} + +func (tx *Transaction) IsVotingTransaction() (bool, *common.Address) { + if tx.To() == nil { + return false, nil + } + b := (tx.To().String() == common.MasternodeVotingSMC) + + if !b { + return b, nil + } + + method := common.ToHex(tx.Data()[0:4]) + if b = (method == common.VoteMethod); b { + addr := tx.Data()[len(tx.Data())-20:] + m := common.BytesToAddress(addr) + return b, &m + } + + if b = (method == common.UnvoteMethod); b { + addr := tx.Data()[len(tx.Data())-32-20 : len(tx.Data())-32] + m := common.BytesToAddress(addr) + return b, &m + } + + if b = (method == common.ProposeMethod); b { + addr := tx.Data()[len(tx.Data())-20:] + m := common.BytesToAddress(addr) + return b, &m + } + + if b = (method == common.ResignMethod); b { + addr := tx.Data()[len(tx.Data())-20:] + m := common.BytesToAddress(addr) + return b, &m + } + + return b, nil +} + func (tx *Transaction) String() string { var from, to string if tx.data.V != nil { diff --git a/crypto/bn256/cloudflare/constants.go b/crypto/bn256/cloudflare/constants.go index 8b4070cc4d..5122aae64f 100644 --- a/crypto/bn256/cloudflare/constants.go +++ b/crypto/bn256/cloudflare/constants.go @@ -38,7 +38,7 @@ var r2 = &gfP{0xf32cfc5b538afa89, 0xb5e71911d44501fb, 0x47ab1eff0a417ff6, 0x06d8 var r3 = &gfP{0xb1cd6dafda1530df, 0x62f210e6a7283db6, 0xef7f0b0c0ada0afb, 0x20fd6e902d592544} // xiToPMinus1Over6 is ξ^((p-1)/6) where ξ = i+9. -var xiToPMinus1Over6 = &gfP2{gfP{0xa222ae234c492d72, 0xd00f02a4565de15b, 0XDC2ff3a253dfc926, 0x10a75716b3899551}, gfP{0xaf9ba69633144907, 0xca6b1d7387afb78a, 0x11bded5ef08a2087, 0x02f34d751a1f3a7c}} +var xiToPMinus1Over6 = &gfP2{gfP{0xa222ae234c492d72, 0xd00f02a4565de15b, 0xdc2ff3a253dfc926, 0x10a75716b3899551}, gfP{0xaf9ba69633144907, 0xca6b1d7387afb78a, 0x11bded5ef08a2087, 0x02f34d751a1f3a7c}} // xiToPMinus1Over3 is ξ^((p-1)/3) where ξ = i+9. var xiToPMinus1Over3 = &gfP2{gfP{0x6e849f1ea0aa4757, 0xaa1c7b6d89f89141, 0xb6e713cdfae0ca3a, 0x26694fbb4e82ebc3}, gfP{0xb5773b104563ab30, 0x347f91c8a9aa6454, 0x7a007127242e0991, 0x1956bcd8118214ec}} diff --git a/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c b/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c index 2d6aa09673..c2e63b4b8d 100644 --- a/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c +++ b/crypto/secp256k1/libsecp256k1/contrib/lax_der_privatekey_parsing.c @@ -69,10 +69,10 @@ int ec_privkey_export_der(const secp256k1_context *ctx, unsigned char *privkey, 0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0x04, - 0x21,0x02,0x79,0xBE,0x66,0x7E,0xF9,0XDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87, + 0x21,0x02,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87, 0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0xF8, 0x17,0x98,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0XDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E, + 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E, 0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x24,0x03,0x22,0x00 }; unsigned char *ptr = privkey; @@ -92,12 +92,12 @@ int ec_privkey_export_der(const secp256k1_context *ctx, unsigned char *privkey, 0xCE,0x3D,0x01,0x01,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFE,0xFF,0xFF,0xFC,0x2F,0x30,0x06,0x04,0x01,0x00,0x04,0x01,0x07,0x04, - 0x41,0x04,0x79,0xBE,0x66,0x7E,0xF9,0XDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87, + 0x41,0x04,0x79,0xBE,0x66,0x7E,0xF9,0xDC,0xBB,0xAC,0x55,0xA0,0x62,0x95,0xCE,0x87, 0x0B,0x07,0x02,0x9B,0xFC,0xDB,0x2D,0xCE,0x28,0xD9,0x59,0xF2,0x81,0x5B,0x16,0xF8, 0x17,0x98,0x48,0x3A,0xDA,0x77,0x26,0xA3,0xC4,0x65,0x5D,0xA4,0xFB,0xFC,0x0E,0x11, 0x08,0xA8,0xFD,0x17,0xB4,0x48,0xA6,0x85,0x54,0x19,0x9C,0x47,0xD0,0x8F,0xFB,0x10, 0xD4,0xB8,0x02,0x21,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0XDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E, + 0xFF,0xFF,0xFF,0xFF,0xFE,0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B,0xBF,0xD2,0x5E, 0x8C,0xD0,0x36,0x41,0x41,0x02,0x01,0x01,0xA1,0x44,0x03,0x42,0x00 }; unsigned char *ptr = privkey;