public static Address ExtractInteropAddress(Nethereum.RPC.Eth.DTOs.Transaction tx) { //Using the transanction from RPC to build a txn for signing / signed var transaction = Nethereum.Signer.TransactionFactory.CreateTransaction(tx.To, tx.Gas, tx.GasPrice, tx.Value, tx.Input, tx.Nonce, tx.R, tx.S, tx.V); //Get the account sender recovered Nethereum.Signer.EthECKey accountSenderRecovered = null; if (transaction is Nethereum.Signer.TransactionChainId) { var txnChainId = transaction as Nethereum.Signer.TransactionChainId; accountSenderRecovered = Nethereum.Signer.EthECKey.RecoverFromSignature(transaction.Signature, transaction.RawHash, txnChainId.GetChainIdAsBigInteger()); } else { accountSenderRecovered = Nethereum.Signer.EthECKey.RecoverFromSignature(transaction.Signature, transaction.RawHash); } var pubKey = accountSenderRecovered.GetPubKey(); var point = Cryptography.ECC.ECPoint.DecodePoint(pubKey, Cryptography.ECC.ECCurve.Secp256k1); pubKey = point.EncodePoint(true); var bytes = new byte[34]; bytes[0] = (byte)AddressKind.User; ByteArrayUtils.CopyBytes(pubKey, 0, bytes, 1, 33); return(Address.FromBytes(bytes)); }
public static Address ExtractInteropAddress(Nethereum.RPC.Eth.DTOs.Transaction tx, Logger logger) { //Using the transanction from RPC to build a txn for signing / signed var transaction = Nethereum.Signer.TransactionFactory.CreateTransaction(tx.To, tx.Gas, tx.GasPrice, tx.Value, tx.Input, tx.Nonce, tx.R, tx.S, tx.V); //Get the account sender recovered Nethereum.Signer.EthECKey accountSenderRecovered = null; // TODO To be used with Nethereum 4: // 1) CreateLegacyTransaction()/LegacyTransactionChainId // or // 2) var signature = new Nethereum.Signer.EthECDSASignature(new Org.BouncyCastle.Math.BigInteger(tx.R.Replace("0x", ""), 16), new Org.BouncyCastle.Math.BigInteger(tx.S.Replace("0x", ""), 16), new Org.BouncyCastle.Math.BigInteger(tx.V.Replace("0x", ""), 16).ToByteArray()); // accountSenderRecovered = Nethereum.Signer.EthECKey.RecoverFromSignature(signature, System.Text.Encoding.UTF8.GetBytes(tx.TransactionHash.Replace("0x", ""))); if (transaction is Nethereum.Signer.TransactionChainId) { var txnChainId = transaction as Nethereum.Signer.TransactionChainId; accountSenderRecovered = Nethereum.Signer.EthECKey.RecoverFromSignature(transaction.Signature, transaction.RawHash, txnChainId.GetChainIdAsBigInteger()); } else { accountSenderRecovered = Nethereum.Signer.EthECKey.RecoverFromSignature(transaction.Signature, transaction.RawHash); } var pubKey = accountSenderRecovered.GetPubKey(); var point = Cryptography.ECC.ECPoint.DecodePoint(pubKey, Cryptography.ECC.ECCurve.Secp256k1); pubKey = point.EncodePoint(true); var bytes = new byte[34]; bytes[0] = (byte)AddressKind.User; ByteArrayUtils.CopyBytes(pubKey, 0, bytes, 1, 33); var address = Address.FromBytes(bytes); return(address); }