derived.hoon 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. /= dk /apps/dumbnet/lib/types
  2. /= dumb-transact /common/tx-engine
  3. /= * /common/zoon
  4. ::
  5. |_ [d=derived-state:dk =blockchain-constants:dumb-transact]
  6. +* t ~(. dumb-transact blockchain-constants)
  7. :: +update: update metadata derived from consensus state
  8. ++ update
  9. |= [c=consensus-state:dk pag=page:t]
  10. ^- derived-state:dk
  11. =/ heaviest-page=page:t
  12. ?: =(~ heaviest-block.c)
  13. pag :: genesis block
  14. (to-page:local-page:t (~(got z-by blocks.c) (need heaviest-block.c)))
  15. =/ next-parent=block-id:t digest.heaviest-page
  16. =/ next-height=page-number:t height.heaviest-page
  17. |-
  18. ?: =((~(get z-by heaviest-chain.d) next-height) `next-parent)
  19. :: heaviest chain is accurate
  20. ::TODO check there aren't any blocks at page-numbers higher than
  21. ::the page-number of the heaviest block?
  22. d
  23. :: heaviest chain is wrong, start revising
  24. =. heaviest-chain.d
  25. (~(put z-by heaviest-chain.d) next-height next-parent)
  26. ?: =(*page-number:t next-height)
  27. :: genesis block was put into heaviest-chain, so we're done
  28. d
  29. %= $
  30. next-height (dec next-height)
  31. next-parent parent:(~(got z-by blocks.c) next-parent)
  32. ==
  33. --