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:
Richard Kiss 2021-03-03 14:12:04 -08:00 committed by GitHub
parent bac6e36c05
commit f79152d1ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
41 changed files with 178 additions and 144 deletions

View File

@ -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

View File

@ -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))
"""

View File

@ -1 +1 @@
ff1dff02ffff1effff0bff02ff05808080
ff1dff02ffff1effff0bff02ff05808080

View File

@ -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
)
)

View File

@ -1 +1 @@
ffff04ffff01ffff04ff7affff04ff02ffff04ffff04ff05ffff04ffffff04ff2effff04ff02ffff04ff05ffff018080808080ffff04ff0bffff04ffffff04ff2effff04ff02ffff04ff0bffff018080808080ffff018080808080ffff04ffffff04ff17ff2f8080ffff04ff5fffff04ff81bfffff04ff82017fffff04ff8202ffffff0180808080808080808080ffff04ffff01ffffffff3536ff3433ffffffff04ff5effff04ff02ffff04ffffff04ff2cffff04ff02ffff04ff09ffff04ff15ffff04ff5dffff04ff0bffff018080808080808080ffff04ff09ffff04ff15ffff04ff5dffff04ff0bffff01808080808080808080ff0bff09ff15ff2d80ffffff04ff5cffff04ff02ffff04ff05ffff04ff07ffff01808080808080ffff04ffff0102ffff04ffff04ffff0101ff0580ffff04ffffff04ff7cffff04ff02ffff04ff0bffff01ff018080808080ffff0180808080ffff04ffff03ff05ffff01ff04ffff0104ffff04ffff04ffff0101ff0980ffff04ffffff04ff7cffff04ff02ffff04ff0dffff04ff0bffff01808080808080ffff0180808080ffff010b80ff018080ffffff2dffff04ffff03ff15ffff01ffff04ff5affff04ff02ffff04ff0bffff04ff09ffff04ff1dffff0180808080808080ffff01ffff04ffffff04ff22ffff04ff02ffff04ff0bffff018080808080ffff04ff0bffff04ff09ffff04ff1dffff0180808080808080ff018080ffffff04ffff03ff0bffff01ffff04ffff03ffff09ff05ff1380ffff01ff0101ffff01ffff04ff2affff04ff02ffff04ff05ffff04ff1bffff0180808080808080ff018080ffff01ff018080ff018080ffff09ff13ffff0bff27ffffff04ff24ffff04ff02ffff04ff05ffff04ff57ffff01808080808080ff81b78080ffff04ffff03ffffff04ff32ffff04ff02ffff04ff17ffff04ff05ffff01808080808080ffff01ffff04ffff03ffffff04ff32ffff04ff02ffff04ff2fffff04ff05ffff01808080808080ffff01ffff04ffff03ffffff04ff32ffff04ff02ffff04ff5fffff04ff05ffff01808080808080ffff01ff04ffff04ff30ffff04ffffff04ff34ffff04ff02ffff04ff4fffff018080808080ffff01808080ffff04ffff04ff28ffff04ffffff04ff2effff04ff02ffff04ff27ffff04ff81bfffff01808080808080ffff01808080ffff04ffff04ff20ffff04ffff0bffffff04ff34ffff04ff02ffff04ff819fffff018080808080ffffff04ff2effff04ff02ffff04ff4fffff04ffff10ff81bfffff11ff8202cfffffff04ff36ffff04ff02ffff04ff0bffff0180808080808080ffff0180808080808080ffff01808080ffffff04ff26ffff04ff02ffff04ff0bffff04ff05ffff01808080808080808080ffff01ff088080ff018080ffff01ff088080ff018080ffff01ff088080ff018080ffffffff04ffff03ff05ffff01ff04ffffff04ffff03ffff09ff11ff3880ffff01ff04ff38ffff04ffffff04ff24ffff04ff02ffff04ff0bffff04ff29ffff01808080808080ffff04ff59ffff0180808080ffff010980ff018080ffffff04ff26ffff04ff02ffff04ff0dffff04ff0bffff0180808080808080ffff01ff018080ff018080ffff04ffff03ff05ffff01ff10ffffff04ffff03ffff09ff11ff3880ffff0159ffff01ff018080ff018080ffffff04ff36ffff04ff02ffff04ff0dffff01808080808080ffff01ff018080ff018080ffffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff2effff04ff02ffff04ff09ffff018080808080ffffff04ff2effff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ffffff04ff7effff04ff02ffff04ff05ffff04ff07ffff01808080808080ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff7effff04ff02ffff04ff09ffff04ff0bffff01808080808080ffffff04ff7effff04ff02ffff04ff0dffff04ff0bffff0180808080808080ffff01ffff04ffff03ffffff04ff2affff04ff02ffff04ff05ffff04ff0bffff01808080808080ffff0105ffff01ff0bffff0101ff058080ff01808080ff018080ff01808080
ff02ffff01ff02ff7affff04ff02ffff04ffff04ff05ffff04ffff02ff2effff04ff02ffff04ff05ff80808080ffff04ff0bffff04ffff02ff2effff04ff02ffff04ff0bff80808080ff8080808080ffff04ffff02ff17ff2f80ffff04ff5fffff04ff81bfffff04ff82017fffff04ff8202ffff808080808080808080ffff04ffff01ffffffff3536ff3433ffffff02ff5effff04ff02ffff04ffff02ff2cffff04ff02ffff04ff09ffff04ff15ffff04ff5dffff04ff0bff80808080808080ffff04ff09ffff04ff15ffff04ff5dffff04ff0bff8080808080808080ff0bff09ff15ff2d80ffff02ff5cffff04ff02ffff04ff05ffff04ff07ff8080808080ffff04ffff0102ffff04ffff04ffff0101ff0580ffff04ffff02ff7cffff04ff02ffff04ff0bffff01ff0180808080ff80808080ff02ffff03ff05ffff01ff04ffff0104ffff04ffff04ffff0101ff0980ffff04ffff02ff7cffff04ff02ffff04ff0dffff04ff0bff8080808080ff80808080ffff010b80ff0180ffffff2dff02ffff03ff15ffff01ff02ff5affff04ff02ffff04ff0bffff04ff09ffff04ff1dff808080808080ffff01ff02ffff02ff22ffff04ff02ffff04ff0bff80808080ffff04ff0bffff04ff09ffff04ff1dff808080808080ff0180ffff02ffff03ff0bffff01ff02ffff03ffff09ff05ff1380ffff01ff0101ffff01ff02ff2affff04ff02ffff04ff05ffff04ff1bff808080808080ff0180ff8080ff0180ffff09ff13ffff0bff27ffff02ff24ffff04ff02ffff04ff05ffff04ff57ff8080808080ff81b78080ff02ffff03ffff02ff32ffff04ff02ffff04ff17ffff04ff05ff8080808080ffff01ff02ffff03ffff02ff32ffff04ff02ffff04ff2fffff04ff05ff8080808080ffff01ff02ffff03ffff02ff32ffff04ff02ffff04ff5fffff04ff05ff8080808080ffff01ff04ffff04ff30ffff04ffff02ff34ffff04ff02ffff04ff4fff80808080ff808080ffff04ffff04ff28ffff04ffff02ff2effff04ff02ffff04ffff04ff27ffff04ff81bfff808080ff80808080ff808080ffff04ffff04ff20ffff04ffff0bffff02ff34ffff04ff02ffff04ff819fff80808080ffff02ff2effff04ff02ffff04ffff04ff4fffff04ffff10ff81bfffff11ff8202cfffff02ff36ffff04ff02ffff04ff0bff808080808080ff808080ff8080808080ff808080ffff02ff26ffff04ff02ffff04ff0bffff04ff05ff8080808080808080ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffffff02ffff03ff05ffff01ff04ffff02ffff03ffff09ff11ff3880ffff01ff04ff38ffff04ffff02ff24ffff04ff02ffff04ff0bffff04ff29ff8080808080ffff04ff59ff80808080ffff01ff02ffff03ffff09ff11ff2880ffff01ff0880ffff010980ff018080ff0180ffff02ff26ffff04ff02ffff04ff0dffff04ff0bff808080808080ff8080ff0180ff02ffff03ff05ffff01ff10ffff02ffff03ffff09ff11ff3880ffff0159ff8080ff0180ffff02ff36ffff04ff02ffff04ff0dff8080808080ff8080ff0180ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2effff04ff02ffff04ff09ff80808080ffff02ff2effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ffff02ff7effff04ff02ffff04ff05ffff04ff07ff8080808080ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff7effff04ff02ffff04ff09ffff04ff0bff8080808080ffff02ff7effff04ff02ffff04ff0dffff04ff0bff808080808080ffff01ff02ffff03ffff02ff2affff04ff02ffff04ff05ffff04ff0bff8080808080ffff0105ffff01ff0bffff0101ff058080ff018080ff0180ff018080

View File

@ -1 +1 @@
b72ca4bd8877287046cd3f9a58206ed7803eba14ea12af54e608a057c1fc82c0
5d78bac5f0239d106021f09303580149665340c4ab6691957977c02ce9d5010b

View File

@ -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 . ())) ())
)

View File

@ -1 +1 @@
ffff04ffff01ffff04ff04ffff04ff02ffff04ffffff04ff03ffff01808080ffff01ff808080808080ffff04ffff01ffffff04ffff03ff05ffff01ffff04ff04ffff04ff02ffff04ff0dffff04ffff04ffffff04ff0affff04ff02ffff04ff09ffff018080808080ff0b80ffff01808080808080ffff010b80ff018080ffffff04ffff03ffffff04ffff03ffff09ff1dffff018080ffff01ffff04ffff03ffff09ff75ffff018080ffff01ffff04ffff03ffff09ffff0dff0980ffff012080ffff01ff0101ffff01ff018080ff018080ffff01ff018080ff018080ffff01ff018080ff018080ffff01ff04ff09ffff04ffffff04ff0effff04ff02ffff04ff25ffff018080808080ffff04ffffff04ff25ff558080ffff0180808080ffff01ff088080ff018080ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff0effff04ff02ffff04ff09ffff018080808080ffffff04ff0effff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
ff02ffff01ff02ff04ffff04ff02ffff04ffff02ff03ff8080ffff01ff8080808080ffff04ffff01ffff02ffff03ff05ffff01ff02ff04ffff04ff02ffff04ff0dffff04ffff04ffff02ff0affff04ff02ffff04ff09ff80808080ff0b80ff8080808080ffff010b80ff0180ffff02ffff03ffff02ffff03ffff09ff1dff8080ffff01ff02ffff03ffff09ff75ff8080ffff01ff02ffff03ffff09ffff0dff0980ffff012080ffff01ff0101ff8080ff0180ff8080ff0180ff8080ff0180ffff01ff04ff09ffff04ffff02ff0effff04ff02ffff04ff25ff80808080ffff04ffff02ff25ff5580ff80808080ffff01ff088080ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff0effff04ff02ffff04ff09ff80808080ffff02ff0effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080

View File

@ -1 +1 @@
00767b4cc15f9836532083b97f52a96e9fe5f99fe3af655ac58f19f780943e68
406b967077bf21dd9529f19959916e7529c2ed3b360c256d4ebdd9bdc9f57fab

View File

@ -11,5 +11,5 @@
)
; main
(check_for_coinname ((c block_program (q . ()))) coinname)
(check_for_coinname (a block_program (q . ())) coinname)
)

View File

@ -1 +1 @@
ffff04ffff01ffff04ff02ffff04ff02ffff04ffffff04ff05ffff01808080ffff04ff0bffff01808080808080ffff04ffff01ffff04ffff03ff05ffff01ffff04ffff03ffff09ff11ff0b80ffff01ff04ff49ffff04ff81a9ffff01808080ffff01ffff04ff02ffff04ff02ffff04ff0dffff04ff0bffff0180808080808080ff018080ffff01ff088080ff018080ff01808080
ff02ffff01ff02ff02ffff04ff02ffff04ffff02ff05ff8080ffff04ff0bff8080808080ffff04ffff01ff02ffff03ff05ffff01ff02ffff03ffff09ff11ff0b80ffff01ff04ff49ffff04ff81a9ff808080ffff01ff02ff02ffff04ff02ffff04ff0dffff04ff0bff808080808080ff0180ffff01ff088080ff0180ff018080

View File

@ -1 +1 @@
950b29009cb17a28b5db48b7913791091acaf009e9344813f10e31a7558c3bea
7971f791117fa1cd4e034977460f23efa56863ea0b859162833167a7154e2b0d

View File

@ -1 +1 @@
ffff04ffff03ffff09ff5bffff018080ffff01ff0101ffff01ffff04ffff03ffff09ff13ff0280ffff01ff0101ffff01ff018080ff01808080ff018080
ff02ffff03ffff09ff5bff8080ffff01ff0101ffff01ff02ffff03ffff09ff13ff0280ffff01ff0101ff8080ff018080ff0180

View File

@ -1 +1 @@
213b7f3d076a54d0d7e0fe371534c35ce1154edd5b9b53e014cf3257cd1da4e1
258008f81f21c270f4b58488b108a46a35e5df43ca5b0313ac83e900a5e44a5f

View File

@ -1 +1 @@
ffff04ffff03ffff09ff5bffff018080ffff01ff0101ffff01ffff04ffff03ffffff04ffff03ffff09ffff0bff47ff81a7ff82016780ff1380ffff01ffff04ffff03ffff09ff81a7ff0280ffff01ff0101ffff01ff018080ff018080ffff01ff018080ff018080ffff01ff0101ffff01ff018080ff01808080ff018080
ff02ffff03ffff09ff5bff8080ffff01ff0101ffff01ff02ffff03ffff02ffff03ffff09ffff0bff47ff81a7ff82016780ff1380ffff01ff02ffff03ffff09ff81a7ff0280ffff01ff0101ff8080ff0180ff8080ff0180ffff01ff0101ff8080ff018080ff0180

View File

@ -1 +1 @@
bbabca6897685a731470810f2d4b54a8a64c4d24d9496dcc18f4a5675e2b7187
795964e0324fbc08e8383d67659194a70455956ad1ebd2329ccf20008da00936

View File

@ -1 +1 @@
ff01ff8080
ff01ff8080

View File

@ -1 +1 @@
ff04ffff0101ff0280
ff04ffff0101ff0280

View File

@ -1 +1 @@
ffff04ffff01ff04ffff04ff04ffff04ff05ffff04ffffff04ff06ffff04ff02ffff04ff0bffff018080808080ffff0180808080ff0b80ffff04ffff01ff31ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff06ffff04ff02ffff04ff09ffff018080808080ffffff04ff06ffff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
ff02ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff0bff80808080ff80808080ff0b80ffff04ffff01ff31ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080

View File

@ -1 +1 @@
76f18c9df26a18d87e9fe22e17fa1e36d031c1b73752649659c9a86e2efcf471
b11d23f3534638ef255337871cedca9e6fc60d4ed42bdb627c16323b659772c1

View File

@ -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))
)

View File

@ -1 +1 @@
ffff04ffff01ff04ffff04ff04ffff04ff05ffff04ffffff04ff06ffff04ff02ffff04ff0bffff018080808080ffff0180808080ffffff04ff0bff17808080ffff04ffff01ff32ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff06ffff04ff02ffff04ff09ffff018080808080ffffff04ff06ffff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
ff02ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff0bff80808080ff80808080ffff02ff0bff178080ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080

View File

@ -1 +1 @@
2f838019ea6cea4a118f9ca0df78bfc270ecebf591d12cf239feafa63c16e83b
542cde70d1102cd1b763220990873efc8ab15625ded7eae22cc11e21ef2e2f7c

View File

@ -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.

View File

@ -1 +1 @@
ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
ff02ffff01ff02ffff03ff0bffff01ff02ffff03ffff09ff05ffff1dff0bffff1effff0bff0bffff02ff06ffff04ff02ffff04ff17ff8080808080808080ffff01ff02ff17ff2f80ffff01ff088080ff0180ffff01ff04ffff04ff04ffff04ff05ffff04ffff02ff06ffff04ff02ffff04ff17ff80808080ff80808080ffff02ff17ff2f808080ff0180ffff04ffff01ff32ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff06ffff04ff02ffff04ff09ff80808080ffff02ff06ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080

View File

@ -1 +1 @@
a9e0569909bb3944e1b15d86c837691b90a58201908eef041eeeb308b8f58f71
e9aaa49f45bad5c889b86ee3341550c155cfdd10c3a6757de618d20612fffd52

View File

@ -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)
)
)

View File

@ -1 +1 @@
ffff04ffff01ffff04ffff03ffff09ff05ffffff04ff16ffff04ff02ffff04ff17ffff01808080808080ffff01ffff04ff0cffff04ff02ffff04ffffff04ff0affff04ff02ffff04ff17ffff04ff0bffff01808080808080ffff04ffffff04ff1effff04ff02ffff04ff2fffff018080808080ffff04ff2fffff04ff5fffff018080808080808080ffff01ff088080ff018080ffff04ffff01ffff31ffff04ffff03ff05ffff01ff04ffff04ff08ffff04ff09ffff04ff0bffff0180808080ffffff04ff0cffff04ff02ffff04ff0dffff04ff0bffff04ff17ffff04ff2fffff01808080808080808080ffff01ffff04ff17ff2f808080ff018080ffffff04ffff03ff05ffff01ffff04ffff03ff09ffff01ff04ff13ffffff04ff0affff04ff02ffff04ff0dffff04ff1bffff0180808080808080ffff01ffff04ff0affff04ff02ffff04ff0dffff04ff1bffff0180808080808080ff018080ffff01ff018080ff018080ffffff04ffff03ff05ffff01ff10ffffff04ff16ffff04ff02ffff04ff0dffff018080808080ffffff04ffff03ff09ffff01ff0101ffff01ff018080ff01808080ffff01ff018080ff018080ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff1effff04ff02ffff04ff09ffff018080808080ffffff04ff1effff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
ff02ffff01ff02ffff03ffff09ff05ffff02ff16ffff04ff02ffff04ff17ff8080808080ffff01ff02ff0cffff04ff02ffff04ffff02ff0affff04ff02ffff04ff17ffff04ff0bff8080808080ffff04ffff02ff1effff04ff02ffff04ff2fff80808080ffff04ff2fffff04ff5fff80808080808080ffff01ff088080ff0180ffff04ffff01ffff31ff02ffff03ff05ffff01ff04ffff04ff08ffff04ff09ffff04ff0bff80808080ffff02ff0cffff04ff02ffff04ff0dffff04ff0bffff04ff17ffff04ff2fff8080808080808080ffff01ff02ff17ff2f8080ff0180ffff02ffff03ff05ffff01ff02ffff03ff09ffff01ff04ff13ffff02ff0affff04ff02ffff04ff0dffff04ff1bff808080808080ffff01ff02ff0affff04ff02ffff04ff0dffff04ff1bff808080808080ff0180ff8080ff0180ffff02ffff03ff05ffff01ff10ffff02ff16ffff04ff02ffff04ff0dff80808080ffff02ffff03ff09ffff01ff0101ff8080ff018080ff8080ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff1effff04ff02ffff04ff09ff80808080ffff02ff1effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080

View File

@ -1 +1 @@
f75ae2b89708433b67835a129085cabc8e6701ffacd472340cdf2b532489d744
0f199d5263ac1a62b077c159404a71abd3f9691cc57520bf1d4c5cb501504457

View File

@ -12,7 +12,7 @@
)
(if (= inner_puzzle_hash (sha256tree1 inner_puzzle))
((c inner_puzzle inner_puzzle_solution))
(a inner_puzzle inner_puzzle_solution)
(x)
)
)

View File

@ -1 +1 @@
ffff04ffff01ffff04ffff03ffff09ff05ffffff04ff02ffff04ff02ffff04ff0bffff01808080808080ffff01ffff04ff0bff178080ffff01ff088080ff018080ffff04ffff01ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff02ffff04ff02ffff04ff09ffff018080808080ffffff04ff02ffff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
ff02ffff01ff02ffff03ffff09ff05ffff02ff02ffff04ff02ffff04ff0bff8080808080ffff01ff02ff0bff1780ffff01ff088080ff0180ffff04ffff01ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff02ffff04ff02ffff04ff09ff80808080ffff02ff02ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080

View File

@ -1 +1 @@
280c4117ee8214d4aab8554f0fbc8ee6fdde2258e35baf4a1b0b17a0a457e44c
13e29a62b42cd2ef72a79e4bacdc59733ca6310d65af83d349360d36ec622363

View File

@ -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"

View File

@ -1 +1 @@
ffff04ffff01ffff04ffff03ffff09ff81bfff2480ffff01ff04ffff04ff30ffff04ff5fffff04ffffff04ff3effff04ff02ffff04ffff04ff81bfff81ff80ffff018080808080ffff0180808080ff81ff80ffff01ff04ffff04ff30ffff04ff05ffff04ffffff04ff3effff04ff02ffff04ffff04ff81bfff81ff80ffff018080808080ffff0180808080ffffff04ffff03ffff09ff81bfff3c80ffff01ffff04ff2effff04ff02ffff04ff0bffff04ff17ffff04ff2fffff04ff81ffffff018080808080808080ffff01ffff04ff22ffff04ff02ffff04ff2fffff04ff81ffffff0180808080808080ff0180808080ff018080ffff04ffff01ffffffffffff04ffff03ffff15ff05ff0b80ffff01ff0101ffff01ffff04ffff03ffff09ff05ff0b80ffff01ff0101ffff01ff018080ff01808080ff01808031ff3936ffff0334ff3301ffffffffff04ffff03ffffff04ffff03ffff09ffff0bff820bfbff13ff8205fb80ff82017b80ffff01ff0101ffff01ffff04ffff03ffff09ff05ff82017b80ffff01ff0101ffff01ff018080ff01808080ff018080ffff01ff04ffffff04ff26ffff04ff02ffff04ff82017bffff04ff13ffff04ff8202fbffff0180808080808080ffff04ffffff04ff2affff04ff02ffff04ff2bffff04ff5bffff04ff81bbffff0180808080808080ffff04ffffff04ff3affff04ff02ffff04ff13ffff04ffff10ff81bbff8202fb80ffff01808080808080ffff0180808080ffff01ffff08808080ff018080ff04ff2cffff04ff05ffff04ffff11ff0bffff10ff17ff2f8080ffff0180808080ffff04ff34ffff04ffff0bff05ff0bff1780ffff01808080ff04ff2cffff04ff05ffff04ff0bffff0180808080ffffff04ff38ffff04ffff0bff05ff0bff1780ffff01808080ffff04ffff03ffffff04ff20ffff04ff02ffff04ffff12ff05ff1780ffff04ffff12ff0bff2f80ffff01808080808080ffff01ff04ff28ffff04ff05ffff01808080ffff01ffff08808080ff018080ffffff04ffff03ffffff04ffff03ffff09ffff0bff8217efff81afff822fef80ff4f80ffff01ff0101ffff01ffff04ffff03ffff09ff17ff4f80ffff01ff0101ffff01ff018080ff01808080ff018080ffff01ff04ffffff04ff36ffff04ff02ffff04ff820befffff04ff8205efffff04ff05ffff04ff0bffff018080808080808080ffff04ffffff04ff32ffff04ff02ffff04ff81afffff04ff82016fffff04ff8205efffff04ff825fefffff018080808080808080ffff04ffffff04ff26ffff04ff02ffff04ff4fffff04ff81afffff04ff82016fffff0180808080808080ffff04ffffff04ff3affff04ff02ffff04ff8202efffff04ff8205efffff01808080808080ffff018080808080ffff01ffff08808080ff018080ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff3effff04ff02ffff04ff09ffff018080808080ffffff04ff3effff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
ff02ffff01ff02ffff03ffff09ff81bfff2480ffff01ff04ffff04ff30ffff04ff5fffff04ffff02ff3effff04ff02ffff04ffff04ff81bfff81ff80ff80808080ff80808080ff81ff80ffff01ff04ffff04ff30ffff04ff05ffff04ffff02ff3effff04ff02ffff04ffff04ff81bfff81ff80ff80808080ff80808080ffff02ffff03ffff09ff81bfff3c80ffff01ff02ff2effff04ff02ffff04ff0bffff04ff17ffff04ff2fffff04ff81ffff80808080808080ffff01ff02ff22ffff04ff02ffff04ff2fffff04ff81ffff808080808080ff01808080ff0180ffff04ffff01ffffffffff02ffff03ffff15ff05ff0b80ffff01ff0101ffff01ff02ffff03ffff09ff05ff0b80ffff01ff0101ff8080ff018080ff018031ff3936ffff0334ff3301ffffffff02ffff03ffff02ffff03ffff09ffff0bff820bfbff13ff8205fb80ff82017b80ffff01ff0101ffff01ff02ffff03ffff09ff05ff82017b80ffff01ff0101ff8080ff018080ff0180ffff01ff04ffff02ff26ffff04ff02ffff04ff82017bffff04ff13ffff04ff8202fbff808080808080ffff04ffff02ff2affff04ff02ffff04ff2bffff04ff5bffff04ff81bbff808080808080ffff04ffff02ff3affff04ff02ffff04ff13ffff04ffff10ff81bbff8202fb80ff8080808080ff80808080ffff01ffff08808080ff0180ff04ff2cffff04ff05ffff04ffff11ff0bffff10ff17ff2f8080ff80808080ffff04ff34ffff04ffff0bff05ff0bff1780ff808080ff04ff2cffff04ff05ffff04ff0bff80808080ffffff04ff38ffff04ffff0bff05ff0bff1780ff808080ff02ffff03ffff02ff20ffff04ff02ffff04ffff12ff05ff1780ffff04ffff12ff0bff2f80ff8080808080ffff01ff04ff28ffff04ff05ff808080ffff01ffff08808080ff0180ffff02ffff03ffff02ffff03ffff09ffff0bff8217efff81afff822fef80ff4f80ffff01ff0101ffff01ff02ffff03ffff09ff17ff4f80ffff01ff0101ff8080ff018080ff0180ffff01ff04ffff02ff36ffff04ff02ffff04ff820befffff04ff8205efffff04ff05ffff04ff0bff80808080808080ffff04ffff02ff32ffff04ff02ffff04ff81afffff04ff82016fffff04ff8205efffff04ff825fefff80808080808080ffff04ffff02ff26ffff04ff02ffff04ff4fffff04ff81afffff04ff82016fff808080808080ffff04ffff02ff3affff04ff02ffff04ff8202efffff04ff8205efff8080808080ff8080808080ffff01ffff08808080ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff3effff04ff02ffff04ff09ff80808080ffff02ff3effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080

View File

@ -1 +1 @@
273279ae2dc430ff0abc2271bb247dfb2313ed387747e2f809e04755fec23e9f
3e82031f5d1fc19362dbf91cd5aa2bf627393e4f9d0c436c1f3ca8dceb6a9eae

View File

@ -1 +1 @@
ffff04ffff01ff04ffff04ff06ffff04ff0bffff01808080ffff04ffff04ff04ffff04ffff0bffff0bff17ff05ff2f80ff0b80ffff01808080ffff01808080ffff04ffff01ff3536ff01808080
ff02ffff01ff04ffff04ff06ffff04ff0bff808080ffff04ffff04ff04ffff04ffff0bffff0bff17ff05ff2f80ff0b80ff808080ff808080ffff04ffff01ff3536ff018080

View File

@ -1 +1 @@
80a3a5e97194e1204798ff83b08d891293ffa930e3146de565b2c796f3f30766
99683fa71cd40cc72bb16308f248400dd0e42d915c454daec42400a23c192a8b

View File

@ -1 +1 @@
ffff04ffff01ffff04ff02ffff04ff02ffff04ff05ffff018080808080ffff04ffff01ffff04ffff03ffff07ff0580ffff01ff0bffff0102ffffff04ff02ffff04ff02ffff04ff09ffff018080808080ffffff04ff02ffff04ff02ffff04ff0dffff01808080808080ffff01ff0bffff0101ff058080ff018080ff01808080
ff02ffff01ff02ff02ffff04ff02ffff04ff05ff80808080ffff04ffff01ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff02ffff04ff02ffff04ff09ff80808080ffff02ff02ffff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080

View File

@ -1 +1 @@
07f65519f39b9fbebe018de2152f6051febebb16b740b414ebaab560631cbb5e
eb4ead6576048c9d730b5ced00646c7fdd390649cfdf48a00de1590cdd8ee18f

View File

@ -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",

View File

@ -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 ())"