コード例 #1
0
ファイル: EventExtensions.cs プロジェクト: zzz8415/Nethereum
        public static bool IsFilterInputForEvent <TEventDTO>(string contractAddress,
                                                             NewFilterInput filterInput)
        {
            var eventABI = ABITypedRegistry.GetEvent <TEventDTO>();

            return(eventABI.IsFilterInputForEvent(contractAddress, filterInput));
        }
 public BlockchainIndexingService(
     IEthereumNodeJobClient ethereumNodeJobClient,
     IIndexingStateRepository indexingStateRepository,
     IRabbitPublisher <EthereumWalletLinkingStatusChangeCompletedEvent>
     walletLinkingStatusChangeCompletedPublisher,
     IRabbitPublisher <TransferToExternalCompletedEvent> transferToExternalCompletedPublisher,
     IRabbitPublisher <TransferToInternalDetectedEvent> transferToInternalDetectedPublisher,
     IRabbitPublisher <SeizeToInternalDetectedEvent> seizeToInternalDetectedPublisher,
     int blockConfirmationLevel,
     ILogFactory logFactory,
     int?blockBatchSize = null)
 {
     _ethereumNodeJobClient   = ethereumNodeJobClient;
     _indexingStateRepository = indexingStateRepository;
     _walletLinkingStatusChangeCompletedPublisher = walletLinkingStatusChangeCompletedPublisher;
     _transferToExternalCompletedPublisher        = transferToExternalCompletedPublisher;
     _transferToInternalDetectedPublisher         = transferToInternalDetectedPublisher;
     _seizeToInternalDetectedPublisher            = seizeToInternalDetectedPublisher;
     _blockConfirmationLevel            = blockConfirmationLevel;
     _blockBatchSize                    = blockBatchSize;
     _publicAccountLinkedEventSignature =
         $"0x{ABITypedRegistry.GetEvent<PublicAccountLinkedEventDTO>().Sha3Signature}";
     _publicAccountUnlinkedEventSignature =
         $"0x{ABITypedRegistry.GetEvent<PublicAccountUnlinkedEventDTO>().Sha3Signature}";
     _transferredFromInternalNetworkEventSignature =
         $"0x{ABITypedRegistry.GetEvent<TransferredFromInternalNetworkEventDTO>().Sha3Signature}";
     _transferredToInternalNetworkEventSignature =
         $"0x{ABITypedRegistry.GetEvent<TransferredToInternalNetworkEventDTO>().Sha3Signature}";
     _publicAccountUnlinkedEventSignature =
         $"0x{ABITypedRegistry.GetEvent<PublicAccountUnlinkedEventDTO>().Sha3Signature}";
     _seizeFromEventSignature =
         $"0x{ABITypedRegistry.GetEvent<SeizeFromEventDTO>().Sha3Signature}";
     _eventTopicDecoder = new EventTopicDecoder();
     _log = logFactory.CreateLog(this);
 }
コード例 #3
0
 public EventMatcher(
     IEventAddressMatcher addressMatcher     = null,
     IEventParameterMatcher parameterMatcher = null)
     : base(null, addressMatcher, parameterMatcher)
 {
     Abis = new[] { ABITypedRegistry.GetEvent <TEvent>() };
 }
 public BlockchainEventDecoder(IMapper mapper)
 {
     _mapper            = mapper;
     _eventTopicDecoder = new EventTopicDecoder();
     _publicAccountLinkedEventSignature   = $"0x{ABITypedRegistry.GetEvent<PublicAccountLinkedEventDTO>().Sha3Signature}";
     _publicAccountUnlinkedEventSignature = $"0x{ABITypedRegistry.GetEvent<PublicAccountUnlinkedEventDTO>().Sha3Signature}";
 }
 public BlockchainEventDecoder(IMapper mapper)
 {
     _mapper            = mapper;
     _eventTopicDecoder = new EventTopicDecoder();
     _transferedFromPublicNetworkEventSignature = $"0x{ABITypedRegistry.GetEvent<TransferredFromPublicNetworkEventDTO>().Sha3Signature}";
     _transferedToPublicNetworkEventSignature   = $"0x{ABITypedRegistry.GetEvent<TransferredToPublicNetworkEventDTO>().Sha3Signature}";
 }
コード例 #6
0
        public static NewFilterInput CreateFilterInput <TEventDTO>(this TEventDTO eventDTO, string[] contractAddress, object[] filterTopic1, BlockParameter fromBlock = null,
                                                                   BlockParameter toBlock = null) where TEventDTO : IEventDTO
        {
            var eventABI = ABITypedRegistry.GetEvent <TEventDTO>();

            return(eventABI.CreateFilterInput(contractAddress, filterTopic1, fromBlock, toBlock));
        }
コード例 #7
0
        private string EncodeRequestData <T>(T func)
            where T : class, new()
        {
            var abiFunc = ABITypedRegistry.GetFunctionABI <T>();
            var result  = _functionCallEncoder.EncodeRequest(func, abiFunc.Sha3Signature);

            return(result);
        }
コード例 #8
0
        public static NewFilterInput CreateFilterInput <TEventDTO>(string contractAddress, object[] filterTopic1, object[] filterTopic2, object[] filterTopic3,
                                                                   BlockParameter fromBlock = null, BlockParameter toBlock = null)
        {
            var eventABI = ABITypedRegistry.GetEvent <TEventDTO>();

            return(eventABI.CreateFilterInput(contractAddress, filterTopic1, filterTopic2, filterTopic3, fromBlock,
                                              toBlock));
        }
 public BlockchainEventDecoder(IMapper mapper)
 {
     _eventTopicDecoder = new EventTopicDecoder();
     _transferReceivedEventSignature = $"0x{ABITypedRegistry.GetEvent<TransferReceivedEventDTO>().Sha3Signature}";
     _transferAcceptedEventSignature = $"0x{ABITypedRegistry.GetEvent<TransferAcceptedEventDTO>().Sha3Signature}";
     _transferRejectedEventSignature = $"0x{ABITypedRegistry.GetEvent<TransferRejectedEventDTO>().Sha3Signature}";
     _mapper = mapper;
 }
コード例 #10
0
        public FunctionPrinter()
        {
            _functionAbi = ABITypedRegistry.GetFunctionABI <TFunctionInput>();

            if (_functionAbi == null)
            {
                throw new ArgumentException("Function for TFunctionInput not found in contract");
            }
        }
        public void ShouldEncodeSignatureWithStructArrays()
        {
            var functionAbi = ABITypedRegistry.GetFunctionABI <SetPurchaseOrderFunction>();

            Assert.Equal("0cc400bd", functionAbi.Sha3Signature);

            functionAbi = ABITypedRegistry.GetFunctionABI <SetPurchaseOrdersFunction>();
            Assert.Equal("cfca7768", functionAbi.Sha3Signature);
        }
コード例 #12
0
        public void ShouldEncodeSignatureWithStructArrays()
        {
            var functionAbi = ABITypedRegistry.GetFunctionABI <SetPurchaseOrderFunction>();

            Assert.Equal("f79eb4a2", functionAbi.Sha3Signature);

            functionAbi = ABITypedRegistry.GetFunctionABI <SetPurchaseOrdersFunction>();
            Assert.Equal("1a9542af", functionAbi.Sha3Signature);
        }
コード例 #13
0
        public async Task <decimal> BalanceOfAsync(string contractAddress, ITronAccount ownerAccount)
        {
            var contractAddressBytes = Base58Encoder.DecodeFromBase58Check(contractAddress);
            var ownerAddressBytes    = Base58Encoder.DecodeFromBase58Check(ownerAccount.Address);
            var wallet      = _walletClient.GetProtocol();
            var functionABI = ABITypedRegistry.GetFunctionABI <BalanceOfFunction>();

            try
            {
                var addressBytes = new byte[20];
                Array.Copy(ownerAddressBytes, 1, addressBytes, 0, addressBytes.Length);

                var addressBytesHex = "0x" + addressBytes.ToHex();

                var balanceOf = new BalanceOfFunction {
                    Owner = addressBytesHex
                };
                var decimals = GetDecimals(wallet, contractAddressBytes);

                var encodedHex = new FunctionCallEncoder().EncodeRequest(balanceOf, functionABI.Sha3Signature);

                var trigger = new TriggerSmartContract
                {
                    ContractAddress = ByteString.CopyFrom(contractAddressBytes),
                    OwnerAddress    = ByteString.CopyFrom(ownerAddressBytes),
                    Data            = ByteString.CopyFrom(encodedHex.HexToByteArray()),
                };

                var transactionExtention = await wallet.TriggerConstantContractAsync(trigger, headers : _walletClient.GetHeaders());

                if (!transactionExtention.Result.Result)
                {
                    throw new Exception(transactionExtention.Result.Message.ToStringUtf8());
                }
                if (transactionExtention.ConstantResult.Count == 0)
                {
                    throw new Exception($"result error, ConstantResult length=0.");
                }

                var result = new FunctionCallDecoder().DecodeFunctionOutput <BalanceOfFunctionOutput>(transactionExtention.ConstantResult[0].ToByteArray().ToHex());

                var balance = Convert.ToDecimal(result.Balance);
                if (decimals > 0)
                {
                    balance /= Convert.ToDecimal(Math.Pow(10, decimals));
                }

                return(balance);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
                throw;
            }
        }
コード例 #14
0
        public void Filter_AddsAnEventSignatureBasedFilter()
        {
            var processor = new LogsProcessorBuilder(blockchainUrl: BLOCKCHAIN_URL)
                            .Filter <TestData.Contracts.StandardContract.TransferEvent>();

            Assert.Equal(
                ABITypedRegistry
                .GetEvent <TestData.Contracts.StandardContract.TransferEvent>()
                .Sha3Signature.EnsureHexPrefix(),
                processor.Filters[0].Topics[0]);
        }
コード例 #15
0
        public string EncodeAcceptData(Guid spendRuleId, Guid transferId)
        {
            var acceptFunction = new AcceptTransferFunction
            {
                TransferId = transferId.ToString(), InvoiceId = EmptyInvoiceId, CampaignId = spendRuleId.ToString()
            };

            var abiFunction = ABITypedRegistry.GetFunctionABI <AcceptTransferFunction>();

            return(_functionCallEncoder.EncodeRequest(acceptFunction, abiFunction.Sha3Signature));
        }
コード例 #16
0
        public void Assigns_Event_Signature_To_Topic0()
        {
            var filter = new FilterInputBuilder <TransferEvent>().Build();

            var eventAbi = ABITypedRegistry.GetEvent <TransferEvent>();

            Assert.Equal(eventAbi.Sha3Signature.EnsureHexPrefix(), filter.Topics.FirstOrDefault());

            Assert.False(filter.IsTopicFiltered(1));
            Assert.False(filter.IsTopicFiltered(2));
            Assert.False(filter.IsTopicFiltered(3));
        }
コード例 #17
0
        public async Task DynamicContractQuerying_Name_Anomoly()
        {
            var abi             = ABITypedRegistry.GetFunctionABI <NameFunction>();
            var signature_name  = abi.Sha3Signature;
            var contractAddress = "0x2e71b2933b2b249752872a929e9816a770638282";

            var web3 = new Web3.Web3(BlockchainUrl);

            var contractHandler       = web3.Eth.GetContractHandler(contractAddress);
            var contractHandlerResult = await contractHandler.QueryAsync <NameFunction, string>();

            var queryHelperResult = await web3.Eth.GetContract(StandardContractAbi, contractAddress)
                                    .GetFunctionBySignature(signature_name)
                                    .CallAsync <string>();

            Assert.Null(queryHelperResult);
        }
コード例 #18
0
        public void Filter_SetsAnEventSignatureBasedFilter_WithContractAddresses()
        {
            string[] CONTRACT_ADDRESSES = new[] { "0x243e72b69141f6af525a9a5fd939668ee9f2b354", "0x343e72b69141f6af525a9a5fd939668ee9f2b354" };

            var processor = new LogsProcessorBuilder(blockchainUrl: BLOCKCHAIN_URL, contractAddresses: CONTRACT_ADDRESSES)
                            .Filter <TestData.Contracts.StandardContract.TransferEvent>();

            //should override and replace contract address filter with a new filter for contract address and event
            Assert.Single(processor.Filters);

            Assert.Equal(
                ABITypedRegistry
                .GetEvent <TestData.Contracts.StandardContract.TransferEvent>()
                .Sha3Signature.EnsureHexPrefix(),
                processor.Filters[0].Topics[0]);


            Assert.Equal(CONTRACT_ADDRESSES, processor.Filters[0].Address);
        }
コード例 #19
0
        private long GetDecimals(Wallet.WalletClient wallet, byte[] contractAddressBytes)
        {
            var trc20Decimals = new DecimalsFunction();

            var callEncoder = new FunctionCallEncoder();
            var functionABI = ABITypedRegistry.GetFunctionABI <DecimalsFunction>();

            var encodedHex = callEncoder.EncodeRequest(trc20Decimals, functionABI.Sha3Signature);

            var trigger = new TriggerSmartContract
            {
                ContractAddress = ByteString.CopyFrom(contractAddressBytes),
                Data            = ByteString.CopyFrom(encodedHex.HexToByteArray()),
            };

            var txnExt = wallet.TriggerConstantContract(trigger, headers: _walletClient.GetHeaders());

            var result = txnExt.ConstantResult[0].ToByteArray().ToHex();

            return(new FunctionCallDecoder().DecodeOutput <long>(result, new Parameter("uint8", "d")));
        }
コード例 #20
0
        public UndecodedEventSubscriber(
            IPurchaseService purchaseService,
            IOperationsService operationsService,
            ISettingsService settingsService,
            string connectionString,
            string exchangeName,
            string queueName,
            ILogFactory logFactory)
            : base(connectionString, exchangeName, queueName, true, logFactory)
        {
            _purchaseService   = purchaseService;
            _operationsService = operationsService;
            _log = logFactory.CreateLog(this);

            _eventTopicDecoder = new EventTopicDecoder();

            _transferReceivedEventSignature = $"0x{ABITypedRegistry.GetEvent<TransferReceivedEventDTO>().Sha3Signature}";
            _transferAcceptedEventSignature = $"0x{ABITypedRegistry.GetEvent<TransferAcceptedEventDTO>().Sha3Signature}";
            _transferRejectedEventSignature = $"0x{ABITypedRegistry.GetEvent<TransferRejectedEventDTO>().Sha3Signature}";
            _contractAddress = settingsService.GetContractAddress();
        }
コード例 #21
0
ファイル: EventExtensions.cs プロジェクト: zzz8415/Nethereum
        public static List <EventLog <TEventDTO> > DecodeAllEvents <TEventDTO>(this JArray logs) where TEventDTO : new()
        {
            var eventABI = ABITypedRegistry.GetEvent <TEventDTO>();

            return(eventABI.DecodeAllEvents <TEventDTO>(logs));
        }
コード例 #22
0
 public EventPrinter()
 {
     _eventName = ABITypedRegistry.GetEvent <TEvent>().Name;
 }
コード例 #23
0
        public async Task <string> TransferAsync(string contractAddress, ITronAccount ownerAccount, string toAddress, decimal amount, string memo, long feeLimit)
        {
            var contractAddressBytes = Base58Encoder.DecodeFromBase58Check(contractAddress);
            var callerAddressBytes   = Base58Encoder.DecodeFromBase58Check(toAddress);
            var ownerAddressBytes    = Base58Encoder.DecodeFromBase58Check(ownerAccount.Address);
            var wallet      = _walletClient.GetProtocol();
            var functionABI = ABITypedRegistry.GetFunctionABI <TransferFunction>();

            try
            {
                var contract = await wallet.GetContractAsync(new BytesMessage
                {
                    Value = ByteString.CopyFrom(contractAddressBytes),
                }, headers : _walletClient.GetHeaders());

                var toAddressBytes = new byte[20];
                Array.Copy(callerAddressBytes, 1, toAddressBytes, 0, toAddressBytes.Length);

                var toAddressHex = "0x" + toAddressBytes.ToHex();

                var decimals = GetDecimals(wallet, contractAddressBytes);

                var tokenAmount = amount;
                if (decimals > 0)
                {
                    tokenAmount = amount * Convert.ToDecimal(Math.Pow(10, decimals));
                }

                var trc20Transfer = new TransferFunction
                {
                    To          = toAddressHex,
                    TokenAmount = Convert.ToInt64(tokenAmount),
                };

                var encodedHex = new FunctionCallEncoder().EncodeRequest(trc20Transfer, functionABI.Sha3Signature);


                var trigger = new TriggerSmartContract
                {
                    ContractAddress = ByteString.CopyFrom(contractAddressBytes),
                    OwnerAddress    = ByteString.CopyFrom(ownerAddressBytes),
                    Data            = ByteString.CopyFrom(encodedHex.HexToByteArray()),
                };

                var transactionExtention = await wallet.TriggerConstantContractAsync(trigger, headers : _walletClient.GetHeaders());

                if (!transactionExtention.Result.Result)
                {
                    _logger.LogWarning($"[transfer]transfer failed, message={transactionExtention.Result.Message.ToStringUtf8()}.");
                    return(null);
                }

                var transaction = transactionExtention.Transaction;

                if (transaction.Ret.Count > 0 && transaction.Ret[0].Ret == Transaction.Types.Result.Types.code.Failed)
                {
                    return(null);
                }

                transaction.RawData.Data     = ByteString.CopyFromUtf8(memo);
                transaction.RawData.FeeLimit = feeLimit;

                var transSign = _transactionClient.GetTransactionSign(transaction, ownerAccount.PrivateKey);

                var result = await _transactionClient.BroadcastTransactionAsync(transSign);

                return(transSign.GetTxid());
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
                return(null);
            }
        }
コード例 #24
0
 public NewFilterInputBuilder()
 {
     _eventAbi = ABITypedRegistry.GetEvent <TEventDTo>();
     _topics   = new TopicFilterContainer <TEventDTo>();
 }
コード例 #25
0
ファイル: EventExtensions.cs プロジェクト: zzz8415/Nethereum
        public static bool IsLogForEvent <TEventDTO>(this FilterLog log)
        {
            var eventABI = ABITypedRegistry.GetEvent <TEventDTO>();

            return(eventABI.IsLogForEvent(log));
        }
コード例 #26
0
ファイル: EventExtensions.cs プロジェクト: zzz8415/Nethereum
        public static EventABI GetEventABI <TEventDTO>(this TEventDTO eventDTO) where TEventDTO : IEventDTO
        {
            var eventABI = ABITypedRegistry.GetEvent <TEventDTO>();

            return(eventABI);
        }
コード例 #27
0
ファイル: EventExtensions.cs プロジェクト: zzz8415/Nethereum
        public static TEventDTO DecodeEvent <TEventDTO>(this TEventDTO eventDTO, FilterLog log) where TEventDTO : IEventDTO
        {
            var eventABI = ABITypedRegistry.GetEvent <TEventDTO>();

            return(DecodeEvent <TEventDTO>(eventDTO, eventABI, log));
        }
コード例 #28
0
ファイル: EventExtensions.cs プロジェクト: zzz8415/Nethereum
        public static EventLog <TEventDTO> DecodeEvent <TEventDTO>(this FilterLog log) where TEventDTO : new()
        {
            var eventABI = ABITypedRegistry.GetEvent <TEventDTO>();

            return(eventABI.DecodeEvent <TEventDTO>(log));
        }
コード例 #29
0
ファイル: EventExtensions.cs プロジェクト: zzz8415/Nethereum
        public static List <EventLog <TEventDTO> > DecodeAllEvents <TEventDTO>(this FilterLog[] logs) where TEventDTO : new()
        {
            var eventABI = ABITypedRegistry.GetEvent <TEventDTO>();

            return(DecodeAllEvents <TEventDTO>(eventABI, logs));
        }