public static async Task <TheContract> GetTheContract(string contractName) { string actionUrl = Utility.CombineUri(Link.HOST, "smart-contract/get-the-contract"); string pathFile = Utility.GetPathFileContract(contractName); if (!System.IO.File.Exists(pathFile)) { SanitaLog.Error("Not find " + pathFile); return(null); } HttpContent fileStreamContent = new ByteArrayContent(System.IO.File.ReadAllBytes(pathFile)); using (HttpClient client = new HttpClient()) using (MultipartFormDataContent formData = new MultipartFormDataContent()) { formData.Add(fileStreamContent, "file", contractName); var response = await client.PostAsync(actionUrl, formData); response.EnsureSuccessStatusCode(); var contentString = await response.Content.ReadAsStringAsync(); var contents = JObject.Parse(contentString); ResultApi result = JsonConvert.DeserializeObject <ResultApi>(contentString); client.Dispose(); if (result.status == "success") { TheContract mTheContract = JsonConvert.DeserializeObject <TheContract>(result.data); SanitaLog.Log("Abi", mTheContract.Abi); SanitaLog.Log("ByteCode", mTheContract.Bytecode); return(mTheContract); } else { return(null); } } }
public async Task <string> GET() { try { SanitaLog.Method("GET", "TestController"); // this will leave the account unlucked for 2 minutes string contractName = "King.sol"; int accountUnlockTime = 120; string accountPublicKey = "0xd6b37e4590c65787437f57e1ad7bb6b9a6f7ba8f"; string accountPassword = "******"; HexBigInteger gas = new HexBigInteger(3000000); //HexBigInteger balance = new HexBigInteger(120); var multiplier = 7; // Unlock the caller's account with the given password bool unlockResult = await Web3Api.UnlockAccount(accountPublicKey, accountPassword, accountUnlockTime); //Get abi of contract TheContract mTheContract = await Web3Api.GetTheContract(contractName); if (mTheContract != null) { string abi = mTheContract.Abi; string byteCode = "0x" + mTheContract.Bytecode; BaseDAO baseDAO = new BaseDAO(); //Get connection using (NpgsqlConnection connection = baseDAO.GetConnection()) { try { //Open connection connection.Open(); HexBigInteger estimateGas = await Web3Api.mWeb3.Eth.DeployContract.EstimateGasAsync(abi, byteCode, accountPublicKey); SanitaLog.Log("Estimate gas", estimateGas); //TODO: Add code to save address of transactionHash => not deploy multiple times //Find contract is deployed ContractInfo mContractInfo = ContractPresenter.GetContract(contractName); //If contract is not exist or not update if (mContractInfo == null || !String.Equals(mContractInfo.ByteCode, byteCode)) { string transactionHash = await Web3Api.WaitDeploy(abi, byteCode, accountPublicKey, gas, multiplier); //Minner TransactionReceipt receipt = await Web3Api.WaitMiner(transactionHash); //Insert or update contract mContractInfo = new ContractInfo(); mContractInfo.Name = contractName; mContractInfo.Address = receipt.ContractAddress; mContractInfo.Abi = abi; mContractInfo.ByteCode = byteCode; mContractInfo.Active = DataTypeModel.ACTIVE; int _result = ContractPresenter.SaveContract(connection, null, mContractInfo); if (_result == DataTypeModel.RESULT_NG) { SanitaLog.Error("No save contract to databse"); return("Error occur. Please try again."); } } //Close connection connection.Close(); //Get contract Nethereum.Contracts.Contract contract = Web3Api.GetContract(abi, mContractInfo.Address); #region Error //Get event //Event multiplyEvent = contract.GetEvent("Multiplied"); //var filterAll = await multiplyEvent.CreateFilterAsync(); //var filter7 = await multiplyEvent.CreateFilterAsync(7); //var gasFunc = await multiplyFunction.EstimateGasAsync(accountPublicKey, null, null, newAddress, amountToSend); //Call event //transactionHash = await multiplyFunction.SendTransactionAsync(accountPublicKey, 7); //SanitaLog.Log("transaction hash", transactionHash); //Call event //transactionHash = await multiplyFunction.SendTransactionAsync(accountPublicKey, 8); //SanitaLog.Log("transaction hash", transactionHash); //Minner //receipt = await Web3Api.WaitMiner(transactionHash); #endregion Error Function funct = null; funct = Web3Api.getFunction(contract, "getOwner"); var result = await funct.CallAsync <string>(); SanitaLog.Log("Result of function getOwner", result); funct = Web3Api.getFunction(contract, "showListShareHolders"); var mListShareHolders = await funct.CallAsync <List <string> >(); SanitaLog.Log("Result of function showListShareHolders", Utility.ToStringList(mListShareHolders)); funct = Web3Api.getFunction(contract, "addListShareHolders"); await funct.CallAsync <object>("0x5e98ff12d889945488ddd53ffb71f6580cae1571"); funct = Web3Api.getFunction(contract, "addListShareHolders"); await funct.CallAsync <object>("0x9bb7f17d1d53774e0fdfa4b76ba68c48e8a4daba"); funct = Web3Api.getFunction(contract, "addListShareHolders"); await funct.CallAsync <object>("0xee2d522d8f10769a5f150ed55f40f305c8d0595f"); funct = Web3Api.getFunction(contract, "showListShareHolders"); mListShareHolders = await funct.CallAsync <List <string> >(); SanitaLog.Log("Result of function showListShareHolders", Utility.ToStringList(mListShareHolders)); SanitaLog.Success("Success deploy contract"); return("success"); } catch (Exception exception1) { //Close connection connection.Close(); SanitaLog.Exception(exception1); return("Error occur. Please try again."); } } } else { SanitaLog.Error("Fail deploy contract"); return("fail"); } } catch (Exception exception2) { SanitaLog.Exception(exception2); return("Error occur. Please try again."); } }