Example #1
0
        private Transaction[] SetupDummyInputs(CoinsView coinsRet)
        {
            Transaction[] dummyTransactions = Enumerable.Range(0, 2).Select(_ => new Transaction()).ToArray();

            // Add some keys to the keystore:
            Key[] key = Enumerable.Range(0, 4).Select((_, i) => new Key(i % 2 != 0)).ToArray();


            // Create some dummy input transactions
            dummyTransactions[0].Outputs.AddRange(Enumerable.Range(0, 2).Select(_ => new TxOut()));
            dummyTransactions[0].Outputs[0].Value        = 11 * Money.CENT;
            dummyTransactions[0].Outputs[0].ScriptPubKey = dummyTransactions[0].Outputs[0].ScriptPubKey + key[0].PubKey.ToBytes() + OpcodeType.OP_CHECKSIG;
            dummyTransactions[0].Outputs[1].Value        = 50 * Money.CENT;
            dummyTransactions[0].Outputs[1].ScriptPubKey = dummyTransactions[0].Outputs[1].ScriptPubKey + key[1].PubKey.ToBytes() + OpcodeType.OP_CHECKSIG;
            coinsRet.AddTransaction(dummyTransactions[0], 0);


            dummyTransactions[1].Outputs.AddRange(Enumerable.Range(0, 2).Select(_ => new TxOut()));
            dummyTransactions[1].Outputs[0].Value        = 21 * Money.CENT;
            dummyTransactions[1].Outputs[0].ScriptPubKey = StandardScripts.PayToAddress(key[2].PubKey.GetAddress(Network.Main));
            dummyTransactions[1].Outputs[1].Value        = 22 * Money.CENT;
            dummyTransactions[1].Outputs[1].ScriptPubKey = StandardScripts.PayToAddress(key[3].PubKey.GetAddress(Network.Main));
            coinsRet.AddTransaction(dummyTransactions[1], 0);


            return(dummyTransactions);
        }
        public void CanCompressMessageAsScript()
        {
            var coinsView = new CoinsView(this.network);

            Transaction[] dummyTransactions = SetupDummyInputs(coinsView);

            string metadata = "{\"compression\": \"gzip\", \"encryption\": \"none\", \"rewardAddress\": \"\", signatureType: \"ECDSA\", \"messageHash\": \"\", \"messageSignature\": \"\"}";

            byte[] uncompressedMetadata = System.Text.Encoding.UTF8.GetBytes(metadata);
            byte[] compressedMetadata   = CompressByteArray(uncompressedMetadata);

            string message = "Bitcoin is a worldwide cryptocurrency and payment system which is the first decentralized digital currency, as the system works without a central repository or single administrator. It was invented by an unknown person or group of people under the name Satoshi Nakamoto and released as open-source software in 2009. The system is peer-to-peer, and transactions take place between users directly, without an intermediary. These transactions are verified by network nodes and recorded in a public distributed ledger called a blockchain. Bitcoins are created as a reward for a process known as mining.They can be exchanged for other currencies, products, and services.As of February 2015, over 100, 000 merchants and vendors accepted bitcoin as payment. Bitcoin can also be held as an investment.According to research produced by Cambridge University in 2017, there are 2.9 to 5.8 million unique users using a cryptocurrency wallet, most of them using bitcoin." + OpcodeType.OP_RETURN;

            byte[] uncompressedMessage = System.Text.Encoding.UTF8.GetBytes(message);
            byte[] compressedMessage   = CompressByteArray(uncompressedMessage);

            byte[] header         = System.Text.Encoding.UTF8.GetBytes("TWS");
            byte   version        = 1;
            byte   compression    = 1;
            byte   checksumType   = 0;
            ushort metadataLength = (ushort)compressedMetadata.Length;
            ushort messageLength  = (ushort)compressedMessage.Length;

            List <byte> pushData = new List <byte>();

            pushData.AddRange(header);
            pushData.Add(version);
            pushData.Add(compression);
            pushData.Add(checksumType);
            pushData.AddRange(BitConverter.GetBytes(metadataLength));
            pushData.AddRange(BitConverter.GetBytes(messageLength));
            pushData.AddRange(compressedMetadata);
            pushData.AddRange(compressedMessage);
            var script = new Script(pushData);

            if (script.Length > 16505)
            {
                throw new Exception("Push data can't be bigger than 16505 bytes.");
            }

            Transaction t = BuildMessageTransaction(script.ToBytes(), dummyTransactions[0].GetHash());

            coinsView.AddTransaction(this.network.Consensus, dummyTransactions[1], 0);

            AssertCompressed(script, 696);
        }
Example #3
0
        private Transaction[] SetupDummyInputs(CoinsView coinsRet)
        {
            Transaction[] dummyTransactions = Enumerable.Range(0, 2).Select(_ => new Transaction()).ToArray();

            // Add some keys to the keystore:
            Key[] key = Enumerable.Range(0, 4).Select((_, i) => new Key(i % 2 != 0)).ToArray();

            // Create some dummy input transactions
            dummyTransactions[0].Outputs.AddRange(Enumerable.Range(0, 2).Select(_ => new TxOut()));
            dummyTransactions[0].Outputs[0].Value = 11 * Money.CENT;
            dummyTransactions[0].Outputs[0].ScriptPubKey = dummyTransactions[0].Outputs[0].ScriptPubKey + key[0].PubKey.ToBytes() + OpcodeType.OP_CHECKSIG;
            dummyTransactions[0].Outputs[1].Value = 50 * Money.CENT;
            dummyTransactions[0].Outputs[1].ScriptPubKey = dummyTransactions[0].Outputs[1].ScriptPubKey + key[1].PubKey.ToBytes() + OpcodeType.OP_CHECKSIG;
            coinsRet.AddTransaction(dummyTransactions[0],0);

            dummyTransactions[1].Outputs.AddRange(Enumerable.Range(0, 2).Select(_ => new TxOut()));
            dummyTransactions[1].Outputs[0].Value = 21 * Money.CENT;
            dummyTransactions[1].Outputs[0].ScriptPubKey = StandardScripts.PayToAddress(key[2].PubKey.GetAddress(Network.Main));
            dummyTransactions[1].Outputs[1].Value = 22 * Money.CENT;
            dummyTransactions[1].Outputs[1].ScriptPubKey = StandardScripts.PayToAddress(key[3].PubKey.GetAddress(Network.Main));
            coinsRet.AddTransaction(dummyTransactions[1],0);

            return dummyTransactions;
        }