public void NonceTestMethod() { string message = "Keyhole Software"; Console.WriteLine("Message: " + message); string hashValue = SHA256.generateHash(message); Console.WriteLine(string.Format("Hash: {0}", hashValue)); string nonceKey = "12345"; long nonce = 0; bool nonceFound = false; string nonceHash = ""; long start = TimeUtils.CurrentTimeMillis(); while (!nonceFound) { nonceHash = SHA256.generateHash(message + nonce); nonceFound = nonceHash.Substring(0, nonceKey.Length).Equals(nonceKey); nonce++; } long ms = TimeUtils.CurrentTimeMillis() - start; Console.WriteLine(string.Format("Nonce: {0} ", ms)); Console.WriteLine(string.Format("Nonce Hash: {0}", nonceHash)); Console.WriteLine(string.Format("Nonce Search Time: {0} ms", ms)); Assert.IsTrue(nonceFound); }
public BlockWithTransactions Build(ulong nonce) { var txs = _transactions ?? throw new InvalidOperationException(); var merkleRoot = UInt256Utils.Zero; if (txs.Count > 0) { merkleRoot = MerkleTree.ComputeRoot(txs.Select(tx => tx.Hash).ToArray()) ?? throw new InvalidOperationException(); } var header = new BlockHeader { PrevBlockHash = _prevBlock != null?_prevBlock.Keccak() : UInt256Utils.Zero, MerkleRoot = merkleRoot, Index = _prevBlock?.Index + 1 ?? 0, StateHash = _stateHash, Nonce = nonce }; var block = new Block { Hash = header.Keccak(), TransactionHashes = { txs.Select(tx => tx.Hash) }, Header = header, Multisig = _multiSig ?? new MultiSig(), Timestamp = TimeUtils.CurrentTimeMillis(), }; return(new BlockWithTransactions(block, txs)); }
public void Test_SignRoundTrip() { var privateKey = "0xD95D6DB65F3E2223703C5D8E205D98E3E6B470F067B0F94F6C6BF73D4301CE48".HexToBytes(); var publicKey = Crypto.ComputePublicKey(privateKey, true); var address = "0x6Bc32575ACb8754886dC283c2c8ac54B1Bd93195".HexToBytes(); CollectionAssert.AreEqual(address, Crypto.ComputeAddress(publicKey)); var startTs = TimeUtils.CurrentTimeMillis(); const int n = 100; for (var it = 0; it < n; ++it) { // var message = "0xdeadbeef" + it.ToString("X4"); var message = "0xec808504a817c800825208948e7b7262e0fa4616566591d51f998f16a79fb547880de0b6b3a764000080018080"; var digest = message.HexToBytes(); // using old chain id var signature = Crypto.Sign(digest, privateKey, false); Assert.IsTrue(Crypto.VerifySignature(digest, signature, publicKey, false)); var recoveredPubkey = Crypto.RecoverSignature(digest, signature, false); Assert.AreEqual(recoveredPubkey, publicKey); // using new chain id signature = Crypto.Sign(digest, privateKey, true); Assert.IsTrue(Crypto.VerifySignature(digest, signature, publicKey, true)); recoveredPubkey = Crypto.RecoverSignature(digest, signature, true); Assert.AreEqual(recoveredPubkey, publicKey); } var endTs = TimeUtils.CurrentTimeMillis(); Console.WriteLine($"Full sign + recover time: {endTs - startTs}ms"); Console.WriteLine($"Per 1 iteration: {(double) (endTs - startTs) / n}ms"); }
private static void _Benchmark(string text, Func <int, int> action, uint tries) { var lastTime = TimeUtils.CurrentTimeMillis(); var mod = tries / 100; if (mod == 0) { mod = 1; } for (var i = 0; i < tries; i++) { if (i % mod == 0) { Console.CursorLeft = 0; Console.Write($"{text} {100 * i / tries}%"); } action(i); } var deltaTime = TimeUtils.CurrentTimeMillis() - lastTime; Console.CursorLeft = text.Length; Console.WriteLine($"{1000.0 * tries / deltaTime} RPS"); }
public BlockchainEventFilterParams(BlockchainEvent eventType, UInt256[] txHashes) { EventType = eventType; // sorting the tx hashes for further optimization Array.Sort(txHashes, (x, y) => UInt256Utils.Compare(x, y)); PendingTransactionList = new List <UInt256>(txHashes.ToList()); PollingTime = TimeUtils.CurrentTimeMillis(); }
public T Benchmark <T>(Func <T> action) { var startTs = TimeUtils.CurrentTimeMillis(); var res = action.Invoke(); TotalTime += TimeUtils.CurrentTimeMillis() - startTs; Count += 1; return(res); }
public BlockchainEventFilterParams(BlockchainEvent eventType, ulong?fromBlock, ulong?toBlock, List <UInt160> addresses, List <List <UInt256> > topics) { EventType = eventType; FromBlock = fromBlock; ToBlock = toBlock; AddressList = new List <UInt160>(addresses); TopicLists = new List <List <UInt256> >(topics); PollingTime = TimeUtils.CurrentTimeMillis(); }
private JObject GetNodeStats() { using var process = Process.GetCurrentProcess(); return(new JObject { ["uptime"] = TimeUtils.CurrentTimeMillis() - _startTs, ["threads"] = process.Threads.Count, ["memory"] = process.WorkingSet64, ["max_memory"] = process.PeakWorkingSet64, }); }
public void RemoveUnusedFilters() { var currentTime = TimeUtils.CurrentTimeMillis(); foreach (var(filterId, filterParams) in _filters) { if (currentTime - filterParams.PollingTime >= TimeOut()) { Remove(filterId); } } }
private void Worker() { _isConnected = true; while (_isConnected) { var now = TimeUtils.CurrentTimeMillis(); MessageBatchContent toSend = new MessageBatchContent(); lock (_messageQueue) { const int maxSendSize = 64 * 1024; // let's not send more than 64 KiB at once while (_messageQueue.Count > 0 && toSend.CalculateSize() < maxSendSize) { var message = _messageQueue.First.Value; toSend.Messages.Add(message); _messageQueue.RemoveFirst(); } } if (toSend.Messages.Count > 0) { var megaBatch = _messageFactory.MessagesBatch(toSend.Messages); var megaBatchBytes = megaBatch.ToByteArray(); if (megaBatchBytes.Length == 0) { throw new Exception("Cannot send empty message"); } Logger.LogTrace( $"Sending {toSend.Messages.Count} messages to hub, {megaBatchBytes.Length} bytes total, peer = {PeerPublicKey.ToHex()}"); var messageTypes = toSend.Messages.Select(m => m.MessageCase != NetworkMessage.MessageOneofCase.ConsensusMessage ? m.MessageCase.ToString() : m.ConsensusMessage.PrettyTypeString() ); Logger.LogTrace($"Messages types: {string.Join("; ", messageTypes)}"); foreach (var message in toSend.Messages) { MessageCounter .WithLabels(PeerPublicKey.ToHex(), message.MessageCase.ToString()) .Inc(); MessageBytesCounter .WithLabels(PeerPublicKey.ToHex(), message.MessageCase.ToString()) .Inc(message.CalculateSize()); } _hubConnector.Send(PeerPublicKey, megaBatchBytes); _eraMsgCounter += 1; } var toSleep = Math.Clamp(250 - (long)(TimeUtils.CurrentTimeMillis() - now), 1, 1000); Thread.Sleep(TimeSpan.FromMilliseconds(toSleep)); } }
public NodeService( IBlockSynchronizer blockSynchronizer, IBlockchainEventFilter blockchainEventFilter, INetworkManager networkManager, IBlockManager blockManager ) { _blockchainEventFilter = blockchainEventFilter; _blockSynchronizer = blockSynchronizer; _blockManager = blockManager; _startTs = TimeUtils.CurrentTimeMillis(); }
public JArray GetLogs(ulong id, BlockchainEventFilterParams filter, bool poll) { if (poll) { filter.PollingTime = TimeUtils.CurrentTimeMillis(); _filters[id] = filter; } if ((filter.FromBlock is null) || (filter.ToBlock is null)) { return(new JArray()); } return(GetLogs((ulong)filter.FromBlock, (ulong)filter.ToBlock, filter.AddressList, filter.TopicLists)); }
private static void _BenchOneTxInBlock( ITransactionBuilder transactionBuilder, ITransactionSigner transactionSigner, EcdsaKeyPair keyPair ) { var address1 = "0x6bc32575acb8754886dc283c2c8ac54b1bd93195".HexToUInt160(); var address2 = "0xe3c7a20ee19c0107b9121087bcba18eb4dcb8576".HexToUInt160(); var lastTime = TimeUtils.CurrentTimeMillis(); const int tries = 100; for (var i = 0; i < tries; i++) { if (i % 10 == 0) { Console.CursorLeft = 0; Console.Write($"Benchmarking... {100 * i / tries}%"); } var transferTx = transactionBuilder.TransferTransaction(address1, address2, Money.FromDecimal(1.2m)); var signed = transactionSigner.Sign(transferTx, keyPair, true); // var blockWithTxs = new BlockBuilder(latestBlock.Header) // .WithTransactions(new[] {signed}) // .Build(123456); // // var stateHash = blockchainManager.CalcStateHash(blockWithTxs.Block, blockWithTxs.Transactions); // var block = blockWithTxs.Block; // // block.Header.StateHash = stateHash; // block.Hash = block.Header.Keccak(); // block.Multisig = new MultiSig // { // Quorum = 1, // Signatures = // { // new MultiSig.Types.SignatureByValidator // { // Key = keyPair.PublicKey, // Value = blockManager.Sign(block.Header, keyPair) // } // }, // Validators = {keyPair.PublicKey} // }; // // blockchainManager.PersistBlockManually(block, blockWithTxs.Transactions); } var deltaTime = TimeUtils.CurrentTimeMillis() - lastTime; Console.CursorLeft = "Benchmarking... ".Length; Console.WriteLine($"{1000 * tries / deltaTime} RPS"); }
public void Start(RunOptions options) { var stateManager = _container.Resolve <IStateManager>(); const uint T = 100000; const uint batches = 10; IDictionary <UInt256, UInt256> blocks = new Dictionary <UInt256, UInt256>(); var contract = UInt160Utils.Zero; Console.WriteLine("Initial repo version: " + stateManager.LastApprovedSnapshot.Storage.Version); for (var it = 0u; it < batches; ++it) { Console.WriteLine($"commit number {it}"); var snapshot = stateManager.NewSnapshot(); var start = TimeUtils.CurrentTimeMillis(); for (var i = 0u; i < T; ++i) { if (blocks.Count == 0 || Rand() % 3 != 0) { var key = RandUInt256(); var value = RandUInt256(); blocks[key] = value; snapshot.Storage.SetValue(contract, key, value); } else { var key = blocks.Keys.First(); snapshot.Storage.DeleteValue(contract, key, out var wasValue); if (!wasValue.Equals(blocks[key])) { throw new InvalidOperationException("FAIL: value in storage is incorrect"); } blocks.Remove(key); } } stateManager.Approve(); var inMemPhase = TimeUtils.CurrentTimeMillis(); Console.WriteLine($"{T} insertions in {inMemPhase - start}ms"); Console.WriteLine($"{(double) (inMemPhase - start) / T}ms per insertion"); Console.WriteLine($"{(double) T * 1000 / (inMemPhase - start)} insertions per sec"); stateManager.Commit(); var commit = TimeUtils.CurrentTimeMillis(); Console.WriteLine($"Commited {T} operations in {commit - inMemPhase}ms"); } }
public void Start() { _startTime = TimeUtils.CurrentTimeMillis(); while (!Terminated) { MessageEnvelope msg; lock (_queueLock) { while (_queue.IsEmpty && !Terminated) { Monitor.Wait(_queueLock, 1000); if (TimeUtils.CurrentTimeMillis() - _startTime > _alertTime) { Logger.LogWarning($"Protocol {Id} is waiting for _queueLock too long, last message" + $" is [{_lastMessage}]"); } } if (Terminated) { return; } _queue.TryDequeue(out msg); } try { ProcessMessage(msg); MessageCounter.WithLabels($"{Id}".Split(' ')[0], msg.TypeString()).Inc(); if (TimeUtils.CurrentTimeMillis() - _startTime > _alertTime) { Logger.LogWarning($"Protocol {Id} is too long, last message is [{_lastMessage}]"); } } catch (Exception e) { // We should investigate exceptions for each protocol and handle them carefully. Consensus depend // on the messages from honest validators to deliver properly, no matter the delay. If a protocol // stops due to exception while handling message from malicious node, this may interrupt the communication // among honest nodes which may cause the consensus stop working, or worse, giving wrong result. Logger.LogError($"{Id}: exception occured while processing message: {e}"); Terminated = true; break; } } }
private void SetKeyboardListener() { KeyboardWatcher.OnKeyInput += (s, e) => { Console.WriteLine(e.KeyData.Keyname); if (ClickedOnEscBtn(e)) { userCommandsListener.OnExit(); return; } if (ClickedOnUndoBtn(e) && ClickLegal()) { lastTimeClicked = TimeUtils.CurrentTimeMillis(); userCommandsListener.OnUndo(); } if (ClickedOnSkipBtn(e) && ClickLegal()) { lastTimeClicked = TimeUtils.CurrentTimeMillis(); userCommandsListener.OnUserSkipped(); } if (ClickedOnPauseBtn(e) && ClickLegal()) { lastTimeClicked = TimeUtils.CurrentTimeMillis(); //if running if (isAllowedToReadPixel) { userCommandsListener.OnUserPaused(true); isAllowedToReadPixel = false; } else { //if paused isAllowedToReadPixel = true; userCommandsListener.OnUserPaused(false); LookForAColor().Start(); } } }; }
void SetNotification_GAME(string MesajTitle, string MesajIcerigi, string GetMessageDTOJSON1) { int requestID = (int)TimeUtils.CurrentTimeMillis(); var resultIntent = new Intent(this, typeof(ArkadasOyunSec_Gelen)); resultIntent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop | ActivityFlags.NewTask); resultIntent.PutExtra("GetMessageDTOJSON", GetMessageDTOJSON1); var stackBuilder = Android.App.TaskStackBuilder.Create(this); stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(ArkadasOyunSec_Gelen))); stackBuilder.AddNextIntent(resultIntent); // Create the PendingIntent with the back stack: var resultPendingIntent = stackBuilder.GetPendingIntent(requestID, PendingIntentFlags.UpdateCurrent | PendingIntentFlags.OneShot); // Build the notification: var builder = new NotificationCompat.Builder(this, CHANNEL_ID) .SetAutoCancel(true) // Dismiss the notification from the notification area when the user clicks on it .SetContentIntent(resultPendingIntent) // Start up this activity when the user clicks the intent. .SetContentTitle(MesajTitle) // Set the title .SetNumber(30) // Display the count in the Content Info .SetSmallIcon(Resource.Mipmap.ic_launcher) //.SetVibrate(new long[] { 0, 500, 1000 }) .SetPriority(NotificationCompat.PriorityHigh) //.SetSound(uri) .SetContentText(MesajIcerigi); // the message to display. //// Instantiate the Big Text style: //NotificationCompat.BigTextStyle textStyle = new NotificationCompat.BigTextStyle(); //// Fill it with text: //textStyle.BigText(MesajIcerigi); //// Set the summary text: //textStyle.SetSummaryText(MesajIcerigi); //// Plug this style into the builder: //builder.SetStyle(textStyle); var notificationManager = NotificationManagerCompat.From(this); var newid = NOTIFICATION_ID++; notificationManager.Notify(requestID, builder.Build()); }
public Block <T> newBlock() { int count = chain.Count(); string previousHash = "root"; if (count > 0) { previousHash = blockChainHash(); } Block <T> block = new Block <T>(); block.setTimeStamp(TimeUtils.CurrentTimeMillis()); block.setIndex(count); block.setPreviousHash(previousHash); // chain.add(block); return(block); }
public void RegisterMeasurement(long delta) { var timestamp = TimeUtils.CurrentTimeMillis(); if (timestamp >= LastTimeReported + Interval.TotalMilliseconds) { if (LastTimeReported != 0) { _callback.Invoke((float)Sum * 1000 / (timestamp - LastTimeReported), Count); } Count = 0; Sum = 0; LastTimeReported = timestamp; } Count += 1; Sum += delta; }
public void Run() { init(); long lastTime = TimeUtils.GetNanoseconds(); double nsPerTick = 1000000000D / 60D; int ticks = 0; long lastTimer = TimeUtils.CurrentTimeMillis(); double delta = 0; while (running) { if (!paused) { long now = TimeUtils.GetNanoseconds(); delta += (now - lastTime) / nsPerTick; lastTime = now; while (delta >= 1) { ticks++; tick(); delta -= 1; } Thread.Sleep(2); //Console.WriteLine(ticks + " GameCore ticks"); if (TimeUtils.CurrentTimeMillis() - lastTimer >= 1000) { lastTimer += 1000; Console.WriteLine(ticks + " GameCore ticks"); ticks = 0; } } } stop(); }
private void PingWorker() { while (_running) { try { var reply = _networkManager.MessageFactory.PingReply( TimeUtils.CurrentTimeMillis(), _stateManager.LastApprovedSnapshot.Blocks.GetTotalBlockHeight() ); _networkBroadcaster.Broadcast(reply); Logger.LogTrace($"Broadcasted our height: {reply.PingReply.BlockHeight}"); } catch (Exception e) { Logger.LogError($"Error in ping worker: {e}"); } Thread.Sleep(TimeSpan.FromMilliseconds(3_000)); } }
public void Test_AesGcmEncryptDecryptRoundTrip() { var key = Crypto.GenerateRandomBytes(32); var baseText = "0xf86d808504a817c800832dc6c0948e7b7262e0fa4616566591d51f998f16a79fb547880de0b6b3a76400008025a0115105d96a43f41a5ea562bb3e591cbfa431a8cdae9c3030457adca2cb854f78a012fb41922c53c73473563003667ed8e783359c91d95b42301e1955d530b1ca33" .HexToBytes(); const int n = 1000; var startTs = TimeUtils.CurrentTimeMillis(); for (var it = 0; it < n; ++it) { var plaintext = baseText.Concat(it.ToBytes()).ToArray(); var cipher = Crypto.AesGcmEncrypt(key, plaintext); var decrypted = Crypto.AesGcmDecrypt(key, cipher); Assert.IsTrue(plaintext.SequenceEqual(decrypted)); } var endTs = TimeUtils.CurrentTimeMillis(); Console.WriteLine($"{n} encrypt/decrypt: {endTs - startTs}ms, avg = {(double) (endTs - startTs) / n}"); }
public JArray SyncPendingTransaction(ulong id, BlockchainEventFilterParams filter, bool poll) { var results = new JArray(); var pendingTx = filter.PendingTransactionList; var poolTx = _transactionPool.Transactions.Keys.ToArray(); Array.Sort(poolTx, (x, y) => UInt256Utils.Compare(x, y)); // comparing two sorted list listA and listB in O(listA.Count + listB.Count) int iter = 0; foreach (var txHash in poolTx) { if (txHash is null) { continue; } while (iter < pendingTx.Count && UInt256Utils.Compare(txHash, pendingTx[iter]) > 0) { iter++; } if (iter == pendingTx.Count || UInt256Utils.Compare(txHash, pendingTx[iter]) < 0) { results.Add(Web3DataFormatUtils.Web3Data(txHash)); } } if (poll) { // Pending transaction list in filter must be sorted for further optimization filter.PendingTransactionList = new List <UInt256>(poolTx.ToList()); filter.PollingTime = TimeUtils.CurrentTimeMillis(); _filters[id] = filter; } return(results); }
public JArray SyncBlocks(ulong id, BlockchainEventFilterParams filter, bool poll) { var results = new JArray(); var lastSyncedBlock = filter.LastSyncedBlock; var highestBlock = _stateManager.LastApprovedSnapshot.Blocks.GetTotalBlockHeight(); for (var i = lastSyncedBlock; i < highestBlock; i++) { var block = _blockManager.GetByHeight(i); if (block is null) { continue; } results.Add(Web3DataFormatUtils.Web3Data(block !.Hash)); } if (poll) { filter.LastSyncedBlock = highestBlock; filter.PollingTime = TimeUtils.CurrentTimeMillis(); _filters[id] = filter; } return(results); }
public override double Evaluate(Reasoner reasoner, ITerm[] args) { return(TimeUtils.CurrentTimeMillis()); }
private bool ClickLegal() { return(TimeUtils.CurrentTimeMillis() - lastTimeClicked > CLICK_SAFETY_WAIT_MILLIS); }
private void BlockSyncWorker() { var rnd = new Random(); Logger.LogDebug("Starting block synchronization worker"); while (_running) { try { var myHeight = _blockManager.GetHeight(); if (myHeight > _networkManager.LocalNode.BlockHeight) { _networkManager.LocalNode.BlockHeight = myHeight; } if (_peerHeights.Count == 0) { Logger.LogWarning("Peer height map is empty, nobody responds to pings?"); Thread.Sleep(TimeSpan.FromMilliseconds(1_000)); continue; } var maxHeight = _peerHeights.Values.Max(); if (myHeight >= maxHeight) { Logger.LogTrace($"Nothing to do: my height is {myHeight} and peers are at {maxHeight}"); Thread.Sleep(TimeSpan.FromMilliseconds(1_000)); continue; } const int maxPeersToAsk = 1; const int maxBlocksToRequest = 10; var peers = _peerHeights .Where(entry => entry.Value >= maxHeight) .Select(entry => entry.Key) .OrderBy(_ => rnd.Next()) .Take(maxPeersToAsk) .ToArray(); var leftBound = myHeight + 1; var rightBound = Math.Min(maxHeight, myHeight + maxBlocksToRequest); Logger.LogTrace($"Sending query for blocks [{leftBound}; {rightBound}] to {peers.Length} peers"); foreach (var peer in peers) { _networkManager.SendTo( peer, _networkManager.MessageFactory.SyncBlocksRequest(leftBound, rightBound) ); } var waitStart = TimeUtils.CurrentTimeMillis(); while (true) { lock (_peerHasBlocks) { Monitor.Wait(_peerHasBlocks, TimeSpan.FromMilliseconds(1_000)); } if (TimeUtils.CurrentTimeMillis() - waitStart > 5_000) { break; } } } catch (Exception e) { Logger.LogError($"Error in block synchronizer: {e}"); Thread.Sleep(1_000); } } }
public OperatingError Execute(Block block, IEnumerable <TransactionReceipt> transactionsEnumerable, bool checkStateHash, bool commit) { // No two threads can be in the safeContext at the same time. // Always execute / emulate inside safeContext. this makes sure that no two threads // concurrently writes to the chain. var error = _stateManager.SafeContext(() => { var transactions = transactionsEnumerable.ToList(); var snapshotBefore = _stateManager.LastApprovedSnapshot; var startTime = TimeUtils.CurrentTimeMillis(); var operatingError = _Execute( block, transactions, out _, out _, false, out var gasUsed, out var totalFee ); if (operatingError != OperatingError.Ok) { Logger.LogError($"Error occured while executing block: {operatingError}"); return(operatingError); } if (checkStateHash && !_stateManager.LastApprovedSnapshot.StateHash.Equals(block.Header.StateHash)) { Logger.LogError( $"Cannot execute block {block.Hash.ToHex()} " + $"with stateHash={block.Header.StateHash.ToHex()} specified in header," + $"since computed state hash is {_stateManager.LastApprovedSnapshot.StateHash.ToHex()}, " + $"stack trace is {new System.Diagnostics.StackTrace()}"); _stateManager.RollbackTo(snapshotBefore); return(OperatingError.InvalidStateHash); } /* flush changes to database */ if (!commit) { return(OperatingError.Ok); } // TODO: this is hack to avoid concurrency issues, one more save will be done in BlockPersisted() call _snapshotIndexRepository.SaveSnapshotForBlock(block.Header.Index, _stateManager.LastApprovedSnapshot); if (block.Header.Index > 0) { var blockTime = block.Timestamp - _stateManager.LastApprovedSnapshot.Blocks.GetBlockByHeight(block.Header.Index - 1) ! .Timestamp; BlockTime.Observe(blockTime / 1000.0); BlockHeight.Set(block.Header.Index); BlockSize.Observe(block.CalculateSize()); foreach (var transactionReceipt in transactions) { TxSize.Observe(transactionReceipt.Transaction.RlpWithSignature(transactionReceipt.Signature, HardforkHeights.IsHardfork_9Active(block.Header.Index)).Count()); } TxInBlock.Observe(block.TransactionHashes.Count); Logger.LogInformation( $"New block {block.Header.Index} with hash {block.Hash.ToHex()}, " + $"txs {block.TransactionHashes.Count} in {TimeUtils.CurrentTimeMillis() - startTime}ms, " + $"gas used {gasUsed}, fee {totalFee}. " + $"Since last block: {blockTime} ms" ); } _stateManager.Commit(); BlockPersisted(block); return(OperatingError.Ok); }); return(error); }
public void Start(RunOptions options) { var stateManager = _container.Resolve <IStateManager>(); var hash = UInt160Utils.Zero; var contract = new Contract ( hash, "0061736d0100000001240760027f7f017f60037f7f7f017f60037f7f7f0060027f7f006000017f60017f0060000002ae010903656e760d6765745f63616c6c5f73697a65000403656e760f636f70795f63616c6c5f76616c7565000203656e760b73797374656d5f68616c74000503656e761063727970746f5f6b656363616b323536000203656e760b77726974655f6576656e74000203656e760c6c6f61645f73746f72616765000303656e760a7365745f72657475726e000303656e760a6765745f73656e646572000503656e760c736176655f73746f726167650003031110060005010505000000020503050203020405017001080805030100020608017f01419089040b071202066d656d6f727902000573746172740009090d010041010b070a0c0f101112140a806610e61e03037f047e027f23808080800041f0016b22002480808080000240024002401080808080004104490d0041004104200041b0016a1081808080000240024002400240024002400240024020002800b00122014185fafb1e4a0d00024020014197acb4e87d4a0d0020014189bc9d9d7b460d04200141a98bf0dc7b460d03200141a4af89be7d470d0a418180808000108b808080000c0b0b200141016a220241014d0d0720014198acb4e87d460d01200141a3f0caeb7d470d09418280808000108d808080000c0a0b024002400240200141dcc5b5f7034a0d0020014186fafb1e460d01200141c082bfc801460d08200141f0c08a8c03470d0b02401080808080004118460d0041061082808080000b41044118200041206a1081808080002000290320210320002903282104200020002802303602682000200437036020002003370358410029038088808000210341002903888880800021044100290390888080002105200041002903988880800022064238883c00cf01200020064230883c00ce01200020064228883c00cd01200020064220883c00cc01200020064218883c00cb01200020064210883c00ca01200020064208883c00c901200020063c00c801200020054238883c00c701200020054230883c00c601200020054228883c00c501200020054220883c00c401200020054218883c00c301200020054210883c00c201200020054208883c00c101200020053c00c001200020044238883c00bf01200020044230883c00be01200020044228883c00bd01200020044220883c00bc01200020044218883c00bb01200020044210883c00ba01200020044208883c00b901200020043c00b801200020034238883c00b701200020034230883c00b601200020034228883c00b501200020034220883c00b401200020034218883c00b301200020034210883c00b201200020034208883c00b101200020033c00b001200041e0016a2000280268360200200041d8016a2000290360370300200020002903583703d001200041b0016a413420004190016a10838080800020004190016a20004190016a41201084808080002000290390012103200029039801210420002903a0012105200020002903a8013703a801200020053703a0012000200437039801200020033703900120004190016a200041b0016a10858080800020002903b001210320002903b801210420002903c0012105200020002903c80122064238883c00cf01200020064230883c00ce01200020064228883c00cd01200020064220883c00cc01200020064218883c00cb01200020064210883c00ca01200020064208883c00c901200020063c00c801200020054238883c00c701200020054230883c00c601200020054228883c00c501200020054220883c00c401200020054218883c00c301200020054210883c00c201200020054208883c00c101200020053c00c001200020044238883c00bf01200020044230883c00be01200020044228883c00bd01200020044220883c00bc01200020044218883c00bb01200020044210883c00ba01200020044208883c00b901200020043c00b801200020034238883c00b701200020034230883c00b601200020034228883c00b501200020034220883c00b401200020034218883c00b301200020034210883c00b201200020034208883c00b101200020033c00b001200041b0016a41201086808080000c0c0b0240200141b8a0cd8c054a0d00200141ddc5b5f703460d0720014195b1ef8c04460d020c0b0b200141b9a0cd8c05460d05200141b1f894bf06470d0a200041123a00b001200041b0016a41011086808080000c0b0b410021020240024041002d00a8888080004101710d00410041003602a0888080003f002101410041013602a8888080004100200141016a3602a4888080000c010b41002802a0888080002202418a807c6a2201418080046d2107200141808004480d00200740001a410041002802a48880800020076a3602a48880800041002802a08880800021020b41002002410a6a418080046f22013602a08880800020004280808080a0013702b401200020023602b00141002d00a8888080004101712107024002402002450d0020070d0041002101410041003602a0888080003f002102410041013602a8888080004100200241016a3602a4888080000c010b024020070d0041002101410041003602a0888080003f002102410041013602a8888080004100200241016a3602a4888080000c010b20014187807c6a2202418080046d2107200241808004480d00200740001a410041002802a48880800020076a3602a48880800041002802a08880800021010b4100200141076a418080046f3602a088808000200141ee003a0006200141efd2013b0004200020013602b001200141c2d2d19b0636000020004287808080f0003702b401200041b0016a108e808080000c0a0b410021020240024041002d00a8888080004101710d00410041003602a0888080003f002101410041013602a8888080004100200141016a3602a4888080000c010b41002802a0888080002202418a807c6a2201418080046d2107200141808004480d00200740001a410041002802a48880800020076a3602a48880800041002802a08880800021020b41002002410a6a418080046f22013602a08880800020004280808080a0013702b401200020023602b00141002d00a8888080004101712107024002402002450d0020070d0041002101410041003602a0888080003f002102410041013602a8888080004100200241016a3602a4888080000c010b024020070d0041002101410041003602a0888080003f002102410041013602a8888080004100200241016a3602a4888080000c010b20014183807c6a2202418080046d2107200241808004480d00200740001a410041002802a48880800020076a3602a48880800041002802a08880800021010b4100200141036a418080046f3602a088808000200020013602b001200141c3003a0002200141c2a8013b000020004283808080303702b401200041b0016a108e808080000c090b200041002903b08880800037039001200041002903b88880800037039801200041002903c0888080003703a001200041002903c8888080003703a80120004190016a200041b0016a10858080800020002903b001210320002903b801210420002903c0012105200020002903c80122064238883c003f200020064230883c003e200020064228883c003d200020064220883c003c200020064218883c003b200020064210883c003a200020064208883c0039200020063c0038200020054238883c0037200020054230883c0036200020054228883c0035200020054220883c0034200020054218883c0033200020054210883c0032200020054208883c0031200020053c0030200020044238883c002f200020044230883c002e200020044228883c002d200020044220883c002c200020044218883c002b200020044210883c002a200020044208883c0029200020043c0028200020034238883c0027200020034230883c0026200020034228883c0025200020034220883c0024200020034218883c0023200020034210883c0022200020034208883c0021200020033c0020200041206a41201086808080000c080b418380808000108b808080000c070b418480808000108b808080000c060b418580808000108b808080000c050b4186808080001093808080000c040b4187808080001095808080000c030b024020020e020100010b02401080808080004124460d0041061082808080000b41044124200041206a10818080800020002903382103200029033021042000290328210520002903202106200041b0016a108780808000200020002d00b0013a0078200020002800b101360079200020002900b50137007d200020002800bd0136008501200020002f00c1013b008901200020002d00c3013a008b0120002006370358200020053703602000200437036820002003370370200041186a200028028801360200200041106a20002903800137030020002000290378370308200041086a200041d8006a109480808000200041b0016a108780808000200020002d00b00122023a0040200020002800b101360041200020002900b501370045200020002800bd0136004d200020002f00c1013b0051200020002d00c3013a005341002101200041002903d08880800037039001200041002903d88880800037039801200041002903e0888080003703a001200041002903e8888080003703a8010240024041002d00a8888080004101710d00410041003602a0888080003f002107410041013602a8888080004100200741016a3602a4888080000c010b41002802a088808000220141a0807c6a2207418080046d2108200741808004480d00200840001a410041002802a48880800020086a3602a48880800041002802a08880800021010b4100200141206a418080046f3602a088808000200120023a0000200120002d00413a0001200120002d00423a0002200120002d00433a0003200120002d00443a0004200120002d00453a0005200120002d00463a0006200120002d00473a0007200120002d00483a0008200120002d00493a0009200120002d004a3a000a200120002d004b3a000b200120002d004c3a000c200120002d004d3a000d200120002d004e3a000e200120002d004f3a000f200120002d00503a0010200120002d00513a0011200120002d00523a0012200120002d00533a001320004190016a2001108880808000200041c8016a4200370300200041c0016a4200370300200041b8016a4200370300200042003703b0010240024002400240200029039001220342017c22042003540d00200020043703b00120002903980121030c010b200020043703b001200042013703b801200029039801220442017c220320045a0d00200020033703b801200042013703c00120002903a001220442017c220320045a0d01200020033703c001200042013703c80120002903a80142017c21030c020b200020033703b80120002903a00121030b200020033703c00120002903a80121030b20004190016a41186a200337030020004190016a41086a200041b0016a41086a220229030037030020004190016a41106a200041b0016a41106a2207290300370300200020002903b0013703900102402001450d0041002d00a8888080004101710d00410041003602a0888080003f002101410041013602a8888080004100200141016a3602a4888080000b200041b0016a41186a42003703002007420037030020024200370300200042003703b0012000419ed6f2d67b36029001200041b0016a20004190016a41041084808080000c020b41051082808080000c010b41051082808080000b200041f0016a2480808080000b900702017f077e2380808080004190016b2202248080808000200241f0006a108780808000200241246a20022903783702002002412c6a20022802800136020020022903702103200241086a41106a200041106a280000360200200241086a41086a200041086a2900003703002002200337021c20022000290000370308200241002903f088808000370350200241002903f88880800037035820024100290380898080003703602002410029038889808000370368200241f0006a200241d0006a200241086a109880808000200229037021032002290378210420022903800121052002200229038801370368200220053703602002200437035820022003370350200241d0006a200241f0006a1085808080002002200229037022033703302002200229037822063703382002200229038001220537034020022002290388012204370348200421072001290318220821090240024020042008520d0020052107200520012903102209520d0020062107200620012903082209520d0020032107200320012903002209520d00200421080c010b200720095a0d00410410828080800020012903182108200229034821042002290340210520022903382106200229033021030b20042008427f857c20052001290310427f857c220820055420062001290308427f857c2204200654200320012903002207427f857c2209200354220120042001ad7c2204507172220120082001ad7c2206507172ad7c21084200210502400240200320077d22032009540d00200621070c010b0240200442017c22072004540d0020072104200621070c010b200642017c2207200654ad2105420021040b2002200737034020022004370338200220033703302002200820057c370348200241f0006a108780808000200241246a20022903783702002002412c6a20022802800136020020022903702103200241086a41106a200041106a280000360200200241086a41086a200041086a2900003703002002200337021c20022000290000370308200241002903f088808000370350200241002903f88880800037035820024100290380898080003703602002410029038889808000370368200241f0006a200241d0006a200241086a1098808080002002290370210320022903782104200229038001210520022002290388013703880120022005370380012002200437037820022003370370200241f0006a200241306a10978080800020024190016a24808080800041010bea0102027f067e2380808080004190016b220124808080800002401080808080004138460d0041061082808080000b41044138200141206a108180808000200141186a20012802302202360200200141106a2001290328220337030020012001290320220437030820012903342105200129033c210620012903442107200129034c21082001200437037820012002360288012001200337038001200120083703702001200737036820012006370360200120053703582001200141086a200141d8006a2000118080808000003a008f012001418f016a410110868080800020014190016a2480808080000ba11202157f0e7e23808080800041d0016b2203248080808000200341c0006a10878080800020032d0040210420032d0041210520032d0042210620032d0043210720032d0044210820032d0045210920032d0046210a20032d0047210b20032d0048210c20032d0049210d20032d004a210e20032d004b210f20032d004c211020032d004d211120032d004e211220032d004f211320032d0050211420032d0051211520032d00522116200320032d005322173a0053200320163a0052200320153a0051200320143a0050200320133a004f200320123a004e200320113a004d200320103a004c2003200f3a004b2003200e3a004a2003200d3a00492003200c3a00482003200b3a00472003200a3a0046200320093a0045200320083a0044200320073a0043200320063a0042200320053a0041200320043a0040200341e4006a200041106a280000360200200341dc006a200041086a29000037020020032000290000370254200341002903f08880800037039001200341002903f8888080003703980120034100290380898080003703a00120034100290388898080003703a801200341b0016a20034190016a200341c0006a10988080800020032903b001211820032903b801211920032903c001211a200320032903c8013703a8012003201a3703a0012003201937039801200320183703900120034190016a200341b0016a108580808000200320032903b001370370200320032903b801370378200320032903c00137038001200320032903c8013703880120034100290380888080003703b00120034100290388888080003703b80120034100290390888080003703c00120034100290398888080003703c801200341c0006a200341b0016a200010968080800020032903402118200329034821192003290350211a200320032903583703582003201a3703502003201937034820032018370340200341c0006a200341b0016a108580808000200320032903b001370320200320032903b801370328200320032903c001370330200320032903c801221937033820034100290380888080003703b00120034100290388888080003703b80120034100290390888080003703c00120034100290398888080003703c801200341c0006a200341b0016a2001109680808000200329034021182003290348211a2003290350211b200320032903583703582003201b3703502003201a37034820032018370340200341c0006a200341b0016a108580808000200320032903b001370300200320032903b801370308200320032903c001370310200320032903c801370318024002400240200329038801221c20022903182218510d00201c211a2018211b0c010b200329038001221a2002290310221b520d002003290378221a2002290308221b520d002003290370221a2002290300221b520d00201c21180c010b201a201b5a0d00410410828080800020022903182118200329033821190b2018211a0240024020192018520d00200329033022192002290310221a520d00200329032822192002290308221a520d00200329032022192002290300221a510d010b2019201a5a0d004104108280808000200229031821180b2003290388012018427f85221d7c20032903800122192002290310221e427f85221f7c221c2019542003290378221920022903082220427f8522217c221a2019542003290370221b20022903002219427f8522227c2223201b542202201a2002ad7c221a5071722202201c2002ad7c2224507172ad7c21254200211c02400240201b20197d221b20235a0d000240201a42017c2223201a540d002023211a0c010b202442017c2223202454ad21244200211a0c010b20242123420021240b20032023370380012003201a3703782003201b3703702003202520247c370388012003290338201d7c2003290330221a201f7c2224201a542003290328221a20217c221d201a542003290320221b20227c221f201b542202201d2002ad7c221a507172220220242002ad7c2224507172ad7c211d02400240201b20197d221b201f540d002024211f0c010b0240201a42017c221f201a540d00201f211a2024211f0c010b202442017c221f202454ad211c4200211a0b2003201f3703302003201a3703282003201b3703202003201d201c7c3703382003290308211a20032003290300221b20197c22193703002003201a20207c221c2019201b542202ad7c221937030820032003290310221b201e7c2224201c201a54200220195071722202ad7c22193703102003200329031820187c2024201b5420022019507172ad7c370318200320173a0053200320163a0052200320153a0051200320143a0050200320133a004f200320123a004e200320113a004d200320103a004c2003200f3a004b2003200e3a004a2003200d3a00492003200c3a00482003200b3a00472003200a3a0046200320093a0045200320083a0044200320073a0043200320063a0042200320053a0041200320043a0040200341e4006a200041106a280000360200200341dc006a200041086a29000037020020032000290000370254200341002903f08880800037039001200341002903f8888080003703980120034100290380898080003703a00120034100290388898080003703a801200341b0016a20034190016a200341c0006a10988080800020032903b001211820032903b801211920032903c001211a200320032903c8013703c8012003201a3703c001200320193703b801200320183703b001200341b0016a200341f0006a10978080800020034100290380888080003703b00120034100290388888080003703b80120034100290390888080003703c00120034100290398888080003703c801200341c0006a200341b0016a200010968080800020032903402118200329034821192003290350211a200320032903583703582003201a3703502003201937034820032018370340200341c0006a200341206a10978080800020034100290380888080003703b00120034100290388888080003703b80120034100290390888080003703c00120034100290398888080003703c801200341c0006a200341b0016a200110968080800020032903402118200329034821192003290350211a200320032903583703582003201a3703502003201937034820032018370340200341c0006a2003109780808000200341d0016a24808080800041010bbf0204017f017e027f077e23808080800041d0016b2201248080808000024010808080800041cc00460d0041061082808080000b410441cc00200141306a108180808000200141186a41086a20012903382202370300200141186a41106a20012802402203360200200141106a20012802542204360200200141086a200129024c220537030020012001290330220637031820012001290244220737030020012903582108200129036021092001290368210a2001290370210b200120033602c801200120023703c001200120063703b801200120053703a801200120073703a001200120043602b0012001200b370398012001200a37039001200120093703880120012008370380012001200141186a200120014180016a2000118180808000003a00cf01200141cf016a4101108680808000200141d0016a2480808080000b830301057f20002802042101410021020240024041002d00a888808000410171450d0041002802a08880800021020c010b410041003602a0888080003f002103410041013602a8888080004100200341016a3602a4888080000b200141046a2104200120026a4184807c6a2203418080046d21050240200341808004480d00200540001a410041002802a48880800020056a3602a4888080002000280204210141002802a08880800021020b410021034100200220046a418080046f3602a088808000200220014118763a0003200220014110763a0002200220014108763a0001200220013a00000240024002402000280204450d00034002402003417f4a0d0041021082808080000b200220036a41046a200028020020036a2d00003a0000200341016a22032000280204490d000b200220041086808080000c010b200220041086808080002002450d010b41002d00a8888080004101710d00410041003602a0888080003f002103410041013602a8888080004100200341016a3602a4888080000b0bd80903017f077e017f23808080800041a0016b220224808080800020024180016a108780808000200220022d0080013a00482002200228008101360049200220022900850137004d2002200228008d01360055200220022f0091013b0059200220022d0093013a005b200241002903808880800037036020024100290388888080003703682002410029039088808000370370200241002903988880800037037820024180016a200241e0006a200241c8006a10968080800020022903800121032002290388012104200229039001210520022002290398013703980120022005370390012002200437038801200220033703800120024180016a200241e0006a108580808000200220022903602203370328200220022903682206370330200220022903702205370338200220022903782204370340200421072001290318220821090240024020042008520d0020052107200520012903102209520d0020062107200620012903082209520d0020032107200320012903002209520d00200421080c010b200720095a0d00410410828080800020012903182108200229034021042002290338210520022903302106200229032821030b20042008427f857c20052001290310427f857c220820055420062001290308427f857c2204200654200320012903002207427f857c2209200354220a2004200aad7c2204507172220a2008200aad7c2206507172ad7c21084200210502400240200320077d22032009540d00200621070c010b0240200442017c22072004540d0020072104200621070c010b200642017c2207200654ad2105420021040b2002200737033820022004370330200220033703282002200820057c370340200241002903808880800037036020024100290388888080003703682002410029039088808000370370200241002903988880800037037820024180016a200241e0006a200241c8006a10968080800020022903800121032002290388012104200229039001210520022002290398013703980120022005370390012002200437038801200220033703800120024180016a200241286a109780808000200241002903808880800037036020024100290388888080003703682002410029039088808000370370200241002903988880800037037820024180016a200241e0006a200010968080800020022903800121032002290388012104200229039001210520022002290398013703980120022005370390012002200437038801200220033703800120024180016a200241e0006a1085808080002002290378210420022903702105200229036821062001290308210320022001290300220820022903607c22073703082002200320067c22062007200854220aad7c220837031020022005200129031022077c22052006200354200a2008507172220aad7c22033703182002200420012903187c2005200754200a2003507172ad7c370320200241002903808880800037036020024100290388888080003703682002410029039088808000370370200241002903988880800037037820024180016a200241e0006a200010968080800020022903800121032002290388012104200229039001210520022002290398013703980120022005370390012002200437038801200220033703800120024180016a200241086a109780808000200241a0016a24808080800041010b9a0202017f037e23808080800041f0006b2202248080808000200241d0006a108780808000200241246a20022903583702002002412c6a200228026036020020022903502103200241086a41106a200041106a280000360200200241086a41086a200041086a2900003703002002200337021c20022000290000370308200241002903f088808000370330200241002903f88880800037033820024100290380898080003703402002410029038889808000370348200241d0006a200241306a200241086a10988080800020022903502103200229035821042002290360210520022002290368370368200220053703602002200437035820022003370350200241d0006a2001109780808000200241f0006a24808080800041010ba00505037f017e047f057e017f2380808080004190016b2202248080808000200241f0006a108780808000200241246a220320022903783702002002412c6a220420022802800136020020022903702105200241086a41106a2206200041106a2207280000360200200241086a41086a2208200041086a22092900003703002002200537021c20022000290000370308200241002903f088808000370350200241002903f88880800037035820024100290380898080003703602002410029038889808000370368200241f0006a200241d0006a200241086a109880808000200229037021052002290378210a200229038001210b20022002290388013703682002200b3703602002200a37035820022005370350200241d0006a200241f0006a108580808000200229038801210a200229038001210b2002290378210c2001290308210520022001290300220d20022903707c220e37033020022005200c7c220c200e200d54220fad7c220d3703382002200b2001290310220e7c220b200c200554200f200d507172220fad7c22053703402002200a20012903187c200b200e54200f2005507172ad7c370348200241f0006a1087808080002003200229037837020020042002280280013602002002290370210520062007280000360200200820092900003703002002200537021c20022000290000370308200241002903f088808000370350200241002903f88880800037035820024100290380898080003703602002410029038889808000370368200241f0006a200241d0006a200241086a109880808000200229037021052002290378210a200229038001210b2002200229038801370388012002200b370380012002200a37037820022005370370200241f0006a200241306a10978080800020024190016a24808080800041010bb90202017f037e23808080800041f0006b2203248080808000200341086a41106a200241106a280000360200200341086a41086a200241086a290000370300200341246a200141086a2900003702002003412c6a200141106a280000360200200320022900003703082003200129000037021c200341002903f088808000370330200341002903f88880800037033820034100290380898080003703402003410029038889808000370348200341d0006a200341306a200341086a10988080800020032903502104200329035821052003290360210620032003290368370348200320063703402003200537033820032004370330200341306a200341d0006a10858080800020002003290350370300200020032903583703082000200329036037031020002003290368370318200341f0006a2480808080000bf20202027f027e23808080800041d0016b22012480808080000240108080808000412c460d0041061082808080000b4104412c200141d0006a108180808000200128026021022001290358210320012903502104200120012d00643a003820012001290065370039200120012d006d3a00412001200128016e360142200120012f01723b0146200120012d00743a0048200120012d00753a0049200120012d00763a004a200120012d00773a004b2001200437037820012003370380012001200236028801200141206a41106a2002360200200141206a41086a200337030020012004370320200141086a41106a2001280248360200200141086a41086a20012903403703002001200129033837030820014190016a200141206a200141086a20001182808080000020012001290390013703b00120012001290398013703b801200120012903a0013703c001200120012903a8013703c801200141b0016a4120108680808000200141d0016a2480808080000bd50703017f067e017f23808080800041c0016b2202248080808000200241002903808880800037038001200241002903888880800037038801200241002903908880800037039001200241002903988880800037039801200241a0016a20024180016a200010968080800020022903a001210320022903a801210420022903b0012105200220022903b8013703b801200220053703b001200220043703a801200220033703a001200241a0016a20024180016a108580808000200229039801210420022903900121052002290388012106200129030821032002200129030022072002290380017c22083703602002200320067c220620082007542209ad7c220737036820022005200129031022087c22052006200354200920075071722209ad7c22033703702002200420012903187c200520085420092003507172ad7c370378200241d8006a4200370300200241d0006a4200370300200241c8006a420037030020024200370340200241002903808880800037038001200241002903888880800037038801200241002903908880800037039001200241002903988880800037039801200241a0016a20024180016a200010968080800020022903a001210320022903a801210420022903b0012105200220022903b8013703b801200220053703b001200220043703a801200220033703a001200241a0016a200241e0006a109780808000200241c0006a200241e0006a4120108480808000200241002903b0888080003703a001200241002903b8888080003703a801200241002903c0888080003703b001200241002903c8888080003703b801200241a0016a20024180016a108580808000200229039801210420022903900121052002290388012106200129030821032002200129030022072002290380017c22083703202002200320067c220620082007542200ad7c220737032820022005200129031022087c22052006200354200020075071722200ad7c22033703302002200420012903187c200520085420002003507172ad7c370338200241002903b0888080003703a001200241002903b8888080003703a801200241002903c0888080003703b001200241002903c8888080003703b801200241a0016a200241206a109780808000200241002903b0888080003703a001200241002903b8888080003703a801200241002903c0888080003703b001200241002903c8888080003703b801200241a0016a20024180016a1085808080002002200229038001370300200220022903880137030820022002290390013703102002200229039801370318200241c0006a20024120108480808000200241c0016a2480808080000bd60102027f067e2380808080004190016b220124808080800002401080808080004138460d0041061082808080000b41044138200141206a108180808000200141186a20012802302202360200200141106a2001290328220337030020012001290320220437030820012903342105200129033c210620012903442107200129034c2108200120043703782001200236028801200120033703800120012008370370200120073703682001200637036020012005370358200141086a200141d8006a20001183808080000020014190016a2480808080000bc90101017f23808080800041e0006b2203248080808000200320012903003703202003200129030837032820032001290310370330200320012903183703382003200229000037034020032002280008360248200320022f000c3b014c200320022d000e3a004e200320022d000f3a004f20032002280010360250200341206a4134200310838080800020032003412010848080800020002003290318370318200020032903103703102000200329030837030820002003290300370300200341e0006a2480808080000be00202037f027e410021020240024041002d00a8888080004101710d00410041003602a0888080003f002103410041013602a8888080004100200341016a3602a4888080000c010b41002802a088808000220241a0807c6a2203418080046d2104200341808004480d00200440001a410041002802a48880800020046a3602a48880800041002802a08880800021020b4100200241206a418080046f3602a088808000200220012903003700002002200129030837000820022001290310370010200220012903183700182000200210888080800020002000290300220542017c22063703002000200029030820062005542201ad7c2205370308200020002903102001200550712201ad7c220537031020002000290318200120055071ad7c37031802402002450d0041002d00a8888080004101710d00410041003602a0888080003f002100410041013602a8888080004100200041016a3602a4888080000b0b8b0201017f23808080800041f0006b2203248080808000200320012903003703202003200129030837032820032001290310370330200320012903183703382003200229001437034020032002411c6a2800003602482003200241206a2f00003b014c2003200241226a2d00003a004e2003200241236a2d00003a004f2003200241246a280000360250200320022d00003a0054200320022900013700552003200229000937005d200320022f00113b0065200320022d00133a0067200341206a41c800200310838080800020032003412010848080800020002003290318370318200020032903103703102000200329030837030820002003290300370300200341f0006a2480808080000b0b990102004180080b2c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041b0080b6001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000ea10046e616d6501e21019000d6765745f63616c6c5f73697a65010f636f70795f63616c6c5f76616c7565020b73797374656d5f68616c74031063727970746f5f6b656363616b323536040b77726974655f6576656e74050c6c6f61645f73746f72616765060a7365745f72657475726e070a6765745f73656e646572080c736176655f73746f72616765090573746172740a4d6465637265617365416c6c6f77616e6365286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e74323536290bac01766f6964206c61636861696e3a3a696e766f6b655f636f6e74726163745f6d6574686f643c626f6f6c2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e743235363e28626f6f6c20282a29286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e7432353629290c727472616e7366657246726f6d286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e74323536290d8002766f6964206c61636861696e3a3a696e766f6b655f636f6e74726163745f6d6574686f643c626f6f6c2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e743235363e28626f6f6c20282a29286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e7432353629290e43766f6964206c61636861696e3a3a72657475726e5f76616c75653c6c61636861696e3a3a737472696e673e286c61636861696e3a3a737472696e6720636f6e737426290f447472616e73666572286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e74323536291043617070726f7665286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e7432353629114d696e637265617365416c6c6f77616e6365286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e7432353629125d616c6c6f77616e6365286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2913f501766f6964206c61636861696e3a3a696e766f6b655f636f6e74726163745f6d6574686f643c6c61636861696e3a3a75696e743235362c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e203e286c61636861696e3a3a75696e7432353620282a29286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e292914406d696e74286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e743235362915ac01766f6964206c61636861696e3a3a696e766f6b655f636f6e74726163745f6d6574686f643c766f69642c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e743235363e28766f696420282a29286c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a75696e7432353629291693016c61636861696e3a3a75696e74323536206c61636861696e3a3a6b65795f616464726573733c6c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e203e286c61636861696e3a3a75696e743235362c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e20636f6e73742629175a766f6964206c61636861696e3a3a736176655f746f5f73746f726167653c6c61636861696e3a3a75696e743235363e286c61636861696e3a3a75696e743235362c206c61636861696e3a3a75696e7432353620636f6e737426291889026c61636861696e3a3a75696e74323536206c61636861696e3a3a6b65795f616464726573733c6c61636861696e3a3a7475706c653c6c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e203e203e286c61636861696e3a3a75696e743235362c206c61636861696e3a3a7475706c653c6c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e2c206c61636861696e3a3a66697865645f61727261793c756e7369676e656420636861722c203230753e203e20636f6e7374262900750970726f647563657273010c70726f6365737365642d62790105636c616e6755392e302e31202868747470733a2f2f6769746875622e636f6d2f6c6c766d2f6c6c766d2d70726f6a656374206331613061323133333738613435386662656131613563373762333135633764636530386664303529" .HexToBytes() ); if (!VirtualMachine.VerifyContract(contract.ByteCode, true)) { throw new Exception("Unable to validate smart-contract code"); } var snapshot = stateManager.NewSnapshot(); snapshot.Contracts.AddContract(UInt160Utils.Zero, contract); stateManager.Approve(); Console.WriteLine("Contract Hash: " + hash.ToHex()); for (var i = 0; i < 1; ++i) { var currentTime = TimeUtils.CurrentTimeMillis(); var currentSnapshot = stateManager.NewSnapshot(); var sender = "0x6bc32575acb8754886dc283c2c8ac54b1bd93195".HexToBytes().ToUInt160(); var to = "0xfd893ce89186fc6861d339cb6ab5d75458e3daf3".HexToBytes().ToUInt160(); /* give to sender 1 token */ var valueToTransfer = Money.Wei; stateManager.CurrentSnapshot.Storage.SetValue(contract.ContractAddress, sender.ToUInt256(), (valueToTransfer * 3).ToUInt256()); var context = new InvocationContext(sender, currentSnapshot, new TransactionReceipt()); { /* ERC-20: totalSupply (0x18160ddd) */ Console.WriteLine("\nERC-20: totalSupply()"); var input = ContractEncoder.Encode("totalSupply()"); // Console.WriteLine("ABI: " + input.ToHex()); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); return; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* mint */ Console.WriteLine($"\nERC-20: mint({sender.ToHex()},{Money.FromDecimal(100)})"); var input = ContractEncoder.Encode("mint(address,uint256)", sender, Money.FromDecimal(100)); // Console.WriteLine("ABI: " + input.ToHex()); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* ERC-20: totalSupply (0x18160ddd) */ Console.WriteLine("\nERC-20: totalSupply()"); var input = ContractEncoder.Encode("totalSupply()"); // Console.WriteLine("ABI: " + input.ToHex()); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* ERC-20: balanceOf */ Console.WriteLine($"\nERC-20: balanceOf({sender.ToHex()}"); var input = ContractEncoder.Encode("balanceOf(address)", sender); // Console.WriteLine("ABI: " + input.ToHex()); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* ERC-20: transfer */ Console.WriteLine($"\nERC-20: transfer({to.ToHex()},{Money.FromDecimal(50)})"); var input = ContractEncoder.Encode("transfer(address,uint256)", to, Money.FromDecimal(50)); // Console.WriteLine($"ABI: {input.ToHex()}"); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* ERC-20: balanceOf */ Console.WriteLine($"\nERC-20: balanceOf({sender.ToHex()}"); var input = ContractEncoder.Encode("balanceOf(address)", sender); // Console.WriteLine("ABI: " + input.ToHex()); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* ERC-20: balanceOf */ Console.WriteLine($"\nERC-20: balanceOf({to.ToHex()}"); var input = ContractEncoder.Encode("balanceOf(address)", to); // Console.WriteLine("ABI: " + input.ToHex()); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* ERC-20: approve */ Console.WriteLine($"\nERC-20: approve({to.ToHex()},{Money.FromDecimal(50)})"); var input = ContractEncoder.Encode("approve(address,uint256)", to, Money.FromDecimal(50)); // Console.WriteLine($"ABI: {input.ToHex()}"); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* ERC-20: transferFrom */ Console.WriteLine($"\nERC-20: transferFrom({to.ToHex()},{Money.FromDecimal(50)})"); var input = ContractEncoder.Encode("transferFrom(address,address,uint256)", sender, to, Money.FromDecimal(50)); // Console.WriteLine($"ABI: {input.ToHex()}"); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* ERC-20: balanceOf */ Console.WriteLine($"\nERC-20: balanceOf({sender.ToHex()}"); var input = ContractEncoder.Encode("balanceOf(address)", sender); // Console.WriteLine("ABI: " + input.ToHex()); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } { /* ERC-20: balanceOf */ Console.WriteLine($"\nERC-20: balanceOf({to.ToHex()}"); var input = ContractEncoder.Encode("balanceOf(address)", to); // Console.WriteLine("ABI: " + input.ToHex()); var status = VirtualMachine.InvokeWasmContract(contract, context, input, 100_000_000_000_000UL); if (status.Status != ExecutionStatus.Ok) { stateManager.Rollback(); Console.WriteLine("Contract execution failed: " + status); goto exit_mark; } Console.WriteLine($"Result: {status.ReturnValue!.ToHex()}"); } stateManager.Approve(); exit_mark: var elapsedTime = TimeUtils.CurrentTimeMillis() - currentTime; Console.WriteLine("Elapsed Time: " + elapsedTime + "ms"); } }
public BlockchainEventFilterParams(BlockchainEvent eventType, ulong lastSyncedBlock) { EventType = eventType; LastSyncedBlock = lastSyncedBlock; PollingTime = TimeUtils.CurrentTimeMillis(); }