Пример #1
0
        public void TestTransferMessageDoesNotFitIntoOneTransactionShouldCreateSecondTransaction()
        {
            var transfer = new Transfer
            {
                Address = new Address("RBTC9D9DCDEAUCFDCDADEAMBHAFAHKAJDHAODHADHDAD9KAHAJDADHJSGDJHSDGSDPODHAUDUAHDJAHAB")
                {
                    Balance = 42
                },
                Message = TryteString.FromString(GetSuperLongMessage()),
                Tag     = Tag.Empty
            };

            var bundle = new Bundle();

            bundle.AddTransaction(transfer.Address, transfer.Message, transfer.Tag, 999999999L);

            Assert.AreEqual(2, bundle.Transactions.Count);

            var transactionOne = bundle.Transactions[0];

            Assert.AreEqual(transfer.Address, transactionOne.Address);
            Assert.AreEqual(transfer.Tag, transactionOne.Tag);
            Assert.AreEqual(transfer.Address.Balance, transactionOne.Value);

            var transactionTwo = bundle.Transactions[1];

            Assert.AreEqual(transfer.Address, transactionTwo.Address);
            Assert.AreEqual(transfer.Tag, transactionTwo.Tag);
            Assert.AreEqual(0, transactionTwo.Value);
        }
Пример #2
0
        public void TestAddInputsWithSecurityLevelHigherThanOneShouldAddMultipleTransactionsToHoldSignature()
        {
            var bundle = new Bundle();

            bundle.AddTransaction(
                new Address("TESTVALUE9DONTUSEINPRODUCTION99999VELDTFQHDFTHIHFE9II9WFFDFHEATEI99GEDC9BAUH9EBGZ")
            {
                Balance = 84
            },
                new TryteString(),
                Tag.Empty,
                999999999L);

            bundle.AddInput(
                new List <Address>
            {
                new Address("NVGLHFZWLEQAWBDJXCWJBMVBVNXEG9DALNBTAYMKEMMJ9BCDVVHJJLSTQW9JEJXUUX9JNFGALBNASRDUD")
                {
                    Balance       = 42,
                    KeyIndex      = 4,
                    SecurityLevel = 2
                },
                new Address("XXYRPQ9BDZGKZZQLYNSBDD9HZLI9OFRK9TZCTU9PFAJYXZIZGO9BWLOCNGVMTLFQFMGJWYRMLXSCW9UTQ")
                {
                    Balance       = 42,
                    KeyIndex      = 5,
                    SecurityLevel = 3
                }
            });

            bundle.Finalize();

            Assert.AreEqual(6, bundle.Transactions.Count);
        }
Пример #3
0
        public void TestBundleHasInsufficientInputsShouldNotBeFinalizable()
        {
            var transfer = new Transfer
            {
                Address = new Address("RBTC9D9DCDEAUCFDCDADEAMBHAFAHKAJDHAODHADHDAD9KAHAJDADHJSGDJHSDGSDPODHAUDUAHDJAHAB")
                {
                    Balance = 42
                },
                Message = new TryteString(),
                Tag     = Tag.Empty
            };

            var bundle = new Bundle();

            bundle.AddTransaction(transfer.Address, transfer.Message, transfer.Tag, 999999999L);

            bundle.AddInput(
                new List <Address>
            {
                new Address("NVGLHFZWLEQAWBDJXCWJBMVBVNXEG9DALNBTAYMKEMMJ9BCDVVHJJLSTQW9JEJXUUX9JNFGALBNASRDUD")
                {
                    Balance       = 40,
                    KeyIndex      = 0,
                    SecurityLevel = 1
                }
            });

            Assert.AreEqual(2, bundle.Balance);

            bundle.Finalize();
        }
Пример #4
0
        public void TestBundleIsFinalizedShouldThrowExceptionOnAddInput()
        {
            var bundle = new Bundle();

            bundle.AddTransaction(
                new Address("TESTVALUE9DONTUSEINPRODUCTION99999VELDTFQHDFTHIHFE9II9WFFDFHEATEI99GEDC9BAUH9EBGZ")
            {
                Balance = 84
            },
                new TryteString(),
                Tag.Empty,
                999999999L);

            bundle.Finalize();

            bundle.AddInput(
                new List <Address>
            {
                new Address("NVGLHFZWLEQAWBDJXCWJBMVBVNXEG9DALNBTAYMKEMMJ9BCDVVHJJLSTQW9JEJXUUX9JNFGALBNASRDUD")
                {
                    Balance       = 42,
                    KeyIndex      = 4,
                    SecurityLevel = 2
                }
            });
        }
Пример #5
0
        public void TestAddInputsCoversTheExactAmountSpentShouldCreateCorrectTransactionCount()
        {
            var bundle = new Bundle();

            bundle.AddTransaction(
                new Address("TESTVALUE9DONTUSEINPRODUCTION99999VELDTFQHDFTHIHFE9II9WFFDFHEATEI99GEDC9BAUH9EBGZ")
            {
                Balance = 29
            },
                new TryteString(),
                Tag.Empty,
                999999999L);
            bundle.AddTransaction(
                new Address("TESTVALUE9DONTUSEINPRODUCTION99999OGVEEFBCYAM9ZEAADBGBHH9BPBOHFEGCFAM9DESCCHODZ9Y")
            {
                Balance = 13
            },
                new TryteString(),
                Tag.Empty,
                999999999L);

            bundle.AddInput(
                new List <Address>
            {
                new Address("KHWHSTISMVVSDCOMHVFIFCTINWZT9EHJUATYSMCXDSMZXPL9KXREBBYHJGRBCYVGPJQEHEDPXLBDJNQNX")
                {
                    Balance       = 40,
                    KeyIndex      = 1,
                    SecurityLevel = 1
                },
                new Address("GOAAMRU9EALPO9GKBOWUVZVQEJMB9CSGIZJATHRBTRRJPNTSQRZTASRBTQCRFAIDOGTWSHIDGOUUULQIG")
                {
                    Balance       = 2,
                    KeyIndex      = 2,
                    SecurityLevel = 1
                }
            });

            // since balance and spent tokens are even, this should be ignored
            bundle.AddRemainder(new Address("TESTVALUE9DONTUSEINPRODUCTION99999KAFGVCIBLHS9JBZCEFDELEGFDCZGIEGCPFEIQEYGA9UFPAE"));

            bundle.Finalize();

            Assert.AreEqual(4, bundle.Transactions.Count);
        }
Пример #6
0
        public void TestBundleIsFinalizedShouldThrowExceptionOnAddEntry()
        {
            var transfer = new Transfer
            {
                Address = new Address("TESTVALUE9DONTUSEINPRODUCTION99999VELDTFQHDFTHIHFE9II9WFFDFHEATEI99GEDC9BAUH9EBGZ")
                {
                    Balance = 42
                },
                Message = TryteString.FromString(GetSuperLongMessage()),
                Tag     = Tag.Empty
            };

            var bundle = new Bundle();

            bundle.AddTransaction(transfer.Address, transfer.Message, transfer.Tag, 999999999L);
            bundle.Finalize();

            bundle.AddTransaction(transfer.Address, transfer.Message, transfer.Tag, 999999999L);
        }
Пример #7
0
        public void TestBundleIsNotFinalizedShouldNotBeSignable()
        {
            var bundle = new Bundle();

            bundle.AddTransaction(
                new Address("TESTVALUE9DONTUSEINPRODUCTION99999VELDTFQHDFTHIHFE9II9WFFDFHEATEI99GEDC9BAUH9EBGZ")
            {
                Balance = 42
            },
                new TryteString("ASDF"),
                Tag.Empty,
                999999999L);

            bundle.Sign(new KeyGeneratorStub());
        }
Пример #8
0
        public void TestValueIsNegativeShouldThrowException()
        {
            var transfer = new Transfer
            {
                Address = new Address("RBTC9D9DCDEAUCFDCDADEAMBHAFAHKAJDHAODHADHDAD9KAHAJDADHJSGDJHSDGSDPODHAUDUAHDJAHAB")
                {
                    Balance = -42
                },
                Message = TryteString.FromString(GetSuperLongMessage()),
                Tag     = Tag.Empty
            };

            var bundle = new Bundle();

            bundle.AddTransaction(transfer.Address, transfer.Message, transfer.Tag, 999999999L);
        }
Пример #9
0
        public void TestBundleIsFinalizedShouldThrowExceptionOnFinalize()
        {
            var bundle = new Bundle();

            bundle.AddTransaction(
                new Address("TESTVALUE9DONTUSEINPRODUCTION99999VELDTFQHDFTHIHFE9II9WFFDFHEATEI99GEDC9BAUH9EBGZ")
            {
                Balance = 84
            },
                new TryteString(),
                Tag.Empty,
                999999999L);

            bundle.Finalize();
            bundle.Finalize();
        }
Пример #10
0
        public void TestTransferMessageFitsIntoOneTransactionShouldAddSingleTransaction()
        {
            var transfer = new Transfer
            {
                Address = new Address("RBTC9D9DCDEAUCFDCDADEAMBHAFAHKAJDHAODHADHDAD9KAHAJDADHJSGDJHSDGSDPODHAUDUAHDJAHAB")
                {
                    Balance = 42
                },
                Message = TryteString.FromString("Hello World!"),
                Tag     = Tag.Empty
            };

            var bundle = new Bundle();

            bundle.AddTransaction(transfer.Address, transfer.Message, transfer.Tag, 999999999L);

            Assert.AreEqual(1, bundle.Transactions.Count);
        }
Пример #11
0
        public void TestBundleIsFinalizedShouldApplySigningFragmentAndWithExtraTransactionsForSecurityLevelAboveOne()
        {
            var bundle = new Bundle();

            bundle.AddTransaction(
                new Address("TESTVALUE9DONTUSEINPRODUCTION99999VELDTFQHDFTHIHFE9II9WFFDFHEATEI99GEDC9BAUH9EBGZ")
            {
                Balance = 42
            },
                new TryteString("ASDF"),
                Tag.Empty,
                999999999L);

            bundle.AddInput(
                new List <Address>
            {
                new Address("KHWHSTISMVVSDCOMHVFIFCTINWZT9EHJUATYSMCXDSMZXPL9KXREBBYHJGRBCYVGPJQEHEDPXLBDJNQNX")
                {
                    Balance       = 40,
                    KeyIndex      = 1,
                    SecurityLevel = 2
                },
                new Address("GOAAMRU9EALPO9GKBOWUVZVQEJMB9CSGIZJATHRBTRRJPNTSQRZTASRBTQCRFAIDOGTWSHIDGOUUULQIG")
                {
                    Balance       = 2,
                    KeyIndex      = 2,
                    SecurityLevel = 3
                }
            });

            bundle.Finalize();
            bundle.Sign(new KeyGeneratorStub());

            Assert.AreEqual(6, bundle.Transactions.Count);

            Assert.IsTrue(string.IsNullOrEmpty(bundle.Transactions[0].SignatureFragment));

            for (var i = 1; i < bundle.Transactions.Count; i++)
            {
                Assert.IsTrue(!string.IsNullOrEmpty(bundle.Transactions[i].SignatureFragment));
            }
        }
Пример #12
0
        public void TestInsecureBundleHashIsManipulatedToBeSecure()
        {
            var transfer = new Transfer
            {
                Address   = new Address("9XV9RJGFJJZWITDPKSQXRTHCKJAIZZY9BYLBEQUXUNCLITRQDR9CCD99AANMXYEKD9GLJGVB9HIAGRIBQ"),
                Tag       = new Tag("PPDIDNQDJZGUQKOWJ9JZRCKOVGP"),
                Timestamp = 1509136296,
                Message   = new TryteString("JKAHSAAS")
            };

            var bundle = new Bundle();

            bundle.AddTransaction(transfer.Address, transfer.Message, transfer.Tag, transfer.Timestamp);
            bundle.Finalize();

            Assert.AreEqual(1, bundle.Transactions.Count);
            Assert.AreEqual("ZTDIDNQDJZGUQKOWJ9JZRCKOVGP", bundle.Transactions[0].ObsoleteTag.Value);
            Assert.AreEqual("PPDIDNQDJZGUQKOWJ9JZRCKOVGP", bundle.Transactions[0].Tag.Value);
            Assert.AreEqual("NYSJSEGCWESDAFLIFCNJFWGZ9PCYDOT9VCSALKBD9UUNKBJAJCB9KVMTHZDPRDDXC9UFJQBJBQFUPJKFC", bundle.Hash.Value);
        }
Пример #13
0
        public void TestBundleHasUnspentInputsButRemainderIsGivenShouldBeFinalizable()
        {
            var transfer = new Transfer
            {
                Address = new Address("RBTC9D9DCDEAUCFDCDADEAMBHAFAHKAJDHAODHADHDAD9KAHAJDADHJSGDJHSDGSDPODHAUDUAHDJAHAB")
                {
                    Balance = 42
                },
                Message = new TryteString(),
                Tag     = Tag.Empty
            };

            var bundle = new Bundle();

            bundle.AddTransaction(transfer.Address, transfer.Message, transfer.Tag, 999999999L);

            bundle.AddInput(
                new List <Address>
            {
                new Address("NVGLHFZWLEQAWBDJXCWJBMVBVNXEG9DALNBTAYMKEMMJ9BCDVVHJJLSTQW9JEJXUUX9JNFGALBNASRDUD")
                {
                    Balance       = 42,
                    KeyIndex      = 0,
                    SecurityLevel = 1
                },
                new Address("XXYRPQ9BDZGKZZQLYNSBDD9HZLI9OFRK9TZCTU9PFAJYXZIZGO9BWLOCNGVMTLFQFMGJWYRMLXSCW9UTQ")
                {
                    Balance       = 2,
                    KeyIndex      = 2,
                    SecurityLevel = 1
                }
            });


            bundle.AddRemainder(new Address("NVGLHFZWLEQAWBDJXCWJBMVBVNXEG9DALNBTAYMKEMMJ9BCDVVHJJLSTQW9JEJXUUX9JNFGALBNASRDUD"));

            bundle.Finalize();

            Assert.AreEqual(0, bundle.Balance);
            Assert.AreEqual(4, bundle.Transactions.Count);
        }