Exemplo n.º 1
0
        public static ERC20InitiatedEventDTO ParseERC20InitiatedEvent(
            this EtherScanApi.ContractEvent contractEvent)
        {
            var eventSignatureHash = EventSignatureExtractor.GetSignatureHash <ERC20InitiatedEventDTO>();

            if (contractEvent.Topics == null ||
                contractEvent.Topics.Count != 4 ||
                contractEvent.EventSignatureHash() != eventSignatureHash)
            {
                throw new Exception("Invalid contract event");
            }

            var initiatorHex  = contractEvent.HexData.Substring(PrefixOffset, TopicSizeInHex);
            var refundTimeHex = contractEvent.HexData.Substring(PrefixOffset + TopicSizeInHex, TopicSizeInHex);
            var countdownHex  = contractEvent.HexData.Substring(PrefixOffset + 2 * TopicSizeInHex, TopicSizeInHex);
            var valueHex      = contractEvent.HexData.Substring(PrefixOffset + 3 * TopicSizeInHex, TopicSizeInHex);
            var redeemFeeHex  = contractEvent.HexData.Substring(PrefixOffset + 4 * TopicSizeInHex, TopicSizeInHex);
            var active        = contractEvent.HexData.Substring(PrefixOffset + 5 * TopicSizeInHex, TopicSizeInHex);

            return(new ERC20InitiatedEventDTO
            {
                HashedSecret = Hex.FromString(contractEvent.Topics[1], true),
                ERC20Contract =
                    $"0x{contractEvent.Topics[2].Substring(contractEvent.Topics[2].Length - AddressLengthInHex)}",
                Participant =
                    $"0x{contractEvent.Topics[3].Substring(contractEvent.Topics[3].Length - AddressLengthInHex)}",
                Initiator =
                    $"0x{initiatorHex.Substring(initiatorHex.Length - AddressLengthInHex)}",
                RefundTimestamp = new HexBigInteger(refundTimeHex).Value,
                Countdown = new HexBigInteger(countdownHex).Value,
                Value = new HexBigInteger(valueHex).Value,
                RedeemFee = new HexBigInteger(redeemFeeHex).Value,
                Active = new HexBigInteger(active).Value != 0
            });
        }
Exemplo n.º 2
0
        public static ERC20RefundedEventDTO ParseRefundedEvent(
            this EtherScanApi.ContractEvent contractEvent)
        {
            var eventSignatureHash = EventSignatureExtractor.GetSignatureHash <ERC20RefundedEventDTO>();

            if (contractEvent.Topics == null ||
                contractEvent.Topics.Count != 2 ||
                contractEvent.EventSignatureHash() != eventSignatureHash)
            {
                throw new Exception("Invalid contract event");
            }

            return(new ERC20RefundedEventDTO
            {
                HashedSecret = Hex.FromString(contractEvent.Topics[1], true),
            });
        }
Exemplo n.º 3
0
        public static ERC20AddedEventDTO ParseERC20AddedEvent(
            this EtherScanApi.ContractEvent contractEvent)
        {
            var eventSignatureHash = EventSignatureExtractor.GetSignatureHash <ERC20AddedEventDTO>();

            if (contractEvent.Topics == null ||
                contractEvent.Topics.Count != 2 ||
                contractEvent.EventSignatureHash() != eventSignatureHash)
            {
                throw new Exception("Invalid contract event");
            }

            var initiatorHex = contractEvent.HexData.Substring(PrefixOffset, TopicSizeInHex);
            var valueHex     = contractEvent.HexData.Substring(PrefixOffset + TopicSizeInHex, TopicSizeInHex);

            return(new ERC20AddedEventDTO
            {
                HashedSecret = Hex.FromString(contractEvent.Topics[1], true),
                Initiator = $"0x{initiatorHex.Substring(initiatorHex.Length - AddressLengthInHex)}",
                Value = new HexBigInteger(valueHex).Value
            });
        }
Exemplo n.º 4
0
        public static ERC20TransferEventDTO ParseERC20TransferEvent(
            this EtherScanApi.ContractEvent contractEvent)
        {
            var eventSignatureHash = EventSignatureExtractor.GetSignatureHash <ERC20TransferEventDTO>();

            if (contractEvent.Topics == null ||
                contractEvent.Topics.Count != 3 ||
                contractEvent.EventSignatureHash() != eventSignatureHash)
            {
                throw new Exception("Invalid ERC20 token contract event");
            }

            var valueHex = contractEvent.HexData.Substring(PrefixOffset, TopicSizeInHex);

            return(new ERC20TransferEventDTO
            {
                From =
                    $"0x{contractEvent.Topics[1].Substring(contractEvent.Topics[1].Length - AddressLengthInHex)}",
                To =
                    $"0x{contractEvent.Topics[2].Substring(contractEvent.Topics[2].Length - AddressLengthInHex)}",
                Value = new HexBigInteger(valueHex).Value
            });
        }
Exemplo n.º 5
0
 public static bool IsERC20RefundedEvent(this EtherScanApi.ContractEvent contractEvent)
 {
     return(contractEvent.EventSignatureHash() == EventSignatureExtractor.GetSignatureHash <ERC20RefundedEventDTO>());
 }