예제 #1
0
        public async Task Simulation_Originate()
        {
            var monitor = ConnectIdentity("IdentityID");

            simulation.SetBalance("IdentityID", 100);

            var task = new CreateContractTask
            {
                ManagerID      = "IdentityID",
                SourceID       = "IdentityID",
                Name           = "Identity",
                TransferAmount = TransferAmount,
                NetworkFee     = NetworkFee,
                StorageFee     = StorageFee,
                ServiceFee     = ServiceFee,
            };

            task = simulation.PrepareCreateContract(task);

            await simulation.Hub.WhenPendingSent;

            monitor.AssertCount(0);

            task = simulation.CreateContract(task, "InstanceID");

            await simulation.Hub.WhenPendingSent;

            monitor.AssertCount(2);

            var transferPending = monitor.Single <TransactionPendingEvent>();

            Assert.AreEqual(
                -task.TotalAmount,
                transferPending.Amount
                );

            var originatePending = monitor.Single <OriginatePendingEvent>();

            Assert.AreEqual(
                task.TransferAmount,
                originatePending.Amount
                );

            monitor.Clear();

            simulation.CreateBlock();
            await simulation.Hub.WhenPendingSent;

            monitor.AssertCount(2);

            // Source
            var balanceChanged = monitor.Single <BalanceChangedEvent>();

            var expectedBalance = StartBalance - task.TotalAmount;

            Assert.AreEqual(expectedBalance, balanceChanged.Balance);

            var entry = balanceChanged.Entry;

            Assert.IsNotNull(entry);

            // Destination
            var originate = monitor.Single <OriginateEvent>();

            Assert.AreEqual(
                task.TransferAmount,
                originate.Balance
                );

            entry = originate.Entry;
            Assert.IsNotNull(entry);
        }
예제 #2
0
        public async Task <CreateContractTask> CreateContract(CreateContractTask task)
        {
            await CallService();

            return(simulation.CreateContract(PrepareTask(task), InstanceID));
        }
예제 #3
0
        public async Task <CreateContractTask> PrepareCreateContract(CreateContractTask task)
        {
            await CallService();

            return(simulation.PrepareCreateContract(PrepareTask(task)));
        }
예제 #4
0
 public Task <CreateContractTask> CreateContract(CreateContractTask contract)
 {
     throw new NotImplementedException();
 }
예제 #5
0
 public Task <CreateContractTask> PrepareCreateContract(CreateContractTask request)
 {
     throw new NotImplementedException();
 }
예제 #6
0
        public async Task <ProtectedTaskflow <CreateContractTask> > CreateAccount(string name, Identity managerIdentity, TokenStore source, decimal transferAmount, string stereotype = null)
        {
            Trace($"Create Account '{name}' for {managerIdentity}, transferring {transferAmount} from {source}");

            // Create Task and Flow
            var task = new CreateContractTask
            {
                Name       = name,
                Stereotype = stereotype ?? Account.DefaultStereotype,

                ManagerID = managerIdentity.AccountID,

                SourceID = source.AccountID,
                SourceManagerPublicKey = managerIdentity.PublicKey.ToString(),
                NetworkFee             = DefaultOperationFee,
                TransferAmount         = transferAmount,
            };

            var flow = new ProtectedTaskflow <CreateContractTask>(task);

            // Prepare Task
            try
            {
                Trace("Prepare CreateContract");
                flow.Task = task = await Connection.PrepareCreateContract(task);
            }
            catch
            {
                flow.Update(TaskProgress.Failed);
            }

            if (flow.IsFailed)
            {
                return(flow);
            }

            // External Signing
            if (await Sign(task, source.Manager))
            {
                try
                {
                    // Submit
                    Trace("Execute CreateContract");
                    flow.Task = await Connection.CreateContract(task);

                    flow.SetPending(this);
                }
                catch (Exception e)
                {
                    Trace(e);
                    flow.Update(TaskProgress.Failed);
                }
            }
            else
            {
                Trace("Sign cancelled");
                flow.Update(TaskProgress.Cancelled);
            }

            return(flow);
        }