public VerAckMessageHandler(
     IBlockchainContext blockchainContext,
     ILogger <VerAckMessageHandler> logger)
 {
     _blockchainContext = blockchainContext ?? throw new ArgumentNullException(nameof(blockchainContext));
     _logger            = logger ?? throw new ArgumentNullException(nameof(logger));
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="serverContext">Server context</param>
 /// <param name="blockchain">Blockchain</param>
 /// <param name="blockRepository">The Block Model.</param>
 /// <param name="transactionModel"></param>
 /// <param name="assetModel"></param>
 /// <param name="blockchainContext">The block chain context class.</param>
 /// <param name="blockPool">Block pool</param>
 /// <param name="blockSigner">Block signer</param>
 /// <param name="blockPersister">Block persister</param>
 /// <param name="transactionPool">Transaction Pool</param>
 /// <param name="consoleHandler">Console handler</param>
 public PromptBlockchainController(
     IServerContext serverContext,
     IBlockchain blockchain,
     IBlockRepository blockRepository,
     ITransactionRepository transactionModel,
     IAssetRepository assetModel,
     IBlockchainContext blockchainContext,
     IBlockPool blockPool,
     IBlockPersister blockPersister,
     ISigner <Block> blockSigner,
     ITransactionPool transactionPool,
     IConsoleHandler consoleHandler)
 {
     _serverContext     = serverContext;
     _blockchain        = blockchain;
     _blockRepository   = blockRepository;
     _blockSigner       = blockSigner;
     _blockPersister    = blockPersister;
     _transactionModel  = transactionModel;
     _assetModel        = assetModel;
     _blockchainContext = blockchainContext;
     _blockPool         = blockPool;
     _transactionPool   = transactionPool;
     _consoleHandler    = consoleHandler;
 }
Example #3
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="blockProcessor">Block Processor</param>
 /// <param name="blockchainContext">Block chain context class.</param>
 /// <param name="genesisBuilder">Genesis block generator.</param>
 /// <param name="blockRepository">The block model.</param>
 public Blockchain(
     IBlockProcessor blockProcessor,
     IBlockchainContext blockchainContext,
     IGenesisBuilder genesisBuilder,
     IBlockRepository blockRepository)
 {
     _blockProcessor    = blockProcessor ?? throw new ArgumentNullException(nameof(blockProcessor));
     _blockchainContext = blockchainContext ?? throw new ArgumentNullException(nameof(blockchainContext));
     _genesisBuilder    = genesisBuilder ?? throw new ArgumentNullException(nameof(genesisBuilder));
     _blockRepository   = blockRepository;
 }
Example #4
0
 public BlockPersister(
     IBlockRepository blockRepository,
     IBlockchainContext blockchainContext,
     IBlockHeaderPersister blockHeaderPersister,
     ITransactionPersister <Transaction> transactionPersister)
 {
     _blockRepository      = blockRepository;
     _blockchainContext    = blockchainContext;
     _blockHeaderPersister = blockHeaderPersister;
     _transactionPersister = transactionPersister;
 }
 public BlockHeadersMessageHandler
 (
     IBlockchainContext blockchainContext,
     IBlockHeaderPersister blockHeaderPersister,
     ILogger <BlockHeadersMessageHandler> logger
 )
 {
     _blockchainContext    = blockchainContext ?? throw new ArgumentNullException(nameof(blockchainContext));
     _blockHeaderPersister = blockHeaderPersister ?? throw new ArgumentNullException(nameof(blockHeaderPersister));
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
 }
 public BlockHeaderPersister(
     IBlockRepository blockRepository,
     ISigner <BlockHeader> blockHeaderSigner,
     IBlockchainContext blockchainContext,
     IBlockHeaderValidator blockHeaderValidator,
     ILogger <BlockHeaderPersister> logger)
 {
     _blockRepository      = blockRepository;
     _blockHeaderSigner    = blockHeaderSigner;
     _blockchainContext    = blockchainContext;
     _blockHeaderValidator = blockHeaderValidator;
     _logger = logger;
 }
Example #7
0
        public StateMachine(
            Block persistingBlock,
            DataCache <UInt160, Account> accounts,
            DataCache <UInt256, Asset> assets,
            DataCache <UInt160, Contract> contracts,
            DataCache <StorageKey, StorageValue> storages,
            InteropService interopService,
            IBlockchainContext blockchainContext,
            IBlockRepository blockRepository,
            ITransactionRepository transactionRepository,
            ETriggerType trigger)
            : base(accounts, assets, contracts, storages, interopService, blockchainContext, blockRepository, transactionRepository, trigger)
        {
            _persistingBlock   = persistingBlock;
            _blockchainContext = blockchainContext;
            _accounts          = accounts?.CreateSnapshot();
            _assets            = assets?.CreateSnapshot();
            _contracts         = contracts?.CreateSnapshot();
            _storages          = storages?.CreateSnapshot();

            // Standard Library

            interopService.Register("System.Contract.GetStorageContext", Contract_GetStorageContext);
            interopService.Register("System.Contract.Destroy", Contract_Destroy);
            interopService.RegisterStackMethod("System.Storage.Put", Storage_Put);
            interopService.RegisterStackMethod("System.Storage.Delete", Storage_Delete);

            // Neo Specified

            interopService.Register("Neo.Asset.Create", Asset_Create);
            interopService.RegisterStackMethod("Neo.Asset.Renew", Asset_Renew);
            interopService.Register("Neo.Contract.Create", Contract_Create);
            interopService.Register("Neo.Contract.Migrate", Contract_Migrate);

            #region Old APIs

            interopService.Register("AntShares.Asset.Create", Asset_Create);
            interopService.RegisterStackMethod("AntShares.Asset.Renew", Asset_Renew);
            interopService.Register("AntShares.Contract.Create", Contract_Create);
            interopService.Register("AntShares.Contract.Migrate", Contract_Migrate);
            interopService.Register("Neo.Contract.GetStorageContext", Contract_GetStorageContext);
            interopService.Register("AntShares.Contract.GetStorageContext", Contract_GetStorageContext);
            interopService.Register("Neo.Contract.Destroy", Contract_Destroy);
            interopService.Register("AntShares.Contract.Destroy", Contract_Destroy);
            interopService.RegisterStackMethod("Neo.Storage.Put", Storage_Put);
            interopService.RegisterStackMethod("AntShares.Storage.Put", Storage_Put);
            interopService.RegisterStackMethod("Neo.Storage.Delete", Storage_Delete);
            interopService.RegisterStackMethod("AntShares.Storage.Delete", Storage_Delete);

            #endregion
        }
Example #8
0
        /// <summary>
        /// Server context
        /// </summary>
        /// <param name="config">Config</param>
        /// <param name="blockchainContext">Context information updated by blockchain.</param>
        public ServerContext(NetworkConfig config, IBlockchainContext blockchainContext)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            _blockchainContext = blockchainContext ?? throw new ArgumentNullException(nameof(blockchainContext));

            _version = new VersionPayload
            {
                Version           = ProtocolVersion,
                Services          = NodeNetwork,
                Timestamp         = DateTime.UtcNow.ToTimestamp(),
                Port              = config.Port,
                Nonce             = BitConverter.ToUInt32(Crypto.Default.GenerateRandomBytes(4), 0),
                UserAgent         = $"/NEO-Sharp:{Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}/",
                CurrentBlockIndex = _blockchainContext.CurrentBlock?.Index ?? 0,
                Relay             = true
            };

            MaxConnectedPeers = config.MaxConnectedPeers;
            ConnectedPeers    = new ConcurrentDictionary <EndPoint, IPeer>();
        }
 public BlockHeaderValidator(IBlockchainContext blockchainContext, IGenesisBuilder genesisBuilder)
 {
     this._blockchainContext = blockchainContext;
     this._genesisBuilder    = genesisBuilder;
 }
Example #10
0
        public StateReader(
            DataCache <UInt160, Account> accounts,
            DataCache <UInt256, Asset> assets,
            DataCache <UInt160, Contract> contracts,
            DataCache <StorageKey, StorageValue> storages,
            InteropService interopService,
            IBlockchainContext blockchainContext,
            IBlockRepository blockRepository,
            ITransactionRepository transactionRepository,
            ETriggerType trigger)
        {
            Accounts               = accounts;
            Assets                 = assets;
            Contracts              = contracts;
            Storages               = storages;
            _blockchainContext     = blockchainContext;
            _blockRepository       = blockRepository;
            _transactionRepository = transactionRepository;
            _trigger               = trigger;
            _interopService        = interopService;

            //Standard Library
            interopService.RegisterStackMethod("System.Runtime.GetTrigger", Runtime_GetTrigger);
            interopService.Register("System.Runtime.CheckWitness", Runtime_CheckWitness);
            interopService.Register("System.Runtime.Notify", Runtime_Notify);
            interopService.Register("System.Runtime.Log", Runtime_Log);
            interopService.RegisterStackMethod("System.Runtime.GetTime", Runtime_GetTime);
            interopService.RegisterStackMethod("System.Blockchain.GetHeight", Blockchain_GetHeight);
            interopService.RegisterStackMethod("System.Blockchain.GetHeader", Blockchain_GetHeader);
            interopService.RegisterStackMethod("System.Blockchain.GetBlock", Blockchain_GetBlock);
            interopService.RegisterStackMethod("System.Blockchain.GetTransaction", Blockchain_GetTransaction);
            interopService.RegisterStackMethod("System.Blockchain.GetTransactionHeight", Blockchain_GetTransactionHeight);
            interopService.RegisterStackMethod("System.Blockchain.GetContract", Blockchain_GetContract);
            interopService.RegisterStackMethod("System.Header.GetIndex", Header_GetIndex);
            interopService.RegisterStackMethod("System.Header.GetHash", Header_GetHash);
            interopService.RegisterStackMethod("System.Header.GetPrevHash", Header_GetPrevHash);
            interopService.RegisterStackMethod("System.Header.GetTimestamp", Header_GetTimestamp);
            interopService.RegisterStackMethod("System.Block.GetTransactionCount", Block_GetTransactionCount);
            interopService.RegisterStackMethod("System.Block.GetTransactions", Block_GetTransactions);
            interopService.RegisterStackMethod("System.Block.GetTransaction", Block_GetTransaction);
            interopService.RegisterStackMethod("System.Transaction.GetHash", Transaction_GetHash);
            interopService.Register("System.Storage.GetContext", Storage_GetContext);
            interopService.Register("System.Storage.GetReadOnlyContext", Storage_GetReadOnlyContext);
            interopService.RegisterStackMethod("System.Storage.Get", Storage_Get);
            interopService.RegisterStackMethod("System.StorageContext.AsReadOnly", StorageContext_AsReadOnly);

            //Neo Specified
            interopService.RegisterStackMethod("Neo.Blockchain.GetAccount", Blockchain_GetAccount);
            interopService.RegisterStackMethod("Neo.Blockchain.GetValidators", Blockchain_GetValidators);
            interopService.RegisterStackMethod("Neo.Blockchain.GetAsset", Blockchain_GetAsset);
            interopService.RegisterStackMethod("Neo.Header.GetVersion", Header_GetVersion);
            interopService.RegisterStackMethod("Neo.Header.GetMerkleRoot", Header_GetMerkleRoot);
            interopService.RegisterStackMethod("Neo.Header.GetConsensusData", Header_GetConsensusData);
            interopService.RegisterStackMethod("Neo.Header.GetNextConsensus", Header_GetNextConsensus);
            interopService.RegisterStackMethod("Neo.Transaction.GetType", Transaction_GetType);
            interopService.RegisterStackMethod("Neo.Transaction.GetAttributes", Transaction_GetAttributes);
            interopService.RegisterStackMethod("Neo.Transaction.GetInputs", Transaction_GetInputs);
            interopService.RegisterStackMethod("Neo.Transaction.GetOutputs", Transaction_GetOutputs);
            interopService.RegisterStackMethod("Neo.Transaction.GetReferences", Transaction_GetReferences);
            interopService.RegisterStackMethod("Neo.Transaction.GetUnspentCoins", Transaction_GetUnspentCoins);
            interopService.RegisterStackMethod("Neo.InvocationTransaction.GetScript", InvocationTransaction_GetScript);
            interopService.RegisterStackMethod("Neo.Attribute.GetUsage", Attribute_GetUsage);
            interopService.RegisterStackMethod("Neo.Attribute.GetData", Attribute_GetData);
            interopService.RegisterStackMethod("Neo.Input.GetHash", Input_GetHash);
            interopService.RegisterStackMethod("Neo.Input.GetIndex", Input_GetIndex);
            interopService.RegisterStackMethod("Neo.Output.GetAssetId", Output_GetAssetId);
            interopService.RegisterStackMethod("Neo.Output.GetValue", Output_GetValue);
            interopService.RegisterStackMethod("Neo.Output.GetScriptHash", Output_GetScriptHash);
            interopService.RegisterStackMethod("Neo.Account.GetScriptHash", Account_GetScriptHash);
            interopService.RegisterStackMethod("Neo.Account.GetVotes", Account_GetVotes);
            interopService.RegisterStackMethod("Neo.Account.GetBalance", Account_GetBalance);
            interopService.RegisterStackMethod("Neo.Asset.GetAssetId", Asset_GetAssetId);
            interopService.RegisterStackMethod("Neo.Asset.GetAssetType", Asset_GetAssetType);
            interopService.RegisterStackMethod("Neo.Asset.GetAmount", Asset_GetAmount);
            interopService.RegisterStackMethod("Neo.Asset.GetAvailable", Asset_GetAvailable);
            interopService.RegisterStackMethod("Neo.Asset.GetPrecision", Asset_GetPrecision);
            interopService.RegisterStackMethod("Neo.Asset.GetOwner", Asset_GetOwner);
            interopService.RegisterStackMethod("Neo.Asset.GetAdmin", Asset_GetAdmin);
            interopService.RegisterStackMethod("Neo.Asset.GetIssuer", Asset_GetIssuer);
            interopService.RegisterStackMethod("Neo.Contract.GetScript", Contract_GetScript);
            interopService.RegisterStackMethod("Neo.Contract.IsPayable", Contract_IsPayable);
            interopService.RegisterStackMethod("Neo.Storage.Find", Storage_Find);

            #region Old APIs
            interopService.RegisterStackMethod("Neo.Runtime.GetTrigger", Runtime_GetTrigger);
            interopService.Register("Neo.Runtime.CheckWitness", Runtime_CheckWitness);
            interopService.Register("AntShares.Runtime.CheckWitness", Runtime_CheckWitness);
            interopService.Register("Neo.Runtime.Notify", Runtime_Notify);
            interopService.Register("AntShares.Runtime.Notify", Runtime_Notify);
            interopService.Register("Neo.Runtime.Log", Runtime_Log);
            interopService.Register("AntShares.Runtime.Log", Runtime_Log);
            interopService.RegisterStackMethod("Neo.Runtime.GetTime", Runtime_GetTime);
            interopService.RegisterStackMethod("Neo.Blockchain.GetHeight", Blockchain_GetHeight);
            interopService.RegisterStackMethod("AntShares.Blockchain.GetHeight", Blockchain_GetHeight);
            interopService.RegisterStackMethod("Neo.Blockchain.GetHeader", Blockchain_GetHeader);
            interopService.RegisterStackMethod("AntShares.Blockchain.GetHeader", Blockchain_GetHeader);
            interopService.RegisterStackMethod("Neo.Blockchain.GetBlock", Blockchain_GetBlock);
            interopService.RegisterStackMethod("AntShares.Blockchain.GetBlock", Blockchain_GetBlock);
            interopService.RegisterStackMethod("Neo.Blockchain.GetTransaction", Blockchain_GetTransaction);
            interopService.RegisterStackMethod("AntShares.Blockchain.GetTransaction", Blockchain_GetTransaction);
            interopService.RegisterStackMethod("Neo.Blockchain.GetTransactionHeight", Blockchain_GetTransactionHeight);
            interopService.RegisterStackMethod("AntShares.Blockchain.GetAccount", Blockchain_GetAccount);
            interopService.RegisterStackMethod("AntShares.Blockchain.GetValidators", Blockchain_GetValidators);
            interopService.RegisterStackMethod("AntShares.Blockchain.GetAsset", Blockchain_GetAsset);
            interopService.RegisterStackMethod("Neo.Blockchain.GetContract", Blockchain_GetContract);
            interopService.RegisterStackMethod("AntShares.Blockchain.GetContract", Blockchain_GetContract);
            interopService.RegisterStackMethod("Neo.Header.GetIndex", Header_GetIndex);
            interopService.RegisterStackMethod("Neo.Header.GetHash", Header_GetHash);
            interopService.RegisterStackMethod("AntShares.Header.GetHash", Header_GetHash);
            interopService.RegisterStackMethod("AntShares.Header.GetVersion", Header_GetVersion);
            interopService.RegisterStackMethod("Neo.Header.GetPrevHash", Header_GetPrevHash);
            interopService.RegisterStackMethod("AntShares.Header.GetPrevHash", Header_GetPrevHash);
            interopService.RegisterStackMethod("AntShares.Header.GetMerkleRoot", Header_GetMerkleRoot);
            interopService.RegisterStackMethod("Neo.Header.GetTimestamp", Header_GetTimestamp);
            interopService.RegisterStackMethod("AntShares.Header.GetTimestamp", Header_GetTimestamp);
            interopService.RegisterStackMethod("AntShares.Header.GetConsensusData", Header_GetConsensusData);
            interopService.RegisterStackMethod("AntShares.Header.GetNextConsensus", Header_GetNextConsensus);
            interopService.RegisterStackMethod("Neo.Block.GetTransactionCount", Block_GetTransactionCount);
            interopService.RegisterStackMethod("AntShares.Block.GetTransactionCount", Block_GetTransactionCount);
            interopService.RegisterStackMethod("Neo.Block.GetTransactions", Block_GetTransactions);
            interopService.RegisterStackMethod("AntShares.Block.GetTransactions", Block_GetTransactions);
            interopService.RegisterStackMethod("Neo.Block.GetTransaction", Block_GetTransaction);
            interopService.RegisterStackMethod("AntShares.Block.GetTransaction", Block_GetTransaction);
            interopService.RegisterStackMethod("Neo.Transaction.GetHash", Transaction_GetHash);
            interopService.RegisterStackMethod("AntShares.Transaction.GetHash", Transaction_GetHash);
            interopService.RegisterStackMethod("AntShares.Transaction.GetType", Transaction_GetType);
            interopService.RegisterStackMethod("AntShares.Transaction.GetAttributes", Transaction_GetAttributes);
            interopService.RegisterStackMethod("AntShares.Transaction.GetInputs", Transaction_GetInputs);
            interopService.RegisterStackMethod("AntShares.Transaction.GetOutputs", Transaction_GetOutputs);
            interopService.RegisterStackMethod("AntShares.Transaction.GetReferences", Transaction_GetReferences);
            interopService.RegisterStackMethod("AntShares.Attribute.GetUsage", Attribute_GetUsage);
            interopService.RegisterStackMethod("AntShares.Attribute.GetData", Attribute_GetData);
            interopService.RegisterStackMethod("AntShares.Input.GetHash", Input_GetHash);
            interopService.RegisterStackMethod("AntShares.Input.GetIndex", Input_GetIndex);
            interopService.RegisterStackMethod("AntShares.Output.GetAssetId", Output_GetAssetId);
            interopService.RegisterStackMethod("AntShares.Output.GetValue", Output_GetValue);
            interopService.RegisterStackMethod("AntShares.Output.GetScriptHash", Output_GetScriptHash);
            interopService.RegisterStackMethod("AntShares.Account.GetScriptHash", Account_GetScriptHash);
            interopService.RegisterStackMethod("AntShares.Account.GetVotes", Account_GetVotes);
            interopService.RegisterStackMethod("AntShares.Account.GetBalance", Account_GetBalance);
            interopService.RegisterStackMethod("AntShares.Asset.GetAssetId", Asset_GetAssetId);
            interopService.RegisterStackMethod("AntShares.Asset.GetAssetType", Asset_GetAssetType);
            interopService.RegisterStackMethod("AntShares.Asset.GetAmount", Asset_GetAmount);
            interopService.RegisterStackMethod("AntShares.Asset.GetAvailable", Asset_GetAvailable);
            interopService.RegisterStackMethod("AntShares.Asset.GetPrecision", Asset_GetPrecision);
            interopService.RegisterStackMethod("AntShares.Asset.GetOwner", Asset_GetOwner);
            interopService.RegisterStackMethod("AntShares.Asset.GetAdmin", Asset_GetAdmin);
            interopService.RegisterStackMethod("AntShares.Asset.GetIssuer", Asset_GetIssuer);
            interopService.RegisterStackMethod("AntShares.Contract.GetScript", Contract_GetScript);
            interopService.Register("Neo.Storage.GetContext", Storage_GetContext);
            interopService.Register("AntShares.Storage.GetContext", Storage_GetContext);
            interopService.Register("Neo.Storage.GetReadOnlyContext", Storage_GetReadOnlyContext);
            interopService.RegisterStackMethod("Neo.Storage.Get", Storage_Get);
            interopService.RegisterStackMethod("AntShares.Storage.Get", Storage_Get);
            interopService.RegisterStackMethod("Neo.StorageContext.AsReadOnly", StorageContext_AsReadOnly);
            #endregion
        }