예제 #1
0
        private IPubkeyScript BuildPubkeyScript(string address)
        {
            Address addr = new Address();

            if (!addr.TryGetType(address, out PubkeyScriptType scrType, out byte[] hash))
            {
                throw new FormatException();
            }

            PubkeyScript scr = new PubkeyScript();

            switch (scrType)
            {
            case PubkeyScriptType.P2PKH:
                scr.SetToP2PKH(hash);
                break;

            case PubkeyScriptType.P2SH:
                scr.SetToP2SH(hash);
                break;

            case PubkeyScriptType.P2WPKH:
                scr.SetToP2WPKH(hash);
                break;

            case PubkeyScriptType.P2WSH:
                scr.SetToP2WSH(hash);
                break;

            default:
                throw new NotImplementedException();
            }

            return(scr);
        }
예제 #2
0
        public void SetToP2SH_FromAddressTest()
        {
            PubkeyScript scr = new PubkeyScript();

            scr.SetToP2SH("3FuPMWfen385RLwbMsZEVhx9QsHyR6zEmv");
            byte[] expected = Helper.HexToBytes($"a9149be8a44c3ef40c1eeab2d487ecd2ef7c7cd9ce5587");
            Assert.Equal(expected, scr.Data);
        }
예제 #3
0
        public void SetToP2SH_FromBytesTest()
        {
            PubkeyScript scr = new PubkeyScript();

            scr.SetToP2SH(Helper.GetBytes(20));
            byte[] expected = Helper.HexToBytes($"a914{Helper.GetBytesHex(20)}87");
            Assert.Equal(expected, scr.Data);
        }
예제 #4
0
        public void SetToP2SH_FromScriptTest()
        {
            PubkeyScript scr    = new PubkeyScript();
            var          redeem = new MockSerializableRedeemScript(new byte[] { 1, 2, 3 }, 255);

            scr.SetToP2SH(redeem);
            byte[] expected = Helper.HexToBytes($"a9149bc4860bb936abf262d7a51f74b4304833fee3b287");
            Assert.Equal(expected, scr.Data);
        }
예제 #5
0
        public void SetToP2SH_ExceptionTest()
        {
            PubkeyScript scr = new PubkeyScript();

            byte[]       nba   = null;
            RedeemScript nscr  = null;
            string       naddr = null;

            Assert.Throws <ArgumentNullException>(() => scr.SetToP2SH(nba));
            Assert.Throws <ArgumentOutOfRangeException>(() => scr.SetToP2SH(new byte[19]));
            Assert.Throws <ArgumentNullException>(() => scr.SetToP2SH(nscr));
            Assert.Throws <ArgumentNullException>(() => scr.SetToP2SH(naddr));
            Assert.Throws <ArgumentNullException>(() => scr.SetToP2SH(""));
            Assert.Throws <FormatException>(() => scr.SetToP2SH("$"));
            Assert.Throws <FormatException>(() => scr.SetToP2SH(KeyHelper.Pub1CompAddr));
        }
        public override bool SetOperations()
        {
            Errors = null;

            if (string.IsNullOrEmpty(Address))
            {
                Errors = "Address can not be empty.";
                return(false);
            }
            else if (addrManager.TryGetType(Address, out PubkeyScriptType scrType, out byte[] hash))
            {
                PubkeyScript scr = new PubkeyScript();
                switch (scrType)
                {
                case PubkeyScriptType.P2PKH:
                    scr.SetToP2PKH(hash);
                    break;

                case PubkeyScriptType.P2SH:
                    scr.SetToP2SH(hash);
                    break;

                case PubkeyScriptType.P2WPKH:
                    scr.SetToP2WPKH(hash);
                    break;

                case PubkeyScriptType.P2WSH:
                    scr.SetToP2WSH(hash);
                    break;

                default:
                    Errors = "Undefined script type.";     // This should never happen.
                    return(false);
                }

                OpsToAdd = scr.OperationList;
                return(true);
            }