mirror of
https://github.com/Chia-Network/chia-blockchain.git
synced 2026-10-05 21:36:40 -04:00
Merge pull request #13821 from Chia-Network/checkpoint/main_from_release_1.6.1_0be5eccffa9c0fc5807aa03ac382893811d84105
checkpoint: into main from release/1.6.1 @ 0be5eccffa
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
;; `settlement_payments` puzzle hash as a condition of one or more coin spends.
|
||||
|
||||
(include condition_codes.clvm)
|
||||
(include utility_macros.clib)
|
||||
|
||||
(defun sha256tree (TREE)
|
||||
(if (l TREE)
|
||||
@@ -17,7 +18,10 @@
|
||||
|
||||
(defun create_coins_for_payment (payment_params so_far)
|
||||
(if payment_params
|
||||
(c (c CREATE_COIN (f payment_params)) (create_coins_for_payment (r payment_params) so_far))
|
||||
(assert (> (f (r (f payment_params))) 0) ; assert the amount is positive
|
||||
; then
|
||||
(c (c CREATE_COIN (f payment_params)) (create_coins_for_payment (r payment_params) so_far))
|
||||
)
|
||||
so_far
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1 +1 @@
|
||||
ff02ffff01ff02ff0affff04ff02ffff04ff03ff80808080ffff04ffff01ffff333effff02ffff03ff05ffff01ff04ffff04ff0cffff04ffff02ff1effff04ff02ffff04ff09ff80808080ff808080ffff02ff16ffff04ff02ffff04ff19ffff04ffff02ff0affff04ff02ffff04ff0dff80808080ff808080808080ff8080ff0180ffff02ffff03ff05ffff01ff04ffff04ff08ff0980ffff02ff16ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff010b80ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff1effff04ff02ffff04ff09ff80808080ffff02ff1effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
||||
ff02ffff01ff02ff0affff04ff02ffff04ff03ff80808080ffff04ffff01ffff333effff02ffff03ff05ffff01ff04ffff04ff0cffff04ffff02ff1effff04ff02ffff04ff09ff80808080ff808080ffff02ff16ffff04ff02ffff04ff19ffff04ffff02ff0affff04ff02ffff04ff0dff80808080ff808080808080ff8080ff0180ffff02ffff03ff05ffff01ff02ffff03ffff15ff29ff8080ffff01ff04ffff04ff08ff0980ffff02ff16ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff01ff088080ff0180ffff010b80ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff1effff04ff02ffff04ff09ff80808080ffff02ff1effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
||||
@@ -1 +1 @@
|
||||
bae24162efbd568f89bc7a340798a6118df0189eb9e3f8697bcea27af99f8f79
|
||||
cfbfdeed5c4ca2de3d0bf520b9cb4bb7743a359bd2e6a188d19ce7dffc21d3e7
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
(mod notarized_payments
|
||||
;; `notarized_payments` is a list of notarized coin payments
|
||||
;; a notarized coin payment is `(nonce . ((puzzle_hash amount ...) (puzzle_hash amount ...) ...))`
|
||||
;; Each notarized coin payment creates some `(CREATE_COIN puzzle_hash amount ...)` payments
|
||||
;; and a `(CREATE_PUZZLE_ANNOUNCEMENT (sha256tree notarized_coin_payment))` announcement
|
||||
;; The idea is the other side of this trade requires observing the announcement from a
|
||||
;; `settlement_payments` puzzle hash as a condition of one or more coin spends.
|
||||
|
||||
(include condition_codes.clvm)
|
||||
|
||||
(defun sha256tree (TREE)
|
||||
(if (l TREE)
|
||||
(sha256 2 (sha256tree (f TREE)) (sha256tree (r TREE)))
|
||||
(sha256 1 TREE)
|
||||
)
|
||||
)
|
||||
|
||||
(defun create_coins_for_payment (payment_params so_far)
|
||||
(if payment_params
|
||||
(c (c CREATE_COIN (f payment_params)) (create_coins_for_payment (r payment_params) so_far))
|
||||
so_far
|
||||
)
|
||||
)
|
||||
|
||||
(defun-inline create_announcement_for_payment (notarized_payment)
|
||||
(list CREATE_PUZZLE_ANNOUNCEMENT
|
||||
(sha256tree notarized_payment))
|
||||
)
|
||||
|
||||
(defun-inline augment_condition_list (notarized_payment so_far)
|
||||
(c
|
||||
(create_announcement_for_payment notarized_payment)
|
||||
(create_coins_for_payment (r notarized_payment) so_far)
|
||||
)
|
||||
)
|
||||
|
||||
(defun construct_condition_list (notarized_payments)
|
||||
(if notarized_payments
|
||||
(augment_condition_list (f notarized_payments) (construct_condition_list (r notarized_payments)))
|
||||
()
|
||||
)
|
||||
)
|
||||
|
||||
(construct_condition_list notarized_payments)
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
ff02ffff01ff02ff0affff04ff02ffff04ff03ff80808080ffff04ffff01ffff333effff02ffff03ff05ffff01ff04ffff04ff0cffff04ffff02ff1effff04ff02ffff04ff09ff80808080ff808080ffff02ff16ffff04ff02ffff04ff19ffff04ffff02ff0affff04ff02ffff04ff0dff80808080ff808080808080ff8080ff0180ffff02ffff03ff05ffff01ff04ffff04ff08ff0980ffff02ff16ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff010b80ff0180ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff1effff04ff02ffff04ff09ff80808080ffff02ff1effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
|
||||
@@ -0,0 +1 @@
|
||||
bae24162efbd568f89bc7a340798a6118df0189eb9e3f8697bcea27af99f8f79
|
||||
@@ -31,7 +31,9 @@ from chia.wallet.util.puzzle_compression import (
|
||||
)
|
||||
from chia.wallet.uncurried_puzzle import UncurriedPuzzle, uncurry_puzzle
|
||||
|
||||
OFFER_MOD = load_clvm_maybe_recompile("settlement_payments.clvm")
|
||||
OFFER_MOD_OLD = load_clvm_maybe_recompile("settlement_payments_old.clvm")
|
||||
OFFER_MOD = load_clvm_maybe_recompile("settlement_payments_old.clvm")
|
||||
OFFER_MOD_OLD_HASH = OFFER_MOD_OLD.get_tree_hash()
|
||||
OFFER_MOD_HASH = OFFER_MOD.get_tree_hash()
|
||||
ZERO_32 = bytes32([0] * 32)
|
||||
|
||||
@@ -149,7 +151,6 @@ class Offer:
|
||||
def get_offered_coins(self) -> Dict[Optional[bytes32], List[Coin]]:
|
||||
offered_coins: Dict[Optional[bytes32], List[Coin]] = {}
|
||||
|
||||
OFFER_HASH: bytes32 = OFFER_MOD_HASH
|
||||
for parent_spend in self.bundle.coin_spends:
|
||||
coins_for_this_spend: List[Coin] = []
|
||||
|
||||
@@ -166,7 +167,7 @@ class Offer:
|
||||
conditions: Program = inner_puzzle.run(inner_solution)
|
||||
matching_spend_additions: List[Coin] = [] # coins that match offered amount and are sent to offer ph.
|
||||
for condition in conditions.as_iter():
|
||||
if condition.first() == 51 and condition.rest().first() == OFFER_HASH:
|
||||
if condition.first() == 51 and condition.rest().first() in [OFFER_MOD_HASH, OFFER_MOD_OLD_HASH]:
|
||||
matching_spend_additions.extend(
|
||||
[a for a in additions if a.amount == condition.rest().rest().first().as_int()]
|
||||
)
|
||||
@@ -177,13 +178,22 @@ class Offer:
|
||||
a
|
||||
for a in matching_spend_additions
|
||||
if a.puzzle_hash
|
||||
== construct_puzzle(puzzle_driver, OFFER_HASH).get_tree_hash_precalc(OFFER_HASH) # type: ignore
|
||||
in [
|
||||
construct_puzzle(puzzle_driver, OFFER_MOD_OLD_HASH).get_tree_hash_precalc( # type: ignore
|
||||
OFFER_MOD_OLD_HASH
|
||||
),
|
||||
construct_puzzle(puzzle_driver, OFFER_MOD_HASH).get_tree_hash_precalc( # type: ignore
|
||||
OFFER_MOD_HASH
|
||||
),
|
||||
]
|
||||
]
|
||||
if len(additions_w_amount_and_puzhash) == 1:
|
||||
coins_for_this_spend.append(additions_w_amount_and_puzhash[0])
|
||||
else:
|
||||
asset_id = None
|
||||
coins_for_this_spend.extend([a for a in additions if a.puzzle_hash == OFFER_HASH])
|
||||
coins_for_this_spend.extend(
|
||||
[a for a in additions if a.puzzle_hash in [OFFER_MOD_HASH, OFFER_MOD_OLD_HASH]]
|
||||
)
|
||||
|
||||
if coins_for_this_spend != []:
|
||||
offered_coins.setdefault(asset_id, [])
|
||||
@@ -413,11 +423,17 @@ class Offer:
|
||||
|
||||
for coin in offered_coins:
|
||||
if asset_id:
|
||||
if coin.puzzle_hash == construct_puzzle(
|
||||
self.driver_dict[asset_id], OFFER_MOD_OLD_HASH # type: ignore
|
||||
).get_tree_hash_precalc(OFFER_MOD_OLD_HASH):
|
||||
offer_mod: Program = OFFER_MOD_OLD
|
||||
else:
|
||||
offer_mod = OFFER_MOD
|
||||
siblings: str = "("
|
||||
sibling_spends: str = "("
|
||||
sibling_puzzles: str = "("
|
||||
sibling_solutions: str = "("
|
||||
disassembled_offer_mod: str = disassemble(OFFER_MOD)
|
||||
disassembled_offer_mod: str = disassemble(offer_mod)
|
||||
for sibling_coin in offered_coins:
|
||||
if sibling_coin != coin:
|
||||
siblings += (
|
||||
@@ -450,16 +466,20 @@ class Offer:
|
||||
"sibling_solutions": sibling_solutions,
|
||||
}
|
||||
),
|
||||
OFFER_MOD,
|
||||
offer_mod,
|
||||
Program.to(coin_to_solution_dict[coin]),
|
||||
)
|
||||
else:
|
||||
if coin.puzzle_hash == OFFER_MOD_OLD_HASH:
|
||||
offer_mod = OFFER_MOD_OLD
|
||||
else:
|
||||
offer_mod = OFFER_MOD
|
||||
solution = Program.to(coin_to_solution_dict[coin])
|
||||
|
||||
completion_spends.append(
|
||||
CoinSpend(
|
||||
coin,
|
||||
construct_puzzle(self.driver_dict[asset_id], OFFER_MOD) if asset_id else OFFER_MOD,
|
||||
construct_puzzle(self.driver_dict[asset_id], offer_mod) if asset_id else offer_mod,
|
||||
solution,
|
||||
)
|
||||
)
|
||||
@@ -532,7 +552,7 @@ class Offer:
|
||||
as_spend_bundle = self.to_spend_bundle()
|
||||
if version is None:
|
||||
mods: List[bytes] = [bytes(s.puzzle_reveal.to_program().uncurry()[0]) for s in as_spend_bundle.coin_spends]
|
||||
version = max(lowest_best_version(mods), 2) # 2 is the version where OFFER_MOD lives
|
||||
version = max(lowest_best_version(mods), 5) # 5 is the version where OFFER_MOD lives
|
||||
return compress_object_with_puzzles(bytes(as_spend_bundle), version)
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -19,19 +19,21 @@ LEGACY_CAT_MOD = Program.fromhex(
|
||||
"ff02ffff01ff02ff5effff04ff02ffff04ffff04ff05ffff04ffff0bff2cff0580ffff04ff0bff80808080ffff04ffff02ff17ff2f80ffff04ff5fffff04ffff02ff2effff04ff02ffff04ff17ff80808080ffff04ffff0bff82027fff82057fff820b7f80ffff04ff81bfffff04ff82017fffff04ff8202ffffff04ff8205ffffff04ff820bffff80808080808080808080808080ffff04ffff01ffffffff81ca3dff46ff0233ffff3c04ff01ff0181cbffffff02ff02ffff03ff05ffff01ff02ff32ffff04ff02ffff04ff0dffff04ffff0bff22ffff0bff2cff3480ffff0bff22ffff0bff22ffff0bff2cff5c80ff0980ffff0bff22ff0bffff0bff2cff8080808080ff8080808080ffff010b80ff0180ffff02ffff03ff0bffff01ff02ffff03ffff09ffff02ff2effff04ff02ffff04ff13ff80808080ff820b9f80ffff01ff02ff26ffff04ff02ffff04ffff02ff13ffff04ff5fffff04ff17ffff04ff2fffff04ff81bfffff04ff82017fffff04ff1bff8080808080808080ffff04ff82017fff8080808080ffff01ff088080ff0180ffff01ff02ffff03ff17ffff01ff02ffff03ffff20ff81bf80ffff0182017fffff01ff088080ff0180ffff01ff088080ff018080ff0180ffff04ffff04ff05ff2780ffff04ffff10ff0bff5780ff778080ff02ffff03ff05ffff01ff02ffff03ffff09ffff02ffff03ffff09ff11ff7880ffff0159ff8080ff0180ffff01818f80ffff01ff02ff7affff04ff02ffff04ff0dffff04ff0bffff04ffff04ff81b9ff82017980ff808080808080ffff01ff02ff5affff04ff02ffff04ffff02ffff03ffff09ff11ff7880ffff01ff04ff78ffff04ffff02ff36ffff04ff02ffff04ff13ffff04ff29ffff04ffff0bff2cff5b80ffff04ff2bff80808080808080ff398080ffff01ff02ffff03ffff09ff11ff2480ffff01ff04ff24ffff04ffff0bff20ff2980ff398080ffff010980ff018080ff0180ffff04ffff02ffff03ffff09ff11ff7880ffff0159ff8080ff0180ffff04ffff02ff7affff04ff02ffff04ff0dffff04ff0bffff04ff17ff808080808080ff80808080808080ff0180ffff01ff04ff80ffff04ff80ff17808080ff0180ffffff02ffff03ff05ffff01ff04ff09ffff02ff26ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff010b80ff0180ff0bff22ffff0bff2cff5880ffff0bff22ffff0bff22ffff0bff2cff5c80ff0580ffff0bff22ffff02ff32ffff04ff02ffff04ff07ffff04ffff0bff2cff2c80ff8080808080ffff0bff2cff8080808080ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2effff04ff02ffff04ff09ff80808080ffff02ff2effff04ff02ffff04ff0dff8080808080ffff01ff0bff2cff058080ff0180ffff04ffff04ff28ffff04ff5fff808080ffff02ff7effff04ff02ffff04ffff04ffff04ff2fff0580ffff04ff5fff82017f8080ffff04ffff02ff7affff04ff02ffff04ff0bffff04ff05ffff01ff808080808080ffff04ff17ffff04ff81bfffff04ff82017fffff04ffff0bff8204ffffff02ff36ffff04ff02ffff04ff09ffff04ff820affffff04ffff0bff2cff2d80ffff04ff15ff80808080808080ff8216ff80ffff04ff8205ffffff04ff820bffff808080808080808080808080ff02ff2affff04ff02ffff04ff5fffff04ff3bffff04ffff02ffff03ff17ffff01ff09ff2dffff0bff27ffff02ff36ffff04ff02ffff04ff29ffff04ff57ffff04ffff0bff2cff81b980ffff04ff59ff80808080808080ff81b78080ff8080ff0180ffff04ff17ffff04ff05ffff04ff8202ffffff04ffff04ffff04ff24ffff04ffff0bff7cff2fff82017f80ff808080ffff04ffff04ff30ffff04ffff0bff81bfffff0bff7cff15ffff10ff82017fffff11ff8202dfff2b80ff8202ff808080ff808080ff138080ff80808080808080808080ff018080" # noqa
|
||||
)
|
||||
|
||||
OFFER_MOD_OLD = load_clvm_maybe_recompile("settlement_payments_old.clvm")
|
||||
OFFER_MOD = load_clvm_maybe_recompile("settlement_payments.clvm")
|
||||
|
||||
# For backwards compatibility to work, we must assume that these mods (already deployed) will not change
|
||||
# In the case that they do change and we don't support the old asset then we need to keep around the legacy module
|
||||
ZDICT = [
|
||||
bytes(standard_puzzle.MOD) + bytes(LEGACY_CAT_MOD),
|
||||
bytes(OFFER_MOD),
|
||||
bytes(OFFER_MOD_OLD),
|
||||
bytes(SINGLETON_TOP_LAYER_MOD)
|
||||
+ bytes(NFT_STATE_LAYER_MOD)
|
||||
+ bytes(NFT_OWNERSHIP_LAYER)
|
||||
+ bytes(NFT_METADATA_UPDATER)
|
||||
+ bytes(NFT_TRANSFER_PROGRAM_DEFAULT),
|
||||
bytes(CAT_MOD),
|
||||
bytes(OFFER_MOD),
|
||||
# more dictionaries go here
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user