Пример #1
0
        protected SignedTransaction Transfer(Address sender, List <PrivateKeyNotWallet> signers, Address receiver, Currency currency, Amount amount, List <TxDeclaration> declarations = null, PrivateKeyNotWallet feePayer = null, long?fees = null, TransactionMessage message = null)
        {
            if (message == null)
            {
                message = TransactionMessage.Empty;
            }
            var inputs = new List <TxInput>()
            {
                new TxInput(sender, currency, amount),
            };

            var outputs = new List <TxOutput>()
            {
                new TxOutput(receiver, currency, amount),
            };

            var feeTxInput = fees == null ? null : new TxInput(feePayer, Currency.BTC, fees);

            var transaction = new Transaction(declarations ?? new List <TxDeclaration>(), inputs, outputs, message, DateTime.UtcNow.AddMinutes(1).ToUnixTimestamp(), feeTxInput);

            var signed = new SignedTransaction(transaction);

            foreach (var signer in signers)
            {
                Assert.IsTrue(signer.SignTransaction(signed, Network));
            }

            if (feePayer != null && feePayer.Address != sender)
            {
                Assert.IsTrue(feePayer.SignTransaction(signed, Network));
            }

            return(signed);
        }
 public void OnSubmitted(SignedTransaction transaction)
 {
     using (locker.CreateLock())
     {
         transactions.Add(transaction.Hash, new TransactionSubmission(transaction));
     }
 }
Пример #3
0
        public async Task broadcast_transaction_synchronous()
        {
            var args = new SignedTransaction();
            var resp = await Api.BroadcastTransactionSynchronousAsync(args, CancellationToken.None).ConfigureAwait(false);

            TestPropetries(resp);
        }
Пример #4
0
        public async Task SerializeAndSignMultiActionTx()
        {
            var keyStore = new InMemoryKeyStore();
            var keyPair  = KeyPair.FromString("ed25519:2wyRcSwSuHtRVmkMCGjPwnzZmQLeXLzLLyED1NDMt4BjnKgQL6tF85yBx6Jr26D2dUNeC716RBoTxntVHsegogYw");
            await keyStore.SetKeyAsync("test", "test.near", keyPair);

            var publicKey = keyPair.GetPublicKey();

            var actions = new[]
            {
                Action.CreateAccount(),
                Action.DeployContract(new byte[] { 1, 2, 3 }),
                Action.FunctionCall("qqq", new byte[] { 1, 2, 3 }, 1000, 1000000),
                Action.Transfer(123),
                Action.Stake(1000000, publicKey),
                Action.AddKey(publicKey, AccessKey.FunctionCallAccessKey("zzz", new [] { "www" }, null)),
                Action.DeleteKey(publicKey),
                Action.DeleteAccount("123")
            };

            var blockHash = new ByteArray32()
            {
                Buffer = Base58.Decode("244ZQ9cgj3CQ6bWBdytfrJMuMQ1jdXLFGnr4HhvtCTnM")
            };
            var signedTransaction = await SignedTransaction.SignTransactionAsync("123", 1, actions, blockHash, new InMemorySigner(keyStore), "test.near", "test");

            const string expected = "Fo3MJ9XzKjnKuDuQKhDAC6fra5H2UWawRejFSEpPNk3Y";
            var          actual   = Base58.Encode(signedTransaction.Item1);

            Assert.AreEqual(expected, actual);
        }
        public string SignTransaction(string privateKey, string serializedTransactionBase64)
        {
            try
            {
                var serializedTransaction = System.Text.Encoding.UTF8.DecodeBase64(serializedTransactionBase64);
                var pkBytes     = new Bytes(privateKey);
                var wallet      = Lykke.Icon.Sdk.KeyWallet.Load(pkBytes);
                var transaction = TransactionDeserializer.Deserialize(serializedTransaction);
                var signedTr    = new SignedTransaction(transaction, wallet);
                var props       = signedTr.GetProperties();
                var serializedSignedTransaction = SignedTransaction.Serialize(props);
                var base64 = System.Text.Encoding.UTF8.EncodeBase64(serializedSignedTransaction);

                return(base64);
            }
            catch (Exception e)
            {
                if (e is FormatException || e is ArgumentOutOfRangeException)
                {
                    throw new ArgumentException(e.Message);
                }

                throw;
            }
        }
Пример #6
0
        public async Task <SignedTransaction> CallContract(KeyPair key, byte[] scriptHash, byte[] bytes,
                                                           string attachSymbol = null, IEnumerable <TransactionOutput> attachTargets = null)
        {
            if (string.IsNullOrEmpty(attachSymbol))
            {
                attachSymbol = "GAS";
            }

            if (attachTargets == null)
            {
                attachTargets = new List <TransactionOutput>();
            }

            var(inputs, outputs) = await GenerateInputsOutputs(key, attachSymbol, attachTargets);

            if (inputs.Count == 0)
            {
                throw new WalletException($"Not enough inputs for transaction");
            }

            var tx = new SignedTransaction
            {
                Type    = TransactionType.InvocationTransaction,
                Version = 0,
                Script  = bytes,
                Gas     = 0,
                Inputs  = inputs.ToArray(),
                Outputs = outputs.ToArray()
            };

            var result = await SignAndSendTransaction(tx);

            return(result ? tx : null);
        }
Пример #7
0
        /// <summary>
        /// Sign transaction given an array of transaction, require public keys, and chain id
        ///
        /// curl http://localhost:8889/v1/wallet/sign_transaction -X POST -d '[{"ref_block_num":21453,"ref_block_prefix":3165644999,"expiration":"2017-12-08T10:28:49","scope":["initb","initc"],"read_scope":[],"messages":[{"code":"currency","type":"transfer","authorization":[{"account":"initb","permission":"active"}],"data":"000000008093dd74000000000094dd74e803000000000000"}],"signatures":[]}, ["EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"], ""]'
        /// </summary>
        /// <param name="publicKeys"></param>
        /// <param name="trx"></param>
        /// <param name="chainId"></param>
        /// <param name="token">Throws a <see cref="T:System.OperationCanceledException" /> if this token has had cancellation requested.</param>
        /// <returns></returns>
        public async Task <OperationResult <SignedTransaction> > WalletSignTrx(SignedTransaction trx, PublicKey[] publicKeys, string chainId, CancellationToken token)
        {
            var endpoint = $"{WalletUrl}/v1/wallet/sign_transaction";
            var args     = new object[] { trx, publicKeys, chainId };

            return(await CustomPostRequest <SignedTransaction>(endpoint, args, token));
        }
Пример #8
0
        /// <summary>
        /// a convenience method for directly appending our signature to a raw tx file
        /// </summary>
        /// <param name="from">the public identity we are signing as</param>
        /// <param name="txBytes">the multisig transaction to append signature to</param>
        /// <returns>merged multisignature transaction inclukding our signature</returns>
        public byte[] AppendMultisigTransactionBytes(MultisigAddress from, byte[] txBytes)
        {
            SignedTransaction inTx     = Encoder.DecodeFromMsgPack <SignedTransaction>(txBytes);
            SignedTransaction appended = this.AppendMultisigTransaction(from, inTx);

            return(Encoder.EncodeToMsgPack(appended));
        }
Пример #9
0
        public bool Validate(SignedTransaction signed)
        {
            var timestamp = LedgerService.LedgerManager.GetLedgerBeginTime();

            // validate format
            if (!ValidateFormat(signed))
            {
                return(false);
            }

            // validate expiration
            // TODO use end time and not begin time
            if (!ValidateExpiration(signed.Transaction, timestamp))
            {
                return(false);
            }

            // validate signature
            if (!signed.CheckSignatures(LiveService.SignatureManager.TransactionRequiredValidationFactory, LedgerService.LedgerManager.Network, timestamp, LedgerService.LedgerManager.LedgerState))
            {
                return(false);
            }

            return(Validate(signed.Transaction));
        }
Пример #10
0
        private void createAssetTest(int numDecimal, string goldenString)
        {
            Address addr = new Address("BH55E5RMBD4GYWXGX5W5PJ5JAHPGM5OXKDQH5DC4O2MGI7NW4H6VOE4CP4");

            byte[]  gh           = Convert.FromBase64String("SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=");
            Address sender       = addr;
            Address manager      = addr;
            Address reserve      = addr;
            Address freeze       = addr;
            Address clawback     = addr;
            string  metadataHash = "fACPO4nRgO55j1ndAK3W6Sgc4APkcyFh";

            var tx = Transaction.CreateAssetCreateTransaction(sender, 10, 322575, 323575, null, null,
                                                              new Digest(gh), 100, numDecimal, false, "tst", "testcoin", "website",
                                                              Encoding.UTF8.GetBytes(metadataHash), manager, reserve, freeze, clawback);

            Transaction.AssetParams expectedParams = new Transaction.AssetParams(100, numDecimal, false, "tst", "testcoin",
                                                                                 "website", Encoding.UTF8.GetBytes(metadataHash), manager, reserve, freeze, clawback);

            Assert.AreEqual(expectedParams, tx.assetParams);
            SignedTransaction stx = DEFAULT_ACCOUNT.SignTransaction(tx);

            byte[]            encodedOut = Encoder.EncodeToMsgPack(stx);
            SignedTransaction decodedOut = Encoder.DecodeFromMsgPack <SignedTransaction>(encodedOut);

            Assert.AreEqual(decodedOut, stx);
            Assert.AreEqual(Convert.ToBase64String(encodedOut), goldenString);
            //Assert.AreEqual(decodedOut, stx);
            TestUtil.SerializeDeserializeCheck(stx);
        }
Пример #11
0
        public async Task TestSendIcxTransaction()
        {
            var provider    = GetMockProvider <Bytes>();
            var fromAddress = new Address("hxbe258ceb872e08851f1f59694dac2558708ece11");
            var toAddress   = new Address("hx5bfdb090f43a808005ffc27c25b213145e80b7cd");

            var transaction = TransactionBuilder.CreateBuilder()
                              .Nid(NetworkId.Main)
                              .From(fromAddress)
                              .To(toAddress)
                              .Value(BigInteger.Parse("0de0b6b3a7640000", NumberStyles.AllowHexSpecifier))
                              .StepLimit(BigInteger.Parse("012345", NumberStyles.AllowHexSpecifier))
                              .Timestamp(BigInteger.Parse("0563a6cf330136", NumberStyles.AllowHexSpecifier))
                              .Nonce(BigInteger.Parse("1"))
                              .Build();
            IWallet wallet            = KeyWallet.Load(new Bytes(SampleKeys.PrivateKeyString));
            var     signedTransaction = new SignedTransaction(transaction, wallet);

            var iconService = new IconService(provider.Object);
            await iconService.SendTransaction(signedTransaction);

            var expected = "xR6wKs+IA+7E91bT8966jFKlK5mayutXCvayuSMCrx9KB7670CsWa0B7LQzgsxU0GLXaovlAT2MLs1XuDiSaZQE=";

            provider.Verify(x =>
                            x.SendRequestAsync(It.Is <Request>(request => RequestCheckTestSendIcxTransaction(request, expected)),
                                               It.IsAny <IRpcConverter <Bytes> >()), Times.Once);
        }
Пример #12
0
        public void testMakeAssetRevocationTransaction()
        {
            Address addr = new Address("BH55E5RMBD4GYWXGX5W5PJ5JAHPGM5OXKDQH5DC4O2MGI7NW4H6VOE4CP4");

            byte[]  gh         = Convert.FromBase64String("SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=");
            Address revoker    = addr;
            Address revokeFrom = addr;
            Address receiver   = addr;

            ulong assetIndex      = 1;
            ulong firstValidRound = 322575;
            ulong lastValidRound  = 323575;
            ulong amountToSend    = 1;

            Transaction tx = Transaction.CreateAssetRevokeTransaction(revoker, revokeFrom, receiver, amountToSend,
                                                                      10, firstValidRound, lastValidRound, null, null, new Digest(gh), assetIndex);

            byte[]      outBytes = Encoder.EncodeToMsgPack(tx);
            Transaction o        = Encoder.DecodeFromMsgPack <Transaction>(outBytes);

            Assert.AreEqual(o, tx);

            SignedTransaction stx             = DEFAULT_ACCOUNT.SignTransaction(tx);
            string            encodedOutBytes = Convert.ToBase64String(Encoder.EncodeToMsgPack(stx));
            string            goldenstring    = "gqNzaWfEQHsgfEAmEHUxLLLR9s+Y/yq5WeoGo/jAArCbany+7ZYwExMySzAhmV7M7S8+LBtJalB4EhzEUMKmt3kNKk6+vAWjdHhuiqRhYW10AaRhcmN2xCAJ+9J2LAj4bFrmv23Xp6kB3mZ111Dgfoxcdphkfbbh/aRhc25kxCAJ+9J2LAj4bFrmv23Xp6kB3mZ111Dgfoxcdphkfbbh/aNmZWXNCqqiZnbOAATsD6JnaMQgSGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiKibHbOAATv96NzbmTEIAn70nYsCPhsWua/bdenqQHeZnXXUOB+jFx2mGR9tuH9pHR5cGWlYXhmZXKkeGFpZAE=";
            SignedTransaction stxDecoded      = Encoder.DecodeFromMsgPack <SignedTransaction>(Convert.FromBase64String(encodedOutBytes));

            Assert.AreEqual(stxDecoded, stx);
            Assert.AreEqual(encodedOutBytes, goldenstring);
            TestUtil.SerializeDeserializeCheck(stx);
        }
Пример #13
0
        public void testSerializationAssetFreeze()
        {
            Address addr = new Address("BH55E5RMBD4GYWXGX5W5PJ5JAHPGM5OXKDQH5DC4O2MGI7NW4H6VOE4CP4");

            byte[]  gh            = Convert.FromBase64String("SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=");
            Address sender        = addr;
            Address target        = addr;
            ulong   assetFreezeID = 1;
            bool    freezeState   = true;
            var     tx            = Transaction.CreateAssetFreezeTransaction(sender, target, freezeState, 10,
                                                                             322575, 323576, null, new Digest(gh), assetFreezeID);
            //Transaction tx = Transaction.AssetFreezeTransactionBuilder()
            //        .sender(sender)
            //        .freezeTarget(target)
            //        .freezeState(freezeState)
            //        .fee(10)
            //        .firstValid()
            //        .lastValid()
            //        .genesisHash(gh)
            //        .assetIndex(assetFreezeID)
            //        .build();
            SignedTransaction stx             = DEFAULT_ACCOUNT.SignTransaction(tx);
            string            encodedOutBytes = Convert.ToBase64String(Encoder.EncodeToMsgPack(stx));
            SignedTransaction o            = Encoder.DecodeFromMsgPack <SignedTransaction>(Convert.FromBase64String(encodedOutBytes));
            string            goldenstring = "gqNzaWfEQAhru5V2Xvr19s4pGnI0aslqwY4lA2skzpYtDTAN9DKSH5+qsfQQhm4oq+9VHVj7e1rQC49S28vQZmzDTVnYDQGjdHhuiaRhZnJ6w6RmYWRkxCAJ+9J2LAj4bFrmv23Xp6kB3mZ111Dgfoxcdphkfbbh/aRmYWlkAaNmZWXNCRqiZnbOAATsD6JnaMQgSGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiKibHbOAATv+KNzbmTEIAn70nYsCPhsWua/bdenqQHeZnXXUOB+jFx2mGR9tuH9pHR5cGWkYWZyeg==";

            Assert.AreEqual(encodedOutBytes, goldenstring);
            Assert.AreEqual(o, stx);
            TestUtil.SerializeDeserializeCheck(stx);
        }
Пример #14
0
        public static async Task getResponse()
        {
            try
            {
                Account sender   = Account.CreateFromPrivateKey("5cd5a454be8045056bd3c5e67c20dea92a8eb4921351d850f0249983a804a903", NetworkType.Types.TEST_NET);
                KeyPair keyPair1 = sender.KeyPair;

                Account reciever = Account.CreateFromPrivateKey("5cd5a454be8045056bd3c5e67c20dea92a8eb4921351d850f0249983a804a903", NetworkType.Types.TEST_NET);
                KeyPair keyPair2 = reciever.KeyPair;


                var transaction = TransferTransaction.Create(
                    NetworkType.Types.TEST_NET,
                    Deadline.CreateHours(2),
                    Address.CreateFromEncoded("TB2Z7J-R2K3BZ-2TRS6D-H5747F-Y3XKUM-BNWCI4-BPDJ"),
                    new List <Mosaic> {
                    Xem.CreateRelative(1)
                },
                    SecureMessage.Create("Well shit. W/ mosaic", sender.PrivateKey, reciever.PublicKey)
                    );


                SignedTransaction signedTransaction = transaction.SignWith(keyPair1);

                TransactionResponse response = await new TransactionHttp(host).Announce(signedTransaction);
                Console.WriteLine(response.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
            }
        }
Пример #15
0
        private bool ValidateTransaction(TestContext context, SignedTransaction signed)
        {
            // TODO
            var state = context.LedgerService.LedgerManager.LedgerState;

            return(context.LiveService.TransactionManager.TransactionValidator.ValidateBalance(state, signed.Transaction.GetInputs()));
        }
Пример #16
0
        public static async Task <bool> SendFromNewAccount(String message, Account newAcc)
        {
            KeyPair keyPair = KeyPair.CreateFromPrivateKey(newAcc.PrivateKey);

            var transaction = TransferTransaction.Create(
                NetworkType.Types.TEST_NET,
                Deadline.CreateHours(2),
                Address.CreateFromEncoded(Config.Address),
                new List <Mosaic> {
                Mosaic.CreateFromIdentifier("nem:xem", 10)
            },
                SecureMessage.Create(message, newAcc.PrivateKey, Config.PublicKey)
                );

            TransactionHttp   transactionHttp   = new TransactionHttp("http://" + Config.Domain + ":7890");
            SignedTransaction signedTransaction = transaction.SignWith(keyPair);

            Thread.Sleep(2000);
            await transactionHttp.Announce(signedTransaction);

            Thread.Sleep(2000);
            Console.WriteLine(signedTransaction.Hash);
            Console.WriteLine(Config.Address + " recve something from : " + newAcc.Address.Plain);

            return(true);
        }
Пример #17
0
        public async Task broadcast_transaction()
        {
            var args = new SignedTransaction();
            var resp = await Api.BroadcastTransaction(args, CancellationToken.None);

            TestPropetries(resp);
        }
 public static NotificationMessage CreateTransactionReceivedNotification(SignedTransaction transaction)
 {
     return(CreateNotification(new API.Notifications.TransactionReceived
     {
         Transaction = ByteStreamConverter.ToBase64 <ByteStream>(stream => { stream.Write(transaction); })
     }));
 }
Пример #19
0
 public static RequestMessage CreateSendSignedTransactionRequest(SignedTransaction transaction)
 {
     return(CreateRequest(new SendTransactionRequest
     {
         Transaction = ByteStreamConverter.ToBase64 <ByteStream>(stream => { stream.Write(transaction); })
     }));
 }
Пример #20
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="propertyApiObj"></param>
        /// <param name="userPrivateKeys"></param>
        /// <param name="token">Throws a <see cref="T:System.OperationCanceledException" /> if this token has had cancellation requested.</param>
        /// <param name="operations"></param>
        /// <returns></returns>
        /// <exception cref="T:System.OperationCanceledException">The token has had cancellation requested.</exception>
        public Task <SignedTransaction> CreateTransactionAsync(DynamicGlobalPropertyObject propertyApiObj, IList <byte[]> userPrivateKeys, BaseOperation[] operations, CancellationToken token)
        {
            return(Task.Run(() =>
            {
                var transaction = new SignedTransaction
                {
                    ChainId = ChainId,
                    RefBlockNum = (ushort)(propertyApiObj.HeadBlockNumber & 0xffff),
                    RefBlockPrefix = (uint)BitConverter.ToInt32(Hex.HexToBytes(propertyApiObj.HeadBlockId), 4),
                    Expiration = propertyApiObj.Time.Value.AddSeconds(30),
                    Operations = operations.Select(o => new Operation(o)).ToArray()
                };

                var msg = MessageSerializer.Serialize <SignedTransaction>(transaction);
                var data = Sha256Manager.GetHash(msg);

                transaction.Signatures = new string[userPrivateKeys.Count];
                for (var i = 0; i < userPrivateKeys.Count; i++)
                {
                    token.ThrowIfCancellationRequested();
                    var userPrivateKey = userPrivateKeys[i];
                    var sig = Secp256K1Manager.SignCompressedCompact(data, userPrivateKey);
                    transaction.Signatures[i] = Hex.ToString(sig);
                }

                return transaction;
            }, token));
        }
Пример #21
0
        public void ShouldCreateAggregateTransactionAndSignWithMultipleCosignatories()
        {
            TransferTransaction transferTx = TransferTransaction.Create(
                NetworkType.Types.MIJIN_TEST,
                FakeDeadline.Create(),
                new Address("SBILTA367K2LX2FEXG5TFWAS7GEFYAGY7QLFBYKC", NetworkType.Types.MIJIN_TEST),
                new List <Mosaic>(),
                PlainMessage.Create("test-message")

                );

            AggregateTransaction aggregateTx = AggregateTransaction.CreateComplete(
                NetworkType.Types.MIJIN_TEST,
                FakeDeadline.Create(),
                new List <Transaction>()
            {
                transferTx.ToAggregate(new PublicAccount("B694186EE4AB0558CA4AFCFDD43B42114AE71094F5A1FC4A913FE9971CACD21D", NetworkType.Types.MIJIN_TEST))
            });

            Account cosignatoryAccount  = new Account("2a2b1f5d366a5dd5dc56c3c757cf4fe6c66e2787087692cf329d7a49a594658b", NetworkType.Types.MIJIN_TEST);
            Account cosignatoryAccount2 = new Account("b8afae6f4ad13a1b8aad047b488e0738a437c7389d4ff30c359ac068910c1d59", NetworkType.Types.MIJIN_TEST);

            SignedTransaction signedTransaction = cosignatoryAccount.SignTransactionWithCosignatories(aggregateTx, new List <Account>()
            {
                cosignatoryAccount2
            });

            Assert.AreEqual("2D010000", signedTransaction.Payload.Substring(0, 8));
            Assert.AreEqual("5100000051000000", signedTransaction.Payload.Substring(240, 16));
        }
Пример #22
0
        public void TxDeclarationTest()
        {
            var account1 = CreateAccount();
            var account2 = CreateAccount();

            var secret       = Secret.GenerateSecret();
            var declarations = new List <TxDeclaration>()
            {
                new MultiSignature(new [] { account1.Address, account2.Address }, 2),
                new HashLock(secret.ComputeSecretHash(SecretHashType.SHA3)),
                new TimeLock(123),
                new SecretRevelation(secret)
            };

            var inputs = new List <TxInput>()
            {
                new TxInput(account1, Currency.BTC, Amount.FromWholeValue(10)),
                new TxInput(account2, Currency.LTC, Amount.FromWholeValue(30)),
            };

            var outputs = new List <TxOutput>()
            {
                new TxOutput(account2, Currency.BTC, Amount.FromWholeValue(10)),
                new TxOutput(account1, Currency.LTC, Amount.FromWholeValue(30)),
            };

            var transaction = new Transaction(declarations, inputs, outputs, TransactionMessage.Empty, DateTime.UtcNow.Ticks);
            var signed      = new SignedTransaction(transaction);

            var readed = WriteRead <SignedTransaction, ByteStream>(stream => stream.Write(signed), stream => stream.ReadSignedTransaction());

            Assert.IsTrue(signed.CompareSigned(readed));
        }
Пример #23
0
        public async Task SerializeAndSignTransferTx()
        {
            var keyStore = new InMemoryKeyStore();

            var keyPair = KeyPair.FromString("ed25519:3hoMW1HvnRLSFCLZnvPzWeoGwtdHzke34B2cTHM8rhcbG3TbuLKtShTv3DvyejnXKXKBiV7YPkLeqUHN1ghnqpFv");

            await keyStore.SetKeyAsync("test", "test.near", keyPair);

            var actions = new[] { Action.Transfer(1) };

            var blockHash = Base58.Decode("244ZQ9cgj3CQ6bWBdytfrJMuMQ1jdXLFGnr4HhvtCTnM");

            var signedTransaction = await SignedTransaction.SignTransactionAsync("whatever.near", 1, actions, new ByteArray32()
            {
                Buffer = blockHash
            }, new InMemorySigner(keyStore), "test.near", "test");

            const string expectedBase64String = "lpqDMyGG7pdV5IOTJVJYBuGJo9LSu0tHYOlEQ+l+HE8i3u7wBZqOlxMQDtpuGRRNp+ig735TmyBwi6HY0CG9AQ==";
            var          actualBase64String   = Convert.ToBase64String(signedTransaction.Item2.Signature.Data.Buffer);

            Assert.AreEqual(expectedBase64String, actualBase64String);

            const string expectedHexString = "09000000746573742e6e65617200917b3d268d4b58f7fec1b150bd68d69be3ee5d4cc39855e341538465bb77860d01000000000000000d00000077686174657665722e6e6561720fa473fd26901df296be6adc4cc4df34d040efa2435224b6986910e630c2fef601000000030100000000000000000000000000000000969a83332186ee9755e4839325525806e189a3d2d2bb4b4760e94443e97e1c4f22deeef0059a8e9713100eda6e19144da7e8a0ef7e539b20708ba1d8d021bd01";

            var serialized = signedTransaction.Item2.ToByteArray();

            var actualHexString = BitConverter.ToString(serialized).Replace("-", "").ToLower();

            Assert.AreEqual(expectedHexString, actualHexString);
        }
        private CustomTransactionFullInfo GetCustomTransactionFullInfo(SignedTransaction transaction,
                                                                       TransactionInfo info)
        {
            CustomTransactionFullInfo ret = new CustomTransactionFullInfo();

            if (transaction == null)
            {
                return(ret);
            }

            var customRawTransaction = new CustomRawTransaction(
                transaction.SignedTxn.ToByteArray());

            ret.RawTransaction = customRawTransaction;
            // ret.SenderPublicKey = transaction..ToByteArray().ByteArryToString();
            // ret.SenderSignature = transaction.SenderSignature.ToByteArray().ByteArryToString();
            if (info != null)
            {
                ret.GasUsed = info.GasUsed;
            }
            else
            {
                ret.GasUsed = 0;
            }



            return(ret);
        }
Пример #25
0
        public async Task <SignedTransaction> SignTransaction(Transaction transaction, PrivateKey privateKey)
        {
            return(await Task.Run(() =>
            {
                SignedTransaction stx = new SignedTransaction()
                {
                    Transaction = transaction
                };

                byte[] packed_trx;
                using (MemoryStream ms = new MemoryStream())
                    using (BinaryWriter writer = new BinaryWriter(ms))
                    {
                        transaction.WriteBytes(writer);
                        packed_trx = ms.ToArray();
                    }

                stx.PackedTransaction = packed_trx.ToHex();

                byte[] data = transaction.ChainId.FromHex().Concat(packed_trx, new byte[32]);

                string signature = privateKey.SignData(data);

                stx.Signatures = new List <string>()
                {
                    signature
                };

                // TODO: compression type
                stx.Compression = "none";

                return stx;
            }));
        }
Пример #26
0
        public static async Task getResponse()
        {
            try
            {
                Account account = Account.CreateFromPrivateKey("5cd5a454be8045056bd3c5e67c20dea92a8eb4921351d850f0249983a804a903", NetworkType.Types.TEST_NET);
                KeyPair keyPair = account.KeyPair;


                var transaction = TransferTransaction.Create(
                    NetworkType.Types.TEST_NET,
                    Deadline.CreateHours(2),
                    Address.CreateFromEncoded("TB2Z7J-R2K3BZ-2TRS6D-H5747F-Y3XKUM-BNWCI4-BPDJ"),
                    new List <Mosaic> {
                    Xem.CreateRelative(10)
                },
                    PlainMessage.Create("Well shit. W/ mosaic")
                    );


                SignedTransaction signedTransaction = transaction.SignWith(keyPair);

                TransactionResponse response = await new TransactionHttp("http://" + Config.Domain + ":7890").Announce(signedTransaction);
                Console.WriteLine(response.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
            }
        }
Пример #27
0
        public async Task <string> BroadcastTransactionAsync(string signedTransaction)
        {
            var result = await new TransactionHttp(_nemUrl).Announce(SignedTransaction.FromJson(signedTransaction));

            // see https://nemproject.github.io/#nemRequestResult
            // for meaning of the code

            switch (result.Code)
            {
            case 0:
            case 1:
                // success
                break;

            case 3:
            case 9:
                throw new BlockchainException(BlockchainErrorCode.BuildingShouldBeRepeated, "Transaction expired");

            case 7:
                throw new BlockchainException(BlockchainErrorCode.BuildingShouldBeRepeated, "Transaction hash duplicated");

            case 5:
                throw new BlockchainException(BlockchainErrorCode.NotEnoughBalance, "Not enough balance");

            default:
                throw new ArgumentException(result.Message);
            }

            return(null);
        }
Пример #28
0
        public static void DisplayTransaction(SignedTransaction signed)
        {
            var transaction = signed.Transaction;
            var hash        = signed.Hash;
            var expire      = TimeFormat.ToDateTime(transaction.Expire);
            var message     = TransactionMessageFormat.ToString(transaction.Message);

            Console.WriteLine("------------------------------");
            Console.WriteLine($"Transaction Hash {hash.ToBase64()} Expire {expire} Message {message}");

            Console.WriteLine("Inputs :");
            foreach (var input in transaction.Inputs)
            {
                DisplayTxInputOutput(input);
            }

            Console.WriteLine("Outputs :");
            foreach (var output in transaction.Outputs)
            {
                DisplayTxInputOutput(output);
            }

            if (transaction.Fees != null)
            {
                DisplayTxInputOutput(transaction.Fees);
            }
        }
    public override async Task <Success> SubmitAirDropTransaction(SignedTransaction request, ServerCallContext context)
    {
        await this.InitializeWalletsAsync();

        var tx = stellar_dotnet_sdk.Transaction.FromEnvelopeXdr(request.Xdr);

        tx.Sign(_airDropWallet.KeyPairWithSecretSeed, _airDropWallet.NetworkInfo);

        var xdr = tx.ToEnvelopeXdrBase64();

        Console.WriteLine(xdr);
        Console.WriteLine();
        Console.WriteLine();

        var response = await _airDropWallet.Server.SubmitTransaction(tx);

        if (!response.IsSuccess())
        {
            Console.WriteLine($"Failure Message: {response.ResultXdr}");
        }

        return(new Success()
        {
            Success_ = response.IsSuccess()
        });
    }
        public void CheckVerificationMalformedSignature()
        {
            var randomKey = KeyWallet.Create();
            var from      = wallet.GetAddress();
            var to        = new Address("hx5bfdb090f43a808005ffc27c25b213145e80b7cd");

            var transaction = TransactionBuilder.CreateBuilder()
                              .Nid(NetworkId.Main)
                              .From(from)
                              .To(to)
                              .Value(BigInteger.Parse("0de0b6b3a7640000", NumberStyles.AllowHexSpecifier))
                              .StepLimit(BigInteger.Parse("12345", NumberStyles.AllowHexSpecifier))
                              .Timestamp(BigInteger.Parse("563a6cf330136", NumberStyles.AllowHexSpecifier))
                              .Nonce(BigInteger.Parse("1"))
                              .Build();

            var signedTransaction = new SignedTransaction(transaction, wallet);
            var transactionProps  = signedTransaction.GetTransactionProperties();
            var allProps          = signedTransaction.GetProperties();
            var hash      = SignedTransaction.GetTransactionHash(transactionProps);
            var signature = Base64.Decode(allProps.GetItem("signature").ToString());

            signature[64] = 212;
            var result = EcdsaSignature.VerifySignature(randomKey.GetAddress(), signature, hash);

            Assert.False(result);
        }