예제 #1
0
        //construct a command processor using the Crypto Provider, host address and port provided
        public CommandProcessor(string cryptoProviderName, string host, string port)
        {
            //create the root URL to the BlockChain server using the host and port provided
            rootUrl = $"http://{host}:{port}";

            //Look for the name of the CryptoProvider in the first argument
            //and use this to derive the dll name and key file names
            string cryptoProviderFilename = Path.Combine(appDir, cryptoProviderName + "_CryptoProvider.dll");

            //string keyFilename = Path.Combine(appDir, cryptoProviderName + ".key");
            _walletFilePath = Path.Combine(appDir, cryptoProviderName + ".wal");

            //load the crypto provider dll
            if (File.Exists(cryptoProviderFilename))
            {
                _cryptoProvider = LoadCryptoProvider(cryptoProviderFilename);
            }
            else
            {
                throw new Exception(string.Format("Crypto Provider not found : {0}", cryptoProviderFilename));
            }

            //load the wallet if it exists (.wal file in the application directory), create one if it doesn't
            Wallet_Load();
        }
예제 #2
0
        public bool HasValidInputSignatures(string salt, CryptoProvider.ICryptoProvider provider)
        {
            bool valid = true;

            foreach (Input i in Inputs)
            {
                valid = valid && i.HasValidSignature(salt, provider);
                if (!valid)
                {
                    break;
                }
            }
            return(valid);
        }
예제 #3
0
        //command console entry point
        static void Main(string[] args)
        {
            string nodeId = System.Configuration.ConfigurationManager.AppSettings["nodeId"];
            //get the crypto provider to use from the App.config
            string cryptoProvider = System.Configuration.ConfigurationManager.AppSettings["cryptoProvider"];


            string cryptoProviderFilename = Path.Combine(appDir, cryptoProvider + "_CryptoProvider.dll");
            string keyFilename            = Path.Combine(appDir, cryptoProvider + ".key");

            //load the specified crypto provider
            if (File.Exists(cryptoProviderFilename))
            {
                _cryptoProvider = LoadCryptoProvider(cryptoProviderFilename);
            }
            else
            {
                throw new Exception(string.Format("Crypto Provider not found : {0}", cryptoProviderFilename));
            }

            //load the server node key pair (not currently used)
            if (File.Exists(keyFilename))
            {
                _cryptoProvider.ImportKeyPairFromFile(keyFilename);
            }
            else
            {
                _cryptoProvider.GenerateKeyPair();
                _cryptoProvider.ExportKeyPairToFile(keyFilename);
                Logger.Log("Key pair generated");
            }


            //create a new server node web-server instance and intialize the server node's block chain
            chain  = new BlockChain();
            server = new WebServer(chain);

            System.Console.WriteLine("BlockChainServerNode initialized with an empty chain");

            //If a previous server node state was saved, load it
            chain.Rollback();

            //display the server node status
            chain.status();
            System.Console.WriteLine("enter help for a list of commands");

            bool   exit = false;
            string cmd  = "";

            //main command loop
            while (!exit)
            {
                System.Console.Write($"Server {nodeId}>");
                cmd = System.Console.ReadLine().Trim().ToLower();
                string[] cmdArgs = cmd.Split(' ');
                switch (cmdArgs[0])
                {
                case "help":
                    help(cmdArgs);
                    break;

                case "checkpoint":
                    checkpoint(cmdArgs);
                    break;

                case "rollback":
                    rollback(cmdArgs);
                    break;

                case "exit":
                    checkpoint(cmdArgs);
                    exit = true;
                    break;

                case "init":
                    init(cmdArgs);
                    break;

                case "echo":
                    echo(cmdArgs);
                    break;

                case "status":
                    status(cmdArgs);
                    break;

                case "list":
                    list(cmdArgs);
                    break;

                case "publickey":
                    publicKey(cmdArgs);
                    break;

                case "balance":
                    Balance(cmdArgs);
                    break;

                case "validate":
                    validate();
                    break;

                case "resolve":
                    Resolve(false);
                    break;

                case "mine":
                    Mine(cmdArgs);
                    break;

                case "miner":
                    miner(cmdArgs);
                    break;
                }
            }
        }
예제 #4
0
 public bool HasValidSignature(string salt, CryptoProvider.ICryptoProvider provider)
 {
     return(CryptoProvider.AddressEncoder.Verify(address, salt, signature, base64PublicKey, provider));
 }
예제 #5
0
 public bool HasValidSignature(CryptoProvider.ICryptoProvider provider)
 {
     return(provider.VerifySignature(this.ToString(), Signature, provider.PublicKeyFromBase64(PublicKey)));
 }
예제 #6
0
 public void Sign(CryptoProvider.ICryptoProvider provider, string privateKey, string publicKey)
 {
     Signature = provider.SignMessage(ToString(), provider.PrivateKeyFromBase64(privateKey), provider.PublicKeyFromBase64(publicKey));
 }