Ejemplo n.º 1
0
        public void ShouldCreateASignedTransaction()
        {
            var privateKey = "b5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";

            //data use for other tools for comparison
            Debug.WriteLine(new HexBigInteger(10000).HexValue);
            Debug.WriteLine(new HexBigInteger(324).HexValue);
            Debug.WriteLine(new HexBigInteger(10000000000000).HexValue);
            Debug.WriteLine(new HexBigInteger(21000).HexValue);
            //*****************************
            //order in transaction = nonce, gasPrice, gasLimit, receiveAddress, value, data
            //***************************

            var nonce    = 324.ToBytesForRLPEncoding();
            var amount   = 10000.ToBytesForRLPEncoding();
            var to       = "0x13f022d72158410433cbd66f5dd8bf6d2d129924".HexToByteArray();
            var gasPrice = 10000000000000.ToBytesForRLPEncoding();
            var gasLimit = 21000.ToBytesForRLPEncoding();
            var data     = "".HexToByteArray();


            //Create a transaction from scratch
            var tx = new RLPSigner(new[] { nonce, gasPrice, gasLimit, to, amount, data });

            tx.SignLegacy(new EthECKey(privateKey.HexToByteArray(), true));

            var encoded = tx.GetRLPEncoded();
            var rlp     =
                "f8698201448609184e72a0008252089413f022d72158410433cbd66f5dd8bf6d2d129924822710801ca0b1874eb8dab80e9072e57b746f8f0f281890568fd655488b0a1f5556a117775ea06ea87e03a9131cae14b5420cbfeb984bb2641d76fb32327d87cf0c9c0ee8f234";

            Assert.Equal(rlp, encoded.ToHex());
            //data used for other tools for comparison
            Debug.WriteLine(encoded.ToHex());

            Assert.Equal(EthECKey.GetPublicAddress(privateKey), tx.GetRecoveredKey().GetPublicAddress());

            var tx3 = new RLPSigner(rlp.HexToByteArray(), 6);

            Assert.Equal(tx.Data[5], tx3.Data[5] ?? new byte[] { });


            var tx2 = new LegacyTransaction(tx.GetRLPEncoded());

            Assert.Equal(EthECKey.GetPublicAddress(privateKey), tx2.Key.GetPublicAddress());
            //gas limit order 3
            Assert.Equal(tx.Data[2].ToHex(), tx3.Data[2].ToHex());
            //nonce order 1
            Assert.Equal(tx.Data[0].ToHex(), tx3.Data[0].ToHex());
            // gas price order 2
            Assert.Equal(tx.Data[1].ToHex(), tx3.Data[1].ToHex());
            //value order 5
            Assert.Equal(tx.Data[4].ToHex(), tx3.Data[4].ToHex());
            Assert.Equal(tx.RawHash.ToHex(), tx3.RawHash.ToHex());
            Assert.Equal(tx3.GetRecoveredKey().GetPublicAddress(), tx.GetRecoveredKey().GetPublicAddress());

            Assert.Equal(tx2.RawHash.ToHex(), tx3.RawHash.ToHex());
            Assert.Equal(tx2.Key.GetPublicAddress(), tx.GetRecoveredKey().GetPublicAddress());
        }
Ejemplo n.º 2
0
        public void ShouldResolveAddress()
        {
            //data from https://github.com/ethereum/go-ethereum/blob/506c9277911746dfbab0a585aee736bd3095f206/tests/files/TransactionTests/Homestead/ttTransactionTest.json
            var rlp =
                "0xf87c80018261a894095e7baea6a6c7c4c2dfeb977efac326af552d870a9d00000000000000000000000000010000000000000000000000000000001ba048b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353a01fffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804";
            var tx = new LegacyTransaction(rlp.HexToByteArray());

            Assert.Equal("67719a47cf3e3fe77b89c994d85395ad0f899d86".EnsureHexPrefix().ToLower(),
                         tx.Key.GetPublicAddress().EnsureHexPrefix().ToLower());
            rlp =
                "0xf85f800182520894095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba048b55bfa915ac795c431978d8a6a992b628d557da5ff759b307d495a36649353a01fffd310ac743f371de3b9f7f9cb56c0b28ad43601b4ab949f53faa07bd2c804";
            tx = new LegacyTransaction(rlp.HexToByteArray());
            Assert.Equal("0x963f4a0d8a11b758de8d5b99ab4ac898d6438ea6".EnsureHexPrefix().ToLower(),
                         tx.Key.GetPublicAddress().EnsureHexPrefix().ToLower());
        }
Ejemplo n.º 3
0
        public static LegacyTransaction ToTransaction(this RelayResponse response)
        {
            var tx = new LegacyTransaction(
                response.To,
                response.Value.Value,
                response.Nonce.Value,
                response.GasPrice.Value,
                response.Gas.Value,
                response.Input);

            tx.SetSignature(new EthECDSASignature(
                                new Org.BouncyCastle.Math.BigInteger(response.R.RemoveHexPrefix(), 16),
                                new Org.BouncyCastle.Math.BigInteger(response.S.RemoveHexPrefix(), 16),
                                response.V.HexToByteArray()));

            return(tx);
        }
Ejemplo n.º 4
0
        public void ShouldCreateASignedTransaction()
        {
            var privateKey = "b5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";

            //data use for other tools for comparison
            Debug.WriteLine(new HexBigInteger(10000).HexValue);
            Debug.WriteLine(new HexBigInteger(324).HexValue);
            Debug.WriteLine(new HexBigInteger(10000000000000).HexValue);
            Debug.WriteLine(new HexBigInteger(21000).HexValue);

            //Create a transaction from scratch
            var tx = new LegacyTransaction("0x13f022d72158410433cbd66f5dd8bf6d2d129924", 10000, 324, 10000000000000, 21000);

            tx.Sign(new EthECKey(privateKey.HexToByteArray(), true));

            var encoded = tx.GetRLPEncoded();
            var rlp     =
                "f8698201448609184e72a0008252089413f022d72158410433cbd66f5dd8bf6d2d129924822710801ca0b1874eb8dab80e9072e57b746f8f0f281890568fd655488b0a1f5556a117775ea06ea87e03a9131cae14b5420cbfeb984bb2641d76fb32327d87cf0c9c0ee8f234";

            Assert.Equal(rlp, encoded.ToHex());
            //data used for other tools for comparison
            Debug.WriteLine(encoded.ToHex());

            Assert.Equal(EthECKey.GetPublicAddress(privateKey), tx.Key.GetPublicAddress());

            var tx3 = new LegacyTransaction(rlp.HexToByteArray());

            Assert.Equal(tx.Data, tx3.Data ?? new byte[] { });

            Debug.WriteLine(tx.ToJsonHex());

            var tx2 = new LegacyTransaction(tx.GetRLPEncoded());

            Assert.Equal(EthECKey.GetPublicAddress(privateKey), tx2.Key.GetPublicAddress());

            Assert.Equal(tx.GasLimit.ToHex(), tx3.GasLimit.ToHex());
            Assert.Equal(tx.Nonce.ToHex(), tx3.Nonce.ToHex());
            Assert.Equal(tx.GasPrice.ToHex(), tx3.GasPrice.ToHex());
            Assert.Equal(tx.Value.ToHex(), tx3.Value.ToHex());
            Assert.Equal(tx.RawHash.ToHex(), tx3.RawHash.ToHex());
            Assert.Equal(tx3.Key.GetPublicAddress(), tx.Key.GetPublicAddress());
            Assert.Equal(tx2.RawHash.ToHex(), tx3.RawHash.ToHex());
            Assert.Equal(tx2.Key.GetPublicAddress(), tx.Key.GetPublicAddress());
        }
Ejemplo n.º 5
0
        public override async Task SignAsync(LegacyTransaction transaction)
        {
            var txMessage = new EthereumSignTx
            {
                Nonce     = transaction.Nonce,
                GasPrice  = transaction.GasPrice,
                GasLimit  = transaction.GasLimit,
                To        = transaction.ReceiveAddress,
                Value     = transaction.Value,
                AddressNs = GetPath(),
            };

            if (transaction.Data.Length > 0)
            {
                txMessage.DataInitialChunk = transaction.Data;
                txMessage.DataLength       = (uint)transaction.Data.Length;
            }

            var signature = await TrezorManager.SendMessageAsync <EthereumTxRequest, EthereumSignTx>(txMessage);

            transaction.SetSignature(EthECDSASignatureFactory.FromComponents(signature.SignatureR, signature.SignatureS, (byte)signature.SignatureV));
        }
Ejemplo n.º 6
0
        public void TestTransactionFromSignedRLP()
        {
            var tx = new LegacyTransaction(RLP_ENCODED_SIGNED_TX.HexToByteArray());

            Assert.Equal(HASH_TX, tx.RawHash.ToHex());
            Assert.Equal(RLP_ENCODED_SIGNED_TX, tx.GetRLPEncoded().ToHex());

            Assert.Equal(BigInteger.Zero, tx.Nonce.ToBigIntegerFromRLPDecoded());
            Assert.Equal(_testGasPrice.ToBigIntegerFromRLPDecoded(), tx.GasPrice.ToBigIntegerFromRLPDecoded());
            Assert.Equal(_testGasLimit.ToBigIntegerFromRLPDecoded(), tx.GasLimit.ToBigIntegerFromRLPDecoded());
            Assert.Equal(_testReceiveAddress.ToHex(), tx.ReceiveAddress.ToHex());
            Assert.Equal(_testValue.ToBigIntegerFromRLPDecoded(), tx.Value.ToBigIntegerFromRLPDecoded());

            Assert.Null(tx.Data);
            Assert.Equal(27, tx.Signature.V[0]);

            Assert.Equal("eab47c1a49bf2fe5d40e01d313900e19ca485867d462fe06e139e3a536c6d4f4",
                         tx.Signature.R.ToHex());

            Assert.Equal("14a569d327dcda4b29f74f93c0e9729d2f49ad726e703f9cd90dbb0fbf6649f1",
                         tx.Signature.S.ToHex());
        }
Ejemplo n.º 7
0
 public override Task SignAsync(LegacyTransaction transaction) => SignHashTransactionAsync(transaction);
Ejemplo n.º 8
0
 public override async Task SignAsync(LegacyTransaction transaction)
 {
     await SignRLPTransactionAsync(transaction).ConfigureAwait(false);
 }
Ejemplo n.º 9
0
 public override Task SignAsync(LegacyTransaction transaction)
 {
     return(SignHashTransactionAsync(transaction));
 }