| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- |%
- ++ bmonth 4.383
- ++ byear ^~((mul 12 4.383))
- ++ atoms-per-nock ^~((bex 16))
- ::
- ++ schedule
- |= block-num=@
- ^- @ :: emission is number of atoms
- ?: =(0 block-num) 0 :: no coins in genesis block
- :: least inconvenient offset to deal with coinless
- :: genesis block
- =. block-num (dec block-num)
- =; emit=@
- ?: (gte block-num (add 2 (mul byear 191)))
- :: rate goes to 0 at 191 years and 2 blocks. not strictly
- :: necessary since the algorithm would do so anyways, but
- :: it makes it clear exactly when emissions stop.
- ?> =(0 emit) 0
- ?> !=(0 emit) emit
- =/ rate ^~((mul (bex 16) atoms-per-nock))
- =? rate (gth block-num (mul bmonth 3))
- (div rate 2)
- =? rate (gth block-num (mul bmonth 9))
- (div rate 2)
- =? rate (gth block-num (mul bmonth 18))
- (div rate 2)
- =? rate (gth block-num (mul byear 3))
- (div rate 2)
- =? rate (gth block-num (mul byear 5))
- (div rate 2)
- =? rate (gth block-num (mul byear 8))
- (div rate 2)
- =? rate (gth block-num (mul byear 12))
- (div rate 2)
- =? rate (gth block-num (mul byear 17))
- (div rate 2)
- =? rate (gth block-num (mul byear 23))
- (div rate 2)
- ?. (gth block-num (mul byear 30))
- rate
- =: rate (div rate 2)
- block-num (sub block-num (mul byear 30))
- ==
- |-
- ?: (gth block-num (mul byear 7))
- $(rate (div rate 2), block-num (sub block-num (mul byear 7)))
- rate
- ::
- ++ total-supply
- |= max-block=@
- ^- @
- =/ cur-block 0
- =/ sum-atoms 0
- |-
- ?: =(cur-block max-block)
- sum-atoms
- %_ $
- cur-block +(cur-block)
- sum-atoms (add sum-atoms (schedule cur-block))
- ==
- ::
- ++ supply-evolution
- |= max-block=@
- ^- (list @)
- =/ cur-block 0
- =/ sum-atoms 0
- =/ lis=(list @) ~[0]
- |-
- ?: =(cur-block max-block)
- (flop lis)
- =: cur-block +(cur-block)
- sum-atoms (add sum-atoms (schedule cur-block))
- ==
- =. lis [sum-atoms lis]
- $
- --
|