public TransactionOut GetTransactionOut(WalletAggregateAddress walletAddr)
        {
            if (walletAddr == null)
            {
                throw new ArgumentNullException(nameof(walletAddr));
            }

            if (walletAddr.Key == null)
            {
                throw new ArgumentNullException(nameof(walletAddr.Key));
            }

            if (TransactionOut == null || !TransactionOut.Any())
            {
                return(null);
            }

            var interpreter   = new ScriptInterpreter();
            var scriptBuilder = new ScriptBuilder();
            var secondScript  = scriptBuilder.New()
                                .AddToStack(walletAddr.Key.GetSignature())
                                .AddToStack(walletAddr.Key.GetPublicKey())
                                .Build();

            foreach (var transactionOut in TransactionOut)
            {
                if (interpreter.Check(transactionOut.Script, secondScript))
                {
                    return(transactionOut);
                }
            }

            return(null);
        }
Esempio n. 2
0
        public void CheckSignature()
        {
            var key           = Key.Genererate();
            var publicKeyHash = key.GetPublicKeyHashed();
            var scriptBuilder = new ScriptBuilder();
            var payload       = Encoding.UTF8.GetBytes("sss");
            var signature     = key.Sign(payload);
            var inputScript   = scriptBuilder.New()
                                .AddToStack(signature)
                                .AddToStack(key.GetPublicKey())
                                .Build();
            var outputScript = scriptBuilder.New()
                               .AddOperation(OpCodes.OP_DUP)
                               .AddOperation(OpCodes.OP_HASH160)
                               .AddToStack(publicKeyHash)
                               .AddOperation(OpCodes.OP_EQUALVERIFY)
                               .AddOperation(OpCodes.OP_CHECKSIG)
                               .Build();

            var serializedInputScript  = inputScript.Serialize();
            var serializedOutputScript = outputScript.Serialize();

            var deserializedInputScript  = Script.Deserialize(serializedInputScript);
            var deserializedOutputScript = Script.Deserialize(serializedOutputScript);

            var  interpreter = new ScriptInterpreter();
            bool isCorrect   = interpreter.Check(deserializedInputScript, deserializedOutputScript);

            Assert.IsTrue(isCorrect);
        }
Esempio n. 3
0
        public void CheckClientSignature()
        {
            var clientKey     = KeyStore.GetClientKey();
            var clientWallet  = BlockChainAddress.Deserialize("12K5LnVWKCu9QGyB39uGAgVSAfBs33PKS96HSL93");
            var scriptBuilder = new ScriptBuilder();
            var inputScript   = scriptBuilder.New()
                                .AddToStack(clientKey.GetSignature())
                                .AddToStack(clientKey.GetPublicKey())
                                .Build();
            var outputScript = scriptBuilder.New()
                               .AddOperation(OpCodes.OP_DUP)
                               .AddOperation(OpCodes.OP_HASH160)
                               .AddToStack(clientWallet.PublicKeyHash)
                               .AddOperation(OpCodes.OP_EQUALVERIFY)
                               .AddOperation(OpCodes.OP_CHECKSIG)
                               .Build();

            var serializedInputScript  = inputScript.Serialize();
            var serializedOutputScript = outputScript.Serialize();

            var deserializedInputScript  = Script.Deserialize(serializedInputScript);
            var deserializedOutputScript = Script.Deserialize(serializedOutputScript);

            var  interpreter = new ScriptInterpreter();
            bool isCorrect   = interpreter.Check(deserializedInputScript, deserializedOutputScript);

            Assert.IsTrue(isCorrect);
        }
Esempio n. 4
0
        public void Check16EqualTo16()
        {
            var scriptBuilder = new ScriptBuilder();
            var inputScript   = scriptBuilder.New()
                                .AddOperation(OpCodes.OP_1)
                                .Build();
            var outputScript = scriptBuilder.New()
                               .AddOperation(OpCodes.OP_15)
                               .AddOperation(OpCodes.OP_ADD)
                               .AddOperation(OpCodes.OP_16)
                               .AddOperation(OpCodes.OP_EQUAL)
                               .AddOperation(OpCodes.OP_VERIFY)
                               .Build();

            var serializedInputScript  = inputScript.Serialize();
            var serializedOutputScript = outputScript.Serialize();

            var deserializedInputScript  = Script.Deserialize(serializedInputScript);
            var deserializedOutputScript = Script.Deserialize(serializedOutputScript);

            var  interpreter = new ScriptInterpreter();
            bool isCorrect   = interpreter.Check(deserializedInputScript, deserializedOutputScript);

            Assert.IsTrue(isCorrect);
        }