Example #1
0
        public void BasicMultiSigTest()
        {
            Multisig ms = new Multisig();

            // First co-signer uses security level 3 and index 0 for the private key
            string digestOne = ms.GetDigest(TestSeed1, 3, 0);

            // We initiate the multisig address generation by absorbing the key digest
            ms.AddAddressDigest(new[] { digestOne });

            // Second cosigner also uses security level 3 and index 0  for the private key
            string digestTwo = ms.GetDigest(TestSeed2, 3, 0);

            // Add the multisig by absorbing the second cosigners key digest
            ms.AddAddressDigest(new[] { digestTwo });

            // finally we generate the multisig address itself
            string multiSigAddress = ms.FinalizeAddress();

            Console.WriteLine("MultisigAddress = " + multiSigAddress);


            bool isValidMultisigAddress = ms.ValidateAddress(multiSigAddress,
                                                             new[] { Converter.ToTrits(digestOne), Converter.ToTrits(digestTwo) });

            Console.WriteLine("Is a valid multisig address " + isValidMultisigAddress);

            Assert.IsTrue(isValidMultisigAddress, "Address is not a valid multisigAddress");

            List <Transfer> transfers = new List <Transfer>
            {
                new Transfer(ReceiveAddress.AddChecksum(), 999, "", TestTag)
            };

            List <Transaction> trxs =
                _iotaAPI.InitiateTransfer(6, multiSigAddress.AddChecksum(), RemainderAddress, transfers, null, true);

            Bundle bundle = new Bundle(trxs, trxs.Count);

            bundle = ms.AddSignature(bundle, multiSigAddress, ms.GetKey(TestSeed1, 0, 3));

            bundle = ms.AddSignature(bundle, multiSigAddress, ms.GetKey(TestSeed2, 0, 3));


            Signing sgn = new Signing(new Kerl());

            bool isValidSignature = sgn.ValidateSignatures(bundle, multiSigAddress);

            Console.WriteLine("Result of multi-signature validation is " + isValidSignature);
            Assert.IsTrue(isValidSignature, "MultiSignature not valid");
        }
Example #2
0
        public static Multisig GetMultiSigFromTwoPubKeys(PubKey clientPubkey, PubKey hubPubkey)
        {
            var settings = settingsProvider.GetSettings();
            var network  = settings.Network;

            var multiSigAddress = PayToMultiSigTemplate.Instance.GenerateScriptPubKey(2, new PubKey[] { clientPubkey,
                                                                                                        hubPubkey });

            var retValue = new Multisig();

            retValue.MultiSigAddress       = multiSigAddress.GetScriptAddress(settings.Network).ToString();
            retValue.SegwitMultiSigAddress = multiSigAddress.WitHash.ScriptPubKey.GetScriptAddress(settings.Network).ToString();
            retValue.MultiSigScript        = multiSigAddress.ToString();
            retValue.SegwitWalletAddress   = clientPubkey.WitHash.ScriptPubKey.GetScriptAddress(network).ToString();
            return(retValue);
        }