public static ActionDto FromDomainModel(TxAction action)
 {
     return(new ActionDto
     {
         ActionNumber = action.ActionNumber,
         ActionType = action.ActionType,
         ActionData = action.ActionData
     });
 }
예제 #2
0
 public static string GetActionString(TxAction action)
 {
     if (action == TxAction.Sent)
     {
         return(TextTools.RetrieveStringFromResource("Sent"));
     }
     else if (action == TxAction.Received)
     {
         return(TextTools.RetrieveStringFromResource("Received"));
     }
     else
     {
         return("NA");
     }
 }
        public Result <TxAction> ImportAction(ActionDto actionDto, int actionNumber)
        {
            using (var uow = NewUnitOfWork(UnitOfWorkMode.Writable))
            {
                var action = new TxAction
                {
                    ActionNumber = actionNumber,
                    ActionType   = actionDto.ActionType,
                    ActionData   = JsonConvert.SerializeObject(actionDto.ActionData),
                };

                NewRepository <TxAction>(uow).Insert(action);
                uow.Commit();

                return(Result.Success(action));
            }
        }
        public Result CreateAccount(
            List <BlockchainEvent> events,
            IUnitOfWork uow,
            Address senderAddress,
            TxAction action)
        {
            var addressRepo = NewRepository <Address>(uow);

            var account = new Account()
            {
                Hash = _blockchainCryptoProvider.DeriveHash(
                    senderAddress.BlockchainAddress,
                    senderAddress.Nonce,
                    (short)action.ActionNumber),
                ControllerAddress = senderAddress.BlockchainAddress
            };

            NewRepository <Account>(uow).Insert(account);
            events.First().Account = account;

            return(Result.Success());
        }
 public AddingTxEventArgs Set(TxAction action, string reason)
 {
     Action = action;
     Reason = reason;
     return(this);
 }
        public Result <IEnumerable <BlockchainEvent> > ImportEvents(
            TxAction action,
            Address senderAddress,
            Block block,
            Transaction tx,
            JObject actionDataObj)
        {
            using (var uow = NewUnitOfWork(UnitOfWorkMode.Writable))
            {
                List <BlockchainEvent> events = new List <BlockchainEvent>
                {
                    new BlockchainEvent
                    {
                        AddressId     = senderAddress.AddressId,
                        TxActionId    = action.TxActionId,
                        BlockId       = block.BlockId,
                        Fee           = tx.ActionFee,
                        Amount        = 0,
                        TransactionId = tx.TransactionId,
                        EventType     = EventType.Action.ToString()
                    }
                };
                senderAddress.AvailableBalance -= tx.ActionFee;

                if (tx.Status == TxStatus.Success.ToString())
                {
                    Result result = Result.Success();
                    switch (action.ActionType.ToEnum <ActionType>())
                    {
                    case ActionType.TransferChx:
                        result = _actionService.TransferChx(
                            events,
                            actionDataObj.ToObject <TransferChxData>(),
                            uow,
                            senderAddress);
                        break;

                    case ActionType.DelegateStake:
                        result = _actionService.DelegateStake(
                            events,
                            actionDataObj.ToObject <DelegateStakeData>(),
                            uow,
                            senderAddress);
                        break;

                    case ActionType.ConfigureValidator:
                        result = _actionService.ConfigureValidator(
                            events,
                            actionDataObj.ToObject <ConfigureValidatorData>(),
                            uow,
                            senderAddress);
                        break;

                    case ActionType.RemoveValidator:
                        result = _actionService.RemoveValidator(events, uow, senderAddress);
                        break;

                    case ActionType.SetAssetCode:
                        result = _actionService.SetAssetCode(
                            events,
                            actionDataObj.ToObject <SetAssetCodeData>(),
                            uow);
                        break;

                    case ActionType.SetAssetController:
                        result = _actionService.SetAssetController(
                            events,
                            actionDataObj.ToObject <SetAssetControllerData>(),
                            uow);
                        break;

                    case ActionType.SetAccountController:
                        result = _actionService.SetAccountController(
                            events,
                            actionDataObj.ToObject <SetAccountControllerData>(),
                            uow);
                        break;

                    case ActionType.TransferAsset:
                        result = _actionService.TransferAsset(
                            events,
                            actionDataObj.ToObject <TransferAssetData>(),
                            uow);
                        break;

                    case ActionType.CreateAssetEmission:
                        result = _actionService.CreateAssetEmission(
                            events,
                            actionDataObj.ToObject <CreateAssetEmissionData>(),
                            uow);
                        break;

                    case ActionType.CreateAsset:
                        result = _actionService.CreateAsset(events, uow, senderAddress, action);
                        break;

                    case ActionType.CreateAccount:
                        result = _actionService.CreateAccount(events, uow, senderAddress, action);
                        break;

                    case ActionType.SubmitVote:
                        result = _actionService.SubmitVote(events, actionDataObj.ToObject <SubmitVoteData>(), uow);
                        break;

                    case ActionType.SubmitVoteWeight:
                        result = _actionService.SubmitVoteWeight(
                            events,
                            actionDataObj.ToObject <SubmitVoteWeightData>(),
                            uow);
                        break;

                    case ActionType.SetAccountEligibility:
                        result = _actionService.SetAccountEligibility(
                            events,
                            actionDataObj.ToObject <SetAccountEligibilityData>(),
                            uow);
                        break;

                    case ActionType.SetAssetEligibility:
                        result = _actionService.SetAssetEligibility(
                            events,
                            actionDataObj.ToObject <SetAssetEligibilityData>(),
                            uow);
                        break;

                    case ActionType.ChangeKycControllerAddress:
                        result = _actionService.ChangeKycControllerAddress(
                            events,
                            actionDataObj.ToObject <ChangeKycControllerAddressData>(),
                            uow);
                        break;

                    case ActionType.AddKycProvider:
                        result = _actionService.AddKycProvider(
                            events,
                            actionDataObj.ToObject <AddKycProviderData>(),
                            uow);
                        break;

                    case ActionType.RemoveKycProvider:
                        result = _actionService.RemoveKycProvider(
                            events,
                            actionDataObj.ToObject <RemoveKycProviderData>(),
                            uow);
                        break;

                    default:
                        result = Result.Failure("Unsupported action type.");
                        break;
                    }

                    if (result.Failed)
                    {
                        return(Result.Failure <IEnumerable <BlockchainEvent> >(result.Alerts));
                    }
                }

                NewRepository <BlockchainEvent>(uow).Insert(events);
                NewRepository <Address>(uow).Update(senderAddress);

                uow.Commit();
                return(Result.Success(events.AsEnumerable()));
            }
        }