Пример #1
0
        public void TestChangeTrustOperation()
        {
            // GC5SIC4E3V56VOHJ3OZAX5SJDTWY52JYI2AFK6PUGSXFVRJQYQXXZBZF
            var source = KeyPair.FromSecretSeed("SC4CGETADVYTCR5HEAVZRB3DZQY5Y4J7RFNJTRA6ESMHIPEZUSTE2QDK");

            Asset asset = new AssetTypeNative();
            var   limit = "922337203685.4775807";

            var operation = new ChangeTrustOperation.Builder(asset, limit)
                            .SetSourceAccount(source)
                            .Build();

            var xdr             = operation.ToXdr();
            var parsedOperation = (ChangeTrustOperation)Operation.FromXdr(xdr);

            Assert.AreEqual(9223372036854775807L, xdr.Body.ChangeTrustOp.Limit.InnerValue);
            Assert.AreEqual(source.AccountId, parsedOperation.SourceAccount.AccountId);
            Assert.IsTrue(parsedOperation.Asset is AssetTypeNative);
            Assert.AreEqual(limit, parsedOperation.Limit);
            Assert.AreEqual(OperationThreshold.Medium, parsedOperation.Threshold);

            Assert.AreEqual(
                "AAAAAQAAAAC7JAuE3XvquOnbsgv2SRztjuk4RoBVefQ0rlrFMMQvfAAAAAYAAAAAf/////////8=",
                operation.ToXdrBase64());
        }
Пример #2
0
        public void ChangeTrustOperation()
        {
            // GC5SIC4E3V56VOHJ3OZAX5SJDTWY52JYI2AFK6PUGSXFVRJQYQXXZBZF
            var source    = KeyPair.FromSeed("SC4CGETADVYTCR5HEAVZRB3DZQY5Y4J7RFNJTRA6ESMHIPEZUSTE2QDK");
            var assetCode = "EUR";
            var asset     = new Stellar.Generated.Asset
            {
                Discriminant = Stellar.Generated.AssetType.Create(
                    Stellar.Generated.AssetType.AssetTypeEnum.ASSET_TYPE_CREDIT_ALPHANUM4),
                AlphaNum4 = new Stellar.Generated.Asset.AssetAlphaNum4
                {
                    AssetCode = Encoding.ASCII.GetBytes(assetCode),
                    Issuer    = source.AccountId
                }
            };

            long limit = 100;

            ChangeTrustOperation operation = new ChangeTrustOperation.Builder(asset, limit)
                                             .SetSourceAccount(source)
                                             .Build();

            Stellar.Generated.Operation xdr             = operation.ToXdr();
            ChangeTrustOperation        parsedOperation = Stellar.ChangeTrustOperation.FromXdr(xdr);

            Assert.AreEqual(source.Address, parsedOperation.SourceAccount.Address);
            Assert.AreEqual("EUR", Encoding.ASCII.GetString(parsedOperation.Asset.AlphaNum4.AssetCode));
            Assert.AreEqual(Stellar.Generated.AssetType.AssetTypeEnum.ASSET_TYPE_CREDIT_ALPHANUM4,
                            parsedOperation.Asset.Discriminant.InnerValue);
            Assert.AreEqual(limit, parsedOperation.Limit);
            Assert.AreEqual("AAAAAQAAAAC7JAuE3XvquOnbsgv2SRztjuk4RoBVefQ0rlrFMMQvfAAAAAYAAAABRVVSAAAAAAC7JAuE3XvquOnbsgv2SRztjuk4RoBVefQ0rlrFMMQvfAAAAAAAAABk",
                            operation.ToXdrBase64());
        }
        public void ChangeTrustOperation()
        {
            // GC5SIC4E3V56VOHJ3OZAX5SJDTWY52JYI2AFK6PUGSXFVRJQYQXXZBZF
            KeyPair source    = KeyPair.FromSeed("SC4CGETADVYTCR5HEAVZRB3DZQY5Y4J7RFNJTRA6ESMHIPEZUSTE2QDK");
            var     assetCode = "EUR";
            var     asset     = new Asset(assetCode, source);

            long limit = 100;

            ChangeTrustOperation operation = new ChangeTrustOperation.Builder(asset, limit)
                                             .SetSourceAccount(source)
                                             .Build();

            Assert.AreEqual(source.Address, operation.SourceAccount.Address);
            Assert.AreEqual(assetCode, operation.Asset.Code);
            Assert.AreEqual(asset.Issuer.Address, operation.Asset.Issuer.Address);
            Assert.AreEqual(asset.Type, operation.Asset.Type);
            Assert.AreEqual(limit, operation.Limit);
            Assert.AreEqual("AAAAAQAAAAC7JAuE3XvquOnbsgv2SRztjuk4RoBVefQ0rlrFMMQvfAAAAAYAAAABRVVSAAAAAAC7JAuE3XvquOnbsgv2SRztjuk4RoBVefQ0rlrFMMQvfAAAAAAAAABk",
                            operation.ToXdrBase64());

            Stellar.Generated.Operation xdr             = operation.ToXDR();
            ChangeTrustOperation        parsedOperation = Stellar.ChangeTrustOperation.FromXDR(xdr);

            Assert.AreEqual(source.Address, parsedOperation.SourceAccount.Address);
            Assert.AreEqual("EUR", parsedOperation.Asset.Code);
            Assert.AreEqual(source.Address, parsedOperation.Asset.Issuer.Address);
            Assert.AreEqual(limit, parsedOperation.Limit);
        }
        /// <summary>
        /// Builds and configures Centaurus vault
        /// </summary>
        /// <returns>Transaction cursor</returns>
        private async Task <long> BuildAndConfigureVault(stellar_dotnet_sdk.responses.AccountResponse vaultAccount)
        {
            var majority = MajorityHelper.GetMajorityCount(constellationInitInfo.Auditors.Count());

            var sourceAccount = await StellarAccountHelper.GetStellarAccount(vaultAccount.KeyPair);

            var transactionBuilder = new TransactionBuilder(sourceAccount);

            transactionBuilder.SetFee(10_000);

            var existingTrustlines = vaultAccount.Balances
                                     .Where(b => b.Asset is stellar_dotnet_sdk.AssetTypeCreditAlphaNum)
                                     .Select(b => b.Asset)
                                     .Cast <stellar_dotnet_sdk.AssetTypeCreditAlphaNum>();

            foreach (var a in constellationInitInfo.Assets)
            {
                var asset = a.ToAsset() as stellar_dotnet_sdk.AssetTypeCreditAlphaNum;

                if (asset == null)                                                                  //if null than asset is stellar_dotnet_sdk.AssetTypeNative
                {
                    throw new InvalidOperationException("Native assets are supported by default."); //better to throw exception to avoid confusions with id
                }
                if (existingTrustlines.Any(t => t.Code == asset.Code && t.Issuer == asset.Issuer))
                {
                    continue;
                }

                var trustOperation = new ChangeTrustOperation.Builder(asset, "922337203685.4775807");
                transactionBuilder.AddOperation(trustOperation.Build());
            }

            var optionOperationBuilder = new SetOptionsOperation.Builder()
                                         .SetMasterKeyWeight(0)
                                         .SetLowThreshold(majority)
                                         .SetMediumThreshold(majority)
                                         .SetHighThreshold(majority);

            transactionBuilder.AddOperation(optionOperationBuilder.Build());

            foreach (var signer in constellationInitInfo.Auditors)
            {
                transactionBuilder.AddOperation(new SetOptionsOperation.Builder().SetSigner(Signer.Ed25519PublicKey(signer), 1).Build());
            }

            var transaction = transactionBuilder.Build();

            transaction.Sign(Global.Settings.KeyPair);

            var result = await Global.StellarNetwork.Server.SubmitTransaction(transaction);

            if (!result.IsSuccess())
            {
                throw new Exception($"Transaction failed. Result Xdr: {result.ResultXdr}");
            }

            var tx = await Global.StellarNetwork.Server.Transactions.Transaction(result.Hash);

            return(long.Parse(tx.PagingToken));
        }
Пример #5
0
        public async Task <bool> ChangeTrustVoteToken(string pubKey, string secretKey)
        {
            //Set network and server
            Network.UseTestNetwork();
            Server server = new Server("https://horizon-testnet.stellar.org");

            var nonNativeAsset = Asset.Create(null, this.VoteToken, IssueAccount.PublicKey);

            var source = KeyPair.FromSecretSeed(secretKey);

            var limit = "100";

            AccountResponse accountResponse = await server.Accounts.Account(source.AccountId);

            Account sourceAccount = new Account(source.AccountId, accountResponse.SequenceNumber);

            var sourceSponsor = KeyPair.FromSecretSeed(DistributionAccount.SecretSeed);

            var sponsored = KeyPair.FromAccountId(pubKey);

            var operationStartSponsor = new BeginSponsoringFutureReservesOperation.Builder(sponsored)
                                        .SetSourceAccount(sourceSponsor)
                                        .Build();

            var operation = new ChangeTrustOperation.Builder(nonNativeAsset, limit)
                            .SetSourceAccount(source)
                            .Build();

            var operationEndSponsoring = new EndSponsoringFutureReservesOperation.Builder()
                                         .SetSourceAccount(source)
                                         .Build();

            Transaction innerTransaction = new TransactionBuilder(sourceAccount)
                                           .SetFee(100)
                                           .AddOperation(operationStartSponsor)
                                           .AddOperation(operation)
                                           .AddOperation(operationEndSponsoring)
                                           .Build();

            //Sign Transaction
            innerTransaction.Sign(sourceSponsor);
            innerTransaction.Sign(source);

            var feeSource = sourceSponsor;
            var finalTx   = TransactionBuilder.BuildFeeBumpTransaction(feeSource, innerTransaction, 100);

            finalTx.Sign(feeSource);
            //Try to send the transaction
            try
            {
                var response = await this.SubmitTransaction(finalTx.ToEnvelopeXdrBase64());

                return(response.IsSuccess());
            }
            catch (Exception exception)
            {
                return(false);
            }
        }
Пример #6
0
        /// <summary>
        /// Builds and configures Centaurus vault
        /// </summary>
        /// <returns>Transaction cursor</returns>
        private async Task <long> BuildAndConfigureVault(AccountModel vaultAccount)
        {
            var majority = MajorityHelper.GetMajorityCount(constellationInitInfo.Auditors.Count());

            var sourceAccount = await Context.StellarDataProvider.GetAccountData(vaultAccount.KeyPair.AccountId);

            var transactionBuilder = new TransactionBuilder(sourceAccount.ToITransactionBuilderAccount());

            transactionBuilder.SetFee(10_000);

            foreach (var a in constellationInitInfo.Assets)
            {
                if (a.IsXlm)
                {
                    throw new InvalidOperationException("Native assets are supported by default."); //better to throw exception to avoid confusions with id
                }
                if (vaultAccount.ExistingTrustLines.Any(ta => ta == a.ToString()))
                {
                    continue;
                }

                var trustOperation = new ChangeTrustOperation.Builder(a.ToAsset(), "922337203685.4775807");
                transactionBuilder.AddOperation(trustOperation.Build());
            }

            var optionOperationBuilder = new SetOptionsOperation.Builder()
                                         .SetMasterKeyWeight(0)
                                         .SetLowThreshold(majority)
                                         .SetMediumThreshold(majority)
                                         .SetHighThreshold(majority);

            transactionBuilder.AddOperation(optionOperationBuilder.Build());

            foreach (var signer in constellationInitInfo.Auditors)
            {
                transactionBuilder.AddOperation(new SetOptionsOperation.Builder().SetSigner(Signer.Ed25519PublicKey(signer), 1).Build());
            }

            var transaction = transactionBuilder.Build();

            transaction.Sign(Context.Settings.KeyPair);

            var result = await Context.StellarDataProvider.SubmitTransaction(transaction);

            if (!result.IsSuccess)
            {
                throw new Exception($"Transaction failed. Result Xdr: {result.ResultXdr}");
            }

            var tx = await Context.StellarDataProvider.GetTransaction(result.Hash);

            return(tx.PagingToken);
        }
Пример #7
0
        private static async Task <SubmitTransactionResponse> SendAllowKinTrustOperation(KeyPair account, AccountResponse accountResponse)
        {
            ChangeTrustOperation.Builder changeTrustOperationBuilder = new ChangeTrustOperation.Builder((AssetTypeCreditAlphaNum)KinAsset,
                                                                                                        TRUST_NO_LIMIT_VALUE).SetSourceAccount(account);

            ChangeTrustOperation changeTrustOperation = changeTrustOperationBuilder.Build();

            Transaction.Builder allowKinTrustTransaction =
                new Transaction.Builder(new Account(account, accountResponse.SequenceNumber)).AddOperation(changeTrustOperation);

            Transaction transaction = allowKinTrustTransaction.Build();

            transaction.Sign(account);
            return(await Server.SubmitTransaction(transaction).ConfigureAwait(false));
        }
Пример #8
0
        async Task CreateSurveyAsset(string asset_code)
        {
            Network network = new Network("Public Global Stellar Network ; September 2015");
            Server  server  = new Server("https://horizon.stellar.org");

            Network.UsePublicNetwork();
            KeyPair issuerKeypair      = KeyPair.FromAccountId("SEED");
            KeyPair destinationKeyPair = KeyPair.FromSecretSeed("PUBLIC");

            AccountResponse destinationAccountResponse = null;
            var             t = Task.Run(async() =>
            {
                destinationAccountResponse = await server.Accounts.Account(destinationKeyPair);
            });

            t.Wait();
            Account destinationAccount = new Account(destinationAccountResponse.KeyPair, destinationAccountResponse.SequenceNumber);
            Asset   asset = new AssetTypeCreditAlphaNum12(asset_code, issuerKeypair);
            ChangeTrustOperation operation   = new ChangeTrustOperation.Builder(asset, "100000000000").Build();
            Transaction          transaction = new Transaction.Builder(destinationAccount).AddOperation(operation).Build();

            try
            {
                transaction.Sign(destinationKeyPair);

                var tSign = Task.Run(async() =>
                {
                    await server.SubmitTransaction(transaction);
                });
                tSign.Wait();


                //    await GetCoinsFromIssuer(asset_code,100);
            }
            catch (Exception exception)
            {
                Console.WriteLine("Send Transaction Failed");
                Console.WriteLine("Exception: " + exception.Message);
            }
        }