public async Task Should_Add_Metadata_To_Account() { var account = await Fixture.GenerateAccountWithCurrency(10000); Log.WriteLine($"Company Account {account.Address.Plain} \r\n Private Key: {account.PrivateKey} \r\n Public Key {account.PublicKey}"); // await Fixture.SiriusWebSocketClient.Listener.Open(); var metadatatrx = AccountMetadataTransaction.Create(Deadline.Create(), account.PublicAccount, "test", "test", "", Fixture.NetworkType); var aggregateTransaction = AggregateTransaction.CreateBonded( Deadline.Create(), new List <Transaction> { metadatatrx.ToAggregate(account.PublicAccount), }, Fixture.NetworkType); var aggregateTransactionsigned = account.Sign(aggregateTransaction, Fixture.GenerationHash); var hashLockTransaction = HashLockTransaction.Create( Deadline.Create(), //new Mosaic(new MosaicId("0BB1469B94E6FEF8"), 10), NetworkCurrencyMosaic.CreateRelative(10), (ulong)3650, aggregateTransactionsigned, Fixture.NetworkType); var hashLockTransactionSigned = account.Sign(hashLockTransaction, Fixture.GenerationHash); Log.WriteLine($"Going to announce hashlock transaction: {hashLockTransactionSigned.Hash}"); await Fixture.SiriusClient.TransactionHttp.Announce(hashLockTransactionSigned); var hashLocktx = Fixture.SiriusWebSocketClient.Listener .ConfirmedTransactionsGiven(account.Address).Take(1) .Timeout(TimeSpan.FromSeconds(500)); Fixture.WatchForFailure(hashLockTransactionSigned); var hashLockConfirmed = await hashLocktx; Log.WriteLine($"Request confirmed with hash lock transaction {hashLockConfirmed.TransactionInfo.Hash}"); Thread.Sleep(4000); Log.WriteLine($"Going to announce aggregate transaction {aggregateTransactionsigned.Hash}"); await Fixture.SiriusClient.TransactionHttp.AnnounceAggregateBonded(aggregateTransactionsigned); Fixture.WatchForFailure(aggregateTransactionsigned); var aggregateTransactiontx = Fixture.SiriusWebSocketClient.Listener .ConfirmedTransactionsGiven(account.Address).Take(1) .Timeout(TimeSpan.FromSeconds(500)); //var aggregateTransactionConfirmed = await aggregateTransactiontx; //Log.WriteLine($" Request confirmed with aggregate transaction {aggregateTransactionConfirmed.TransactionInfo.Hash}"); }
public async Task Should_Add_Metadata_To_Mosaic() { var account = await Fixture.GenerateAccountWithCurrency(10000); Log.WriteLine($"Company Account {account.Address.Plain} \r\n Private Key: {account.PrivateKey} \r\n Public Key {account.PublicKey}"); var nonce = MosaicNonce.CreateRandom(); var mosaicId = MosaicId.CreateFromNonce(nonce, account.PublicAccount.PublicKey); var mosaicDefinitionTransaction = MosaicDefinitionTransaction.Create( nonce, mosaicId, Deadline.Create(), MosaicProperties.Create( supplyMutable: true, transferable: true, levyMutable: false, divisibility: 6, duration: 0 ), Fixture.NetworkType); Log.WriteLine($"Going to create mosaic {mosaicDefinitionTransaction.MosaicId.HexId}"); var mosaicSupplyChangeTransaction = MosaicSupplyChangeTransaction.Create( Deadline.Create(), mosaicDefinitionTransaction.MosaicId, MosaicSupplyType.INCREASE, 1000, Fixture.NetworkType); var aggregateTransactiontx = AggregateTransaction.CreateComplete( Deadline.Create(), new List <Transaction> { mosaicDefinitionTransaction.ToAggregate(account.PublicAccount), mosaicSupplyChangeTransaction.ToAggregate(account.PublicAccount) }, Fixture.NetworkType); var aggregateTransactionsigned = account.Sign(aggregateTransactiontx, Fixture.GenerationHash); await Fixture.SiriusWebSocketClient.Listener.Open(); Log.WriteLine($"Going to announce aggregate transaction: {aggregateTransactionsigned.Hash}"); await Fixture.SiriusClient.TransactionHttp.Announce(aggregateTransactionsigned); var metadatatrx = MosaicMetadataTransaction.Create( Deadline.Create(), account.PublicAccount, mosaicDefinitionTransaction.MosaicId, "test_mosaic", "1", "", Fixture.NetworkType); var aggregateTransaction = AggregateTransaction.CreateBonded( Deadline.Create(), new List <Transaction> { metadatatrx.ToAggregate(account.PublicAccount), }, Fixture.NetworkType); var aggregateTrxsigned = account.Sign(aggregateTransaction, Fixture.GenerationHash); Fixture.WatchForFailure(aggregateTransactionsigned); var hashLockTransaction = HashLockTransaction.Create( Deadline.Create(), //new Mosaic(new MosaicId("0BB1469B94E6FEF8"), 10), NetworkCurrencyMosaic.CreateRelative(10), (ulong)3650, aggregateTrxsigned, Fixture.NetworkType); var hashLockTransactionSigned = account.Sign(hashLockTransaction, Fixture.GenerationHash); Log.WriteLine($"Going to announce hashlock transaction: {hashLockTransactionSigned.Hash}"); await Fixture.SiriusClient.TransactionHttp.Announce(hashLockTransactionSigned); var hashLocktx = Fixture.SiriusWebSocketClient.Listener .ConfirmedTransactionsGiven(account.Address).Take(1) .Timeout(TimeSpan.FromSeconds(500)); Fixture.WatchForFailure(hashLockTransactionSigned); var hashLockConfirmed = await hashLocktx; Log.WriteLine($"Request confirmed with hash lock transaction {hashLockConfirmed.TransactionInfo.Hash}"); Log.WriteLine($"Going to announce aggregate transaction {aggregateTransactionsigned.Hash}"); await Fixture.SiriusClient.TransactionHttp.AnnounceAggregateBonded(aggregateTransactionsigned); Fixture.WatchForFailure(aggregateTransactionsigned); var aggregateTrntx = Fixture.SiriusWebSocketClient.Listener .ConfirmedTransactionsGiven(account.Address).Take(1) .Timeout(TimeSpan.FromSeconds(500)); var MosaicMetadataDetail = await Fixture.SiriusClient.MetadataHttp.SearchMetadata(new MetadataQueryParams(1, Order.ASC, 1, Address.CreateFromRawAddress(account.Address.ToString()), null, null, null)); Log.WriteLine($"Metadata mosaic {MosaicMetadataDetail}"); }
public async Task Should_Add_Cosignatory() { Log.WriteLine($"MultiSig account {Fixture.MultiSigAccount}"); Log.WriteLine($"Cosignatory1 account {Fixture.Cosignatory1}"); Log.WriteLine($"Cosignatory3 account {Fixture.Cosignatory3}"); // Define a modify multisig account transaction to increase the minAprovalDelta in one unit var modifyMultisigAccountTransaction = ModifyMultisigAccountTransaction.Create( Deadline.Create(), 0, 0, new List <MultisigCosignatoryModification> { new MultisigCosignatoryModification(MultisigCosignatoryModificationType.ADD, Fixture.Cosignatory1.PublicAccount), new MultisigCosignatoryModification(MultisigCosignatoryModificationType.ADD, Fixture.Cosignatory3.PublicAccount), }, Fixture.NetworkType); // Wrap the modify multisig account transaction in an aggregate transaction, // attaching the multisig public key as the signer var aggregateTransaction = AggregateTransaction.CreateComplete( Deadline.Create(), new List <Transaction> { modifyMultisigAccountTransaction.ToAggregate(Fixture.MultiSigAccount.PublicAccount) }, Fixture.NetworkType ); var signedTransaction = Fixture.MultiSigAccount.Sign(aggregateTransaction, Fixture.GenerationHash); Fixture.WatchForFailure(signedTransaction); // Before sending an aggregate bonded transaction, // the future multisig account needs to lock at least 10 cat.currency. // This transaction is required to prevent network spamming and ensure that // the inner transactions are cosigned var hashLockTransaction = HashLockTransaction.Create( Deadline.Create(), NetworkCurrencyMosaic.CreateRelative(10), (ulong)700, signedTransaction, Fixture.NetworkType); var hashLockTransactionSigned = Fixture.SeedAccount.Sign(hashLockTransaction, Fixture.GenerationHash); try { var hashLocktx = Fixture.SiriusWebSocketClient.Listener .ConfirmedTransactionsGiven(Fixture.Cosignatory1.Address).Take(1) .Timeout(TimeSpan.FromSeconds(500)); Fixture.WatchForFailure(hashLockTransactionSigned); // Announce the hash lock transaction Log.WriteLine($"Going to announce hash lock transaction {hashLockTransactionSigned.Hash}"); await Fixture.SiriusClient.TransactionHttp.Announce(hashLockTransactionSigned); var hashLockConfirmed = await hashLocktx; if (hashLockConfirmed.TransactionInfo.Hash == hashLockTransactionSigned.Hash) { // Announce the AnnounceAggregateBonded transaction await Fixture.SiriusClient.TransactionHttp.AnnounceAggregateBonded(signedTransaction); Log.WriteLine($"Going to announce aggregate bonded transaction {signedTransaction.Hash}"); // sleep for await Thread.Sleep(8000); Fixture.WatchForFailure(signedTransaction); var cosignatory3AggTxs = await Fixture.SiriusClient.AccountHttp.AggregateBondedTransactions(Fixture.Cosignatory3.PublicAccount); foreach (AggregateTransaction tx in cosignatory3AggTxs.Transactions) { if (!tx.IsSignedByAccount(Fixture.Cosignatory3.PublicAccount)) { var cosignatureSignedTransaction = CosignAggregateBondedTransaction(tx, Fixture.Cosignatory3); Fixture.WatchForFailure(cosignatureSignedTransaction); Log.WriteLine($"Going to announce cosign aggregate bonded transaction {cosignatureSignedTransaction.ParentHash}"); await Fixture.SiriusClient.TransactionHttp.AnnounceAggregateBondedCosignatureAsync(cosignatureSignedTransaction); Thread.Sleep(2000); } } var cosignatory2AggTxs = await Fixture.SiriusClient.AccountHttp.AggregateBondedTransactions(Fixture.Cosignatory2.PublicAccount); foreach (AggregateTransaction tx in cosignatory2AggTxs.Transactions) { if (!tx.IsSignedByAccount(Fixture.Cosignatory2.PublicAccount)) { var cosignatureSignedTransaction = CosignAggregateBondedTransaction(tx, Fixture.Cosignatory2); Fixture.WatchForFailure(cosignatureSignedTransaction); await Fixture.SiriusClient.TransactionHttp.AnnounceAggregateBondedCosignatureAsync(cosignatureSignedTransaction); Thread.Sleep(2000); } } Log.WriteLine($"Completed"); } } catch (Exception e) { Log.WriteLine(e.Message); } }
public async Task Should_Add_Metadata_To_Namespace() { var account = await Fixture.GenerateAccountWithCurrency(10000); Log.WriteLine($"Company Account {account.Address.Plain} \r\n Private Key: {account.PrivateKey} \r\n Public Key {account.PublicKey}"); var rootNs = "namespace_metadata_test"; var rootId = new NamespaceId(rootNs); var registerRootTransaction = RegisterNamespaceTransaction.CreateRootNamespace( Deadline.Create(), rootNs, 3650, Fixture.NetworkType); var aggregateTransactiontx = AggregateTransaction.CreateComplete( Deadline.Create(), new List <Transaction> { registerRootTransaction.ToAggregate(account.PublicAccount), }, Fixture.NetworkType); var aggregateTransactionsigned = account.Sign(aggregateTransactiontx, Fixture.GenerationHash); await Fixture.SiriusWebSocketClient.Listener.Open(); Log.WriteLine($"Going to announce aggregate transaction: {aggregateTransactionsigned.Hash}"); await Fixture.SiriusClient.TransactionHttp.Announce(aggregateTransactionsigned); /*var aggregateTransactiontxs = Fixture.SiriusWebSocketClient.Listener * .ConfirmedTransactionsGiven(account.Address).Take(1) * .Timeout(TimeSpan.FromSeconds(500)); * * var aggregateTransactionConfirmed = await aggregateTransactiontxs; * Log.WriteLine($" Request confirmed with aggregate transaction {aggregateTransactionConfirmed.TransactionInfo.Hash}");*/ var metadatatrx = NamespaceMetadataTransaction.Create( Deadline.Create(), account.PublicAccount, rootId, "test_Namespace", "1", "", Fixture.NetworkType); var aggregateTransaction = AggregateTransaction.CreateBonded( Deadline.Create(), new List <Transaction> { metadatatrx.ToAggregate(account.PublicAccount), }, Fixture.NetworkType); var aggregateTrxsigned = account.Sign(aggregateTransaction, Fixture.GenerationHash); Fixture.WatchForFailure(aggregateTrxsigned); /* Log.WriteLine($" {aggregateTransactionConfirmed.TransactionType}Request confirmed with aggregate transaction {aggregateTransactionConfirmed.TransactionInfo.Hash}");*/ var hashLockTransaction = HashLockTransaction.Create( Deadline.Create(), //new Mosaic(new MosaicId("0BB1469B94E6FEF8"), 10), NetworkCurrencyMosaic.CreateRelative(10), (ulong)3650, aggregateTrxsigned, Fixture.NetworkType); var hashLockTransactionSigned = account.Sign(hashLockTransaction, Fixture.GenerationHash); Log.WriteLine($"Going to announce hashlock transaction: {hashLockTransactionSigned.Hash}"); await Fixture.SiriusClient.TransactionHttp.Announce(hashLockTransactionSigned); var hashLocktx = Fixture.SiriusWebSocketClient.Listener .ConfirmedTransactionsGiven(account.Address).Take(1) .Timeout(TimeSpan.FromSeconds(500)); Fixture.WatchForFailure(hashLockTransactionSigned); var hashLockConfirmed = await hashLocktx; Log.WriteLine($"Request confirmed with hash lock transaction {hashLockConfirmed.TransactionInfo.Hash}"); Log.WriteLine($"Going to announce aggregate transaction {aggregateTrxsigned.Hash}"); await Fixture.SiriusClient.TransactionHttp.AnnounceAggregateBonded(aggregateTrxsigned); Fixture.WatchForFailure(aggregateTrxsigned); var aggregateTrntx = Fixture.SiriusWebSocketClient.Listener .ConfirmedTransactionsGiven(account.Address).Take(1) .Timeout(TimeSpan.FromSeconds(500)); var aggregateTrxConfirmed = await aggregateTrntx; Log.WriteLine($"Request confirmed with aggregate transaction {aggregateTrxConfirmed.TransactionInfo.Hash}"); }
public async Task Should_Add_Cosignatory() { //account = Account.CreateFromPrivateKey("EC2A2026948C28BAA8CDF061D7768397E0080E8E7913DE2ABF3066D2D4DCA0A6", NetworkType); //cosignatory1 = Account.CreateFromPrivateKey("39E80B97D7528E59997AA11DD499B42EFEE2E85BE372179CE88E622541F5DEDB", NetworkType); //cosignatory2 = Account.CreateFromPrivateKey("38296AE980C69D24D018D119C40A00D3894713F3A2F7BB27E495671D3D8C2E6D", NetworkType); // cosignatory3 = Account.CreateFromPrivateKey("748EFC97BBB2EC5A304DAD9B712B6540A8AD6A3EC2C60BDB03D20F6DB34513AD", NetworkType); Thread.Sleep(4000); Log.WriteLine($"MultiSig account {Fixture.MultiSigAccount}"); Log.WriteLine($"Cosignatory1 account {Fixture.Cosignatory1}"); Log.WriteLine($"Cosignatory3 account {Fixture.Cosignatory3}"); var multisigCosignatoryModification = new MultisigCosignatoryModification(MultisigCosignatoryModificationType.ADD, Fixture.Cosignatory3.PublicAccount); // Define a modify multisig account transaction to increase the minAprovalDelta in one unit var modifyMultisigAccountTransaction = ModifyMultisigAccountTransaction.Create( Deadline.Create(), 0, 0, new List <MultisigCosignatoryModification> { multisigCosignatoryModification }, Fixture.NetworkType); // Wrap the modify multisig account transaction in an aggregate transaction, // attaching the multisig public key as the signer var aggregateTransaction = AggregateTransaction.CreateBonded( Deadline.Create(), new List <Transaction> { modifyMultisigAccountTransaction.ToAggregate(Fixture.MultiSigAccount.PublicAccount) }, Fixture.NetworkType ); var signedTransaction = Fixture.Cosignatory1.Sign(aggregateTransaction, Fixture.GenerationHash); // Before sending an aggregate bonded transaction, // the future multisig account needs to lock at least 10 cat.currency. // This transaction is required to prevent network spamming and ensure that // the inner transactions are cosigned var hashLockTransaction = HashLockTransaction.Create( Deadline.Create(), NetworkCurrencyMosaic.CreateRelative(10), (ulong)700, signedTransaction, Fixture.NetworkType); var hashLockTransactionSigned = Fixture.Cosignatory1.Sign(hashLockTransaction, Fixture.GenerationHash); /*var hashLocktx =SiriusWebSocketClient.Listener * .ConfirmedTransactionsGiven(cosignatory1.Address).Take(1) * .Timeout(TimeSpan.FromSeconds(500));*/ Fixture.WatchForFailure(hashLockTransactionSigned); Log.WriteLine($"Going to announce hash lock transaction {hashLockTransactionSigned.Hash}"); // Announce the hash lock transaction await Fixture.SiriusClient.TransactionHttp.Announce(hashLockTransactionSigned); Thread.Sleep(8000); // Wait for the hash lock transaction to be confirmed //var hashLockConfirmed = await hashLocktx; // if (hashLockConfirmed.TransactionInfo.Hash == hashLockTransactionSigned.Hash) // { Fixture.WatchForFailure(signedTransaction); Log.WriteLine($"Going to announce aggregate bonded transaction {signedTransaction.Hash}"); // Announce the AnnounceAggregateBonded transaction await Fixture.SiriusClient.TransactionHttp.AnnounceAggregateBonded(signedTransaction); // sleep for await Thread.Sleep(8000); /*var cosignatory3Cosigned =SiriusWebSocketClient.Listener * .CosignatureAdded(cosignatory3.Address).Take(1) * .Timeout(TimeSpan.FromSeconds(2000));*/ Thread.Sleep(2000); var cosignatory3AggTxs = await Fixture.SiriusClient.AccountHttp.AggregateBondedTransactions(Fixture.Cosignatory3.PublicAccount); foreach (AggregateTransaction tx in cosignatory3AggTxs) { if (!tx.IsSignedByAccount(Fixture.Cosignatory3.PublicAccount)) { var cosignatureSignedTransaction = CosignAggregateBondedTransaction(tx, Fixture.Cosignatory3); Fixture.WatchForFailure(cosignatureSignedTransaction); await Fixture.SiriusClient.TransactionHttp.AnnounceAggregateBondedCosignatureAsync(cosignatureSignedTransaction); Thread.Sleep(2000); //var resultTx = await cosignatory1Cosigned; //Log.WriteLine($"Completed Cosign 1 {resultTx}"); } } /*var cosignatory2Cosigned =SiriusWebSocketClient.Listener * .CosignatureAdded(cosignatory2.Address).Take(1) * .Timeout(TimeSpan.FromSeconds(2000));*/ Thread.Sleep(2000); var cosignatory2AggTxs = await Fixture.SiriusClient.AccountHttp.AggregateBondedTransactions(Fixture.Cosignatory2.PublicAccount); foreach (AggregateTransaction tx in cosignatory2AggTxs) { if (!tx.IsSignedByAccount(Fixture.Cosignatory2.PublicAccount)) { var cosignatureSignedTransaction = CosignAggregateBondedTransaction(tx, Fixture.Cosignatory2); Fixture.WatchForFailure(cosignatureSignedTransaction); await Fixture.SiriusClient.TransactionHttp.AnnounceAggregateBondedCosignatureAsync(cosignatureSignedTransaction); Thread.Sleep(2000); //var resultTx = await cosignatory1Cosigned; //Log.WriteLine($"Completed Cosign 1 {resultTx}"); } } Thread.Sleep(10000); // verify the account is multisig var multiSigAcc = await Fixture.SiriusClient.AccountHttp.GetMultisigAccountInfo(Fixture.MultiSigAccount.Address); Log.WriteLine($"Multisig account {multiSigAcc}"); multiSigAcc.IsMultisig.Should().BeTrue(); multiSigAcc.Cosignatories.Should().HaveCount(2); Log.WriteLine($"Completed"); // } }