mirror of
https://github.com/Chia-Network/chia-blockchain.git
synced 2024-09-21 00:24:37 +03:00
Bump clvm and replace ((c P A))
with (a P A)
. Add some cc fixes prior to audit. (#1133)
* Bump clvm versions and replace `((c P A))` with `(a P A)`. Again. * Modernize some clvm. * Fix some comments and naming in `cc.clvm`. * Prohibit `CREATE_ANNOUNCEMENT` in inner puzzle. * fix cc.clvm initial commit for innerpuz announcement test Co-authored-by: matt <matt@chia.net>
This commit is contained in:
parent
bac6e36c05
commit
f79152d1ab
6
setup.py
6
setup.py
@ -7,9 +7,9 @@ dependencies = [
|
||||
"chiavdf==0.15.1", # timelord and vdf verification
|
||||
"chiabip158==0.19", # bip158-style wallet filters
|
||||
"chiapos==0.12.45", # proof of space
|
||||
"clvm==0.9.0",
|
||||
"clvm_rs==0.1.3", # noqa
|
||||
"clvm_tools==0.4.1", # noqa
|
||||
"clvm==0.9.3",
|
||||
"clvm_rs==0.1.4",
|
||||
"clvm_tools==0.4.3",
|
||||
"aiohttp==3.7.4", # HTTP server for full node rpc
|
||||
"aiosqlite==0.17.0", # asyncio wrapper for sqlite, to store blocks
|
||||
"bitstring==3.1.7", # Binary data management library
|
||||
|
@ -34,7 +34,7 @@ def args(*path, p=1):
|
||||
|
||||
|
||||
def eval(code, env=args()):
|
||||
return sexp(cons(code, env))
|
||||
return sexp("a", code, env)
|
||||
|
||||
|
||||
def apply(name, argv):
|
||||
@ -68,12 +68,12 @@ def sha256(*argv):
|
||||
|
||||
|
||||
SHA256TREE_PROG = """
|
||||
((c (q ((c 2 (c 2 (c 3 (q ()))))))
|
||||
(c (q ((c (i (l 5)
|
||||
(a (q (a 2 (c 2 (c 3 (q ())))))
|
||||
(c (q (a (i (l 5)
|
||||
(q (sha256 (q 2)
|
||||
((c 2 (c 2 (c 9 (q ())))))
|
||||
((c 2 (c 2 (c 13 (q ())))))))
|
||||
(q (sha256 (q 1) 5))) 1))) %s)))
|
||||
(a 2 (c 2 (c 9 (q ()))))
|
||||
(a 2 (c 2 (c 13 (q ()))))))
|
||||
(q (sha256 (q 1) 5))) 1)) %s))
|
||||
"""
|
||||
|
||||
|
||||
|
@ -1 +1 @@
|
||||
ff1dff02ffff1effff0bff02ff05808080
|
||||
ff1dff02ffff1effff0bff02ff05808080
|
@ -1,47 +1,74 @@
|
||||
; Coins locked with this puzzle are spendable ccs.
|
||||
;
|
||||
; Choose a list of n inputs (n>=1), I_1, ... I_n.
|
||||
; Choose a list of n inputs (n>=1), I_1, ... I_n with amounts A_1, ... A_n.
|
||||
;
|
||||
; A_k : the amount contributed as available for spending by input I_k
|
||||
; I_k : the input coins, I_k = (parent_k, puzzle_hash_k, A_k) where A_k is an input "amount".
|
||||
; L_k : the lock coin created by I_k and consumed by I_{k-1}
|
||||
; O_k : the amount spent by I_k
|
||||
; D_k = the "delta" O_k - A_k contribution of coin I_k, ie. how much debt this input accumulates
|
||||
; S_k : the "running subtotal" of deltas (see below)
|
||||
; We put them in a ring, so "previous" and "next" have intuitive k-1 and k+1 semantics,
|
||||
; wrapping so {n} and 0 are the same, ie. all indices are mod n.
|
||||
;
|
||||
; Each input I_k has an inner solution that creates 0 or more outputs, with total amount O_k.
|
||||
; Each coin creates 0 or more coins with total output value O_k.
|
||||
; Let D_k = the "debt" O_k - A_k contribution of coin I_k, ie. how much debt this input accumulates.
|
||||
; Some coins may spend more than they contribute and some may spend less, ie. D_k need
|
||||
; not be zero. That's okay. It's enough for the total of all D_k in the ring to be 0.
|
||||
;
|
||||
; A coin can calculate its own D_k since it can verify A_k (it's hashed into the coin id)
|
||||
; and it can sum up `CREATE_COIN` conditions for O_k.
|
||||
;
|
||||
; Defines a "subtotal of debts" S_k for each coin as follows:
|
||||
;
|
||||
; S_1 = 0
|
||||
; S_k = S_{k-1} + D_{k-1}
|
||||
;
|
||||
; Here's the main trick that shows the ring sums to 0.
|
||||
; You can prove by induction that S_{k+1} = D_1 + D_2 + ... + D_k.
|
||||
; But it's a ring, so S_{n+1} is also S_1, which is 0. So D_1 + D_2 + ... + D_k = 0.
|
||||
; So the total debts must be 0, ie. no coins are created or destroyed.
|
||||
;
|
||||
; Each coin's solution includes I_{k-1}, I_k, and I_{k+1} along with proofs that each is a CC.
|
||||
; Each coin's solution includes S_{k-1}. It calculates D_k = O_k - A_k, and then S_k = S_{k-1} + D_{k-1}
|
||||
;
|
||||
; Announcements are used to ensure that each S_k follows the pattern is valid.
|
||||
; Announcements automatically commit to their own coin id.
|
||||
; Coin I_k creates an announcement that further commits to I_{k-1} and S_{k-1}.
|
||||
;
|
||||
; Coin I_k gets a proof that I_{k+1} is a CC, so it knows it must also create an announcement
|
||||
; when spent. It checks that I_{k+1} creates an announcement committing to I_k and S_k.
|
||||
;
|
||||
; So S_{k+1} is correct iff S_k is correct.
|
||||
;
|
||||
; Coins also receive proofs that their neighbors are ccs, ensuring the announcements aren't forgeries, as
|
||||
; inner puzzles are not allowed to use `CREATE_ANNOUNCEMENT`.
|
||||
;
|
||||
; In summary, I_k generates an announcement Y_k (for "yell") as follows:
|
||||
;
|
||||
; Y_k: hash of I_k (automatically), I_{k-1}, S_k
|
||||
;
|
||||
; Each coin ensures that the next coin's announcement is as expected:
|
||||
; Y_{k+1} : hash of I_{k+1}, I_k, S_{k+1}
|
||||
;
|
||||
; TLDR:
|
||||
; I_k : coins
|
||||
; A_k : amount coin k contributes
|
||||
; O_k : amount coin k spend
|
||||
; D_k : difference/delta that coin k incurs (A - O)
|
||||
; S_k : subtotal of debts D_1 + D_2 ... + D_k
|
||||
; Y_k : announcements created by coin k commiting to I_{k-1}, I_k, S_k
|
||||
;
|
||||
; All conditions go through a "transformer" that looks for CREATE_COIN conditions
|
||||
; generated by the inner solution, and wraps the puzzle hash.
|
||||
; generated by the inner solution, and wraps the puzzle hash ensuring the output is a cc.
|
||||
;
|
||||
; Three output conditions are prepended to the list of conditions for each I_k:
|
||||
; (ASSERT_MY_ID I_k) to ensure that the passed in value for I_k is correct
|
||||
; (CREATE_COIN L_k 0) to create the lock coin
|
||||
; (ASSERT_COIN_CONSUMED L_{k+1}) to consume the next coin's lock
|
||||
;
|
||||
; For each k, define the "subtotal at k" S_k as follows:
|
||||
; S_1 = 0 (it could actually be any value, but 0 is an obvious nice way to start)
|
||||
; S_{k+1} = S_k + D_k = S_k + O_k - A_k
|
||||
;
|
||||
; Each input I_k creates a lock output L_k that has commitments to the following values:
|
||||
; - O_k (calculated from the inner puzzle & inner solution)
|
||||
; - I_k (passed in by the solution, and verified with ASSERT_MY_ID)
|
||||
; - I_{k+1} where k+1 wraps around to 1 if k = n (passed in by the solution)
|
||||
; - S_k (passed in by the solution)
|
||||
;
|
||||
; We generate a (CREATE_COIN L_k 0) condition, a lock coin with 0 value.
|
||||
;
|
||||
; The solution will also pass in O_{k+1} and I_{k+2}.
|
||||
; With this, and knowing S_k, O_k and A_k, we can calculate L_{k+1} and
|
||||
; generate an (ASSERT_COIN_CONSUMED L_{k+1}) condition.
|
||||
; (CREATE_ANNOUNCEMENT I_{k-1} S_k) to create this coin's announcement
|
||||
; (ASSERT_ANNOUNCEMENT hashed_announcement(Y_{k+1})) to ensure the next coin really is next and
|
||||
; the relative values of S_k and S_{k+1} are correct
|
||||
;
|
||||
; This is all we need to do to ensure ccs exactly balance in the inputs and outputs.
|
||||
;
|
||||
; Proof:
|
||||
; Consider n, k, I_k values, O_k values, S_k and A_k as above.
|
||||
; For the (CREATE_COIN L_k) and (ASSERT_COIN_CONSUMED L_{k+1}) to match,
|
||||
; we see that I_k can ensure that is has the correct values for many things,
|
||||
; including O_{k+1}, A_{k+1}.
|
||||
; For the (CREATE_ANNOUNCEMENT Y_{k+1}) (created by the next coin)
|
||||
; and (ASSERT_ANNOUNCEMENT hashed(Y_{k+1})) to match,
|
||||
; we see that I_k can ensure that is has the correct value for S_{k+1}.
|
||||
;
|
||||
; By induction, we see that S_{m+1} = sum(i, 1, m) [O_i - A_i] = sum(i, 1, m) O_i - sum(i, 1, m) A_i
|
||||
; So S_{n+1} = sum(i, 1, n) O_i - sum(i, 1, n) A_i. But S_{n+1} is actually S_1 = 0,
|
||||
@ -54,25 +81,29 @@
|
||||
;; GLOSSARY:
|
||||
;; mod-hash: this code's sha256 tree hash
|
||||
;; genesis-coin-checker: the function that determines if a coin can mint new ccs
|
||||
;; inner-puzzle: the puzzle protecting the coins
|
||||
;; inner-puzzle: an independent puzzle protecting the coins. Solutions to this puzzle are expected to
|
||||
;; generate `AGG_SIG` conditions and possibly `CREATE_COIN` conditions.
|
||||
;; ---- items above are curried into the puzzle hash ----
|
||||
;; inner-puzzle-solution: the solution to the inner puzzle
|
||||
;; prev-coin-bundle: the bundle for the previous coin
|
||||
;; my-coin-bundle: the bundle for this coin
|
||||
;; next-coin-bundle: the bundle for the next coin
|
||||
;; left-subtotal: the subtotal between prev-coin and this-coin
|
||||
;; prev-coin-bundle: the bundle for previous coin
|
||||
;; this-coin-bundle: the bundle for this coin
|
||||
;; next-coin-bundle: the bundle for next coin
|
||||
;; prev-subtotal: the subtotal between prev-coin and this-coin
|
||||
;;
|
||||
;; A coin bundle is the cons box ((parent_id puzzle_hash amount) . lineage_proof)
|
||||
;; coin-info: `(parent_id puzzle_hash amount)`. This defines the coin id used with ASSERT_MY_COIN_ID
|
||||
;; coin-bundle: the cons box `(coin-info . lineage_proof)`
|
||||
;;
|
||||
;; and automatically hashed in to the announcement generated with CREATE_ANNOUNCEMENT.
|
||||
;;
|
||||
|
||||
(mod (mod-hash ;; curried into puzzle
|
||||
genesis-coin-checker ;; curried into puzzle
|
||||
inner-puzzle ;; curried into puzzle
|
||||
inner-puzzle-solution ;; if invalid, inner-puzzle will fail
|
||||
prev-coin-bundle ;; used in this coin's lock coin, prev-coin ASSERT_CONSUMED will fail if wrong
|
||||
my-coin-bundle ;; verified with ASSERT_MY_COIN_ID
|
||||
next-coin-bundle ;; used to generate ASSERT_CONSUMED
|
||||
left-subtotal ;; included in lock, prev-coin ASSERT_CONSUMED will fail if wrong
|
||||
prev-coin-bundle ;; used in this coin's announcement, prev-coin ASSERT_ANNOUNCEMENT will fail if wrong
|
||||
this-coin-bundle ;; verified with ASSERT_MY_COIN_ID
|
||||
next-coin-bundle ;; used to generate ASSERT_ANNOUNCEMENT
|
||||
prev-subtotal ;; included in announcement, prev-coin ASSERT_ANNOUNCEMENT will fail if wrong
|
||||
)
|
||||
|
||||
;;;;; start library code
|
||||
@ -150,13 +181,17 @@
|
||||
)
|
||||
|
||||
;; tweak `CREATE_COIN` condition by wrapping the puzzle hash, forcing it to be a cc
|
||||
;; prohibit CREATE_ANNOUNCEMENT
|
||||
(defun-inline morph-condition (condition lineage-proof-parameters)
|
||||
(if (= (f condition) CREATE_COIN)
|
||||
(list CREATE_COIN
|
||||
(cc-puzzle-hash lineage-proof-parameters (f (r condition)))
|
||||
(f (r (r condition)))
|
||||
)
|
||||
condition
|
||||
(if (= (f condition) CREATE_ANNOUNCEMENT)
|
||||
(x)
|
||||
condition
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@ -177,34 +212,30 @@
|
||||
)
|
||||
|
||||
;; utility to fetch coin amount from coin
|
||||
(defun-inline amount-for-coin (coin)
|
||||
(defun-inline input-amount-for-coin (coin)
|
||||
(f (r (r coin)))
|
||||
)
|
||||
|
||||
;; calculate the coin id of a lock coin
|
||||
(defun-inline calculate-next-lock-coin-id (my-coin-info subtotal next-coin-info)
|
||||
(sha256 (coin-id-for-coin next-coin-info) (puzzle-hash-for-lock my-coin-info subtotal))
|
||||
;; calculate the hash of an announcement
|
||||
(defun-inline calculate-annoucement-id (this-coin-info this-subtotal next-coin-info)
|
||||
; NOTE: the next line containts a bug, as sha256tree1 ignores `this-subtotal`
|
||||
(sha256 (coin-id-for-coin next-coin-info) (sha256tree1 (list this-coin-info this-subtotal)))
|
||||
)
|
||||
|
||||
;; create the `ASSERT_COIN_CONSUMED` condition that ensures the next coin's lock is spent
|
||||
(defun-inline create-assert-next-lock-consumed-condition (my-coin-info right-subtotal next-coin-info)
|
||||
;; create the `ASSERT_ANNOUNCEMENT` condition that ensures the next coin's announcement is correct
|
||||
(defun-inline create-assert-next-announcement-condition (this-coin-info this-subtotal next-coin-info)
|
||||
(list ASSERT_ANNOUNCEMENT
|
||||
(calculate-next-lock-coin-id my-coin-info
|
||||
right-subtotal
|
||||
next-coin-info
|
||||
(calculate-annoucement-id this-coin-info
|
||||
this-subtotal
|
||||
next-coin-info
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; calculate the puzzle hash for a lock coin
|
||||
(defun-inline puzzle-hash-for-lock (prev-coin-info left-subtotal)
|
||||
(sha256tree1 prev-coin-info left-subtotal)
|
||||
)
|
||||
|
||||
;; here we commit to O_k, I_{k+1} and S_k
|
||||
(defun-inline create-lock-coin-condition (prev-coin-info subtotal)
|
||||
;; here we commit to I_{k-1} and S_k
|
||||
(defun-inline create-announcement-condition (prev-coin-info prev-subtotal)
|
||||
(list CREATE_ANNOUNCEMENT
|
||||
(puzzle-hash-for-lock prev-coin-info subtotal)
|
||||
(sha256tree1 (list prev-coin-info prev-subtotal))
|
||||
)
|
||||
)
|
||||
|
||||
@ -230,27 +261,27 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; ensure `my-coin-info` is correct by creating the `ASSERT_MY_COIN_ID` condition
|
||||
(defun-inline create-assert-my-id (my-coin-info)
|
||||
(list ASSERT_MY_COIN_ID (coin-id-for-coin my-coin-info))
|
||||
;; ensure `this-coin-info` is correct by creating the `ASSERT_MY_COIN_ID` condition
|
||||
(defun-inline create-assert-my-id (this-coin-info)
|
||||
(list ASSERT_MY_COIN_ID (coin-id-for-coin this-coin-info))
|
||||
)
|
||||
|
||||
;; add three conditions to the list of morphed conditions:
|
||||
;; CREATE_COIN for the lock coin
|
||||
;; ASSERT_MY_COIN_ID for `my-coin-info`
|
||||
;; ASSERT_COIN_CONSUMED for the next coin's lock coin
|
||||
;; ASSERT_MY_COIN_ID for `this-coin-info`
|
||||
;; CREATE_ANNOUNCEMENT for my announcement
|
||||
;; ASSERT_ANNOUNCEMENT for the next coin's announcement
|
||||
(defun-inline generate-final-output-conditions
|
||||
(
|
||||
left-subtotal
|
||||
right-subtotal
|
||||
prev-subtotal
|
||||
this-subtotal
|
||||
morphed-conditions
|
||||
prev-coin-info
|
||||
my-coin-info
|
||||
this-coin-info
|
||||
next-coin-info
|
||||
)
|
||||
(c (create-assert-my-id my-coin-info)
|
||||
(c (create-lock-coin-condition prev-coin-info left-subtotal)
|
||||
(c (create-assert-next-lock-consumed-condition my-coin-info right-subtotal next-coin-info)
|
||||
(c (create-assert-my-id this-coin-info)
|
||||
(c (create-announcement-condition prev-coin-info prev-subtotal)
|
||||
(c (create-assert-next-announcement-condition this-coin-info this-subtotal next-coin-info)
|
||||
morphed-conditions)
|
||||
)
|
||||
)
|
||||
@ -262,13 +293,13 @@
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;; lineage checking
|
||||
|
||||
;; return true iff parent of `my-coin-info` is provably a cc
|
||||
;; return true iff parent of `this-coin-info` is provably a cc
|
||||
(defun is-parent-cc (
|
||||
lineage-proof-parameters
|
||||
my-coin-info
|
||||
this-coin-info
|
||||
(parent-parent-coin-id parent-inner-puzzle-hash parent-amount)
|
||||
)
|
||||
(= (f my-coin-info)
|
||||
(= (f this-coin-info)
|
||||
(sha256 parent-parent-coin-id
|
||||
(cc-puzzle-hash lineage-proof-parameters parent-inner-puzzle-hash)
|
||||
parent-amount
|
||||
@ -287,12 +318,12 @@
|
||||
)
|
||||
|
||||
(defun-inline is-lineage-proof-valid (
|
||||
lineage-proof-parameters my-coin-info lineage-proof)
|
||||
lineage-proof-parameters coin-info lineage-proof)
|
||||
(if
|
||||
(f lineage-proof)
|
||||
(is-parent-cc lineage-proof-parameters my-coin-info (r lineage-proof))
|
||||
((c (genesis-coin-checker-for-lpp lineage-proof-parameters)
|
||||
(list lineage-proof-parameters my-coin-info (r lineage-proof))))
|
||||
(is-parent-cc lineage-proof-parameters coin-info (r lineage-proof))
|
||||
(a (genesis-coin-checker-for-lpp lineage-proof-parameters)
|
||||
(list lineage-proof-parameters coin-info (r lineage-proof)))
|
||||
)
|
||||
)
|
||||
|
||||
@ -308,23 +339,27 @@
|
||||
lineage-proof-parameters
|
||||
inner-conditions
|
||||
prev-coin-bundle
|
||||
my-coin-bundle
|
||||
this-coin-bundle
|
||||
next-coin-bundle
|
||||
left-subtotal
|
||||
prev-subtotal
|
||||
)
|
||||
(assert
|
||||
; ensure prev is a cc (is this really necessary?)
|
||||
(is-bundle-valid prev-coin-bundle lineage-proof-parameters)
|
||||
|
||||
(is-bundle-valid my-coin-bundle lineage-proof-parameters)
|
||||
; ensure this is a cc (to ensure parent wasn't counterfeit)
|
||||
(is-bundle-valid this-coin-bundle lineage-proof-parameters)
|
||||
|
||||
; ensure next is a cc (to ensure its announcements can be trusted)
|
||||
(is-bundle-valid next-coin-bundle lineage-proof-parameters)
|
||||
|
||||
(generate-final-output-conditions
|
||||
left-subtotal
|
||||
(+ left-subtotal (- (amount-for-coin (coin-info-for-coin-bundle my-coin-bundle)) (output-totals inner-conditions)))
|
||||
prev-subtotal
|
||||
; the expression on the next line calculates `this-subtotal` by adding the delta to `prev-subtotal`
|
||||
(+ prev-subtotal (- (input-amount-for-coin (coin-info-for-coin-bundle this-coin-bundle)) (output-totals inner-conditions)))
|
||||
(morph-conditions inner-conditions lineage-proof-parameters)
|
||||
(coin-info-for-coin-bundle prev-coin-bundle)
|
||||
(coin-info-for-coin-bundle my-coin-bundle)
|
||||
(coin-info-for-coin-bundle this-coin-bundle)
|
||||
(coin-info-for-coin-bundle next-coin-bundle)
|
||||
)
|
||||
)
|
||||
@ -333,10 +368,10 @@
|
||||
(main
|
||||
;; cache some stuff: output conditions, and lineage-proof-parameters
|
||||
(list mod-hash (sha256tree1 mod-hash) genesis-coin-checker (sha256tree1 genesis-coin-checker))
|
||||
((c inner-puzzle inner-puzzle-solution))
|
||||
(a inner-puzzle inner-puzzle-solution)
|
||||
prev-coin-bundle
|
||||
my-coin-bundle
|
||||
this-coin-bundle
|
||||
next-coin-bundle
|
||||
left-subtotal
|
||||
prev-subtotal
|
||||
)
|
||||
)
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff01ffff04ff7affff04ff02ffff04ffff04ff05ffff04ffffff04ff2effff04ff02ffff04ff05ffff018080808080ffff04ff0bffff04ffffff04ff2effff04ff02ffff04ff0bffff018080808080ffff018080808080ffff04ffffff04ff17ff2f8080ffff04ff5fffff04ff81bfffff04ff82017fffff04ff8202ffffff0180808080808080808080ffff04ffff01ffffffff3536ff3433ffffffff04ff5effff04ff02ffff04ffffff04ff2cffff04ff02ffff04ff09ffff04ff15ffff04ff5dffff04ff0bffff018080808080808080ffff04ff09ffff04ff15ffff04ff5dffff04ff0bffff01808080808080808080ff0bff09ff15ff2d80ffffff04ff5cffff04ff02ffff04ff05ffff04ff07ffff01808080808080ffff04ffff0102ffff04ffff04ffff0101ff0580ffff04ffffff04ff7cffff04ff02ffff04ff0bffff01ff018080808080ffff0180808080ffff04ffff03ff05ffff01ff04ffff0104ffff04ffff04ffff0101ff0980ffff04ffffff04ff7cffff04ff02ffff04ff0dffff04ff0bffff01808080808080ffff0180808080ffff010b80ff018080ffffff2dffff04ffff03ff15ffff01ffff04ff5affff04ff02ffff04ff0bffff04ff09ffff04ff1dffff0180808080808080ffff01ffff04ffffff04ff22ffff04ff02ffff04ff0bffff018080808080ffff04ff0bffff04ff09ffff04ff1dffff0180808080808080ff018080ffffff04ffff03ff0bffff01ffff04ffff03ffff09ff05ff1380ffff01ff0101ffff01ffff04ff2affff04ff02ffff04ff05ffff04ff1bffff0180808080808080ff018080ffff01ff018080ff018080ffff09ff13ffff0bff27ffffff04ff24ffff04ff02ffff04ff05ffff04ff57ffff01808080808080ff81b78080ffff04ffff03ffffff04ff32ffff04ff02ffff04ff17ffff04ff05ffff01808080808080ffff01ffff04ffff03ffffff04ff32ffff04ff02ffff04ff2fffff04ff05ffff01808080808080ffff01ffff04ffff03ffffff04ff32ffff04ff02ffff04ff5fffff04ff05ffff01808080808080ffff01ff04ffff04ff30ffff04ffffff04ff34ffff04ff02ffff04ff4fffff018080808080ffff01808080ffff04ffff04ff28ffff04ffffff04ff2effff04ff02ffff04ff27ffff04ff81bfffff01808080808080ffff01808080ffff04ffff04ff20ffff04ffff0bffffff04ff34ffff04ff02ffff04ff819fffff018080808080ffffff04ff2effff04ff02ffff04ff4fffff04ffff10ff81bfffff11ff8202cfffffff04ff36ffff04ff02ffff04ff0bffff0180808080808080ffff0180808080808080ffff01808080ffffff04ff26ffff04ff02ffff04ff0bffff04ff05ffff01808080808080808080ffff01ff088080ff018080ffff01ff088080ff018080ffff01ff088080ff018080ffffffff04ffff03ff05ffff01ff04ffffff04ffff03ffff09ff11ff3880ffff01ff04ff38ffff04ffffff04ff24ffff04ff02ffff04ff0bffff04ff29ffff01808080808080ffff04ff59ffff0180808080ffff010980ff018080ffffff04ff26ffff04ff02ffff04ff0dffff04ff0bffff0180808080808080ffff01ff018080ff018080ffff04ffff03ff05ffff01ff10ffffff04ffff03ffff09ff11ff3880ffff0159ffff01ff018080ff018080ffffff04ff36ffff04ff02ffff04ff0dffff01808080808080ffff01ff018080ff018080ffffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff2effff04ff02ffff04ff09ffff018080808080ffffff04ff2effff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ffffff04ff7effff04ff02ffff04ff05ffff04ff07ffff01808080808080ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff7effff04ff02ffff04ff09ffff04ff0bffff01808080808080ffffff04ff7effff04ff02ffff04ff0dffff04ff0bffff0180808080808080ffff01ffff04ffff03ffffff04ff2affff04ff02ffff04ff05ffff04ff0bffff01808080808080ffff0105ffff01ff0bffff0101ff058080ff01808080ff018080ff01808080
|
||||
ff02ffff01ff02ff7affff04ff02ffff04ffff04ff05ffff04ffff02ff2effff04ff02ffff04ff05ff80808080ffff04ff0bffff04ffff02ff2effff04ff02ffff04ff0bff80808080ff8080808080ffff04ffff02ff17ff2f80ffff04ff5fffff04ff81bfffff04ff82017fffff04ff8202ffff808080808080808080ffff04ffff01ffffffff3536ff3433ffffff02ff5effff04ff02ffff04ffff02ff2cffff04ff02ffff04ff09ffff04ff15ffff04ff5dffff04ff0bff80808080808080ffff04ff09ffff04ff15ffff04ff5dffff04ff0bff8080808080808080ff0bff09ff15ff2d80ffff02ff5cffff04ff02ffff04ff05ffff04ff07ff8080808080ffff04ffff0102ffff04ffff04ffff0101ff0580ffff04ffff02ff7cffff04ff02ffff04ff0bffff01ff0180808080ff80808080ff02ffff03ff05ffff01ff04ffff0104ffff04ffff04ffff0101ff0980ffff04ffff02ff7cffff04ff02ffff04ff0dffff04ff0bff8080808080ff80808080ffff010b80ff0180ffffff2dff02ffff03ff15ffff01ff02ff5affff04ff02ffff04ff0bffff04ff09ffff04ff1dff808080808080ffff01ff02ffff02ff22ffff04ff02ffff04ff0bff80808080ffff04ff0bffff04ff09ffff04ff1dff808080808080ff0180ffff02ffff03ff0bffff01ff02ffff03ffff09ff05ff1380ffff01ff0101ffff01ff02ff2affff04ff02ffff04ff05ffff04ff1bff808080808080ff0180ff8080ff0180ffff09ff13ffff0bff27ffff02ff24ffff04ff02ffff04ff05ffff04ff57ff8080808080ff81b78080ff02ffff03ffff02ff32ffff04ff02ffff04ff17ffff04ff05ff8080808080ffff01ff02ffff03ffff02ff32ffff04ff02ffff04ff2fffff04ff05ff8080808080ffff01ff02ffff03ffff02ff32ffff04ff02ffff04ff5fffff04ff05ff8080808080ffff01ff04ffff04ff30ffff04ffff02ff34ffff04ff02ffff04ff4fff80808080ff808080ffff04ffff04ff28ffff04ffff02ff2effff04ff02ffff04ffff04ff27ffff04ff81bfff808080ff80808080ff808080ffff04ffff04ff20ffff04ffff0bffff02ff34ffff04ff02ffff04ff819fff80808080ffff02ff2effff04ff02ffff04ffff04ff4fffff04ffff10ff81bfffff11ff8202cfffff02ff36ffff04ff02ffff04ff0bff808080808080ff808080ff8080808080ff808080ffff02ff26ffff04ff02ffff04ff0bffff04ff05ff8080808080808080ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffffff02ffff03ff05ffff01ff04ffff02ffff03ffff09ff11ff3880ffff01ff04ff38ffff04ffff02ff24ffff04ff02ffff04ff0bffff04ff29ff8080808080ffff04ff59ff80808080ffff01ff02ffff03ffff09ff11ff2880ffff01ff0880ffff010980ff018080ff0180ffff02ff26ffff04ff02ffff04ff0dffff04ff0bff808080808080ff8080ff0180ff02ffff03ff05ffff01ff10ffff02ffff03ffff09ff11ff3880ffff0159ff8080ff0180ffff02ff36ffff04ff02ffff04ff0dff8080808080ff8080ff0180ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2effff04ff02ffff04ff09ff80808080ffff02ff2effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ffff02ff7effff04ff02ffff04ff05ffff04ff07ff8080808080ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff7effff04ff02ffff04ff09ffff04ff0bff8080808080ffff02ff7effff04ff02ffff04ff0dffff04ff0bff808080808080ffff01ff02ffff03ffff02ff2affff04ff02ffff04ff05ffff04ff0bff8080808080ffff0105ffff01ff0bffff0101ff058080ff018080ff0180ff018080
|
||||
|
@ -1 +1 @@
|
||||
b72ca4bd8877287046cd3f9a58206ed7803eba14ea12af54e608a057c1fc82c0
|
||||
5d78bac5f0239d106021f09303580149665340c4ab6691957977c02ce9d5010b
|
||||
|
@ -25,7 +25,7 @@
|
||||
(defun npc_list_for_coinsolution (coin_solution)
|
||||
; The pattern (= (r (r foo)) ()) checks that foo is a list of length 2
|
||||
(if (and (= (r (r coin_solution)) ()) (= (r (r (f (r coin_solution)))) ()) (= (strlen (f coin_solution)) 32))
|
||||
(list (f coin_solution) (sha256tree1 (f (f (r coin_solution)))) ((c (f (f (r coin_solution))) (f (r (f (r coin_solution)))))))
|
||||
(list (f coin_solution) (sha256tree1 (f (f (r coin_solution)))) (a (f (f (r coin_solution))) (f (r (f (r coin_solution))))))
|
||||
(x)
|
||||
)
|
||||
)
|
||||
@ -38,5 +38,5 @@
|
||||
)
|
||||
|
||||
; main
|
||||
(generate_npc_pair_list ((c block_program (q . ()))) ())
|
||||
(generate_npc_pair_list (a block_program (q . ())) ())
|
||||
)
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff01ffff04ff04ffff04ff02ffff04ffffff04ff03ffff01808080ffff01ff808080808080ffff04ffff01ffffff04ffff03ff05ffff01ffff04ff04ffff04ff02ffff04ff0dffff04ffff04ffffff04ff0affff04ff02ffff04ff09ffff018080808080ff0b80ffff01808080808080ffff010b80ff018080ffffff04ffff03ffffff04ffff03ffff09ff1dffff018080ffff01ffff04ffff03ffff09ff75ffff018080ffff01ffff04ffff03ffff09ffff0dff0980ffff012080ffff01ff0101ffff01ff018080ff018080ffff01ff018080ff018080ffff01ff018080ff018080ffff01ff04ff09ffff04ffffff04ff0effff04ff02ffff04ff25ffff018080808080ffff04ffffff04ff25ff558080ffff0180808080ffff01ff088080ff018080ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff0effff04ff02ffff04ff09ffff018080808080ffffff04ff0effff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
|
||||
ff02ffff01ff02ff04ffff04ff02ffff04ffff02ff03ff8080ffff01ff8080808080ffff04ffff01ffff02ffff03ff05ffff01ff02ff04ffff04ff02ffff04ff0dffff04ffff04ffff02ff0affff04ff02ffff04ff09ff80808080ff0b80ff8080808080ffff010b80ff0180ffff02ffff03ffff02ffff03ffff09ff1dff8080ffff01ff02ffff03ffff09ff75ff8080ffff01ff02ffff03ffff09ffff0dff0980ffff012080ffff01ff0101ff8080ff0180ff8080ff0180ff8080ff0180ffff01ff04ff09ffff04ffff02ff0effff04ff02ffff04ff25ff80808080ffff04ffff02ff25ff5580ff80808080ffff01ff088080ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff0effff04ff02ffff04ff09ff80808080ffff02ff0effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
@ -1 +1 @@
|
||||
00767b4cc15f9836532083b97f52a96e9fe5f99fe3af655ac58f19f780943e68
|
||||
406b967077bf21dd9529f19959916e7529c2ed3b360c256d4ebdd9bdc9f57fab
|
||||
|
@ -11,5 +11,5 @@
|
||||
)
|
||||
|
||||
; main
|
||||
(check_for_coinname ((c block_program (q . ()))) coinname)
|
||||
(check_for_coinname (a block_program (q . ())) coinname)
|
||||
)
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff01ffff04ff02ffff04ff02ffff04ffffff04ff05ffff01808080ffff04ff0bffff01808080808080ffff04ffff01ffff04ffff03ff05ffff01ffff04ffff03ffff09ff11ff0b80ffff01ff04ff49ffff04ff81a9ffff01808080ffff01ffff04ff02ffff04ff02ffff04ff0dffff04ff0bffff0180808080808080ff018080ffff01ff088080ff018080ff01808080
|
||||
ff02ffff01ff02ff02ffff04ff02ffff04ffff02ff05ff8080ffff04ff0bff8080808080ffff04ffff01ff02ffff03ff05ffff01ff02ffff03ffff09ff11ff0b80ffff01ff04ff49ffff04ff81a9ff808080ffff01ff02ff02ffff04ff02ffff04ff0dffff04ff0bff808080808080ff0180ffff01ff088080ff0180ff018080
|
@ -1 +1 @@
|
||||
950b29009cb17a28b5db48b7913791091acaf009e9344813f10e31a7558c3bea
|
||||
7971f791117fa1cd4e034977460f23efa56863ea0b859162833167a7154e2b0d
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff03ffff09ff5bffff018080ffff01ff0101ffff01ffff04ffff03ffff09ff13ff0280ffff01ff0101ffff01ff018080ff01808080ff018080
|
||||
ff02ffff03ffff09ff5bff8080ffff01ff0101ffff01ff02ffff03ffff09ff13ff0280ffff01ff0101ff8080ff018080ff0180
|
@ -1 +1 @@
|
||||
213b7f3d076a54d0d7e0fe371534c35ce1154edd5b9b53e014cf3257cd1da4e1
|
||||
258008f81f21c270f4b58488b108a46a35e5df43ca5b0313ac83e900a5e44a5f
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff03ffff09ff5bffff018080ffff01ff0101ffff01ffff04ffff03ffffff04ffff03ffff09ffff0bff47ff81a7ff82016780ff1380ffff01ffff04ffff03ffff09ff81a7ff0280ffff01ff0101ffff01ff018080ff018080ffff01ff018080ff018080ffff01ff0101ffff01ff018080ff01808080ff018080
|
||||
ff02ffff03ffff09ff5bff8080ffff01ff0101ffff01ff02ffff03ffff02ffff03ffff09ffff0bff47ff81a7ff82016780ff1380ffff01ff02ffff03ffff09ff81a7ff0280ffff01ff0101ff8080ff0180ff8080ff0180ffff01ff0101ff8080ff018080ff0180
|
@ -1 +1 @@
|
||||
bbabca6897685a731470810f2d4b54a8a64c4d24d9496dcc18f4a5675e2b7187
|
||||
795964e0324fbc08e8383d67659194a70455956ad1ebd2329ccf20008da00936
|
||||
|
@ -1 +1 @@
|
||||
ff01ff8080
|
||||
ff01ff8080
|
@ -1 +1 @@
|
||||
ff04ffff0101ff0280
|
||||
ff04ffff0101ff0280
|
@ -1 +1 @@
|
||||
ffff04ffff01ff04ffff04ff04ffff04ff05ffff04ffffff04ff06ffff04ff02ffff04ff0bffff018080808080ffff0180808080ff0b80ffff04ffff01ff31ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff06ffff04ff02ffff04ff09ffff018080808080ffffff04ff06ffff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
|
||||
ff02ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff0bff80808080ff80808080ff0b80ffff04ffff01ff31ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
@ -1 +1 @@
|
||||
76f18c9df26a18d87e9fe22e17fa1e36d031c1b73752649659c9a86e2efcf471
|
||||
b11d23f3534638ef255337871cedca9e6fc60d4ed42bdb627c16323b659772c1
|
||||
|
@ -15,5 +15,5 @@
|
||||
)
|
||||
|
||||
(c (list AGG_SIG_ME public_key (sha256tree1 delegated_puzzle))
|
||||
((c delegated_puzzle delegated_puzzle_solution)))
|
||||
(a delegated_puzzle delegated_puzzle_solution))
|
||||
)
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff01ff04ffff04ff04ffff04ff05ffff04ffffff04ff06ffff04ff02ffff04ff0bffff018080808080ffff0180808080ffffff04ff0bff17808080ffff04ffff01ff32ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff06ffff04ff02ffff04ff09ffff018080808080ffffff04ff06ffff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
|
||||
ff02ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff0bff80808080ff80808080ffff02ff0bff178080ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
@ -1 +1 @@
|
||||
2f838019ea6cea4a118f9ca0df78bfc270ecebf591d12cf239feafa63c16e83b
|
||||
542cde70d1102cd1b763220990873efc8ab15625ded7eae22cc11e21ef2e2f7c
|
||||
|
@ -87,13 +87,5 @@
|
||||
|
||||
(possibly_prepend_aggsig
|
||||
synthetic_public_key original_public_key delegated_puzzle
|
||||
((c delegated_puzzle solution)))
|
||||
(a delegated_puzzle solution))
|
||||
)
|
||||
|
||||
|
||||
; the hex file disassembles to:
|
||||
;
|
||||
; (a (q #a (i 11 (q a (i (= 5 (point_add 11 (pubkey_for_exp (sha256 11 (a 6 (c 2 (c 23 0))))))) (q a 23 47) (q 8)) 1) (q 4 (c 4 (c 5 (c (a 6 (c 2 (c 23 0))) 0))) (a 23 47))) 1) (c (q 50 a (i (l 5) (q 11 (q . 2) (a 6 (c 2 (c 9 0))) (a 6 (c 2 (c 13 0)))) (q 11 (q . 1) 5)) 1) 1))
|
||||
;
|
||||
; This file may *not* yet compile to that. The output has been hand-tweaked to include some extra optimiziations.
|
||||
; Eventually, the compiler should produce the output above.
|
@ -1 +1 @@
|
||||
ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
||||
ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
@ -1 +1 @@
|
||||
a9e0569909bb3944e1b15d86c837691b90a58201908eef041eeeb308b8f58f71
|
||||
e9aaa49f45bad5c889b86ee3341550c155cfdd10c3a6757de618d20612fffd52
|
||||
|
@ -57,7 +57,7 @@
|
||||
(c (list AGG_SIG (f public_key_list) hash)
|
||||
(add_aggsig (r public_key_list) hash delegated_puzzle solution)
|
||||
)
|
||||
((c delegated_puzzle solution))
|
||||
(a delegated_puzzle solution)
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff01ffff04ffff03ffff09ff05ffffff04ff16ffff04ff02ffff04ff17ffff01808080808080ffff01ffff04ff0cffff04ff02ffff04ffffff04ff0affff04ff02ffff04ff17ffff04ff0bffff01808080808080ffff04ffffff04ff1effff04ff02ffff04ff2fffff018080808080ffff04ff2fffff04ff5fffff018080808080808080ffff01ff088080ff018080ffff04ffff01ffff31ffff04ffff03ff05ffff01ff04ffff04ff08ffff04ff09ffff04ff0bffff0180808080ffffff04ff0cffff04ff02ffff04ff0dffff04ff0bffff04ff17ffff04ff2fffff01808080808080808080ffff01ffff04ff17ff2f808080ff018080ffffff04ffff03ff05ffff01ffff04ffff03ff09ffff01ff04ff13ffffff04ff0affff04ff02ffff04ff0dffff04ff1bffff0180808080808080ffff01ffff04ff0affff04ff02ffff04ff0dffff04ff1bffff0180808080808080ff018080ffff01ff018080ff018080ffffff04ffff03ff05ffff01ff10ffffff04ff16ffff04ff02ffff04ff0dffff018080808080ffffff04ffff03ff09ffff01ff0101ffff01ff018080ff01808080ffff01ff018080ff018080ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff1effff04ff02ffff04ff09ffff018080808080ffffff04ff1effff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
|
||||
ff02ffff01ff02ffff03ffff09ff05ffff02ff16ffff04ff02ffff04ff17ff8080808080ffff01ff02ff0cffff04ff02ffff04ffff02ff0affff04ff02ffff04ff17ffff04ff0bff8080808080ffff04ffff02ff1effff04ff02ffff04ff2fff80808080ffff04ff2fffff04ff5fff80808080808080ffff01ff088080ff0180ffff04ffff01ffff31ff02ffff03ff05ffff01ff04ffff04ff08ffff04ff09ffff04ff0bff80808080ffff02ff0cffff04ff02ffff04ff0dffff04ff0bffff04ff17ffff04ff2fff8080808080808080ffff01ff02ff17ff2f8080ff0180ffff02ffff03ff05ffff01ff02ffff03ff09ffff01ff04ff13ffff02ff0affff04ff02ffff04ff0dffff04ff1bff808080808080ffff01ff02ff0affff04ff02ffff04ff0dffff04ff1bff808080808080ff0180ff8080ff0180ffff02ffff03ff05ffff01ff10ffff02ff16ffff04ff02ffff04ff0dff80808080ffff02ffff03ff09ffff01ff0101ff8080ff018080ff8080ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff1effff04ff02ffff04ff09ff80808080ffff02ff1effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
@ -1 +1 @@
|
||||
f75ae2b89708433b67835a129085cabc8e6701ffacd472340cdf2b532489d744
|
||||
0f199d5263ac1a62b077c159404a71abd3f9691cc57520bf1d4c5cb501504457
|
||||
|
@ -12,7 +12,7 @@
|
||||
)
|
||||
|
||||
(if (= inner_puzzle_hash (sha256tree1 inner_puzzle))
|
||||
((c inner_puzzle inner_puzzle_solution))
|
||||
(a inner_puzzle inner_puzzle_solution)
|
||||
(x)
|
||||
)
|
||||
)
|
@ -1 +1 @@
|
||||
ffff04ffff01ffff04ffff03ffff09ff05ffffff04ff02ffff04ff02ffff04ff0bffff01808080808080ffff01ffff04ff0bff178080ffff01ff088080ff018080ffff04ffff01ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff02ffff04ff02ffff04ff09ffff018080808080ffffff04ff02ffff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
|
||||
ff02ffff01ff02ffff03ffff09ff05ffff02ff02ffff04ff02ffff04ff0bff8080808080ffff01ff02ff0bff1780ffff01ff088080ff0180ffff04ffff01ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff02ffff04ff02ffff04ff09ff80808080ffff02ff02ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
@ -1 +1 @@
|
||||
280c4117ee8214d4aab8554f0fbc8ee6fdde2258e35baf4a1b0b17a0a457e44c
|
||||
13e29a62b42cd2ef72a79e4bacdc59733ca6310d65af83d349360d36ec622363
|
||||
|
@ -9,9 +9,16 @@ echo "$FILES"
|
||||
|
||||
INCLUDE_DIR=$(pwd)
|
||||
|
||||
|
||||
for FILE in $FILES
|
||||
do
|
||||
echo "run -d -i $INCLUDE_DIR $FILE > $FILE.hex"
|
||||
# run -d -i $INCLUDE_DIR $FILE > $FILE.hex
|
||||
done
|
||||
|
||||
for FILE in $FILES
|
||||
do
|
||||
echo "opd -H $FILE.hex | head -1 > $FILE.hex.sha256tree"
|
||||
done
|
||||
|
||||
echo
|
||||
echo "Copy & paste the above to the shell to recompile"
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff01ffff04ffff03ffff09ff81bfff2480ffff01ff04ffff04ff30ffff04ff5fffff04ffffff04ff3effff04ff02ffff04ffff04ff81bfff81ff80ffff018080808080ffff0180808080ff81ff80ffff01ff04ffff04ff30ffff04ff05ffff04ffffff04ff3effff04ff02ffff04ffff04ff81bfff81ff80ffff018080808080ffff0180808080ffffff04ffff03ffff09ff81bfff3c80ffff01ffff04ff2effff04ff02ffff04ff0bffff04ff17ffff04ff2fffff04ff81ffffff018080808080808080ffff01ffff04ff22ffff04ff02ffff04ff2fffff04ff81ffffff0180808080808080ff0180808080ff018080ffff04ffff01ffffffffffff04ffff03ffff15ff05ff0b80ffff01ff0101ffff01ffff04ffff03ffff09ff05ff0b80ffff01ff0101ffff01ff018080ff01808080ff01808031ff3936ffff0334ff3301ffffffffff04ffff03ffffff04ffff03ffff09ffff0bff820bfbff13ff8205fb80ff82017b80ffff01ff0101ffff01ffff04ffff03ffff09ff05ff82017b80ffff01ff0101ffff01ff018080ff01808080ff018080ffff01ff04ffffff04ff26ffff04ff02ffff04ff82017bffff04ff13ffff04ff8202fbffff0180808080808080ffff04ffffff04ff2affff04ff02ffff04ff2bffff04ff5bffff04ff81bbffff0180808080808080ffff04ffffff04ff3affff04ff02ffff04ff13ffff04ffff10ff81bbff8202fb80ffff01808080808080ffff0180808080ffff01ffff08808080ff018080ff04ff2cffff04ff05ffff04ffff11ff0bffff10ff17ff2f8080ffff0180808080ffff04ff34ffff04ffff0bff05ff0bff1780ffff01808080ff04ff2cffff04ff05ffff04ff0bffff0180808080ffffff04ff38ffff04ffff0bff05ff0bff1780ffff01808080ffff04ffff03ffffff04ff20ffff04ff02ffff04ffff12ff05ff1780ffff04ffff12ff0bff2f80ffff01808080808080ffff01ff04ff28ffff04ff05ffff01808080ffff01ffff08808080ff018080ffffff04ffff03ffffff04ffff03ffff09ffff0bff8217efff81afff822fef80ff4f80ffff01ff0101ffff01ffff04ffff03ffff09ff17ff4f80ffff01ff0101ffff01ff018080ff01808080ff018080ffff01ff04ffffff04ff36ffff04ff02ffff04ff820befffff04ff8205efffff04ff05ffff04ff0bffff018080808080808080ffff04ffffff04ff32ffff04ff02ffff04ff81afffff04ff82016fffff04ff8205efffff04ff825fefffff018080808080808080ffff04ffffff04ff26ffff04ff02ffff04ff4fffff04ff81afffff04ff82016fffff0180808080808080ffff04ffffff04ff3affff04ff02ffff04ff8202efffff04ff8205efffff01808080808080ffff018080808080ffff01ffff08808080ff018080ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff3effff04ff02ffff04ff09ffff018080808080ffffff04ff3effff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
|
||||
ff02ffff01ff02ffff03ffff09ff81bfff2480ffff01ff04ffff04ff30ffff04ff5fffff04ffff02ff3effff04ff02ffff04ffff04ff81bfff81ff80ff80808080ff80808080ff81ff80ffff01ff04ffff04ff30ffff04ff05ffff04ffff02ff3effff04ff02ffff04ffff04ff81bfff81ff80ff80808080ff80808080ffff02ffff03ffff09ff81bfff3c80ffff01ff02ff2effff04ff02ffff04ff0bffff04ff17ffff04ff2fffff04ff81ffff80808080808080ffff01ff02ff22ffff04ff02ffff04ff2fffff04ff81ffff808080808080ff01808080ff0180ffff04ffff01ffffffffff02ffff03ffff15ff05ff0b80ffff01ff0101ffff01ff02ffff03ffff09ff05ff0b80ffff01ff0101ff8080ff018080ff018031ff3936ffff0334ff3301ffffffff02ffff03ffff02ffff03ffff09ffff0bff820bfbff13ff8205fb80ff82017b80ffff01ff0101ffff01ff02ffff03ffff09ff05ff82017b80ffff01ff0101ff8080ff018080ff0180ffff01ff04ffff02ff26ffff04ff02ffff04ff82017bffff04ff13ffff04ff8202fbff808080808080ffff04ffff02ff2affff04ff02ffff04ff2bffff04ff5bffff04ff81bbff808080808080ffff04ffff02ff3affff04ff02ffff04ff13ffff04ffff10ff81bbff8202fb80ff8080808080ff80808080ffff01ffff08808080ff0180ff04ff2cffff04ff05ffff04ffff11ff0bffff10ff17ff2f8080ff80808080ffff04ff34ffff04ffff0bff05ff0bff1780ff808080ff04ff2cffff04ff05ffff04ff0bff80808080ffffff04ff38ffff04ffff0bff05ff0bff1780ff808080ff02ffff03ffff02ff20ffff04ff02ffff04ffff12ff05ff1780ffff04ffff12ff0bff2f80ff8080808080ffff01ff04ff28ffff04ff05ff808080ffff01ffff08808080ff0180ffff02ffff03ffff02ffff03ffff09ffff0bff8217efff81afff822fef80ff4f80ffff01ff0101ffff01ff02ffff03ffff09ff17ff4f80ffff01ff0101ff8080ff018080ff0180ffff01ff04ffff02ff36ffff04ff02ffff04ff820befffff04ff8205efffff04ff05ffff04ff0bff80808080808080ffff04ffff02ff32ffff04ff02ffff04ff81afffff04ff82016fffff04ff8205efffff04ff825fefff80808080808080ffff04ffff02ff26ffff04ff02ffff04ff4fffff04ff81afffff04ff82016fff808080808080ffff04ffff02ff3affff04ff02ffff04ff8202efffff04ff8205efff8080808080ff8080808080ffff01ffff08808080ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff3effff04ff02ffff04ff09ff80808080ffff02ff3effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
@ -1 +1 @@
|
||||
273279ae2dc430ff0abc2271bb247dfb2313ed387747e2f809e04755fec23e9f
|
||||
3e82031f5d1fc19362dbf91cd5aa2bf627393e4f9d0c436c1f3ca8dceb6a9eae
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff01ff04ffff04ff06ffff04ff0bffff01808080ffff04ffff04ff04ffff04ffff0bffff0bff17ff05ff2f80ff0b80ffff01808080ffff01808080ffff04ffff01ff3536ff01808080
|
||||
ff02ffff01ff04ffff04ff06ffff04ff0bff808080ffff04ffff04ff04ffff04ffff0bffff0bff17ff05ff2f80ff0b80ff808080ff808080ffff04ffff01ff3536ff018080
|
@ -1 +1 @@
|
||||
80a3a5e97194e1204798ff83b08d891293ffa930e3146de565b2c796f3f30766
|
||||
99683fa71cd40cc72bb16308f248400dd0e42d915c454daec42400a23c192a8b
|
||||
|
@ -1 +1 @@
|
||||
ffff04ffff01ffff04ff02ffff04ff02ffff04ff05ffff018080808080ffff04ffff01ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff02ffff04ff02ffff04ff09ffff018080808080ffffff04ff02ffff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
|
||||
ff02ffff01ff02ff02ffff04ff02ffff04ff05ff80808080ffff04ffff01ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff02ffff04ff02ffff04ff09ff80808080ffff02ff02ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
@ -1 +1 @@
|
||||
07f65519f39b9fbebe018de2152f6051febebb16b740b414ebaab560631cbb5e
|
||||
eb4ead6576048c9d730b5ced00646c7fdd390649cfdf48a00de1590cdd8ee18f
|
||||
|
@ -17,7 +17,7 @@ wallet_program_files = set(
|
||||
"src/wallet/puzzles/p2_conditions.clvm",
|
||||
"src/wallet/puzzles/p2_delegated_conditions.clvm",
|
||||
"src/wallet/puzzles/p2_delegated_puzzle.clvm",
|
||||
# "src/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.clvm", This puzzle is currently being hand-compiled
|
||||
"src/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.clvm",
|
||||
"src/wallet/puzzles/p2_m_of_n_delegate_direct.clvm",
|
||||
"src/wallet/puzzles/p2_puzzle_hash.clvm",
|
||||
"src/wallet/puzzles/rl_aggregation.clvm",
|
||||
|
@ -55,8 +55,8 @@ class TestChialisp:
|
||||
args(-1)
|
||||
|
||||
def test_eval(self):
|
||||
assert eval("code") == "((c code 1))"
|
||||
assert eval("code", "env") == "((c code env))"
|
||||
assert eval("code") == "(a code 1)"
|
||||
assert eval("code", "env") == "(a code env)"
|
||||
|
||||
def test_apply(self):
|
||||
assert apply("f", ()) == ("(f)")
|
||||
@ -67,7 +67,7 @@ class TestChialisp:
|
||||
assert quote(1) == "(q 1)"
|
||||
|
||||
def test_make_if(self):
|
||||
assert make_if("p", "t", "f") == "((c (i p (q t) (q f)) 1))"
|
||||
assert make_if("p", "t", "f") == "(a (i p (q t) (q f)) 1)"
|
||||
|
||||
def test_make_list(self):
|
||||
assert make_list() == "(q ())"
|
||||
|
Loading…
Reference in New Issue
Block a user