private async Task DeployAndConfigureEShopAsync() { try { Log($"Deploying eShop: {ContractNewDeploymentConfig.Eshop.EShopId} {ContractNewDeploymentConfig.Eshop.EShopDescription}..."); //----------------------------------------------------------------------------------- // Contract deployments //----------------------------------------------------------------------------------- #region contract deployments // Deploy Address Registry Log(); var contractName = CONTRACT_NAME_ADDRESS_REGISTRY; Log($"Deploying {contractName}..."); var addressRegDeployment = new AddressRegistryDeployment(); AddressRegistryService = await AddressRegistryService.DeployContractAndGetServiceAsync( _web3, addressRegDeployment).ConfigureAwait(false); var addressRegOwner = await AddressRegistryService.OwnerQueryAsync().ConfigureAwait(false); Log($"{contractName} address is: {AddressRegistryService.ContractHandler.ContractAddress}"); Log($"{contractName} owner is : {addressRegOwner}"); // Deploy Eternal Storage Log(); contractName = CONTRACT_NAME_ETERNAL_STORAGE; Log($"Deploying {contractName}..."); var eternalStorageDeployment = new EternalStorageDeployment(); EternalStorageService = await EternalStorageService.DeployContractAndGetServiceAsync( _web3, eternalStorageDeployment).ConfigureAwait(false); var eternalStorageOwner = await EternalStorageService.OwnerQueryAsync().ConfigureAwait(false); Log($"{contractName} address is: {EternalStorageService.ContractHandler.ContractAddress}"); Log($"{contractName} owner is : {eternalStorageOwner}"); // Deploy Business Partner Storage Log(); contractName = CONTRACT_NAME_BUSINESS_PARTNER_STORAGE; Log($"Deploying {contractName}..."); var bpStorageDeployment = new BusinessPartnerStorageDeployment() { ContractAddressOfRegistry = AddressRegistryService.ContractHandler.ContractAddress }; BusinessPartnerStorageService = await BusinessPartnerStorageService.DeployContractAndGetServiceAsync( _web3, bpStorageDeployment).ConfigureAwait(false); var bpStorageOwner = await BusinessPartnerStorageService.OwnerQueryAsync().ConfigureAwait(false); Log($"{contractName} address is: {BusinessPartnerStorageService.ContractHandler.ContractAddress}"); Log($"{contractName} owner is : {bpStorageOwner}"); // Deploy PO Storage Log(); contractName = CONTRACT_NAME_PO_STORAGE; Log($"Deploying {contractName}..."); var poStorageDeployment = new PoStorageDeployment() { ContractAddressOfRegistry = AddressRegistryService.ContractHandler.ContractAddress }; PoStorageService = await PoStorageService.DeployContractAndGetServiceAsync( _web3, poStorageDeployment).ConfigureAwait(false); var poStorageOwner = await PoStorageService.OwnerQueryAsync().ConfigureAwait(false); Log($"{contractName} address is: {PoStorageService.ContractHandler.ContractAddress}"); Log($"{contractName} owner is : {poStorageOwner}"); // Deploy Wallet Buyer Log(); contractName = CONTRACT_NAME_BUYER_WALLET; Log($"Deploying {contractName}..."); var buyerWalletDeployment = new BuyerWalletDeployment() { ContractAddressOfRegistry = AddressRegistryService.ContractHandler.ContractAddress }; BuyerWalletService = await BuyerWalletService.DeployContractAndGetServiceAsync( _web3, buyerWalletDeployment).ConfigureAwait(false); var buyerWalletOwner = await BuyerWalletService.OwnerQueryAsync().ConfigureAwait(false); Log($"{contractName} address is: {BuyerWalletService.ContractHandler.ContractAddress}"); Log($"{contractName} owner is : {buyerWalletOwner}"); // Deploy Wallet Seller Log(); contractName = CONTRACT_NAME_SELLER_ADMIN; Log($"Deploying {contractName}..."); var sellerAdminDeployment = new SellerAdminDeployment() { ContractAddressOfRegistry = AddressRegistryService.ContractHandler.ContractAddress, SellerIdString = ContractNewDeploymentConfig.Seller.SellerId, }; SellerAdminService = await SellerAdminService.DeployContractAndGetServiceAsync( _web3, sellerAdminDeployment).ConfigureAwait(false); var sellerAdminOwner = await SellerAdminService.OwnerQueryAsync().ConfigureAwait(false); Log($"{contractName} address is: {SellerAdminService.ContractHandler.ContractAddress}"); Log($"{contractName} owner is : {sellerAdminOwner}"); // Deploy Purchasing Log(); contractName = CONTRACT_NAME_PURCHASING; Log($"Deploying {contractName}..."); var purchasingDeployment = new PurchasingDeployment() { ContractAddressOfRegistry = AddressRegistryService.ContractHandler.ContractAddress, EShopIdString = ContractNewDeploymentConfig.Eshop.EShopId }; PurchasingService = await PurchasingService.DeployContractAndGetServiceAsync( _web3, purchasingDeployment).ConfigureAwait(false); var purchasingOwner = await PurchasingService.OwnerQueryAsync().ConfigureAwait(false); Log($"{contractName} address is: {PurchasingService.ContractHandler.ContractAddress}"); Log($"{contractName} owner is : {purchasingOwner}"); // Deploy Funding Log(); contractName = CONTRACT_NAME_FUNDING; Log($"Deploying {contractName}..."); var fundingDeployment = new FundingDeployment() { ContractAddressOfRegistry = AddressRegistryService.ContractHandler.ContractAddress }; FundingService = await FundingService.DeployContractAndGetServiceAsync( _web3, fundingDeployment).ConfigureAwait(false); var fundingOwner = await FundingService.OwnerQueryAsync().ConfigureAwait(false); Log($"{contractName} address is: {FundingService.ContractHandler.ContractAddress}"); Log($"{contractName} owner is : {fundingOwner}"); #endregion //----------------------------------------------------------------------------------- // Configure Address Registry //----------------------------------------------------------------------------------- #region configure address registry Log(); Log($"Configuring Address Registry..."); // Add address entry for eternal storage contractName = CONTRACT_NAME_ETERNAL_STORAGE; Log($"Configuring Address Registry, adding {contractName}..."); var txReceipt = await AddressRegistryService.RegisterAddressStringRequestAndWaitForReceiptAsync( contractName, EternalStorageService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Add address entry for BP storage contractName = CONTRACT_NAME_BUSINESS_PARTNER_STORAGE; Log($"Configuring Address Registry, adding {contractName}..."); txReceipt = await AddressRegistryService.RegisterAddressStringRequestAndWaitForReceiptAsync( contractName, BusinessPartnerStorageService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Add address entry for PO storage contractName = CONTRACT_NAME_PO_STORAGE; Log($"Configuring Address Registry, adding {contractName}..."); txReceipt = await AddressRegistryService.RegisterAddressStringRequestAndWaitForReceiptAsync( contractName, PoStorageService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Add address entry for Purchasing contractName = CONTRACT_NAME_PURCHASING; Log($"Configuring Address Registry, adding {contractName}..."); txReceipt = await AddressRegistryService.RegisterAddressStringRequestAndWaitForReceiptAsync( contractName, PurchasingService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Add address entry for Funding contractName = CONTRACT_NAME_FUNDING; Log($"Configuring Address Registry, adding {contractName}..."); txReceipt = await AddressRegistryService.RegisterAddressStringRequestAndWaitForReceiptAsync( contractName, FundingService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Authorisations. Nothing needed. #endregion //----------------------------------------------------------------------------------- // Configure Eternal Storage //----------------------------------------------------------------------------------- #region configure eternal storage // Authorisations. Bind all contracts that will use eternal storage Log(); Log($"Authorisations for Eternal Storage..."); contractName = CONTRACT_NAME_BUSINESS_PARTNER_STORAGE; Log($"Configuring Eternal Storage, binding {contractName}..."); txReceipt = await EternalStorageService.BindAddressRequestAndWaitForReceiptAsync( BusinessPartnerStorageService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); contractName = CONTRACT_NAME_PO_STORAGE; Log($"Configuring Eternal Storage, binding {contractName}..."); txReceipt = await EternalStorageService.BindAddressRequestAndWaitForReceiptAsync( PoStorageService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); #endregion //----------------------------------------------------------------------------------- // Configure Business Partner Storage //----------------------------------------------------------------------------------- #region configure business partner storage and store master data Log(); Log($"Configuring BP Storage..."); txReceipt = await BusinessPartnerStorageService.ConfigureRequestAndWaitForReceiptAsync( CONTRACT_NAME_ETERNAL_STORAGE).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); //----------------------------------------------------------------------------------- // Add some Business Partner master data //----------------------------------------------------------------------------------- // Need at least one eShop and one Seller to be a useful deployment Log($"Adding eShop master data..."); txReceipt = await BusinessPartnerStorageService.SetEshopRequestAndWaitForReceiptAsync( new Eshop() { EShopId = ContractNewDeploymentConfig.Eshop.EShopId, EShopDescription = ContractNewDeploymentConfig.Eshop.EShopDescription, PurchasingContractAddress = PurchasingService.ContractHandler.ContractAddress, IsActive = true, CreatedByAddress = string.Empty, // filled by contract QuoteSignerCount = Convert.ToUInt32(ContractNewDeploymentConfig.Eshop.QuoteSigners.Count), QuoteSigners = ContractNewDeploymentConfig.Eshop.QuoteSigners }).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); Log($"Adding Seller master data..."); txReceipt = await BusinessPartnerStorageService.SetSellerRequestAndWaitForReceiptAsync( new Seller() { SellerId = ContractNewDeploymentConfig.Seller.SellerId, SellerDescription = ContractNewDeploymentConfig.Seller.SellerDescription, AdminContractAddress = SellerAdminService.ContractHandler.ContractAddress, IsActive = true, CreatedByAddress = string.Empty // filled by contract }).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); #endregion // Authorisations. // Bind all contracts that will use BP storage here - currently none other than owner //----------------------------------------------------------------------------------- // Configure PO Storage //----------------------------------------------------------------------------------- Log(); Log($"Configuring PO Storage..."); txReceipt = await PoStorageService.ConfigureRequestAndWaitForReceiptAsync( CONTRACT_NAME_ETERNAL_STORAGE).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Authorisations. Bind all contracts that will use PO storage // Bind Purchasing to PO Storage Log($"Authorisations for PO Storage..."); contractName = CONTRACT_NAME_PURCHASING; Log($"Configuring PO Storage, binding {contractName}..."); txReceipt = await PoStorageService.BindAddressRequestAndWaitForReceiptAsync( PurchasingService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); //----------------------------------------------------------------------------------- // Configure Seller Admin //----------------------------------------------------------------------------------- Log(); Log($"Configuring Seller Admin..."); txReceipt = await SellerAdminService.ConfigureRequestAndWaitForReceiptAsync( CONTRACT_NAME_BUSINESS_PARTNER_STORAGE).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); //----------------------------------------------------------------------------------- // Configure Buyer Wallet //----------------------------------------------------------------------------------- Log(); Log($"Configuring Buyer Wallet..."); txReceipt = await BuyerWalletService.ConfigureRequestAndWaitForReceiptAsync( CONTRACT_NAME_BUSINESS_PARTNER_STORAGE).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); //----------------------------------------------------------------------------------- // Configure Purchasing //----------------------------------------------------------------------------------- Log(); Log($"Configuring Purchasing..."); txReceipt = await PurchasingService.ConfigureRequestAndWaitForReceiptAsync( CONTRACT_NAME_PO_STORAGE, CONTRACT_NAME_BUSINESS_PARTNER_STORAGE, CONTRACT_NAME_FUNDING) .ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Authorisations. Bind all contracts that will use Purchasing Log($"Authorisations for Purchasing..."); // Bind BuyerWallet to Purchasing contractName = CONTRACT_NAME_BUYER_WALLET; Log($"Configuring Purchasing, binding {contractName}..."); txReceipt = await PurchasingService.BindAddressRequestAndWaitForReceiptAsync( BuyerWalletService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Bind SellerAdmin to Purchasing contractName = CONTRACT_NAME_SELLER_ADMIN; Log($"Configuring Purchasing, binding {contractName}..."); txReceipt = await PurchasingService.BindAddressRequestAndWaitForReceiptAsync( SellerAdminService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Bind Funding to Purchasing contractName = CONTRACT_NAME_FUNDING; Log($"Configuring Purchasing, binding {contractName}..."); txReceipt = await PurchasingService.BindAddressRequestAndWaitForReceiptAsync( FundingService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); //----------------------------------------------------------------------------------- // Configure Funding //----------------------------------------------------------------------------------- Log(); Log($"Configuring Funding..."); txReceipt = await FundingService.ConfigureRequestAndWaitForReceiptAsync( CONTRACT_NAME_PO_STORAGE, CONTRACT_NAME_BUSINESS_PARTNER_STORAGE) .ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Authorisations. Bind all contracts that will use Funding Log($"Authorisations for Funding..."); // Bind BuyerWallet to Funding contractName = CONTRACT_NAME_BUYER_WALLET; Log($"Configuring Funding, binding {contractName}..."); txReceipt = await FundingService.BindAddressRequestAndWaitForReceiptAsync( BuyerWalletService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); // Bind Purchasing to Funding contractName = CONTRACT_NAME_PURCHASING; Log($"Configuring Funding, binding {contractName}..."); txReceipt = await FundingService.BindAddressRequestAndWaitForReceiptAsync( PurchasingService.ContractHandler.ContractAddress).ConfigureAwait(false); Log($"Tx status: {txReceipt.Status.Value}"); } catch (Exception ex) { Log($"Exception thrown: {ex.Message}"); } finally { Log($"Deploy and configure complete."); } }