예제 #1
0
    public IEnumerator claimAndCommit(ClaimCommitButton button)
    {
        var claim = new Utils.CoroutineWithData <bool>(MatryxCortex.Instance, ClaimCommitButton.Instance.commit.claim());

        yield return(claim);

        yield return(claim.result);

        if (claim.result)
        {
            var commit = new Utils.CoroutineWithData <bool>(MatryxCortex.Instance, ClaimCommitButton.Instance.commit.create());
            yield return(commit);

            yield return(commit.result);

            if (commit.result)
            {
                button.SetState(ClaimCommitButton.CommitButtonState.Committed);
            }
            else
            {
                button.SetState(ClaimCommitButton.CommitButtonState.CantCommit);
            }
        }
        else
        {
            button.SetState(ClaimCommitButton.CommitButtonState.CantCommit);
        }
    }
예제 #2
0
    public void OnEnable()
    {
        var roundDetailsCoroutine = new Utils.CoroutineWithData <MatryxRound.RoundDetails>(MatryxCortex.Instance, tournament.getRoundDetails(tournament.currentRound.index + 1,
                                                                                                                                             delegate(object res)
        {
            MatryxRound.RoundDetails details = (MatryxRound.RoundDetails)res;
            Debug.Log("Current start: " + details.Start);
            // create dates
            DateTime startDateTime  = Utils.Time.FromUnixTime(details.Start);
            DateTime endDateTime    = Utils.Time.FromUnixTime(details.Start + details.Duration);
            DateTime reviewDateTime = Utils.Time.FromUnixTime(details.Start + details.Duration + details.Review);

            currentStartText.SetActive(true);
            currentEndText.SetActive(true);
            currentReviewText.SetActive(true);
            currentStartText.GetComponent <Text>().text  = "Current start date: \n" + startDateTime.ToShortDateString() + "\n" + startDateTime.ToLongTimeString();
            currentEndText.GetComponent <Text>().text    = "Current end date: \n" + endDateTime.ToShortDateString() + "\n" + endDateTime.ToLongTimeString();
            currentReviewText.GetComponent <Text>().text = "Current review end date: \n" + reviewDateTime.ToShortDateString() + "\n" + reviewDateTime.ToLongTimeString();;
        },
                                                                                                                                             delegate(object err)
        {
            currentStartText.SetActive(false);
            currentEndText.SetActive(false);
            currentReviewText.SetActive(false);
        }
                                                                                                                                             ));
    }
예제 #3
0
    private void LookupCommitStateByExpressionSet(object sender, EventArgs args)
    {
        ClaimCommitButton.Instance.SetState(ClaimCommitButton.CommitButtonState.Disabled);

        var surface = SerializeSurface();

        if (lastSurface.Equals(surface))
        {
            return;
        }
        if (!MatryxCommit.storageClaimsLoaded)
        {
            return;
        }

        List <string> fileNames = new List <string> {
            "jsonContent.json"
        };
        List <byte[]> contents = new List <byte[]> {
            MatryxCortex.serializer.Serialize(surface)
        };
        List <string> fileTypes = new List <string> {
            "application/json"
        };
        // get ipfs hash
        var ipfsHashRequest = new Utils.CoroutineWithData <string>(MatryxCortex.Instance, MatryxCortex.uploadFiles(fileNames, contents, fileTypes, "&only-hash=true",
                                                                                                                   (object multiHash) =>
        {
            // This correct? You should look at commits that've already been created and see if there is one with this hash
            string ipfsHash = multiHash as string;

            bool commitExists = MatryxCommit.commits.ContainsKey(ipfsHash);
            bool claimExists  = MatryxCommit.claims.ContainsKey(ipfsHash);

            if (claimExists && !commitExists)
            {
                ClaimCommitButton.Instance.commit = new MatryxCommit(ipfsHash, surface);
                ClaimCommitButton.Instance.SetState(ClaimCommitButton.CommitButtonState.YetToBeCommitted);
            }
            else if (commitExists)
            {
                if (MatryxCommit.commits[ipfsHash].mine)
                {
                    ClaimCommitButton.Instance.SetState(ClaimCommitButton.CommitButtonState.Committed);
                }
                else
                {
                    ClaimCommitButton.Instance.SetState(ClaimCommitButton.CommitButtonState.CantCommit);
                }

                ClaimCommitButton.Instance.commit = MatryxCommit.commits[ipfsHash];
            }
            else
            {
                ClaimCommitButton.Instance.commit = new MatryxCommit(ipfsHash, surface);
                ClaimCommitButton.Instance.SetState(ClaimCommitButton.CommitButtonState.YetToBeClaimed);
            }
        }));
    }
예제 #4
0
    public IEnumerator updateMTXBalance()
    {
        var tokenBalanceCoroutine = new Utils.CoroutineWithData <BigInteger>(MatryxCortex.Instance, MatryxToken.balanceOf(NetworkSettings.currentAddress));

        yield return(tokenBalanceCoroutine);

        var balance = tokenBalanceCoroutine.result / new BigInteger(1e18);

        Instance.AccountInfoText[1].text = balance + " MTX";
    }
예제 #5
0
    public IEnumerator runCreateRound()
    {
        InvalidLabel.gameObject.SetActive(false);

        if (!InputsValid().Equals(string.Empty))
        {
            yield break;
        }

        gameObject.SetActive(false);
        InvalidLabel.gameObject.SetActive(false);

        resultsCanvasObject.SetActive(true);

        var start          = new BigInteger(Utils.Time.ToUnixTime(startDatePicker.fecha));
        var duration       = new BigInteger((endDatePicker.fecha - startDatePicker.fecha).TotalSeconds);
        var reviewDuration = new BigInteger((reviewEndDatePicker.fecha - endDatePicker.fecha).TotalSeconds);
        var bounty         = new BigInteger(Convert.ToDecimal(bountyPicker.CurrentValue));

        MatryxRound.RoundDetails details = new MatryxRound.RoundDetails()
        {
            Start    = start,
            Duration = duration,
            Review   = reviewDuration,
            Bounty   = bounty * new BigInteger(1e18)
        };
        MatryxRound newRound = new MatryxRound(tournament.currentRound.index + 1, details);

        newRound.tournament = TournamentMenu.Tournament;

        ManageTournamentMenu.SetButtonsEnabled(false);

        resultsMenu.SetStatus("Checking MTX balance and platform allowance...");
        var allowance = new Utils.CoroutineWithData <BigInteger>(MatryxCortex.Instance, MatryxToken.allowance(NetworkSettings.currentAddress, MatryxPlatform.address));

        yield return(allowance);

        var balance = new Utils.CoroutineWithData <BigInteger>(MatryxCortex.Instance, MatryxToken.balanceOf(NetworkSettings.currentAddress));

        yield return(balance);

        if (balance.result < details.Bounty)
        {
            ResultsMenu.Instance.SetStatus("Insufficient MTX. Please visit <link=https://app.matryx.ai/><u>our Matryx Dapp</u></link> for MTX Tokens.", true);
            ResultsMenu.Instance.ReturnToCalcflowAfterSeconds(8f);
            yield break;
        }

        if (allowance.result < details.Bounty)
        {
            ResultsMenu.Instance.SetStatus("Approving MatryxPlatform for " + bounty + " MTX...");

            if (allowance.result != BigInteger.Zero)
            {
                var approveZero = new Utils.CoroutineWithData <bool>(MatryxCortex.Instance, MatryxToken.approve(MatryxPlatform.address, BigInteger.Zero));
                yield return(approveZero);

                if (!approveZero.result)
                {
                    resultsMenu.PostFailure(newRound, "Failed to reset the platform allowance to zero");
                    yield break;
                }
            }

            var approveBounty = new Utils.CoroutineWithData <bool>(MatryxCortex.Instance, MatryxToken.approve(MatryxPlatform.address, details.Bounty));
            yield return(approveBounty);

            if (!approveBounty.result)
            {
                resultsMenu.PostFailure(newRound, "Failed to give the platform an MTX allowance");
                yield break;
            }
        }

        resultsMenu.SetStatus("Adding to Tournament bounty...");
        var addToBountyCoroutine = new Utils.CoroutineWithData <bool>(MatryxCortex.Instance, TournamentMenu.Tournament.addToBounty(details.Bounty));

        yield return(addToBountyCoroutine);

        if (!addToBountyCoroutine.result)
        {
            resultsMenu.PostFailure(newRound, "Could not add to tournament bounty");
            yield break;
        }

        resultsMenu.SetStatus("Creating new round...");
        var submissions = ManageTournamentMenu.winningSubmissions.Select(sub => Utils.HexStringToByteArray(sub.hash)).ToList();

        if (TournamentMenu.Tournament.currentRound.winningSubmissions.Count == 0)
        {
            IEnumerator selectWinnersCoroutine     = tournament.selectWinners(submissions, ManageTournamentMenu.distribution, new BigInteger((int)MatryxTournament.SelectWinnerAction.StartNextRound), details.Start, details.Duration, details.Review, details.Bounty);
            var         selectWinnersDataCoroutine = new Utils.CoroutineWithData <bool>(MatryxCortex.Instance, selectWinnersCoroutine);
            yield return(selectWinnersDataCoroutine);

            ClearInputs();
            gameObject.SetActive(false);
            ManageTournamentMenu.SetButtonsEnabled(true);
            ManageTournamentMenu.Instance.PressButton("NewRoundButton");
            ResultsMenu.transactionObject = newRound;
            Debug.Log((bool)selectWinnersDataCoroutine.result ? "Successfully created new round!" : "Round creation unsuccessful.");

            if (selectWinnersDataCoroutine.result)
            {
                StatisticsTracking.EndEvent("Matryx", "New Round Creation", new Dictionary <string, object>()
                {
                    { "success", true }
                });
                tournament.currentRound = newRound;
                resultsMenu.PostSuccess(newRound,
                                        delegate(object nothin)
                {
                    TournamentMenu.Instance.SetRound(newRound.index);
                    TournamentMenu.Instance.UpdateActionState();
                    ManageTournamentMenu.Close();

                    TournamentMenu.Instance.actionState = TournamentMenu.ActionState.NoAction;
                    TournamentMenuCenterButton.Instance.updateState();
                });
            }
            else
            {
                StatisticsTracking.EndEvent("Matryx", "New Round Creation", new Dictionary <string, object>()
                {
                    { "success", false }
                });
                resultsMenu.PostFailure(newRound, "Failed to create new round");
            }
        }
        else
        {
            resultsMenu.SetStatus("Updating next round...");
            IEnumerator updateNextRoundCoroutine     = tournament.updateNextRound(details);
            var         updateNextRoundDataCoroutine = new Utils.CoroutineWithData <bool>(MatryxCortex.Instance, updateNextRoundCoroutine);
            yield return(updateNextRoundDataCoroutine);

            ClearInputs();
            gameObject.SetActive(false);
            ManageTournamentMenu.SetButtonsEnabled(true);
            ManageTournamentMenu.Instance.PressButton("NewRoundButton");

            if (updateNextRoundDataCoroutine.result)
            {
                StatisticsTracking.EndEvent("Matryx", "New Round Creation", new Dictionary <string, object>()
                {
                    { "success", true }
                });
                tournament.currentRound = newRound;

                resultsMenu.PostSuccess(newRound, (nothin) =>
                {
                    TournamentMenu.Instance.actionState = TournamentMenu.ActionState.ManageTournament;
                    TournamentMenuCenterButton.Instance.updateState();
                });
            }
            else
            {
                StatisticsTracking.EndEvent("Matryx", "New Round Creation", new Dictionary <string, object>()
                {
                    { "success", false }
                });
                resultsMenu.PostFailure(newRound, "Failed to create new round");
            }
        }
    }