/// <summary> /// A Smart Contract is an Execution Engine, /// firing methods, counting the cost, incrementing/decrementing funds and imposing a /// throttle on execution against available "funds"; and, /// ultimately writing data to the blockchain /// </summary> public virtual void Execute(Int64 GasLimit) { long loopcount = 0; foreach (Tuple <DelegateMethod, string, long, string, long> tup in delegates) { try { loopcount++; ulong start, end; start = ThreadCycleCounter.ThreadCycles(); tup.Item1.Invoke(tup.Item3); end = ThreadCycleCounter.ThreadCycles(); ulong cycles = end - start; if ((cycles > 0) && (long)cycles > tup.Item5) //Note: tup.Item5 = GasLimit for This Delegate { Print(ConsoleColor.Red, String.Format("Gas Limit Exceeded for Delegate#{0} - GasSpent: {1}; GasLimit: {2}", loopcount, cycles, tup.Item5)); } Console.WriteLine(String.Format("Executed Delegate#{0} - GasSpent: {1}; GasLimit: {2}", loopcount, cycles, tup.Item5)); Console.WriteLine("-----------------------------"); } catch (Exception) { break; } } }
public SmartContract() { //initialize threadcycle timer for (int i = 0; i < 5; i++) { ThreadCycleCounter.ThreadCycles(); } //delegates.Add(Tuple.Create(new DelegateMethod(DoShortLoop),"NumLoops", (long)10, "GasLimit", (long)100)); //delegates.Add(Tuple.Create(new DelegateMethod(DoComplexLoop), "NumLoops", (long)100, "GasLimit", (long)1000)); }