private static async Task CheckAndRegisterContractFile(IRepository <ContractFile> repository, IBlobContractFileRepository blobContractFileRepository, IReferenceBlobContractFileRepository referenceBlobContractFileRepository, string ownerAddress, IFormFile file) { var fileInfo = new DirectoryInfo(file.FileName); var fileName = fileInfo.Name.Substring(0, fileInfo.Name.Length - fileInfo.Extension.Length); var contractFile = (await repository.Find(c => c.OwnerAddress == ownerAddress && c.Name == fileName)).FirstOrDefault() ?? new ContractFile() { Name = fileName, OwnerAddress = ownerAddress, }; if (fileInfo.Extension.ToLower() == ".json") { if (contractFile.IncludesJson) { throw new IOException($"{fileInfo.Name} already exists"); } contractFile.IncludesJson = true; var blobContractFile = await blobContractFileRepository.GetBlobContractFile(ownerAddress, fileName, true, false, false); var targetContractCode = blobContractFile.Abi; var referenceContracts = (await referenceBlobContractFileRepository.GetReferenceContractFiles()).OrderBy(f => f.Name).Reverse(); foreach (var r in referenceContracts) { var f = r.Name; var contractComparer = new ContractComparer(r.Abi.ToString(), targetContractCode.ToString()); if (contractComparer.IsInterfaceImplemented()) { var contractType = f.Split('|')[0]; var version = f.Split('|')[1]; contractFile.ApiType = contractType; contractFile.ApiVersion = version; } } } if (fileInfo.Extension.ToLower() == ".sol") { if (contractFile.IncludesSol) { throw new IOException($"{fileInfo.Name} already exists"); } contractFile.IncludesSol = true; } if (contractFile.Id == 0) { await repository.AddNew(contractFile); } else { await repository.Update(contractFile); } }
public void CompareCompatibleContracts() { var contractFile = LoadContractFile("Contracts/Account.json"); var contract1 = contractFile["abi"].ToString(); var contract2 = contractFile["abi"].ToString(); var contractComparer = new ContractComparer(contract1, contract2); var contractsAreEqual = contractComparer.IsInterfaceImplemented(); Assert.IsTrue(contractsAreEqual); }