@@ -818,4 +818,96 @@ describe('consumers/create-transformed-erc20-event-fills', () => {
818
818
819
819
expect ( fills ) . toHaveLength ( 1 ) ;
820
820
} ) ;
821
+
822
+ /*
823
+ This scenario handles an edge-case whereby some trades will emit two ERC20BridgeTransfer
824
+ events for a single transfer. If the events are not deduped then volume gets double counted.
825
+ */
826
+ it ( 'should dedupe ERC20BridgeTransfer events before creating fills' , async ( ) => {
827
+ await Event . create ( [
828
+ {
829
+ _id : '5f4e754b6609e17174cbf1d2' ,
830
+ protocolVersion : 3 ,
831
+ blockNumber : 10776336 ,
832
+ data : {
833
+ inputToken : '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' ,
834
+ inputTokenAmount : '7108136500' ,
835
+ outputToken : '0xdac17f958d2ee523a2206206994597c13d831ec7' ,
836
+ outputTokenAmount : '7113021184' ,
837
+ taker : '0x9b43818e253baed56e14a96d677347a06c77c6c1' ,
838
+ } ,
839
+ dateIngested : new Date ( '2020-09-01T16:22:35.629Z' ) ,
840
+ logIndex : 181 ,
841
+ transactionHash :
842
+ '0x70462e739348dfab76384297b7461293800163691b28b3ba5413c07465b6b6f1' ,
843
+ type : 'TransformedERC20' ,
844
+ } ,
845
+ {
846
+ _id : '5f4e7552a21d432dbead93f7' ,
847
+ blockNumber : 10776336 ,
848
+ data : {
849
+ from : '0xAF76A7c57B441501bb7A6354728e3F5e13872139' ,
850
+ fromToken : '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' ,
851
+ fromTokenAmount : '7108136500' ,
852
+ to : '0x22F9dCF4647084d6C31b2765F6910cd85C178C18' ,
853
+ toToken : '0xdAC17F958D2ee523a2206206994597C13D831ec7' ,
854
+ toTokenAmount : '7113021184' ,
855
+ } ,
856
+ logIndex : 177 ,
857
+ transactionHash :
858
+ '0x70462e739348dfab76384297b7461293800163691b28b3ba5413c07465b6b6f1' ,
859
+ type : 'ERC20BridgeTransfer' ,
860
+ protocolVersion : 3 ,
861
+ dateIngested : new Date ( '2020-09-01T16:22:42.946Z' ) ,
862
+ } ,
863
+ {
864
+ _id : '5f4e7552a21d432dbead93f8' ,
865
+ blockNumber : 10776336 ,
866
+ data : {
867
+ from : '0xAF76A7c57B441501bb7A6354728e3F5e13872139' ,
868
+ fromToken : '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' ,
869
+ fromTokenAmount : '7108136500' ,
870
+ to : '0x22F9dCF4647084d6C31b2765F6910cd85C178C18' ,
871
+ toToken : '0xdAC17F958D2ee523a2206206994597C13D831ec7' ,
872
+ toTokenAmount : '7113021184' ,
873
+ } ,
874
+ logIndex : 179 ,
875
+ transactionHash :
876
+ '0x70462e739348dfab76384297b7461293800163691b28b3ba5413c07465b6b6f1' ,
877
+ type : 'ERC20BridgeTransfer' ,
878
+ protocolVersion : 3 ,
879
+ dateIngested : new Date ( '2020-09-01T16:22:42.946Z' ) ,
880
+ } ,
881
+ ] ) ;
882
+
883
+ await Transaction . create ( {
884
+ _id : '5f4e7552a21d432dbead93f9' ,
885
+ affiliateAddress : '0x86003b044f70dac0abc80ac8957305b6370893ed' ,
886
+ blockHash :
887
+ '0xa9bd4f1f3fa5d4f48aec53ed1b48220f24b6852a47c5a3fa914f955170d9171e' ,
888
+ blockNumber : 10776336 ,
889
+ data :
890
+ '0x415565b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000001a7ad8e3400000000000000000000000000000000000000000000000000000001a3baba9b00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000005800000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000001a7ad8e3400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000af76a7c57b441501bb7a6354728e3f5e1387213900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a3baba9c00000000000000000000000000000000000000000000000000000001a7ad8e3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f4e8fe246e26df6a55825fc5c6af245284ed8791df42e21c944c93609c175cc6c206f7000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000a4dc1600f3000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000af76a7c57b441501bb7a6354728e3f5e1387213900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f47261b0000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000000000000000000869584cd00000000000000000000000086003b044f70dac0abc80ac8957305b6370893ed000000000000000000000000000000000000000000000033914ab5c85f4e73c2' ,
891
+ date : new Date ( '2020-09-01T16:19:01.000Z' ) ,
892
+ from : '0x9b43818e253baed56e14a96d677347a06c77c6c1' ,
893
+ gasLimit : 360091 ,
894
+ gasPrice : '476000000000' ,
895
+ gasUsed : 301570 ,
896
+ hash :
897
+ '0x70462e739348dfab76384297b7461293800163691b28b3ba5413c07465b6b6f1' ,
898
+ index : 97 ,
899
+ nonce : '690' ,
900
+ quoteDate : new Date ( '2020-09-01T16:16:02.000Z' ) ,
901
+ to : '0xdef1c0ded9bec7f1a1670819833240f027b25eff' ,
902
+ value : '0' ,
903
+ } ) ;
904
+
905
+ const job = { data : { eventId : '5f4e754b6609e17174cbf1d2' } } ;
906
+
907
+ await createTransformedERC20EventFills . fn ( job , mockOptions ) ;
908
+
909
+ const fills = await Fill . find ( ) . lean ( ) ;
910
+
911
+ expect ( fills ) . toHaveLength ( 1 ) ;
912
+ } ) ;
821
913
} ) ;
0 commit comments