public void MapTransferInfo_Success() { var network = new SmartContractsRegTest(); var primitiveSerializer = new ContractPrimitiveSerializerV2(network); var stateRoot = new Mock <IStateRepositoryRoot>(); stateRoot.Setup(r => r.GetCodeHash(It.IsAny <uint160>())).Returns(uint256.Zero.ToBytes()); var assemblyCache = new Mock <IContractAssemblyCache>(); var contractAssembly = new Mock <IContractAssembly>(); var serializer = new ApiLogDeserializer(primitiveSerializer, network, stateRoot.Object, assemblyCache.Object); var transferInfos = new List <TransferInfo> { new TransferInfo(uint160.Zero, uint160.One, 12345), new TransferInfo(uint160.One, uint160.Zero, 12345), }; List <SmartContracts.Models.TransferResponse> result = serializer.MapTransferInfo(transferInfos.ToArray()); for (var i = 0; i < transferInfos.Count; i++) { Assert.Equal(transferInfos[i].From.ToBase58Address(network), result[i].From); Assert.Equal(transferInfos[i].To.ToBase58Address(network), result[i].To); Assert.Equal(transferInfos[i].Value, result[i].Value); } }
public IActionResult LocalCallSmartContractTransaction([FromBody] LocalCallContractRequest request) { if (!this.ModelState.IsValid) { return(ModelStateErrors.BuildErrorResponse(this.ModelState)); } // Rewrite the method name to a property name this.RewritePropertyGetterName(request); try { ContractTxData txData = this.smartContractTransactionService.BuildLocalCallTxData(request); var height = request.BlockHeight.HasValue ? request.BlockHeight.Value : (ulong)this.chainIndexer.Height; ILocalExecutionResult result = this.localExecutor.Execute( height, request.Sender?.ToUint160(this.network) ?? new uint160(), !string.IsNullOrWhiteSpace(request.Amount) ? (Money)request.Amount : 0, txData); var deserializer = new ApiLogDeserializer(this.primitiveSerializer, this.network, result.StateRoot, this.contractAssemblyCache); var response = new LocalExecutionResponse { InternalTransfers = deserializer.MapTransferInfo(result.InternalTransfers.ToArray()), Logs = deserializer.MapLogResponses(result.Logs.ToArray()), GasConsumed = result.GasConsumed, Revert = result.Revert, ErrorMessage = result.ErrorMessage, Return = result.Return // All return values should be primitives, let default serializer handle. }; return(this.Json(response, new JsonSerializerSettings { ContractResolver = new ContractParametersContractResolver(this.network) })); } catch (MethodParameterStringSerializerException e) { return(this.Json(ErrorHelpers.BuildErrorResponse(HttpStatusCode.InternalServerError, e.Message, "Error deserializing method parameters"))); } }