示例#1
0
        static void InterpretBatchCommand(string cmd, BlockChainClassLib.CommandProcessor cmdProc)
        {
            string[] cmdArgs = cmd.ToLower().Split(' ');
            switch (cmdArgs[0])
            {
            case "transfer":
                Transfer(cmdArgs, cmdProc);
                break;

            case "history":
                string txList = cmdProc.history(cmdArgs[1]);
                Console.Write(txList);
                break;

            case "balance":
                cmdProc.Wallet_Balance();
                break;

            case "test":
                Test(cmdArgs, cmdProc);
                break;

            case "exit":
                exit = true;
                break;
            }
        }
示例#2
0
 public void TestCommandLib_ED25519()
 {
     BlockChainClassLib.CommandProcessor cmdProc = new BlockChainClassLib.CommandProcessor("ED25519", "localhost", "12345");
     //cmdProc.transaction("Alice", 200);
     //cmdProc.transaction("Bob", 20);
     //cmdProc.transaction("Trent", 30);
     //cmdProc.mine();
 }
示例#3
0
        //retrieves wallet entries and displays them in the console
        static void ListWalletEntries(BlockChainClassLib.CommandProcessor cmdProc)
        {
            int i = 0;

            System.Console.WriteLine("wallet entries:-");
            List <WalletLib.WalletEntry> entries = cmdProc.Wallet_ListEntries();

            foreach (WalletLib.WalletEntry wa in entries)
            {
                System.Console.WriteLine(i.ToString("000") + ") " + wa.address + " = " + wa.amount);
                i++;
            }
            System.Console.WriteLine("");
        }
示例#4
0
        static void Run(string[] cmdArgs, BlockChainClassLib.CommandProcessor cmdProc)
        {
            if (!File.Exists(cmdArgs[1]))
            {
                return;
            }

            using (StreamReader sr = File.OpenText(cmdArgs[1]))
            {
                while (!sr.EndOfStream)
                {
                    string line = sr.ReadLine();
                    InterpretBatchCommand(line, cmdProc);
                }
            }
        }
示例#5
0
        static void Test(string[] cmdArgs, BlockChainClassLib.CommandProcessor cmdProc)
        {
            switch (cmdArgs[1])
            {
            case "start":
                TestId = cmdArgs[2];
                cmdProc.Test_Start(TestId);
                break;

            case "end":
                cmdProc.Test_End();
                break;

            case "server_init":
                cmdProc.Test_Server_Init();
                break;

            case "checkpoint":
                cmdProc.Test_Server_Checkpoint();
                break;

            case "rollback":
                cmdProc.Test_Server_Rollback();
                break;

            case "mine":
                string result = cmdProc.mine(cmdArgs[2]);
                Console.WriteLine(result);
                break;

            case "miner":
                if (cmdArgs[2] == "start")
                {
                    cmdProc.Test_Server_Miner_Start(cmdArgs[3]);
                }
                else
                if (cmdArgs[2] == "stop")
                {
                    cmdProc.Test_Server_Miner_Stop();
                }
                break;
            }
        }
示例#6
0
        public void TestCommandLib_RLWE()
        {
            CryptoProvider.RLWE_Provider provider = new CryptoProvider.RLWE_Provider();
            provider.GenerateKeyPair();

            BlockChainClassLib.Transaction t = new BlockChainClassLib.Transaction();
            t.id = Guid.NewGuid();

            string publicKey = provider.ExportPublicKey();
            string address   = CryptoProvider.AddressEncoder.CreateAddress(publicKey);
            string signature = CryptoProvider.AddressEncoder.SignAddress(address, t.id.ToString(), provider);

            t.Inputs.Add(new BlockChainClassLib.Input(address, signature, publicKey));
            t.Outputs.Add(new BlockChainClassLib.Output("paul", 1));

            BlockChainClassLib.CommandProcessor cmdProc = new BlockChainClassLib.CommandProcessor("RLWE", "localhost", "12345");
            //string json = Newtonsoft.Json.JsonConvert.SerializeObject(t);

            cmdProc.Transfer(t);
            cmdProc.mine(address);
        }
示例#7
0
        static void Transfer(string[] cmdArgs, BlockChainClassLib.CommandProcessor cmdProc)
        {
            if (cmdArgs.Length == 1)
            {
                InteractiveCreateTransaction(cmdArgs, cmdProc);
            }
            else
            {
                List <string> from   = new List <string>();
                string        to     = "";
                int           amount = 0;
                string        change = "";

                foreach (string arg in cmdArgs)
                {
                    string[] a = arg.Split('=');
                    switch (a[0])
                    {
                    case "from":
                        from.Add(a[1]);
                        break;

                    case "to":
                        to = a[1];
                        break;

                    case "amount":
                        amount = int.Parse(a[1]);
                        break;

                    case "change":
                        change = a[1];
                        break;
                    }
                }

                CreateTransaction(from, to, amount, change, cmdProc);
            }
        }
示例#8
0
        //Wallet sub functions
        static void Wallet(string[] cmdArgs, BlockChainClassLib.CommandProcessor cmdProc)
        {
            switch (cmdArgs[1])
            {
            case "list":
                int i = 0;
                System.Console.WriteLine("wallet entries:-");
                List <WalletLib.WalletEntry> entries = cmdProc.Wallet_ListEntries();
                foreach (WalletLib.WalletEntry wa in entries)
                {
                    System.Console.WriteLine(i.ToString("000") + ") " + wa.address + " = " + wa.amount);
                    i++;
                }
                System.Console.WriteLine("");
                break;

            case "select":
                i = int.Parse(cmdArgs[2]);
                cmdProc.Wallet_SelectAddress(i);
                break;

            case "add":
                cmdProc.Wallet_CreateAddress();
                break;

            case "load":
                cmdProc.Wallet_Load();
                break;

            case "save":
                cmdProc.Wallet_Save();
                break;

            case "balance":
                cmdProc.Wallet_Balance();
                break;
            }
        }
示例#9
0
        static void CreateTransaction(List <string> from, string to, int amount, string change, BlockChainClassLib.CommandProcessor cmdProc)
        {
            WalletLib.WalletEntry we;

            //build the transaction:
            BlockChainClassLib.Transaction t = new BlockChainClassLib.Transaction();
            t.id = Guid.NewGuid();

            foreach (string address in from)
            {
                we = cmdProc.Wallet_FindEntry(address);
                string publicKey = we.publicKey;
                string signature = cmdProc.SignAddress(address, t.id.ToString(), we.publicKey, we.privateKey);
                t.Inputs.Add(new BlockChainClassLib.Input(address, signature, publicKey));
            }

            //add the primary payment address
            t.Outputs.Add(new BlockChainClassLib.Output(to, amount));

            //add the address to collect change
            t.Outputs.Add(new BlockChainClassLib.Output(change, 0));

            //sign the transaction
            we          = cmdProc.Wallet_FindEntry(from[0]);
            t.PublicKey = we.publicKey;
            cmdProc.SignTransaction(t, we.publicKey, we.privateKey);

            //Instruct the command processor to submit the transaction
            cmdProc.Transfer(t);
        }
示例#10
0
        //command line program entry point
        public static void Main(string[] args)
        {
            //retrieve the BlockChain server host address and port from the app.config file
            string host = System.Configuration.ConfigurationManager.AppSettings["host"];
            string port = System.Configuration.ConfigurationManager.AppSettings["port"];

            //Get cryptoProvider library to load (dynamically) from the app.config file
            string cryptoProvider = System.Configuration.ConfigurationManager.AppSettings["cryptoProvider"];

            //create an instance of the command processor in the BlockChain class library
            BlockChainClassLib.CommandProcessor cmdProc = new BlockChainClassLib.CommandProcessor(cryptoProvider, host, port);

            System.Console.WriteLine("BlockChain Client initialized");
            System.Console.WriteLine(string.Format("host={0}, port={1}, CryptoProvider {2}", host, port, cryptoProvider));
            System.Console.WriteLine("enter help for a list of commands");

            string cmd = "";

            if (args.Length > 1)
            {
                if (args[0].ToLower() == "run")
                {
                    Run(args, cmdProc);
                }
            }

            //main command loop
            while (!exit)
            {
                try
                {
                    string result = "";

                    //read command from the command line
                    System.Console.Write("Client>");
                    cmd = System.Console.ReadLine().Trim().ToLower();
                    string[] cmdArgs = cmd.ToLower().Split(' ');
                    switch (cmdArgs[0])
                    {
                    case "help":
                        help();
                        break;

                    case "transfer":
                        Transfer(cmdArgs, cmdProc);
                        break;

                    case "exit":
                        exit = true;
                        break;

                    case "chain":
                        result = cmdProc.chain();
                        Console.WriteLine(result);
                        break;

                    case "wallet":
                        Wallet(cmdArgs, cmdProc);
                        break;

                    case "history":
                        result = cmdProc.history(cmdArgs[1]);
                        Console.Write(result);
                        break;

                    case "pending":
                        result = cmdProc.PendingTransactions();
                        Console.Write(result);
                        break;

                    case "test":
                        Test(cmdArgs, cmdProc);
                        break;

                    case "run":
                        Run(cmdArgs, cmdProc);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    System.Console.WriteLine(ex);
                }
            }
        }
示例#11
0
        //Provides an interactive mechanism for the user to create blockchain transactions
        static void InteractiveCreateTransaction(string[] cmdArgs, BlockChainClassLib.CommandProcessor cmdProc)
        {
            //1) ask the user for a list of input transactions:
            System.Console.WriteLine("Create Transaction:");
            System.Console.WriteLine("Enter Addresses from your Wallet (one on each line, blank to cancel entry):");

            WalletLib.WalletEntry we;

            //build a list of input addresses
            List <string> addressList = new List <string>();
            int           i           = 1;
            string        line        = "";

            do
            {
                System.Console.Write(string.Format("Enter Source Address ({0})=", i));
                line = System.Console.ReadLine().Trim();

                if (line == "")
                {
                    break;
                }

                we = cmdProc.Wallet_FindEntry(line);
                if (we != null)
                {
                    addressList.Add(line);
                    i++;
                }
                else
                {
                    System.Console.WriteLine("address not found");
                }
            } while (line != "");

            if (addressList.Count() == 0)
            {
                return;
            }

            //2) Enter primary payment address
            System.Console.Write("Enter payment address (blank line to cancel transaction)=");
            string paymentAddress = System.Console.ReadLine().Trim();

            if (paymentAddress == "")
            {
                return;
            }

            //3) Enter payment amount
            string paymentAmount = "";
            int    amount        = 0;

            do
            {
                System.Console.Write("Enter payment amount=");
                paymentAmount = System.Console.ReadLine().Trim();

                if (paymentAmount == "")
                {
                    return;
                }
            } while (!int.TryParse(paymentAmount, out amount));


            //Enter address to post any change to (enter "new" to create a new one and add to your wallet)
            System.Console.Write("Enter change address (new to create one)=");
            string changeAddress = System.Console.ReadLine().Trim();

            if (changeAddress == "")
            {
                return;
            }

            if (changeAddress.Trim() == "new")
            {
                changeAddress = cmdProc.Wallet_CreateAddress();
                cmdProc.Wallet_Save();
                System.Console.WriteLine("Address added to your wallet: " + changeAddress);
            }

            CreateTransaction(addressList, paymentAddress, amount, changeAddress, cmdProc);
        }