async Task <Guid> ITenantService.Create(
            string name,
            string email,
            string address,
            string phoneNumber,
            string taxCode,
            string registrationCode,
            string certificates,
            TenantTypes type)
        {
            var function = ethereumService.GetFunction(EthereumFunctions.AddChainPoint);

            try
            {
                var tenant = new Tenant()
                {
                    Name             = name,
                    Email            = email,
                    PrimaryAddress   = address,
                    PhoneNumber      = phoneNumber,
                    TaxCode          = taxCode,
                    RegistrationCode = registrationCode,
                    Certificates     = certificates,
                    DateCreated      = DateTime.UtcNow,
                    Type             = type
                };
                Guid newTenantId = tenantRepository.CreateAndReturnId(tenant);

                var transactionHash = await function.SendTransactionAsync(
                    ethereumService.GetEthereumAccount(),
                    new HexBigInteger(4000000),
                    new HexBigInteger(Nethereum.Web3.Web3.Convert.ToWei(50, UnitConversion.EthUnit.Gwei)),
                    new HexBigInteger(0),
                    functionInput : new object[] {
                    newTenantId.ToString(),
                    name,
                    address,
                    phoneNumber,
                    taxCode,
                    registrationCode
                });

                tenant.TransactionHash = transactionHash;
                tenantRepository.Update(tenant);

                // Create auth0 user.
                var userRole  = (type == TenantTypes.Manufacturer) ? "manufacturer" : (type == TenantTypes.Distributor ? "distributor" : (type == TenantTypes.Retailer ? "retailer" : "unknown"));
                var userAuth0 = auth0Service.CreateUser(newTenantId.ToString(), email, "123456789?a", userRole);

                BackgroundJob.Schedule <ITenantBackgroundJob>(
                    backgroundJob => backgroundJob.WaitForTransactionToSuccessThenFinishCreatingTenant(tenant),
                    TimeSpan.FromSeconds(3)
                    );

                return(newTenantId);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }