コード例 #1
0
        internal async Task <AuthorizationAPIResult> Pre_PrepareAsync(TransactionBlock block1, Func <TransactionBlock, Task <TransactionBlock> > OnBlockSucceed = null)
        {
            bool      IsSuccess;
            AuthState state2 = null;
            var       state1 = await PostToConsensusAsync(block1).ConfigureAwait(false);

            if (state1 != null && state1.IsConsensusSuccess == true)
            {
                IsSuccess = true;

                if (OnBlockSucceed != null)
                {
                    var block2 = await OnBlockSucceed(state1.InputMsg.Block).ConfigureAwait(false);

                    state2 = await PostToConsensusAsync(block2).ConfigureAwait(false);
                }
            }
            else
            {
                IsSuccess = false;
            }

            var result = new AuthorizationAPIResult();

            if (IsSuccess)
            {
                result.ResultCode = APIResultCodes.Success;
            }
            else
            {
                result.ResultCode = state1.OutputMsgs.Count > 0 ? state1.OutputMsgs.First().Result : APIResultCodes.UnableToSendToConsensusNetwork;
            }
            return(result);
        }
コード例 #2
0
        //private async Task<AuthState> PostToConsensusAsync(TransactionBlock block)
        //{
        //    _log.LogInformation($"ApiService: PostToConsensusAsync Called: {block.BlockType}");

        //    //AuthorizingMsg msg = new AuthorizingMsg
        //    //{
        //    //    IsServiceBlock = false,
        //    //    From = NodeService.Dag.PosWallet.AccountId,
        //    //    Block = block,
        //    //    BlockHash = block.Hash,
        //    //    MsgType = ChatMessageType.AuthorizerPrePrepare
        //    //};

        //    //var state = new AuthState(true);
        //    //state.InputMsg = msg;

        //    NodeService.Dag.Consensus.Tell(state);

        //    await state.WaitForClose();

        //    var ts1 = state.T1 == null ? "" : ((int)(DateTime.Now - state.T1).TotalMilliseconds).ToString();
        //    var ts2 = state.T2 == null ? "" : ((int)(DateTime.Now - state.T2).TotalMilliseconds).ToString();
        //    var ts3 = state.T3 == null ? "" : ((int)(DateTime.Now - state.T3).TotalMilliseconds).ToString();
        //    var ts4 = state.T4 == null ? "" : ((int)(DateTime.Now - state.T4).TotalMilliseconds).ToString();
        //    var ts5 = state.T5 == null ? "" : ((int)(DateTime.Now - state.T5).TotalMilliseconds).ToString();

        //    _log.LogInformation($"ApiService Timing:\n{ts1}\n{ts2}\n{ts3}\n{ts4}\n{ts5}\n");

        //    var resultMsg = state.OutputMsgs.Count > 0 ? state.OutputMsgs.First().Result.ToString() : "Unable to authorize block";
        //    _log.LogInformation($"ApiService: PostToConsensusAsync Exited: IsAuthoringSuccess: {state?.CommitConsensus == ConsensusResult.Yea} with {resultMsg}");

        //    // keep a snapshot of last success consensus.
        //    if ((state?.CommitConsensus ?? ConsensusResult.Uncertain) != ConsensusResult.Uncertain)
        //        LastState = state;

        //    return state;
        //}

        internal async Task <AuthorizationAPIResult> Pre_PrepareAsync(TransactionBlock block1, Func <TransactionBlock, Task <TransactionBlock> > OnBlockSucceed = null)
        {
            var result = new AuthorizationAPIResult();

            var state = await NodeService.Dag.Consensus.Ask <AuthState>(new ConsensusService.AskForConsensusState {
                ReqBlock = block1
            });

            NodeService.Dag.Consensus.Tell(state);
            await state.WaitForCloseAsync();

            var consensusResult = state.CommitConsensus;

            if (consensusResult == ConsensusResult.Yea)
            {
                result.ResultCode = APIResultCodes.Success;
                result.TxHash     = block1.Hash;
            }
            else if (consensusResult == ConsensusResult.Nay)
            {
                result.ResultCode = state.GetMajorErrorCode();
            }
            else if (consensusResult == null || consensusResult == ConsensusResult.Uncertain)
            {
                result.ResultCode = APIResultCodes.ConsensusTimeout;
            }

            return(result);
        }
コード例 #3
0
        public async Task <AuthorizationAPIResult> CreateTokenAsync(TokenGenesisBlock tokenBlock)
        {
            var result = new AuthorizationAPIResult();

            //// filter the names -- not needed because authorizer control it
            //if (tokenBlock.DomainName.ToLower().StartsWith("lyra")
            //    || tokenBlock.Ticker.ToLower().StartsWith("lyra"))
            //{
            //    result.ResultCode = APIResultCodes.NameUnavailable;
            //    return result;
            //}

            return(await Pre_PrepareAsync(tokenBlock).ConfigureAwait(false));
        }
コード例 #4
0
        public async Task <AuthorizationAPIResult> CreateToken(TokenGenesisBlock tokenBlock)
        {
            var result = new AuthorizationAPIResult();

            // filter the names
            if (tokenBlock.DomainName.ToLower().StartsWith("lyra") ||
                tokenBlock.Ticker.ToLower().StartsWith("lyra"))
            {
                result.ResultCode = APIResultCodes.NameUnavailable;
                return(result);
            }

            return(await Pre_PrepareAsync(tokenBlock, async (b) =>
            {
                var feeResult = await ProcessTokenGenerationFee(b as TokenGenesisBlock);
                return feeResult.block;
            }).ConfigureAwait(false));
        }
コード例 #5
0
        internal async Task <AuthorizationAPIResult> Pre_PrepareAsync(TransactionBlock block1, Func <TransactionBlock, Task <TransactionBlock> > OnBlockSucceed = null)
        {
            bool      IsSuccess;
            AuthState state2 = null;
            var       state1 = await PostToConsensusAsync(block1).ConfigureAwait(false);

            if (state1 != null && state1.CommitConsensus == ConsensusResult.Yay)
            {
                IsSuccess = true;

                //fee is the bottle neck!!! must do lazy fee collection by consolidation
                if (OnBlockSucceed != null)
                {
                    var block2 = await OnBlockSucceed(state1.InputMsg.Block as TransactionBlock).ConfigureAwait(false);

                    if (block2 != null)
                    {
                        state2 = await PostToConsensusAsync(block2).ConfigureAwait(false);
                    }
                }
            }
            else
            {
                IsSuccess = false;
            }

            var result = new AuthorizationAPIResult();

            if (IsSuccess)
            {
                result.ResultCode = APIResultCodes.Success;
            }
            else if (state1 == null)
            {
                result.ResultCode = APIResultCodes.BlockFailedToBeAuthorized;
            }
            else
            {
                result.ResultCode = state1.OutputMsgs.Count > 0 ? state1.OutputMsgs.First().Result : APIResultCodes.BlockFailedToBeAuthorized;
            }
            return(result);
        }