Beispiel #1
0
        public async void ShouldEncodeDecodeStructContainingStructsArray()
        {
            var web3 = _ethereumClientIntegrationFixture.GetWeb3();
            var deploymentReceipt = await web3.Eth.GetContractDeploymentHandler <StructsSampleDeployment>()
                                    .SendRequestAndWaitForReceiptAsync().ConfigureAwait(false);

            var purchaseOrder = new PurchaseOrder();

            purchaseOrder.CustomerId = 1000;
            purchaseOrder.Id         = 1;
            purchaseOrder.LineItem   = new List <LineItem>();
            purchaseOrder.LineItem.Add(new LineItem()
            {
                Id = 1, ProductId = 100, Quantity = 2
            });
            purchaseOrder.LineItem.Add(new LineItem()
            {
                Id = 2, ProductId = 200, Quantity = 3
            });

            var contractHandler = web3.Eth.GetContractHandler(deploymentReceipt.ContractAddress);

            var receiptSending = await contractHandler.SendRequestAndWaitForReceiptAsync(new SetPurchaseOrderFunction()
            {
                PurchaseOrder = purchaseOrder
            }).ConfigureAwait(false);

            var eventPurchaseOrder  = contractHandler.GetEvent <PurchaseOrderChangedEventDTO>();
            var eventOutputs        = eventPurchaseOrder.DecodeAllEventsForEvent(receiptSending.Logs);
            var purchaseOrderResult = eventOutputs[0].Event.PurchaseOrder;

            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(1000, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(100, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].Quantity);
            Assert.Equal(2, purchaseOrderResult.LineItem[1].Id);
            Assert.Equal(200, purchaseOrderResult.LineItem[1].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[1].Quantity);



            var query = await contractHandler.QueryAsync <GetPurchaseOrderFunction, GetPurchaseOrderOutputDTO>(new GetPurchaseOrderFunction()
            {
                Id = 1
            }).ConfigureAwait(false);

            purchaseOrderResult = query.PurchaseOrder;
            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(1000, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(100, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].Quantity);
            Assert.Equal(2, purchaseOrderResult.LineItem[1].Id);
            Assert.Equal(200, purchaseOrderResult.LineItem[1].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[1].Quantity);



            var lineItems = new List <LineItem>();

            lineItems.Add(new LineItem()
            {
                Id = 3, ProductId = 300, Quantity = 2
            });
            lineItems.Add(new LineItem()
            {
                Id = 4, ProductId = 400, Quantity = 3
            });

            var lineItemsFunction = new AddLineItemsFunction()
            {
                Id = 1, LineItem = lineItems
            };
            var data = lineItemsFunction.GetCallData().ToHex();

            receiptSending = await contractHandler.SendRequestAndWaitForReceiptAsync(new AddLineItemsFunction()
            {
                Id = 1, LineItem = lineItems
            }).ConfigureAwait(false);

            var lineItemsEvent = contractHandler.GetEvent <LineItemsAddedEventDTO>();
            var lineItemsLogs  = lineItemsEvent.DecodeAllEventsForEvent(receiptSending.Logs);

            query = await contractHandler.QueryAsync <GetPurchaseOrderFunction, GetPurchaseOrderOutputDTO>(new GetPurchaseOrderFunction()
            {
                Id = 1
            }).ConfigureAwait(false);

            purchaseOrderResult = query.PurchaseOrder;
            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(1000, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(100, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].Quantity);
            Assert.Equal(2, purchaseOrderResult.LineItem[1].Id);
            Assert.Equal(200, purchaseOrderResult.LineItem[1].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[1].Quantity);
            Assert.Equal(3, purchaseOrderResult.LineItem[2].Id);
            Assert.Equal(300, purchaseOrderResult.LineItem[2].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[2].Quantity);
            Assert.Equal(4, purchaseOrderResult.LineItem[3].Id);
            Assert.Equal(400, purchaseOrderResult.LineItem[3].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[3].Quantity);



            //Purchase Orders

            var listPurchaseOrder = new List <PurchaseOrder>();

            listPurchaseOrder.Add(purchaseOrder);
            var func = new SetPurchaseOrdersFunction()
            {
                PurchaseOrder = listPurchaseOrder
            };

            receiptSending = await contractHandler.SendRequestAndWaitForReceiptAsync(func).ConfigureAwait(false);

            var eventPurchaseOrders        = contractHandler.GetEvent <PurchaseOrdersChangedEventDTO>();
            var eventPurchaseOrdersOutputs = eventPurchaseOrders.DecodeAllEventsForEvent(receiptSending.Logs);

            purchaseOrderResult = eventPurchaseOrdersOutputs[0].Event.PurchaseOrder[0];

            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(1000, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(100, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].Quantity);
            Assert.Equal(2, purchaseOrderResult.LineItem[1].Id);
            Assert.Equal(200, purchaseOrderResult.LineItem[1].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[1].Quantity);

            //Stored array on constructor
            var query2 = await contractHandler.QueryAsync <GetPurchaseOrdersFunction, GetPurchaseOrdersOutputDTO>().ConfigureAwait(false);

            /*
             * constructor() public {
             * _purchaseOrder.id = 1;
             * _purchaseOrder.customerId = 2;
             * LineItem memory lineItem = LineItem(1,2,3);
             * _purchaseOrder.lineItem.push(lineItem);
             * purchaseOrdersArray.push(_purchaseOrder);
             * }
             */

            purchaseOrderResult = query2.PurchaseOrder[0];
            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(2, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[0].Quantity);
        }
Beispiel #2
0
        public async void ShouldEncodeDecodeStructContainingStructsArray()
        {
            var address           = "0x12890d2cce102216644c59daE5baed380d84830c";
            var privateKey        = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";
            var web3              = new Web3.Web3(new Account(privateKey));
            var deploymentReceipt = await web3.Eth.GetContractDeploymentHandler <StructsSample2Deployment>()
                                    .SendRequestAndWaitForReceiptAsync();

            var purchaseOrder = new PurchaseOrder();

            purchaseOrder.CustomerId = 1000;
            purchaseOrder.Id         = 1;
            purchaseOrder.LineItem   = new List <LineItem>();
            purchaseOrder.LineItem.Add(new LineItem()
            {
                Id = 1, ProductId = 100, Quantity = 2, Description = "hello1"
            });
            purchaseOrder.LineItem.Add(new LineItem()
            {
                Id = 2, ProductId = 200, Quantity = 3, Description = "hello2"
            });

            var contractHandler = web3.Eth.GetContractHandler(deploymentReceipt.ContractAddress);

            var receiptSending = await contractHandler.SendRequestAndWaitForReceiptAsync(new SetPurchaseOrderFunction()
            {
                PurchaseOrder = purchaseOrder
            });

            var eventPurchaseOrder  = contractHandler.GetEvent <PurchaseOrderChangedEventDTO>();
            var eventOutputs        = eventPurchaseOrder.DecodeAllEventsForEvent(receiptSending.Logs);
            var purchaseOrderResult = eventOutputs[0].Event.PurchaseOrder;

            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(1000, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(100, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].Quantity);
            Assert.Equal("hello1", purchaseOrderResult.LineItem[0].Description);

            Assert.Equal(2, purchaseOrderResult.LineItem[1].Id);
            Assert.Equal(200, purchaseOrderResult.LineItem[1].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[1].Quantity);
            Assert.Equal("hello2", purchaseOrderResult.LineItem[1].Description);


            var query = await contractHandler.QueryDeserializingToObjectAsync <GetPurchaseOrderFunction, GetPurchaseOrderOutputDTO>(new GetPurchaseOrderFunction()
            {
                Id = 1
            });

            purchaseOrderResult = query.PurchaseOrder;
            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(1000, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(100, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].Quantity);
            Assert.Equal("hello1", purchaseOrderResult.LineItem[0].Description);
            Assert.Equal(2, purchaseOrderResult.LineItem[1].Id);
            Assert.Equal(200, purchaseOrderResult.LineItem[1].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[1].Quantity);
            Assert.Equal("hello2", purchaseOrderResult.LineItem[1].Description);


            var lineItems = new List <LineItem>();

            lineItems.Add(new LineItem()
            {
                Id = 3, ProductId = 300, Quantity = 2, Description = "hello3"
            });
            lineItems.Add(new LineItem()
            {
                Id = 4, ProductId = 400, Quantity = 3, Description = "hello4"
            });

            var lineItemsFunction = new AddLineItemsFunction()
            {
                Id = 1, LineItem = lineItems
            };
            var data = lineItemsFunction.GetCallData().ToHex();

            receiptSending = await contractHandler.SendRequestAndWaitForReceiptAsync(new AddLineItemsFunction()
            {
                Id = 1, LineItem = lineItems
            });

            var lineItemsEvent = contractHandler.GetEvent <LineItemsAddedEventDTO>();
            var lineItemsLogs  = lineItemsEvent.DecodeAllEventsForEvent(receiptSending.Logs);

            query = await contractHandler.QueryDeserializingToObjectAsync <GetPurchaseOrderFunction, GetPurchaseOrderOutputDTO>(new GetPurchaseOrderFunction()
            {
                Id = 1
            });

            purchaseOrderResult = query.PurchaseOrder;
            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(1000, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(100, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].Quantity);
            Assert.Equal(2, purchaseOrderResult.LineItem[1].Id);
            Assert.Equal(200, purchaseOrderResult.LineItem[1].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[1].Quantity);
            Assert.Equal(3, purchaseOrderResult.LineItem[2].Id);
            Assert.Equal(300, purchaseOrderResult.LineItem[2].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[2].Quantity);
            Assert.Equal(4, purchaseOrderResult.LineItem[3].Id);
            Assert.Equal(400, purchaseOrderResult.LineItem[3].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[3].Quantity);



            //Purchase Orders

            var listPurchaseOrder = new List <PurchaseOrder>();

            listPurchaseOrder.Add(purchaseOrder);
            var func = new SetPurchaseOrdersFunction()
            {
                PurchaseOrder = listPurchaseOrder
            };

            receiptSending = await contractHandler.SendRequestAndWaitForReceiptAsync(func);

            var eventPurchaseOrders        = contractHandler.GetEvent <PurchaseOrdersChangedEventDTO>();
            var eventPurchaseOrdersOutputs = eventPurchaseOrders.DecodeAllEventsForEvent(receiptSending.Logs);

            purchaseOrderResult = eventPurchaseOrdersOutputs[0].Event.PurchaseOrder[0];

            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(1000, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(100, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].Quantity);
            Assert.Equal(2, purchaseOrderResult.LineItem[1].Id);
            Assert.Equal(200, purchaseOrderResult.LineItem[1].ProductId);
            Assert.Equal(3, purchaseOrderResult.LineItem[1].Quantity);

            //Stored array on constructor
            var query2 = await contractHandler.QueryDeserializingToObjectAsync <GetPurchaseOrder3Function, GetPurchaseOrder3OutputDTO>();

            /*
             * constructor() public {
             * _purchaseOrder.id = 1;
             * _purchaseOrder.customerId = 2;
             * LineItem memory lineItem = LineItem(1,2,3);
             * _purchaseOrder.lineItem.push(lineItem);
             * purchaseOrdersArray.push(_purchaseOrder);
             * }
             */

            purchaseOrderResult = query2.PurchaseOrder[0];
            Assert.Equal(1, purchaseOrderResult.Id);
            Assert.Equal(1000, purchaseOrderResult.CustomerId);
            Assert.Equal(1, purchaseOrderResult.LineItem[0].Id);
            Assert.Equal(100, purchaseOrderResult.LineItem[0].ProductId);
            Assert.Equal(2, purchaseOrderResult.LineItem[0].Quantity);
        }