コード例 #1
0
        public async Task <SmartContractDeployedInstanceItem> GetSmartContractDeployedInstance(int smartContractDeployedInstanceId)
        {
            SmartContractDeployedInstanceItem smartContractDeployedInstanceItem = null;

            using (SqlConnection conn = new SqlConnection(DbConfiguration.ConnectionString))
            {
                SqlCommand sqlcmd = new SqlCommand(StoredProcedures.GetSmartContractDeployedInstance, conn);
                sqlcmd.CommandType = System.Data.CommandType.StoredProcedure;
                sqlcmd.Parameters.Add(new SqlParameter()
                {
                    ParameterName = "@smartContractDeployedInstanceId",
                    SqlDbType     = System.Data.SqlDbType.Int,
                    Value         = smartContractDeployedInstanceId
                });
                conn.Open();
                var reader = await sqlcmd.ExecuteReaderAsync();

                while (reader.Read())
                {
                    smartContractDeployedInstanceItem = new SmartContractDeployedInstanceItem();
                    smartContractDeployedInstanceItem.SmartContractInstanceId     = Convert.ToInt32(reader["SmartContractDeployedInstanceId"]);
                    smartContractDeployedInstanceItem.SmartContractId             = Convert.ToInt32(reader["SmartContractId"]);
                    smartContractDeployedInstanceItem.DeployByUserLoginId         = reader["DeployedByUserLoginId"]?.ToString();
                    smartContractDeployedInstanceItem.DeployedAddress             = reader["DeployedAddress"]?.ToString();
                    smartContractDeployedInstanceItem.InitialData                 = reader["InitialData"]?.ToString();
                    smartContractDeployedInstanceItem.DeployedInstanceDisplayName = reader["DeployedInstanceDisplayName"]?.ToString();
                    smartContractDeployedInstanceItem.CreatedDatetime             = string.IsNullOrEmpty(reader["CreatedDatetime"]?.ToString()) ? DateTime.MinValue : Convert.ToDateTime(reader["CreatedDatetime"]);
                    smartContractDeployedInstanceItem.UpdatedDatetime             = string.IsNullOrEmpty(reader["UpdatedDatetime"]?.ToString()) ? DateTime.MinValue : Convert.ToDateTime(reader["UpdatedDatetime"]);
                }
            }
            return(smartContractDeployedInstanceItem);
        }
コード例 #2
0
        public void CreateSmartContractDeployedInstanceTest()
        {
            SmartContractDb smartContractDb = new SmartContractDb();
            SmartContractDeployedInstanceItem deployedInstanceItem = new SmartContractDeployedInstanceItem()
            {
                DeployByUserLoginId         = "aamolgote",
                InitialData                 = "Initial Data Test",
                DeployedAddress             = "0X3838383",
                SmartContractId             = 21,
                DeployedInstanceDisplayName = "Test"
            };
            var item = smartContractDb.CreateSmartContractDeployedInstance(deployedInstanceItem).Result;

            Assert.IsTrue(item != null);
        }
コード例 #3
0
        public async Task <SmartContractDeployedInstanceItem> DeploySmartContract(SmartContractDeployRequest smartContractDeployRequest)
        {
            try
            {
                var smartContract = await this.smartContractDb.GetSmartContract(smartContractDeployRequest.SmartContractId);

                var userDltAccount = await this.accountDb.GetUserDltAccountByLoginId(smartContractDeployRequest.DeployByUserLoginId);

                if (smartContract != null)
                {
                    var web3         = new Web3Geth();
                    var unlockResult = await web3.Personal.UnlockAccount.SendRequestAsync(userDltAccount.Address, userDltAccount.PassPhrase, 120);

                    object[] parameters = null;
                    if (smartContractDeployRequest.DeploymentData != null && smartContractDeployRequest.DeploymentData.Count > 0)
                    {
                        parameters = smartContractDeployRequest.DeploymentData.ToArray();
                    }

                    if (unlockResult)
                    {
                        var gas = await web3.Eth.DeployContract.EstimateGasAsync(smartContract.Abi,
                                                                                 smartContract.ByteCode,
                                                                                 userDltAccount.Address,
                                                                                 parameters);

                        var receipt = await web3.Eth.DeployContract.SendRequestAndWaitForReceiptAsync(smartContract.Abi,
                                                                                                      smartContract.ByteCode,
                                                                                                      userDltAccount.Address,
                                                                                                      gas, null, parameters);

                        string contractAddress = receipt.ContractAddress;

                        SmartContractDeployedInstanceItem deployedInstanceItem = new SmartContractDeployedInstanceItem()
                        {
                            DeployByUserLoginId         = smartContractDeployRequest.DeployByUserLoginId,
                            InitialData                 = Newtonsoft.Json.JsonConvert.SerializeObject(smartContractDeployRequest.DeploymentData),
                            DeployedAddress             = contractAddress,
                            SmartContractId             = smartContractDeployRequest.SmartContractId,
                            DeployedInstanceDisplayName = smartContractDeployRequest.DeployedInstanceDisplayName
                        };

                        var mutatedSmartContractDeployedInstanceItem = await this.smartContractDb.CreateSmartContractDeployedInstance(deployedInstanceItem);

                        return(mutatedSmartContractDeployedInstanceItem);
                    }
                    else
                    {
                        throw new Exception("Unable to unlock account");
                    }
                }
                else
                {
                    throw new Exception("Invalid Smart Contract Id");
                }
            }
            catch (Exception ex)
            {
                this.logger.LogException(ex, "An error occured in method SmartContractManager ==> DeploySmartContract");
                throw;
            }
        }