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()); }
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)); }
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); } }
/// <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); }
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)); }
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); } }