Exemplo n.º 1
0
        public void BitConverterTest()
        {
            var byteArray = new byte[] { 72, 187, 184, 216 };
            var intData   = SharedSeedGenerator.ToUInt32(byteArray, 0);

            Assert.Equal((uint)1220262104, intData);
        }
Exemplo n.º 2
0
        public void Test()
        {
            var sharedSeedData = new[] { "1948679508", "-4721854150932553650", "3486951862276399275" };

            var aggregated = string.Join(";", sharedSeedData);

            var a1 = Encoding.ASCII.GetBytes(aggregated);

            var data = SharedSeedGenerator.CreateSharedSeed(sharedSeedData);
        }
Exemplo n.º 3
0
        public async Task <Sp8deTransaction> AddTransaction(CreateTransactionRequest request)
        {
            var transaction = new Sp8deTransaction()
            {
                Timestamp    = DateConverter.UtcNow,
                Expiration   = DateConverter.UtcNow,
                CompleatedAt = DateConverter.UtcNow,
                DependsOn    = request.DependsOn,
                Anchors      = new List <Anchor>(),
                Type         = request.Type,
                Status       = Sp8deTransactionStatus.New
            };

            if (request.InputData != null)
            {
                transaction.InputData = new TransactionData()
                {
                    Items = request.InputData
                };

                transaction.InputData.Hash = CalculateHash(transaction.InputData.GetBytes());
            }

            PopulateInternalTransactionHash(request.InnerTransactions);

            transaction.InternalTransactions = request.InnerTransactions;

            transaction.InternalRoot = CalculateInternalTransactionRootHash(request.InnerTransactions);

            if (request.Type == Sp8deTransactionType.AggregatedReveal)
            {
                var(seedArray, seedHash) = SharedSeedGenerator.CreateSharedSeed(request.InnerTransactions.Select(x => x.Data));

                transaction.OutputData = new TransactionData()
                {
                    Items = new Dictionary <string, IList <string> > {
                        { "sharedSeedArray", seedArray.Select(x => x.ToString()).ToArray() },
                        { "sharedSeedHash", new List <string> {
                              seedHash
                          } }
                    }
                };
                transaction.OutputData.Hash = CalculateHash(transaction.OutputData.GetBytes());
            }

            transaction.Id = CalculateTransactionHash(transaction).hash;

            await AddAnchors(transaction);

            await transactionStorage.Add(transaction);

            return(transaction);
        }
Exemplo n.º 4
0
        public async Task <ActionResult <GameFinishResponse> > End([FromBody] GameFinishRequest model)
        {
            var game = cache.Get <GameStartResponse>(model.GameId);

            if (game == null)
            {
                return(NotFound());
            }

            var requesterCommit = game.Items.First(x => x.Type == UserType.Requester);

            var revealItem = await randomContributorService.Reveal(requesterCommit);

            var list = new List <RevealItem>
            {
                new RevealItem()
                {
                    Type   = UserType.Contributor,
                    PubKey = model.PubKey,
                    Nonce  = model.Nonce.ToString(),
                    Seed   = model.Seed,
                    Sign   = model.Sign
                },
                revealItem
            };

            var tx = await protocol.RevealTransaction(game.ValidationTx, list);

            var seedItems = tx.Items.Select(x => x.Seed).ToArray();

            var seed = SharedSeedGenerator.CreateSharedSeed(seedItems);

            DemoGameLogic(game, seed, out int[] winNumbers, out decimal winAmount, out bool isWinner);

            return(new GameFinishResponse()
            {
                GameId = model.GameId,
                SharedSeedArray = seed.seedArray,
                SharedSeedHash = seed.seedHash,
                ValidationTxHash = tx.Id, //TODO
                Items = list,

                IsWinner = isWinner,
                WinAmount = winAmount,
                WinNumbers = winNumbers,

                IpfsHash = tx.Anchor?.Data
            });
        }