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 }); }
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), }); }
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 }); }
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 }); }
public static bool IsERC20RefundedEvent(this EtherScanApi.ContractEvent contractEvent) { return(contractEvent.EventSignatureHash() == EventSignatureExtractor.GetSignatureHash <ERC20RefundedEventDTO>()); }