I am seeing this strange transaction on Polygon. It has no tx fee, sender and destination are all 0x000(Null). Internal transactions are some deposits over bridges and token minting.

Does anybody know what it is?

Edit: As tenbits' answer, it is a state sync transaction. In the doc it says:

All the validators on the Heimdall chain receive this event and one of them, whoever wishes to get the tx fees for state sync sends this transaction to Heimdall.

Once state-sync transaction on Heimdall has been included in a block, it is added to pending state-sync list.

After every sprint on bor, the Bor node fetches the pending state-sync events from Heimdall via an API call.

If I understand this correctly, state sync transactions do not execute immediately after it is included in a block. But instead, it waits for Bor to fetch the events in each sprint. But how does the consensus work here?

Does it also mean the tx fee is paid separately on the Heimdall layer? Is that why the tx fee is 0 for this transaction? Is it possible?🤔

  • Are those bridging transactions? Apr 17, 2023 at 9:05
  • Don’t beleive msg.sender is null in any case. That would be too easy. Jan 20 at 18:06

1 Answer 1


The short answer is yes, those txs are part of the L1-L2 sync process: FxPortal. Bridging (seems to be the case here) is built on top of the sync process, but it could be any art of data synchronization - like totalSupply of a token, etc.

Edit based on comments:

There are no state-sync contracts (which perform the state-sync actions), but the arbitrary contracts can implement the state-sync interface of FxChild to receive the state-sync messages. The state-sync messages are traversing from Mainnet to the Heimdall layer, then to the Bor layer through multiple validators.

When state-sync transaction is included into the blockchain the messages are propagated to receivers. The tx can contain a batch of messages, fully independent. In https://polygonscan.com/tx/0x7f18432aaad77fb5b96f69dfff87905bc46c9c85c6d41c9ac5264fd979816724#eventlog you can notice 2 NewFxMessage logs and their receiver fields. Those contracts are completely separate contracts.

That is why:

  • from is empty - it is a low level transaction handled by multiple validators.
  • to is empty - not a single contract receives the state-sync messages, but batch of messages are propagated to different contracts.
  • Thanks for the answer! But this contract doesn't really seem related to the statesync contract. 🤔 In fact the statesync contract(polygonscan.com/address/…) seems to be inactive for a long time. I can be wrong here. Apr 18, 2023 at 13:38
  • Anyway your answer is very valuable. I will keep on research in this direction. Cheers! Apr 18, 2023 at 13:40
  • I have updated the answer, maybe it will be helpful. You are welcome.
    – tenbits
    Apr 18, 2023 at 21:15
  • I can see it now. Thank you Ser. Apr 19, 2023 at 2:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.