diff --git a/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_v2_packet.sql b/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_v2_packet.sql index 6b89d0b..9060ffc 100644 --- a/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_v2_packet.sql +++ b/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_v2_packet.sql @@ -51,26 +51,26 @@ WHERE AND event_name = 'PacketSent' AND contract_address = LOWER('0x1a44076050125825900e736c501f859c50fE728c') -- layerzero endpoint v2 /* - - bus rode - https://basescan.org/tx/0x10bebb3d970a50ca3dcb91c57559915c8c79490b17f023823ec92dbb463572c3#eventlog - - bus driven - https://basescan.org/tx/0x1b19373f9153a3271880a404b62a2eb961e06d3b18ac9fe6e4dd86032bc63d12#eventlog - - passenger follows this format: - 000D – asset id - 000000000000000000000000CADC222B22BDB30147BB8FB9726AA9E00A01441C – receiver - 000000000001EFE9 – amountSD - 00 –nativeDrop - - - uint16 assetId; - bytes32 receiver; - uint64 amountSD; - bool nativeDrop; - - - assetIDs from stargate - - */ + + bus rode + https://basescan.org/tx/0x10bebb3d970a50ca3dcb91c57559915c8c79490b17f023823ec92dbb463572c3#eventlog + + bus driven + https://basescan.org/tx/0x1b19373f9153a3271880a404b62a2eb961e06d3b18ac9fe6e4dd86032bc63d12#eventlog + + passenger follows this format: + 000D – asset id + 000000000000000000000000CADC222B22BDB30147BB8FB9726AA9E00A01441C – receiver + 000000000001EFE9 – amountSD + 00 –nativeDrop + + + uint16 assetId; + bytes32 receiver; + uint64 amountSD; + bool nativeDrop; + + + assetIDs from stargate + + */ diff --git a/models/silver/defi/bridge/layerzero/silver_bridge__stargate_v2.sql b/models/silver/defi/bridge/layerzero/silver_bridge__stargate_v2.sql new file mode 100644 index 0000000..5e70fbb --- /dev/null +++ b/models/silver/defi/bridge/layerzero/silver_bridge__stargate_v2.sql @@ -0,0 +1,277 @@ +{{ config( + materialized = 'incremental', + incremental_strategy = 'delete+insert', + unique_key = "contract_address", + tags = ['silver_bridge','defi','bridge','curated'] +) }} + +WITH decoded_logs AS ( + + SELECT + block_number, + block_timestamp, + event_index, + contract_address, + event_name, + decoded_log, + tx_hash + FROM + {{ ref('core__ez_decoded_event_logs') }} + WHERE + block_timestamp :: DATE >= '2024-01-01' + AND ( + ( + event_name = 'PacketSent' + AND contract_address = LOWER('0x1a44076050125825900e736c501f859c50fE728c') -- layerzero endpoint v2 + ) + OR ( + event_name = 'BusDriven' + AND contract_address = LOWER('0x5634c4a5fed09819e3c46d86a965dd9447d86e47') -- stargate token messaging + ) + ) +), +layerzero AS ( + SELECT + block_timestamp, + tx_hash, + event_index, + SUBSTR( + decoded_log :encodedPayload :: STRING, + 3 + ) AS payload, + SUBSTR( + payload, + 1, + 2 + ) AS TYPE, + SUBSTR( + payload, + 3, + 16 + ) AS nonce, + utils.udf_hex_to_int(SUBSTR(payload, 19, 8)) AS source_chain_hex, + '0x' || SUBSTR(SUBSTR(payload, 27, 64), 25) AS sender_ca, + -- token messaging for stargate in arbitrum + utils.udf_hex_to_int(SUBSTR(payload, 91, 8)) AS dst_chain_hex, + '0x' || SUBSTR(SUBSTR(payload, 99, 64), 25) AS receiver_ca, + SUBSTR( + payload, + 163, + 64 + ) AS guid, + SUBSTR( + payload, + 227, + 2 + ) AS message_type {# SUBSTR( + payload, + 229, + 4 +) AS message_type_2, +'0x' || SUBSTR(SUBSTR(payload, 233, 64), 25) AS dst_chain_receiver #} +FROM + decoded_logs +WHERE + event_name = 'PacketSent' + AND contract_address = LOWER('0x1a44076050125825900e736c501f859c50fE728c') -- layerzero endpoint v2 +), +bus_driven_raw AS ( + SELECT + block_timestamp, + tx_hash, + event_index, + contract_address, + decoded_log :dstEid :: INT AS dst_id, + SUBSTR( + decoded_log :guid :: STRING, + 3 + ) AS guid, + decoded_log :numPassengers :: INT AS num_passengers, + decoded_log :startTicketId :: INT AS start_ticket_id, + ROW_NUMBER() over ( + PARTITION BY tx_hash + ORDER BY + event_index ASC + ) AS rn, + start_ticket_id + num_passengers - 1 AS end_ticket_id + FROM + decoded_logs + WHERE + event_name = 'BusDriven' + AND contract_address = '0x5634c4a5fed09819e3c46d86a965dd9447d86e47' +), +bus_driven AS ( + SELECT + r.block_timestamp, + r.tx_hash, + r.event_index, + contract_address, + r.dst_id, + start_ticket_id, + num_passengers, + end_ticket_id, + b.ticket_id, + asset_id, + dst_receiver_address, + amount_transferred, + guid + FROM + bus_driven r + INNER JOIN {{ ref('silver_bridge__stargate_v2_bus') }} + b + ON r.dst_id = b.dst_id + AND b.ticket_id >= start_ticket_id + AND b.ticket_id <= end_ticket_id +), +final_bus_driven AS ( + SELECT + block_timestamp, + tx_hash, + guid, + event_index, + contract_address, + dst_id, + start_ticket_id, + num_passengers, + end_ticket_id, + ticket_id, + asset_id, + dst_receiver_address, + amount_transferred, + payload, + TYPE, + nonce, + source_chain_hex, + sender_ca, + dst_chain_hex, + receiver_ca, + message_type, + message_type + FROM + bus_driven b + LEFT JOIN layerzero l + ON b.tx_hash = l.tx_hash + AND b.guid = l.guid +), +oft_raw AS ( + SELECT + block_number, + block_timestamp, + tx_hash, + event_index, + contract_address, + topic_0, + topic_1, + topic_2, + topic_3, + contract_address, + contract_address AS stargate_adapter_address, + DATA, + regexp_substr_all(SUBSTR(DATA, 3), '.{64}') AS part, + SUBSTR( + topic_1, + 3 + ) AS guid, + '0x' || SUBSTR( + topic_2, + 27 + ) AS from_address, + -- src sender + utils.udf_hex_to_int( + part [0] :: STRING + ) AS dst_id, + utils.udf_hex_to_int( + part [1] :: STRING + ) AS amount_sent + FROM + {{ ref('core__fact_event_logs') }} + WHERE + block_timestamp :: DATE >= '2024-01-01' + AND topic_0 = '0x85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a' --OFTSent +), +final_oft AS ( + SELECT + block_number, + block_timestamp, + tx_hash, + l.event_index, + contract_address, + guid, + from_address, + -- src sender + dst_id, + amount_sent, + payload, + TYPE, + nonce, + source_chain_hex, + sender_ca, + -- token messaging for stargate in arbitrum + dst_chain_hex, + receiver_ca, + message_type, + SUBSTR( + payload, + 229, + 4 + ) AS message_type_2, + '0x' || SUBSTR(SUBSTR(payload, 233, 64), 25) AS dst_chain_receiver + FROM + oft_raw o + INNER JOIN layerzero l + ON o.tx_hash = l.tx_hash + AND o.guid = l.guid +) +SELECT + block_timestamp, + tx_hash, + guid, + event_index, + contract_address, + -- either stargate adapter(taxi) or stargate token messaging(bus) + dst_id, + --start_ticket_id, + --num_passengers, + --end_ticket_id, + --ticket_id, + asset_id, + dst_receiver_address, + amount_transferred, + payload, + TYPE, + nonce, + source_chain_hex, + sender_ca, + dst_chain_hex, + receiver_ca, + message_type, + message_type +FROM + final_bus_driven +UNION ALL +SELECT + tx_hash, + l.event_index, + contract_address, + guid, + from_address, + -- src sender + dst_id, + amount_sent, + payload, + TYPE, + nonce, + source_chain_hex, + sender_ca, + -- token messaging for stargate in arbitrum + dst_chain_hex, + receiver_ca, + message_type, + SUBSTR( + payload, + 229, + 4 + ) AS message_type_2, + '0x' || SUBSTR(SUBSTR(payload, 233, 64), 25) AS dst_chain_receiver +FROM + final_oft diff --git a/models/silver/defi/bridge/layerzero/silver_bridge__stargate_v2_bus.sql b/models/silver/defi/bridge/layerzero/silver_bridge__stargate_v2_bus.sql index ff5c7a5..618a6bb 100644 --- a/models/silver/defi/bridge/layerzero/silver_bridge__stargate_v2_bus.sql +++ b/models/silver/defi/bridge/layerzero/silver_bridge__stargate_v2_bus.sql @@ -8,6 +8,7 @@ WITH logs AS ( SELECT + block_number, block_timestamp, tx_hash, event_index, @@ -16,6 +17,7 @@ WITH logs AS ( topic_1, topic_2, topic_3, + DATA, regexp_substr_all(SUBSTR(DATA, 3), '.{64}') AS part FROM {{ ref('core__fact_event_logs') }} @@ -85,10 +87,12 @@ bus_raw AS ( 323, passenger_length ) AS passenger_final, - SUBSTR( - passenger_final, - 1, - 4 + utils.udf_hex_to_int( + SUBSTR( + passenger_final, + 1, + 4 + ) ) AS asset_id, '0x' || SUBSTR(SUBSTR(passenger_final, 5, 64), 25) AS dst_receiver_address, utils.udf_hex_to_int(SUBSTR(passenger_final, 69, 16)) AS amount_transferred,