use seam events to make sure broadcase only happen after TX success