public async Task <bool> PerformCodeCheckAsync(byte[] code, Hash blockHash, long blockHeight) { if (!_isEnabled) { return(false); } var requiredAcs = await _requiredAcsInContractsProvider.GetRequiredAcsInContractsAsync(blockHash, blockHeight); try { // Check contract code Logger.LogTrace("Start code check."); _contractAuditor.Audit(code, requiredAcs, true); Logger.LogTrace("Finish code check."); return(true); } catch (InvalidCodeException e) { // May do something else to indicate that the contract has an issue Logger.LogWarning(e.Message); } return(false); }
public Task PerformCodeCheckAsync(TransactionResult transactionResult, LogEvent logEvent) { if (!_isEnabled) { return(Task.CompletedTask); } Logger.LogTrace("Start code check."); var eventData = new CodeCheckRequired(); eventData.MergeFrom(logEvent); try { // Check contract code _contractAuditor.Audit(eventData.Code.ToByteArray(), true); // Approve proposal related to CodeCheckRequired event var proposalId = ProposalCreated.Parser .ParseFrom(transactionResult.Logs.First(l => l.Name == nameof(ProposalCreated)).NonIndexed) .ProposalId; // Cache proposal id to generate system approval transaction later _proposalService.AddNotApprovedProposal(proposalId, transactionResult.BlockNumber); } catch (InvalidCodeException e) { // May do something else to indicate that the contract has an issue Logger.LogWarning(e.Message); } Logger.LogTrace("Finish code check."); return(Task.CompletedTask); }
public void Audit(byte[] code) { _auditor.Audit(code, false); }