From ab0444095327fd99283ff7ede72fbcb0d4b9f7f6 Mon Sep 17 00:00:00 2001 From: CryptoManiac Date: Thu, 20 Aug 2015 23:37:21 +0300 Subject: [PATCH] SetDestination fixes and tests --- Novacoin/CScript.cs | 31 ++++++++++++++++++++++++++++--- NovacoinTest/Program.cs | 28 +++++++++++++++++++++++++--- 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/Novacoin/CScript.cs b/Novacoin/CScript.cs index 044f8b9..bb0e5a5 100644 --- a/Novacoin/CScript.cs +++ b/Novacoin/CScript.cs @@ -96,8 +96,8 @@ namespace Novacoin /// /// Create new OP_PUSHDATAn operator and add it to opcode bytes list /// - /// List of data bytes - public void PushData(IList dataBytes) + /// Set of data bytes + public void PushData(IEnumerable dataBytes) { long nCount = dataBytes.LongCount(); @@ -356,15 +356,35 @@ namespace Novacoin } + /// + /// Set pay-to-pubkey destination. + /// + /// Instance of CPubKey. + public void SetDestination(CPubKey pubKey) + { + codeBytes.Clear(); + PushData(pubKey.PublicBytes); + AddOp(opcodetype.OP_CHECKSIG); + } + + /// + /// Set pay-to-pubkeyhash destination + /// + /// Public key hash public void SetDestination(CKeyID ID) { codeBytes.Clear(); AddOp(opcodetype.OP_DUP); AddOp(opcodetype.OP_HASH160); AddHash(ID); - AddOp(opcodetype.OP_EQUAL); + AddOp(opcodetype.OP_EQUALVERIFY); + AddOp(opcodetype.OP_CHECKSIG); } + /// + /// Set pay-to-scripthash destination + /// + /// Script hash public void SetDestination(CScriptID ID) { codeBytes.Clear(); @@ -381,6 +401,11 @@ namespace Novacoin codeBytes.Clear(); } + /// + /// Set multisig destination. + /// + /// Amount of required signatures. + /// Set of public keys. public void SetMultiSig(int nRequired, IEnumerable keys) { codeBytes.Clear(); diff --git a/NovacoinTest/Program.cs b/NovacoinTest/Program.cs index 71c7741..4459f0a 100644 --- a/NovacoinTest/Program.cs +++ b/NovacoinTest/Program.cs @@ -112,11 +112,33 @@ namespace NovacoinTest txnouttype typeRet; IList> solutions; - Console.WriteLine("scriptPubKey solved: {0}", ScriptCode.Solver(scriptPubKey, out typeRet, out solutions)); - Console.WriteLine("scriptPubKey address: {0}", new CPubKey(solutions.First()).KeyID.ToString()); + Console.WriteLine("\nscriptPubKey solved: {0}", ScriptCode.Solver(scriptPubKey, out typeRet, out solutions)); + Console.WriteLine("scriptPubKey address: {0}\n", new CPubKey(solutions.First()).KeyID.ToString()); Console.WriteLine("scriptPubKeyHash solved: {0}", ScriptCode.Solver(scriptPubKeyHash, out typeRet, out solutions)); - Console.WriteLine("scriptPubKeyHash address: {0}", new CKeyID(new Hash160(solutions.First())).ToString()); + Console.WriteLine("scriptPubKeyHash address: {0}\n", new CKeyID(new Hash160(solutions.First())).ToString()); + + /// Some SetDestination tests + CScript scriptDestinationTest = new CScript(); + + + Console.WriteLine("Creating and decoding new destination with {0} as public key.\n", keyPair1.PubKey.ToString()); + + Console.WriteLine("Pay-to-Pubkey:"); + + scriptDestinationTest.SetDestination(keyPair1.PubKey); + + Console.WriteLine("\tscriptDestinationTest solved: {0}", ScriptCode.Solver(scriptDestinationTest, out typeRet, out solutions)); + Console.WriteLine("\tscriptDestinationTest address: {0}\n", new CPubKey(solutions.First()).KeyID.ToString()); + + Console.WriteLine("Pay-to-PubkeyHash:"); + + scriptDestinationTest.SetDestination(keyPair1.PubKey.KeyID); + + Console.WriteLine("\tscriptDestinationTest solved: {0}", ScriptCode.Solver(scriptDestinationTest, out typeRet, out solutions)); + Console.WriteLine("\tscriptDestinationTest address: {0}\n", new CKeyID(new Hash160(solutions.First())).ToString()); + + Console.ReadLine(); } -- 1.7.1