This repository was archived by the owner on Feb 28, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathProgram.cs
138 lines (107 loc) · 4.33 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using Stellar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace Examples
{
using UrlContent = KeyValuePair<string, string>;
class Program
{
static string horizon_url = "https://horizon-testnet.stellar.org/";
static string network_passphrase = "Test SDF Network ; September 2015";
static void Main(string[] args)
{
Stellar.Network.CurrentNetwork = network_passphrase;
// seed from account on the testnetwork
var myKeyPair = KeyPair.FromSeed("SDMJOANF6CDRHWVG3N6I34VHFEWD2KK5I5SPGFU5FDB6SY5FJNXTWN24");
Account myAccount = new Account(myKeyPair, GetSequence(myKeyPair.Address));
var randomAccountKeyPair = CreateRandomAccount(myAccount, 1000 * Stellar.One.Value);
Payment(myKeyPair, randomAccountKeyPair, 10 * Stellar.One.Value);
// Wait for input to prevent the cmd window from closing
Console.Read();
}
static string GetResult(string msg)
{
using (var client = new HttpClient())
{
string response = client.GetStringAsync(horizon_url + WebUtility.UrlEncode(msg)).Result;
return response;
}
}
static HttpResponseMessage PostResult(string tx)
{
using (var client = new HttpClient())
{
var body = new List<UrlContent>();
body.Add(new UrlContent("tx", tx));
var formUrlEncodedContent = new FormUrlEncodedContent(body);
return client.PostAsync(horizon_url + "transactions", formUrlEncodedContent).Result;
}
}
private static long GetSequence(string address)
{
using (var client = new HttpClient())
{
string response = client.GetStringAsync(horizon_url + "accounts/" + address).Result;
var json = JObject.Parse(response);
return (long)json["sequence"];
}
}
static KeyPair CreateRandomAccount(Account source, long nativeAmount)
{
var dest = KeyPair.Random();
var operation =
new CreateAccountOperation.Builder(dest, nativeAmount)
.SetSourceAccount(source.KeyPair)
.Build();
source.IncrementSequenceNumber();
Stellar.Transaction transaction =
new Stellar.Transaction.Builder(source)
.AddOperation(operation)
.Build();
transaction.Sign(source.KeyPair);
var tx = transaction.ToEnvelopeXdrBase64();
var response = PostResult(tx);
Console.WriteLine("response:" + response.ReasonPhrase);
Console.WriteLine(dest.Address);
Console.WriteLine(dest.Seed);
return dest;
}
private static void DecodeTransactionResult(string result)
{
var bytes = Convert.FromBase64String(result);
var reader = new Stellar.Generated.ByteReader(bytes);
var txResult = Stellar.Generated.TransactionResult.Decode(reader);
}
private static void DecodeTxFee(string result)
{
var bytes = Convert.FromBase64String(result);
var reader = new Stellar.Generated.ByteReader(bytes);
var txResult = Stellar.Generated.LedgerEntryChanges.Decode(reader);
}
static void Payment(KeyPair from, KeyPair to, long amount)
{
Account source = new Account(from, GetSequence(from.Address));
// load asset
Asset asset = new Asset();
var operation =
new PaymentOperation.Builder(to, asset, amount)
.SetSourceAccount(from)
.Build();
source.IncrementSequenceNumber();
Stellar.Transaction transaction =
new Stellar.Transaction.Builder(source)
.AddOperation(operation)
.Build();
transaction.Sign(source.KeyPair);
var tx = transaction.ToEnvelopeXdrBase64();
var response = PostResult(tx);
Console.WriteLine(response.ReasonPhrase);
}
}
}