private static dynamic CreateLogger() { var types = TranslatorAssembly.GetTypes(); var loggerLevelType = ContractAssembly.GetTypes().First(t => t.Name == "LoggerLevel"); var loggerLevelValue = Enum.ToObject(loggerLevelType, 10); var consoleLoggerType = types.First(t => t.FullName == "Bridge.Translator.Logging.ConsoleLoggerWriter"); var fileLoggerType = types.First(t => t.FullName == "Bridge.Translator.Logging.FileLoggerWriter"); var type = types.First(t => t.FullName == "Bridge.Translator.Logging.Logger"); return(System.Activator.CreateInstance(type, null, false, loggerLevelValue, true, System.Activator.CreateInstance(consoleLoggerType), System.Activator.CreateInstance(fileLoggerType))); }
private static bool TryReadReferencesPathFromConfig(string folder, dynamic bridgeOptions) { var type = ContractAssembly.GetTypes().First(t => t.Name == "ConfigHelper`1"); var gtype = type.MakeGenericType(TranslatorAssembly.GetTypes().First(t => t.Name == "AssemblyInfo")); dynamic helper = System.Activator.CreateInstance(gtype, CreateLogger()); var info = helper.ReadConfig("bridge.json", true, folder, bridgeOptions.ProjectProperties.Configuration); if (info != null && !string.IsNullOrWhiteSpace(info.ReferencesPath)) { bridgeOptions.Lib = Path.Combine(Path.IsPathRooted(info.ReferencesPath) ? info.ReferencesPath : Path.Combine(folder, info.ReferencesPath), new DirectoryInfo(folder).Name + ".dll"); return(true); } return(false); }
public void Only_Map_Deployed_Type_Single_Contract_Success() { string code = @" using Stratis.SmartContracts; public class PrimitiveParams : SmartContract { public PrimitiveParams(ISmartContractState state): base(state) {} public void SomeMethod(string i) {} } "; var compilationResult = ContractCompiler.Compile(code); var assembly = Assembly.Load(compilationResult.Compilation); var contractAssembly = new ContractAssembly(assembly); var mapper = new ContractSchemaFactory(); IDictionary <string, OpenApiSchema> mapped = mapper.Map(contractAssembly); Assert.Equal(1, mapped.Count); Assert.True(mapped.ContainsKey("SomeMethod")); }
public void VM_ExecuteContract_CachedAssembly_WithExistingObserver() { ContractCompilationResult compilationResult = ContractCompiler.Compile( @" using System; using Stratis.SmartContracts; public class Contract : SmartContract { public Contract(ISmartContractState state) : base(state) {} public void Test() {} } "); Assert.True(compilationResult.Success); byte[] contractExecutionCode = compilationResult.Compilation; byte[] codeHash = HashHelper.Keccak256(contractExecutionCode); byte[] rewrittenCode; // Rewrite the assembly to have an observer. using (IContractModuleDefinition moduleDefinition = this.context.ModuleDefinitionReader.Read(contractExecutionCode).Value) { var rewriter = new ObserverInstanceRewriter(); moduleDefinition.Rewrite(rewriter); rewrittenCode = moduleDefinition.ToByteCode().Value; } var contractAssembly = new ContractAssembly(Assembly.Load(rewrittenCode)); // Cache the assembly. this.context.ContractCache.Store(new uint256(codeHash), new CachedAssemblyPackage(contractAssembly)); // Set an observer on the cached rewritten assembly. var initialObserver = new Observer(new GasMeter((Gas)(this.gasMeter.GasAvailable + 1000)), new MemoryMeter(100_000)); Assert.True(contractAssembly.SetObserver(initialObserver)); var callData = new MethodCall("Test"); // Run the execution with an empty gas meter, which means it should fail if the correct observer is used. var emptyGasMeter = new GasMeter((Gas)0); var executionContext = new ExecutionContext(new Observer(emptyGasMeter, new MemoryMeter(100_000))); VmExecutionResult result = this.vm.ExecuteMethod(this.contractState, executionContext, callData, contractExecutionCode, "Contract"); CachedAssemblyPackage cachedAssembly = this.context.ContractCache.Retrieve(new uint256(codeHash)); // Check that it's still cached. Assert.NotNull(cachedAssembly); // Check that the observer has been reset to the original. Assert.Same(initialObserver, cachedAssembly.Assembly.GetObserver()); Assert.False(result.IsSuccess); Assert.Equal(VmExecutionErrorKind.OutOfGas, result.Error.ErrorKind); }
private static Type GetEmitterException() { return(ContractAssembly.GetTypes().First(t => t.Name == "EmitterException")); }
private static dynamic CreateProjectProperties() { var type = ContractAssembly.GetTypes().First(t => t.Name == "ProjectProperties"); return(System.Activator.CreateInstance(type)); }