예제 #1
0
        public void CanCompressScript()
        {
            var payToHashTemplate   = new PayToPubkeyHashTemplate();
            var payToScriptTemplate = new PayToScriptHashTemplate();
            var payToPubKeyTemplate = new PayToPubkeyTemplate();


            var key = new Key(true);

            //Pay to pubkey hash (encoded as 21 bytes)
            var script = payToHashTemplate.GenerateScriptPubKey(key.PubKey.ID);

            AssertCompressed(script, 21);
            script = payToHashTemplate.GenerateScriptPubKey(key.PubKey.Decompress().ID);
            AssertCompressed(script, 21);

            //Pay to script hash (encoded as 21 bytes)
            script = payToScriptTemplate.GenerateScriptPubKey(script);
            AssertCompressed(script, 21);

            //Pay to pubkey starting with 0x02, 0x03 or 0x04 (encoded as 33 bytes)
            script = payToPubKeyTemplate.GenerateScriptPubKey(key.PubKey);
            script = AssertCompressed(script, 33);
            var readenKey = payToPubKeyTemplate.ExtractScriptPubKeyParameters(script);

            AssertEx.CollectionEquals(readenKey.ToBytes(), key.PubKey.ToBytes());

            script    = payToPubKeyTemplate.GenerateScriptPubKey(key.PubKey.Decompress());
            script    = AssertCompressed(script, 33);
            readenKey = payToPubKeyTemplate.ExtractScriptPubKeyParameters(script);
            AssertEx.CollectionEquals(readenKey.ToBytes(), key.PubKey.Decompress().ToBytes());


            //Other scripts up to 121 bytes require 1 byte + script length.
            script = new Script(Enumerable.Range(0, 60).Select(_ => (Op)OpcodeType.OP_RETURN).ToArray());
            AssertCompressed(script, 61);
            script = new Script(Enumerable.Range(0, 120).Select(_ => (Op)OpcodeType.OP_RETURN).ToArray());
            AssertCompressed(script, 121);

            //Above that, scripts up to 16505 bytes require 2 bytes + script length.
            script = new Script(Enumerable.Range(0, 122).Select(_ => (Op)OpcodeType.OP_RETURN).ToArray());
            AssertCompressed(script, 124);
        }
예제 #2
0
        public void CanCompressScript()
        {
            var payToHashTemplate = new PayToPubkeyHashTemplate();
            var payToScriptTemplate = new PayToScriptHashTemplate();
            var payToPubKeyTemplate = new PayToPubkeyTemplate();

            var key = new Key(true);

            //Pay to pubkey hash (encoded as 21 bytes)
            var script = payToHashTemplate.GenerateScriptPubKey(key.PubKey.ID);
            AssertCompressed(script, 21);
            script = payToHashTemplate.GenerateScriptPubKey(key.PubKey.Decompress().ID);
            AssertCompressed(script, 21);

            //Pay to script hash (encoded as 21 bytes)
            script = payToScriptTemplate.GenerateScriptPubKey(script);
            AssertCompressed(script, 21);

            //Pay to pubkey starting with 0x02, 0x03 or 0x04 (encoded as 33 bytes)
            script = payToPubKeyTemplate.GenerateScriptPubKey(key.PubKey);
            script = AssertCompressed(script, 33);
            var readenKey = payToPubKeyTemplate.ExtractScriptPubKeyParameters(script);
            AssertEx.CollectionEquals(readenKey.ToBytes(), key.PubKey.ToBytes());

            script = payToPubKeyTemplate.GenerateScriptPubKey(key.PubKey.Decompress());
            script = AssertCompressed(script, 33);
            readenKey = payToPubKeyTemplate.ExtractScriptPubKeyParameters(script);
            AssertEx.CollectionEquals(readenKey.ToBytes(), key.PubKey.Decompress().ToBytes());

            //Other scripts up to 121 bytes require 1 byte + script length.
            script = new Script(Enumerable.Range(0, 60).Select(_ => (Op)OpcodeType.OP_RETURN).ToArray());
            AssertCompressed(script, 61);
            script = new Script(Enumerable.Range(0, 120).Select(_ => (Op)OpcodeType.OP_RETURN).ToArray());
            AssertCompressed(script, 121);

            //Above that, scripts up to 16505 bytes require 2 bytes + script length.
            script = new Script(Enumerable.Range(0, 122).Select(_ => (Op)OpcodeType.OP_RETURN).ToArray());
            AssertCompressed(script, 124);
        }