public async void ShouldEncodeDecodeStructContainingStructsArray() { var address = "0x12890d2cce102216644c59daE5baed380d84830c"; var privateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7"; var web3 = new Web3.Web3(new Account(privateKey)); var deploymentReceipt = await web3.Eth.GetContractDeploymentHandler <StructsSampleDeployment>() .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 }); 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 }); 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.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); 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 }); 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); }
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); }