From aa09ed1199c4a304e08b5530fff4c0f319c277ba Mon Sep 17 00:00:00 2001 From: CryptoManiac Date: Fri, 21 Aug 2015 00:50:33 +0300 Subject: [PATCH] Solver: P2SH tests --- Novacoin/CScript.cs | 6 ++++++ NovacoinTest/Program.cs | 21 +++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Novacoin/CScript.cs b/Novacoin/CScript.cs index bb0e5a5..835c53d 100644 --- a/Novacoin/CScript.cs +++ b/Novacoin/CScript.cs @@ -415,6 +415,7 @@ namespace Novacoin { PushData(key.PublicBytes.ToList()); } + AddOp(ScriptCode.EncodeOP_N(keys.Count())); AddOp(opcodetype.OP_CHECKMULTISIG); } @@ -427,6 +428,11 @@ namespace Novacoin get { return codeBytes; } } + public CScriptID ScriptID + { + get { return new CScriptID(Hash160.Compute160(codeBytes)); } + } + /// /// Disassemble current script code /// diff --git a/NovacoinTest/Program.cs b/NovacoinTest/Program.cs index eca8cbd..ed0213a 100644 --- a/NovacoinTest/Program.cs +++ b/NovacoinTest/Program.cs @@ -143,18 +143,31 @@ namespace NovacoinTest CKeyPair k1 = new CKeyPair(), k2 = new CKeyPair(), k3 = new CKeyPair(); scriptDestinationTest.SetMultiSig(2, new CPubKey[] { k1.PubKey, k2.PubKey, k3.PubKey }); - Console.WriteLine("\tscriptDestinationTest solved: {0}", ScriptCode.Solver(scriptDestinationTest, out typeRet, out solutions)); - Console.WriteLine("\tscriptDestinationTest addresses: \n"); + + Console.WriteLine("\nscriptDestinationTest solved: {0}", ScriptCode.Solver(scriptDestinationTest, out typeRet, out solutions)); + Console.WriteLine("scriptDestinationTest addresses: \n"); int nRequired = solutions.First().First(); int nKeys = solutions.Last().First(); foreach (IEnumerable keyBytes in solutions.Skip(1).Take(nKeys)) { - Console.WriteLine("\t\t{0}", (new CPubKey(keyBytes)).KeyID.ToString()); + Console.WriteLine("\t{0}", (new CPubKey(keyBytes)).KeyID.ToString()); } - Console.WriteLine("\n\tnRequired={0}", nRequired); + Console.WriteLine("\nnRequired={0}\n", nRequired); + + Console.WriteLine("Script code: \n\n{0}", scriptDestinationTest.ToString()); + + Console.WriteLine("\nPay-to-ScriptHash with same script:\n"); + + CScript scriptP2SHTest = new CScript(); + scriptP2SHTest.SetDestination(scriptDestinationTest.ScriptID); + + Console.WriteLine("\tscriptP2SHTest solved: {0}", ScriptCode.Solver(scriptP2SHTest, out typeRet, out solutions)); + Console.WriteLine("\tscriptP2SHTest address: {0}\n", new CScriptID(new Hash160(solutions.First())).ToString()); + + Console.ReadLine(); } -- 1.7.1