public async void ShouldBuildValidFungibleCurrencyTransaction()
        {
            string address    = "0x0e5e50883f3a1dd73c170c935339bce1b24a96d0";
            string privateKey = "0xac32ae83a4067291cda7a268e316376338bef6b63f66d10b8b516c76093c677e";

            string addressTo = "0xdd15a3ba1287a1069be49a6ebee9ebdb84eafd31";
            string currency  = "0x3e967151f952ec2bef08107e108747f715bb8b70";

            var utxos = await PlasmaAPIService.GetUtxos(address);

            RawTransactionEncoder txEncoder = new RawTransactionEncoder();

            PlasmaCore.Transactions.Transaction tx = FCTransactionBuilder.Build(address, addressTo, utxos, new BigInteger(1), currency);

            var signedEncodedTx = PlasmaCoreTestsHelper.Sign(txEncoder, tx, address, privateKey);

            Assert.Equal("0xf901daf9010cb841200d2b4370aac48a5bd9b404224395e6a2395d634973cc7bdf36a2091382a2772670b839b769617e3d2bd992e0dfe6fd1e4515cce060afa5f4f47aec45e555f91cb841200d2b4370aac48a5bd9b404224395e6a2395d634973cc7bdf36a2091382a2772670b839b769617e3d2bd992e0dfe6fd1e4515cce060afa5f4f47aec45e555f91cb841200d2b4370aac48a5bd9b404224395e6a2395d634973cc7bdf36a2091382a2772670b839b769617e3d2bd992e0dfe6fd1e4515cce060afa5f4f47aec45e555f91cb841200d2b4370aac48a5bd9b404224395e6a2395d634973cc7bdf36a2091382a2772670b839b769617e3d2bd992e0dfe6fd1e4515cce060afa5f4f47aec45e555f91cd6c58207d08080c5820bb88080c3048080c58203e88001f8b2eb94dd15a3ba1287a1069be49a6ebee9ebdb84eafd31943e967151f952ec2bef08107e108747f715bb8b7001ed940e5e50883f3a1dd73c170c935339bce1b24a96d0943e967151f952ec2bef08107e108747f715bb8b7082d6cfeb94000000000000000000000000000000000000000094000000000000000000000000000000000000000080eb94000000000000000000000000000000000000000094000000000000000000000000000000000000000080",
                         signedEncodedTx.ToLower());

            PlasmaCore.Transactions.Transaction decodedTransaction = txEncoder.CreateTransaction(signedEncodedTx.HexToByteArray());
            Assert.Equal(signedEncodedTx, txEncoder.EncodeSigned(decodedTransaction).ToHex(true));


            // other currency
            currency = "0x3f83c7446190ae039c54506b0f65ea8ee790ee7e";
            tx       = FCTransactionBuilder.Build(address, addressTo, utxos, new BigInteger(1), currency);

            signedEncodedTx = PlasmaCoreTestsHelper.Sign(txEncoder, tx, address, privateKey);
            Assert.Equal("0xf90151f886b8411841224d01b5aad18730b257ceaac891d00c2fee3a90b196b855660569f8f34708031d97603c2664b7580e19090e4037fa679aa262c4f62c771a88190110feb81cb8411841224d01b5aad18730b257ceaac891d00c2fee3a90b196b855660569f8f34708031d97603c2664b7580e19090e4037fa679aa262c4f62c771a88190110feb81cd4c58298581901c58223283f01c3808080c3808080f8b2eb94dd15a3ba1287a1069be49a6ebee9ebdb84eafd31943f83c7446190ae039c54506b0f65ea8ee790ee7e01ed940e5e50883f3a1dd73c170c935339bce1b24a96d0943f83c7446190ae039c54506b0f65ea8ee790ee7e82d47deb94000000000000000000000000000000000000000094000000000000000000000000000000000000000080eb94000000000000000000000000000000000000000094000000000000000000000000000000000000000080",
                         signedEncodedTx.ToLower());

            decodedTransaction = txEncoder.CreateTransaction(signedEncodedTx.HexToByteArray());
            Assert.Equal(signedEncodedTx, txEncoder.EncodeSigned(decodedTransaction).ToHex(true));
        }
Пример #2
0
        public async void ShouldSignCorrectly()
        {
            await Task.Yield();

            string privateKey = "0xa07cb7889ab3a164dcc72cb6103f2573c7ef2d4a855810594d2bf25df60bc39e";

            PlasmaCore.Transactions.Transaction transaction = new PlasmaCore.Transactions.Transaction();
            transaction.AddInput(2000, 0, 1);
            transaction.AddOutput("0xf86b5b1c2c8de1ea4dc737c849272340fa3561c5", "0x0000000000000000000000000000000000000000", 123);
            transaction.AddOutput("0xf86b5b1c2c8de1ea4dc737c849272340fa3561c5", "0x0000000000000000000000000000000000000000", 5555308);

            TypedDataTransactionEncoder txEncoder = new TypedDataTransactionEncoder(omgDomain);

            byte[] encodedTx      = txEncoder.EncodeRaw(transaction);
            var    rawHash        = new Sha3Keccack().CalculateHash(encodedTx);
            var    ecKey          = new Nethereum.Signer.EthECKey(privateKey);
            var    ecdsaSignature = ecKey.SignAndCalculateV(rawHash);

            string signature = Nethereum.Signer.EthECDSASignature.CreateStringSignature(ecdsaSignature);

            Assert.Equal("0xed0ff5633cb85aa0f64684759185f8a9f94fd1b654be5942d562bf64f504e3a96a83b90a5e50e50b8a75d4f711d1c0e56066519237dbd94e564084a561b8ba2f1b",
                         signature.EnsureHexPrefix());

            transaction.SetSignature(0, signature.HexToByteArray());

            var signedEncodedTx = txEncoder.EncodeSigned(transaction).ToHex(true);

            Assert.Equal("0xf9012ef843b841ed0ff5633cb85aa0f64684759185f8a9f94fd1b654be5942d562bf64f504e3a96a83b90a5e50e50b8a75d4f711d1c0e56066519237dbd94e564084a561b8ba2f1bd2c58207d08001c3808080c3808080c3808080f8b3eb94f86b5b1c2c8de1ea4dc737c849272340fa3561c59400000000000000000000000000000000000000007bee94f86b5b1c2c8de1ea4dc737c849272340fa3561c59400000000000000000000000000000000000000008354c46ceb94000000000000000000000000000000000000000094000000000000000000000000000000000000000080eb94000000000000000000000000000000000000000094000000000000000000000000000000000000000080a00000000000000000000000000000000000000000000000000000000000000000",
                         signedEncodedTx.EnsureHexPrefix());
        }
Пример #3
0
        /// <summary>
        /// Signs transaction
        /// </summary>
        /// <param name="profile">profile of the signer</param>
        /// <param name="transaction">transaction to sign</param>
        /// <returns>encoded signed transaction</returns>
        public async Task <string> SignTransaction(Profile profile, PlasmaCore.Transactions.Transaction transaction)
        {
            byte[] encodedTx = transactionEncoder.EncodeRaw(transaction);
            string signature = await profile.SignTransaction(encodedTx);

            transaction.SetSignature(profile.ID, signature.HexToByteArray());
            return(transactionEncoder.EncodeSigned(transaction).ToHex(true));
        }
Пример #4
0
        /// <summary>
        /// Deposits given amount of ether (wei) to the child chain
        /// </summary>
        /// <param name="profileFrom">profile of the sender</param>
        /// <param name="amount">amount of ether (wei) to send</param>
        /// <returns>transaction object</returns>
        public async Task <BCTransaction> Deposit(Profile profileFrom, BigInteger amount)
        {
            if (rootChainContract != null)
            {
                var depositPlasmaTx = new PlasmaCore.Transactions.Transaction();
                depositPlasmaTx.AddOutput(profileFrom.ID, ZERO_ADDRESS, amount);

                RawTransactionEncoder txEncoder = new RawTransactionEncoder();
                byte[] encodedDepositTx         = txEncoder.EncodeRaw(depositPlasmaTx);

                var depositTx = await rootChainContract.Deposit(web3, profileFrom.ID, encodedDepositTx, amount);

                string signedDepositTx = await SignTransaction(profileFrom, depositTx);

                return(await SubmitTransactionOnRootChain(web3, signedDepositTx));
            }
            return(null);
        }
        public async void ShouldSendFungibleCurrencyTransaction()
        {
            string address    = "0x0e5e50883f3a1dd73c170c935339bce1b24a96d0";
            string privateKey = "0xac32ae83a4067291cda7a268e316376338bef6b63f66d10b8b516c76093c677e";

            string addressTo = "0xdd15a3ba1287a1069be49a6ebee9ebdb84eafd31";
            string currency  = "0x3e967151f952ec2bef08107e108747f715bb8b70";

            var utxos = await PlasmaAPIService.GetUtxos(address);

            RawTransactionEncoder txEncoder = new RawTransactionEncoder();

            PlasmaCore.Transactions.Transaction tx = FCTransactionBuilder.Build(address, addressTo, utxos, new BigInteger(1), currency);

            var signedEncodedTx = PlasmaCoreTestsHelper.Sign(txEncoder, tx, address, privateKey);

            Assert.Equal("0xf901daf9010cb841200d2b4370aac48a5bd9b404224395e6a2395d634973cc7bdf36a2091382a2772670b839b769617e3d2bd992e0dfe6fd1e4515cce060afa5f4f47aec45e555f91cb841200d2b4370aac48a5bd9b404224395e6a2395d634973cc7bdf36a2091382a2772670b839b769617e3d2bd992e0dfe6fd1e4515cce060afa5f4f47aec45e555f91cb841200d2b4370aac48a5bd9b404224395e6a2395d634973cc7bdf36a2091382a2772670b839b769617e3d2bd992e0dfe6fd1e4515cce060afa5f4f47aec45e555f91cb841200d2b4370aac48a5bd9b404224395e6a2395d634973cc7bdf36a2091382a2772670b839b769617e3d2bd992e0dfe6fd1e4515cce060afa5f4f47aec45e555f91cd6c58207d08080c5820bb88080c3048080c58203e88001f8b2eb94dd15a3ba1287a1069be49a6ebee9ebdb84eafd31943e967151f952ec2bef08107e108747f715bb8b7001ed940e5e50883f3a1dd73c170c935339bce1b24a96d0943e967151f952ec2bef08107e108747f715bb8b7082d6cfeb94000000000000000000000000000000000000000094000000000000000000000000000000000000000080eb94000000000000000000000000000000000000000094000000000000000000000000000000000000000080",
                         signedEncodedTx.ToLower());

            TransactionReceipt receipt = await PlasmaAPIService.SubmitTransaction(signedEncodedTx);

            Assert.NotNull(receipt);
        }