Browse Source

обновил connect к сети и добавление контракта

Rimmon 4 years ago
parent
commit
0e66643af3
2 changed files with 67 additions and 24 deletions
  1. 29 6
      Models/Blockchain.cs
  2. 38 18
      Pages/Blockchains.razor

+ 29 - 6
Models/Blockchain.cs

@@ -9,6 +9,7 @@ namespace HyperCube.Models
 {
     public class Blockchain
     {
+        public static bool newData = false;
         public static List<Blockchain> loaded = new List<Blockchain>();
         public int port;
         public string url;
@@ -23,29 +24,50 @@ namespace HyperCube.Models
         {
             this.url = url;
             this.port = port;
-            ListAccounts();
+        }
+
+        public async Task<string> GetReceipt(string transactionAddress)
+        {
+            Console.WriteLine("contractAddress " + transactionAddress);
+            var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionReceipt\",\"params\":[\"{transactionAddress}\"], \"id\":1}}";
+
+            var res = await Post.PostRequestAsync(req);
+            Console.WriteLine("result " + res);
+            return res;
+        }
+
+        public async Task<string> Initialize()
+        {
+            await ListAccounts();
             if (!loaded.Contains(this))
                 loaded.Add(this);
             Console.WriteLine("loaded blockchains " + loaded.Count);
+            return $"Blockchain connected: {url}";
+        }
+
+        public async void GetGas(string bytecode)
+        {
+
         }
 
-        public async void AddContract(string bytecode)
+        public async Task<string> AddContract(string bytecode)
         {
-            var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_sendTransaction\",\"params\":[{{\"from\":\"0x4Ce13B6012ad8AB5Bf2E364679173D81C28Cd8d4\",\"gas\":\"0x31b2e\", \"data\":\"{bytecode}\"}}], \"id\":1}}";
+            Console.WriteLine("bytecode " + bytecode);
+            var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_sendTransaction\",\"params\":[{{\"from\":\"{address}\",\"gas\":\"0x31b2e\", \"data\":\"{bytecode}\"}}], \"id\":1}}";
 
             var res = await Post.PostRequestAsync(req);
             Console.WriteLine("result "+ res);
+            return res;
         }
 
-        public async void ListAccounts()
+        public async Task ListAccounts()
         {
             string answer = "no";
             //{ "jsonrpc":"2.0","method":"eth_getCode","params":["0x938cae6f6c21ed9d55196e96ef880f562e530553", "latest" ],"id":1}
             //string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_getCode\",\"params\":[\"0x874c6a51e62680d4594cd2555ed8fa47b63ed253\",\"latest\"],\"id\":1}";
             string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_accounts\", \"params\":[],\"id\":1}";
 
-            answer = await Post.PostRequestAsync(req);         
-
+            answer = await Post.PostRequestAsync(req);
 
             //string json = Encoding.UTF8.GetString(bytedata, 1, bytedata.Length - 1);
             //try
@@ -55,6 +77,7 @@ namespace HyperCube.Models
             address = jsonDe.result[0];
             Console.WriteLine("Json addr " + jsonDe.result[0]);
             var methodName = (string)jsonDe.name;
+            newData = true;
         }
 
         public async void ExecuteContract()

+ 38 - 18
Pages/Blockchains.razor

@@ -2,17 +2,22 @@
 
 <h1>Blockchain</h1>
 
-
 <p>
     @namespace HyperCube.Models
-    
     @code
-    {
-        string hidecontr = "hidden";        
+        {
+        string hidecontr = "hidden";
+        string hidereceipt = "hidden";        
+        string result = "";
     }
-    @foreach (var bc in Blockchain.loaded)
+
+    @if (Blockchain.newData)
     {
+        @foreach (var bc in Blockchain.loaded)
+        {
         <p><b>@bc.url:@bc.port</b>, address: @bc.address</p>
+    }
+        @bytecode;
     }
     </p>
 
@@ -22,45 +27,60 @@
     <p>
         Add blockchain connection:
         <input name="bcurl" @bind="bcURL" type="text" placeholder="URL" @bind:event="oninput">
-        <input name="bport" type="text" placeholder="port">
+        <input name="bport" @bind="bcport" type="number" placeholder="port">
         <button @onclick="GetBlockChain">Connect</button>
     </p>
     <p style="visibility:@hidecontr">
         Add smart contract:
         <button @onclick="AddContract">Add</button>
-        <input size="100" @bind="bytecode" name="bytecode" type="text" placeholder="Smart contract bytecode" @bind:event="oninput">
+        <input id="bytecode" size="100" @bind="bytecode" name="bytecode" type="text" placeholder="Smart contract bytecode" @bind:event="oninput">
+        <br />
+    </p>
+    <p style="visibility:@hidereceipt">
+        Get smart contract address:
+        <button @onclick="AddContract">Add</button>
+        <input id="bytecode" size="100" @bind="bytecode" name="bytecode" type="text" placeholder="Smart contract bytecode" @bind:event="oninput">
         <br />
     </p>
-    <p @bind="error">No error</p>
+    <p>@result</p>
 
     @code
     {
         private Random r = new Random();
-        private string bcURL = "no Url";
+        private string bcURL = "127.0.0.1";
+        private int bcport = 8545;
         private string bytecode = "";
         private string error = "";
 
-        private void AddContract()
+        private async Task GetReceipt()
+        {
+            //TODO result as transaction addr
+            result = await Blockchain.loaded[0].GetReceipt(result);
+        }
+
+        private async Task AddContract()
         {
             if (Blockchain.loaded.Count > 0)
             {
-
+                result = await Blockchain.loaded[0].AddContract(bytecode);
             }
             //private Post post = new Post();
         }
 
-        private void GetBlockChain()
+        private async Task GetBlockChain()
         {
             if (Blockchain.loaded.Count == 0)
             {
-                Blockchain bc = new HyperCube.Models.Blockchain("127.0.0.1", 8545);
+                Blockchain bc = new HyperCube.Models.Blockchain(bcURL, bcport);
+                result = await bc.Initialize();
+                if (result != "")
+                    hidecontr = "visible";
                 //bcURL = bc.GetAddress();
-                bc.ExecuteContract();
-                bcURL = bc.address;
-                hidecontr = "hidden";
+                //bc.ExecuteContract();
+                //bcURL = bc.address;
+                //hidecontr = "hidden";
             }
-            else
-                hidecontr = "visible";
+
             //private Post post = new Post();
         }
     }