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); }
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); }
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(); }
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 } }); }
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); }
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); }
public void TestBundleIsNotFinalizedShouldNotBeSignable() { var bundle = new Bundle(); bundle.AddTransaction( new Address("TESTVALUE9DONTUSEINPRODUCTION99999VELDTFQHDFTHIHFE9II9WFFDFHEATEI99GEDC9BAUH9EBGZ") { Balance = 42 }, new TryteString("ASDF"), Tag.Empty, 999999999L); bundle.Sign(new KeyGeneratorStub()); }
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); }
public void TestBundleIsFinalizedShouldThrowExceptionOnFinalize() { var bundle = new Bundle(); bundle.AddTransaction( new Address("TESTVALUE9DONTUSEINPRODUCTION99999VELDTFQHDFTHIHFE9II9WFFDFHEATEI99GEDC9BAUH9EBGZ") { Balance = 84 }, new TryteString(), Tag.Empty, 999999999L); bundle.Finalize(); bundle.Finalize(); }
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); }
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)); } }
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); }
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); }