public async Task SecretProofTransactionTest() { var signer = KeyPair.CreateFromPrivateKey(Config.PrivateKeyMain); var secretHash = new byte[64]; var digest = new Sha3Digest(512); digest.BlockUpdate("5D8BEBBE80D7EA3B0088E59308D8671099781429".FromHex(), 0, "5D8BEBBE80D7EA3B0088E59308D8671099781429".FromHex().Length); digest.DoFinal(secretHash, 0); var trans = SecretProofTransaction.Create( NetworkType.Types.MIJIN_TEST, Deadline.CreateHours(2), 0, HashType.Types.SHA3_512, secretHash.ToHexLower(), "5D8BEBBE80D7EA3B0088E59308D8671099781429") .SignWith(signer); listener.ConfirmedTransactionsGiven(Address.CreateFromPublicKey(signer.PublicKeyString, NetworkType.Types.MIJIN_TEST)).Subscribe(e => Console.WriteLine(e.TransactionInfo.Hash)); await new TransactionHttp(host).Announce(trans); var status = await listener.TransactionStatus(Address.CreateFromPublicKey(signer.PublicKeyString, NetworkType.Types.MIJIN_TEST)).Where(e => e.Hash == trans.Hash).Take(1); Assert.AreEqual("Failure_Lock_Secret_Already_Used", status.Status); }
public async Task Should_Announce_Secret_Hash() { var bob = await Fixture.GenerateAccountWithCurrency(10000); /* var priv_bob = await Fixture.GenerateAccountWithCurrency(10000); * * var priv_alice = await Fixture.GenerateAccountWithCurrency(10000);*/ var alice = await Fixture.GenerateAccountWithCurrency(10000); Log.WriteLine($"Bob Account Address: {bob.Address.Plain} \r\n Private Key: {bob.PrivateKey} \r\n Public Key {bob.PublicKey}"); Log.WriteLine($"Alice Account Address: {alice.Address.Plain} \r\n Private Key: {alice.PrivateKey} \r\n Public Key {alice.PublicKey}"); //var secret = "8ee6bb9dc6dbf61db3b2c01086976ffac34b0820c1a4c8aeff92f59c33cb49fa"; byte[] Seed = new byte[40]; // Random random = new Random(); // random.NextBytes(Seed); var secret_ = CryptoUtils.Sha3_256(Seed); var secret = BitConverter.ToString(secret_); secret = secret.Replace("-", "").ToLowerInvariant(); var csprng = new RNGCryptoServiceProvider(); csprng.GetNonZeroBytes(Seed); var proof = BitConverter.ToString(Seed); //var proof = string.Join("", Seed.Select(b => b.ToString("X"))); proof = proof.Replace("-", ""); /* Random rdm = new Random(); * string proof = string.Empty; * int num; * * for (int i = 0; i < 4; i++) * { * num = rdm.Next(0, int.MaxValue); * proof += num.ToString("X4"); * }*/ //proof = Hex.EncodeHexString(Seed); //proof = proof.Replace("-", ""); //Random random = new Random(); //string proof = random.NextBytes(secretSeed); var nonce = MosaicNonce.CreateRandom(); var mosaic_id = MosaicId.CreateFromNonce(nonce, Fixture.GenerationHash); var secretLockTransaction = SecretLockTransaction.Create(Deadline.Create(), // NetworkCurrencyMosaic.CreateRelative(10), new Mosaic(mosaic_id, 10), (ulong)100, HashType.SHA3_256, secret, bob.Address, NetworkType.TEST_NET); /* var aggregateTransaction = AggregateTransaction.CreateComplete( * Deadline.Create(), * new List<Transaction> * { * secretLockTransaction.ToAggregate(Fixture.SeedAccount.PublicAccount) * }, * Fixture.NetworkType);*/ var signedTransaction = alice.Sign(secretLockTransaction, Fixture.GenerationHash); Fixture.WatchForFailure(signedTransaction); Log.WriteLine($"Going to announce transaction {signedTransaction.Hash}"); Log.WriteLine($"Proof {proof}"); Log.WriteLine($"Secret {secret}"); Log.WriteLine($"proof length {proof.DecodeHexString().Length}"); await Fixture.SiriusClient.TransactionHttp.Announce(signedTransaction); //Log.WriteLine($"Going to announce Secret Lock Transaction {signedTransaction.Hash}"); var secretProofTransaction = SecretProofTransaction.Create( Deadline.Create(), HashType.SHA3_256, Recipient.From(bob.Address), secret, secret, Fixture.NetworkType ); var secretProofsignedTransaction = bob.Sign(secretProofTransaction, Fixture.GenerationHash); Fixture.WatchForFailure(secretProofsignedTransaction); Thread.Sleep(8000); // Log.WriteLine($"Going to announce Secret Lock Transaction {signedTransaction.Hash}"); // var tx = Fixture.SiriusWebSocketClient.Listener.ConfirmedTransactionsGiven(account.Address).Take(1).Timeout(TimeSpan.FromSeconds(3000)); // var tx = Fixture.SiriusWebSocketClient.Listener.ConfirmedTransactionsGiven(alice.Address).Take(1).Timeout(TimeSpan.FromSeconds(3000)); await Fixture.SiriusClient.TransactionHttp.Announce(secretProofsignedTransaction); Thread.Sleep(8000); Log.WriteLine($"Going to announce Secret Proof Transaction {secretProofsignedTransaction.Hash}"); //var tx = Fixture.SiriusWebSocketClient.Listener.ConfirmedTransactionsGiven(alice.Address).Take(1).Timeout(TimeSpan.FromSeconds(3000)); //var secretLocksignedTransaction = account.Sign(secretLockTransaction, Fixture.GenerationHash); // await Fixture.SiriusClient.TransactionHttp.Announce(secretLocksignedTransaction); // var result = await tx; // Log.WriteLine($"Request confirmed with transaction {result.TransactionInfo.Hash}"); }