Sign() public method

public Sign ( ECKey key ) : void
key NBitcoin.Crypto.ECKey
return void
示例#1
0
 public string SignTransaction(string key, string to, BigInteger amount, BigInteger nonce, BigInteger gasPrice,
     BigInteger gasLimit, string data)
 {
     var transaction = new Transaction(to, amount, nonce, gasPrice, gasLimit, data);
     transaction.Sign(new ECKey(key.HexToByteArray(), true));
     return transaction.GetRLPEncoded().ToHex();
 }
示例#2
0
        public void ShouldCreateASignedTransaction()
        {
            var privateKey = "b5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
            var sendersAddress = "12890d2cce102216644c59daE5baed380d84830c";
            var publicKey =
                "87977ddf1e8e4c3f0a4619601fc08ac5c1dcf78ee64e826a63818394754cef52457a10a599cb88afb7c5a6473b7534b8b150d38d48a11c9b515dd01434cceb08";

            //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 Transaction("0x13f022d72158410433cbd66f5dd8bf6d2d129924", 10000, 324, 10000000000000, 21000);
            tx.Sign(new ECKey(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 Transaction(rlp.HexToByteArray());
            Assert.Equal(tx.Data, tx3.Data ?? new byte[] { });

            Debug.WriteLine(tx.ToJsonHex());

            var tx2 = new Transaction(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());
        }
示例#3
0
        public void TestTransactionFromUnSignedRLP()
        {
            var tx = new Transaction(RLP_ENCODED_UNSIGNED_TX.HexToByteArray());

            Assert.Equal(RLP_ENCODED_UNSIGNED_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.Equal(HASH_TX, tx.RawHash.ToHex());

            tx.Sign(new ECKey(KEY.HexToByteArray(), true));
            tx.Key.Verify(tx.RawHash, tx.Signature);
            Assert.Equal(EthECKey.GetPublicAddress(KEY), tx.Key.GetPublicAddress());
        }