コード例 #1
0
        public void Test1()
        {
            using (var tester = XSwapTester.Create())
            {
                var pubKey = tester.Bob.Facade.NewPubkey();

                var offer = tester.Alice.Facade.ProposeOffer(Proposal.Parse("1BTC1=>2BTC2"), pubKey).Result;

                var waitingOffer = tester.Alice.Facade.WaitOfferAsync(offer);
                tester.Alice.Facade.BroadcastOffer(offer, false).Wait();
                waitingOffer.Wait();

                tester.Bob.Facade.BroadcastOffer(offer.CreateCounterOffer(), true).Wait();

                var bobWait =
                    Task.WhenAll
                        (tester.Bob.Facade.WaitOfferConfirmationAsync(offer.CreateCounterOffer()),
                        tester.Bob.Facade.WaitOfferConfirmationAsync(offer));

                var aliceWait =
                    Task.WhenAll
                        (tester.Alice.Facade.WaitOfferConfirmationAsync(offer.CreateCounterOffer()),
                        tester.Alice.Facade.WaitOfferConfirmationAsync(offer));

                tester.Bob.Chain2.CreateRPCClient().Generate(1);
                tester.Alice.Chain1.CreateRPCClient().Generate(1);

                aliceWait.Wait();
                bobWait.Wait();

                var waitingTake = tester.Bob.Facade.WaitOfferTakenAsync(offer.CreateCounterOffer());

                tester.Alice.Facade.TakeOffer(offer.CreateCounterOffer()).Wait();

                waitingTake.Wait();
                tester.Bob.Facade.TakeOffer(offer).Wait();

                var bob   = tester.Bob.Chain1.CreateRPCClient().ListUnspent(0, 0);
                var alice = tester.Alice.Chain2.CreateRPCClient().ListUnspent(0, 0);
                Assert.Equal(1, bob.Length);
                Assert.Equal(1, alice.Length);
            }
        }
コード例 #2
0
        public void TestCommandLineFlow()
        {
            using (var tester = XSwapTester.Create())
            {
                tester.Bob.Interactive.Process("newkey");
                var proposing = Task.Run(() => tester.Alice.Interactive.Process($"propose 1BTC1=>2BTC2 {tester.Bob.Interactive.DataToTransfer}"));
                //Alice waits the counter offer
                tester.Alice.Interactive.WaitBlocked();
                var taking = Task.Run(() => tester.Bob.Interactive.Process($"take {tester.Alice.Interactive.DataToTransfer}"));

                //Bob and Alice wait for new blocks
                tester.Bob.Interactive.WaitBlocked();
                tester.Alice.Interactive.WaitBlocked();
                tester.Alice.Chain1.CreateRPCClient().Generate(1);
                tester.Bob.Chain2.CreateRPCClient().Generate(1);

                //Done
                proposing.Wait();
                taking.Wait();
            }
        }