public async Task CanShowInfo() { await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "info" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "generate", "neo" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "info" }); }
public async Task CanCreateAndReviewOffer() { await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "--network", "testnet", "offer", "create", "--oraclepubkey", "57caa081b0a0e9e9413cf4fb72ddc2630d609bdf6a912b98c4cfd358a4ce1496", "--nonce", "92ba989222e76cf0cb263fedd67587812110bde1dc1468bef63c8f6974692ea1", "--funding", "cHNidP8BALwCAAAAAhyfislzQS3Q4xtaCVbSKztXgCbkXHvqoN0ZQPVwLtiRAQAAAAD+////0sWvPdN8zMIlXWZ5TP2LCmS2tXn0mq5Jy/H+Dr3sVXcAAAAAAP7///8DVwQAAAAAAAAWABRG14/IKu1cwguA1Zpf38w8Uo2WEvFdIAAAAAAAFgAUPDZOW4cQt7HtQ6LTckTs/EdezyIAWmICAAAAABl2qRQCVQOSzWKNBuwbxvjMoah8d4g5wIisI/EbAAABAR/6lFEBAAAAABYAFJwzhGgakahc93MQnjbvxXmq9K/hIgYDsP0UpR8Mgp0gv1V7iuQ64o/esYaR0uVt1w6vso9uL14Yo4MFf1QAAIABAACAAAAAgAEAAAACAAAAAAEBHwAtMQEAAAAAFgAUGArwzyUB0DY+N9TI0lFh2DeURigiBgK4w7vZjBER+7G0ky5uQmb6c20ESovjwPaOS7K/pfhtbxijgwV/VAAAgAEAAIAAAACAAAAAAAYAAAAAIgICzVzQn25qzI10r2VfcIJ6/wedvUpz1QO3LCSN1FIEWKoYo4MFf1QAAIABAACAAAAAgAAAAAAHAAAAACICApmHY8GtEZA8G/dKfXrqg31ArW+8kKK+5PXdMYnbMafKGKODBX9UAACAAQAAgAAAAIABAAAABAAAAAAA", "--outcome", "Republican_win:10000sats", "--outcome", "Democrats_win:0", "--outcome", "other:0.2", "--expiration", "1000" }); var offer = Tester.GetResult <Offer>(); Assert.Equal(Money.Satoshis(10000), offer.ContractInfo[0].Payout); Assert.Equal(Money.Coins(0.2m), offer.ContractInfo[2].Payout); Assert.Equal("tb1q8smyuku8zzmmrm2r5tfhy38vl3r4anezy6ftse", offer.ChangeAddress.ToString()); var offerStr = Tester.GetLastOutput(); await Tester.AssertInvokeSuccess(new string[] { "--network", "testnet", "offer", "review", offerStr }); await Tester.AssertInvokeSuccess(new string[] { "--network", "testnet", "offer", "review", "-h", offerStr }); }
public async Task CanMakeContract(bool verbose) { var alice = CreateDataDirectory("Alice"); var bob = CreateDataDirectory("Bob"); var parties = new[] { alice, bob }; var olivia = CreateDataDirectory("Olivia"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", olivia, "oracle", "generate", "olivia" }); var oliviaPubKey = Tester.GetLastOutput(); await Tester.AssertInvokeSuccess(new string[] { "--datadir", olivia, "event", "generate", "olivia/coolestguy", "Ninja", "Samurai", "Cowboy", "NicolasDorier" }); var nonce = Tester.GetLastOutput(); foreach (var party in parties) { await Tester.AssertInvokeSuccess(new string[] { "--datadir", party, "oracle", "add", "olivia", oliviaPubKey }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", party, "event", "add", "olivia/coolestguy", nonce, "Ninja", "Samurai", "Cowboy", "NicolasDorier" }); } await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "offer", "BetWithBob", "olivia/coolestguy", "Ninja:-0.4", "cowboy:-1.2", "Samurai:0.6", "NicolasDorier:1" }); if (verbose) { await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "show", "BetWithBob", }); } var aliceSigner = new Key(); var offerFunding = CreateOfferFunding(Money.Coins(1.2m), aliceSigner); await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "setup", "BetWithBob", offerFunding }); var offer = Tester.GetLastOutput(); if (verbose) { await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "show", "BetWithBob", }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "show", "--offer", "BetWithBob", }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "show", "--offer", "--json", "BetWithBob", }); } await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "review", offer }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "accept", "BetWithAlice", offer }); if (verbose) { await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "show", "BetWithAlice" }); } var bobSigner = new Key(); var acceptFunding = CreateOfferFunding(Money.Coins(1.0m), bobSigner); await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "setup", "BetWithAlice", acceptFunding }); var acceptorSigs = Tester.GetLastOutput(); if (verbose) { await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "show", "BetWithAlice" }); } await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "checksigs", acceptorSigs }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "show", "BetWithBob" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "show", "BetWithBob", "--funding" }); var aliceFunding = Tester.GetLastOutput(); await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "show", "BetWithAlice", "--funding" }); var bobFunding = Tester.GetLastOutput(); Assert.Equal(aliceFunding, bobFunding); await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "show", "BetWithBob" }); var funding = PSBT.Parse(aliceFunding, Network.Main); funding.SignWithKeys(aliceSigner); await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "start", "BetWithBob", funding.ToBase64() }); var signMessage = Tester.GetLastOutput(); if (verbose) { await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "show", "BetWithBob" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "show", "--refund", "BetWithBob" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "show", "--refund", "BetWithAlice" }); } await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "checksigs", signMessage }); if (verbose) { await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "show", "BetWithAlice" }); } funding = PSBT.Parse(bobFunding, Network.Main); funding.SignWithKeys(bobSigner); await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "start", "--psbt", "BetWithAlice", funding.ToBase64() }); // Should be fully signed var fullySigned = PSBT.Parse(Tester.GetLastOutput(), Network.Main); fullySigned.Finalize(); fullySigned.ExtractTransaction(); // Ready! await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "show", "BetWithAlice" }); // Olivia attest NicolasDorier to be the coolest guy await Tester.AssertInvokeSuccess(new string[] { "--datadir", olivia, "event", "attest", "sign", "olivia/coolestguy", "NicolasDorier" }); var attestation = Tester.GetLastOutput(); await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "execute", "BetWithAlice", attestation }); var cet = Tester.GetLastOutput(); // Can Alice extract the attestation through CET? await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "extract", "BetWithBob", cet }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", alice, "dlc", "execute", "BetWithBob" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "execute", "BetWithAlice" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", bob, "dlc", "list" }); if (verbose) { foreach (var peer in new[] { (bob, "BetWithAlice"), (alice, "BetWithBob") })
public async Task CanManageOracles() { await Tester.AssertInvoke(new string[] { "--datadir", GetDataDirectory(), "oracle", "set", "neo", "57caa081b0a0e9e9413cf4fb72ddc2630d609bdf6a912b98c4cfd358a4ce1496" }, 1); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "add", "neo", "57caa081b0a0e9e9413cf4fb72ddc2630d609bdf6a912b98c4cfd358a4ce1496" }); await Tester.AssertInvoke(new string[] { "--datadir", GetDataDirectory(), "oracle", "add", "neo", "57caa081b0a0e9e9413cf4fb72ddc2630d609bdf6a912b98c4cfd358a4ce1496" }, 1); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "set", "neo", "16735f228c76e81e1ca671521991f682ad50a79ad7a44fb073f5a5462a4243ba" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "show", "neo" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "list" }); Assert.Equal("neo\t16735f228c76e81e1ca671521991f682ad50a79ad7a44fb073f5a5462a4243ba" + Environment.NewLine, Tester.GetLastOutput()); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "remove", "neo" }); await Tester.AssertInvoke(new string[] { "--datadir", GetDataDirectory(), "oracle", "remove", "neo" }, 1); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "list" }); Assert.Empty(Tester.GetLastOutput()); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "generate", "neo" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "show", "neo" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "show", "neo", "--show-sensitive" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "generate", "neo2" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "show", "neo2", "--show-sensitive" }); }
public async Task CanManageEvents() { Log.WriteLine("Adding a wellknown oracle"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "add", "OutcomeObserver", "57caa081b0a0e9e9413cf4fb72ddc2630d609bdf6a912b98c4cfd358a4ce1496" }); Log.WriteLine("No events has been added yet"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "list" }); Assert.Empty(Tester.GetLastOutput()); Log.WriteLine("Adding an event that our oracle announced"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "add", "OutcomeObserver/Elections", "57caa081b0a0e9e9413cf4fb72ddc2630d609bdf6a912b98c4cfd358a4ce1496", "Republican_win", "Democrat_win", "other" }); Log.WriteLine("The event should show in the list"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "list" }); Assert.Equal("OutcomeObserver/Elections" + Environment.NewLine, Tester.GetLastOutput()); Log.WriteLine("The event should show in the list, if we filter by the oracle's name"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "list", "--oracle", "outcomeobserver" }); Assert.Equal("OutcomeObserver/Elections" + Environment.NewLine, Tester.GetLastOutput()); Log.WriteLine("But not with another oracle name"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "list", "--oracle", "blah" }); Assert.Empty(Tester.GetLastOutput()); Log.WriteLine("We should be able to see the details of the event"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "show", "OutcomeObserver/Elections" }); Log.WriteLine("Let's generate a new oracle, and an event from it"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "generate", "neo" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "generate", "neo/NeoElections", "Republicans", "Democrats", "Smith" }); Log.WriteLine("It should be in the list"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "show", "neo/NeoElections" }); Log.WriteLine("Let's attest it"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "attest", "sign", "neo/NeoElections", "Smith" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "show", "neo/NeoElections" }); Assert.Contains("Attestation", Tester.GetLastOutput()); Log.WriteLine("Let's check if we can enforce two attestation"); await Tester.AssertInvoke(new string[] { "--datadir", GetDataDirectory(), "event", "attest", "sign", "neo/NeoElections", "Republicans" }, 1); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "attest", "sign", "-f", "neo/NeoElections", "Republicans" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "show", "neo/NeoElections" }); Log.WriteLine("Let's try to manually add an attestation"); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "add", "morpheus", "399e2348d8b5db8161a915af8efd900aa7241e6eed6d28ff8cc77afc505e8258" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "add", "morpheus/elections", "2fe5252fa3c676a4522f2e8a05d2bc3a79c865ca17a44ab6d168bcc79194491f", "Republicans", "Democrats", "Smith" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "attest", "add", "morpheus/elections", "b7728d379612731b26db15249106d9b59855c4c3957454415a93cb5daa065803" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "show", "morpheus/elections" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "event", "attest", "add", "morpheus/elections", "67812f3bd89a6ccc27ced51030f604a738ee9ac1726d21c22cb7282b2585f05e" }); await Tester.AssertInvokeSuccess(new string[] { "--datadir", GetDataDirectory(), "oracle", "show", "morpheus", "--show-sensitive" }); Assert.Contains("Has private key: True", Tester.GetLastOutput()); }