Skip to content

Commit

Permalink
Assert the launcher COIN_ANNOUNCEMENT instead of creating my own anno…
Browse files Browse the repository at this point in the history
…uncement

This announcement already checks all the things I need to check, so I can simply use that.
Also, this way we get rid of the special p2_delegated puzzle
  • Loading branch information
greimela committed Feb 21, 2024
1 parent bcf6a0f commit b030fc3
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 47 deletions.
23 changes: 14 additions & 9 deletions secure_the_mint/puzzles/secure_the_mint_launcher.clsp
Expand Up @@ -75,21 +75,26 @@
(list ; mint
(list ASSERT_MY_COIN_ID my_id)
(list CREATE_COIN SINGLETON_LAUNCHER_PUZHASH 1)
(list ASSERT_PUZZLE_ANNOUNCEMENT
(list ASSERT_COIN_ANNOUNCEMENT
(sha256
(calculate_full_puzzle_hash
(c SINGLETON_MOD_HASH (c (calculate_coin_id my_id SINGLETON_LAUNCHER_PUZHASH 1) SINGLETON_LAUNCHER_PUZHASH))
NFT_STATE_LAYER_MOD_HASH METADATA_HASH METADATA_UPDATER_PUZZLE_HASH
NFT_OWNERSHIP_LAYER_MOD_HASH
NFT_OWNERSHIP_TRANSFER_PROGRAM_MOD_HASH ROYALTY_ADDRESS TRADE_PRICE_PERCENTAGE
P2_PUZZLE_HASH
(calculate_coin_id my_id SINGLETON_LAUNCHER_PUZHASH 1)
(sha256tree
(list
(calculate_full_puzzle_hash
(c SINGLETON_MOD_HASH (c (calculate_coin_id my_id SINGLETON_LAUNCHER_PUZHASH 1) SINGLETON_LAUNCHER_PUZHASH))
NFT_STATE_LAYER_MOD_HASH METADATA_HASH METADATA_UPDATER_PUZZLE_HASH
NFT_OWNERSHIP_LAYER_MOD_HASH
NFT_OWNERSHIP_TRANSFER_PROGRAM_MOD_HASH ROYALTY_ADDRESS TRADE_PRICE_PERCENTAGE
P2_PUZZLE_HASH
)
1
()
)
)
my_id
)
)
)
(list ; melt
(list ASSERT_MY_COIN_ID my_id)
(list AGG_SIG_ME MELT_PUBLIC_KEY 1)
)
)
Expand Down
2 changes: 1 addition & 1 deletion secure_the_mint/puzzles/secure_the_mint_launcher.clsp.hex
@@ -1 +1 @@
ff02ffff01ff02ffff03ff822fffffff01ff04ffff04ff28ffff04ff825fffff808080ffff04ffff04ff34ffff04ff0bffff01ff01808080ffff04ffff04ff38ffff04ffff0bffff02ff2effff04ff02ffff04ff05ffff04ffff02ff2effff04ff02ffff04ff17ffff04ffff02ff2effff04ff02ffff04ff81bfffff04ff820bffffff04ffff02ff2effff04ff02ffff04ff82017fffff04ffff0bff3cff8205ff80ffff04ffff0bff3cff8202ff80ffff04ffff02ff3effff04ff02ffff04ffff04ff05ffff04ffff02ff36ffff04ff02ffff04ff825fffffff04ff0bffff01ff018080808080ff0b8080ff80808080ff80808080808080ffff04ffff0bff3cff8080ffff04ffff0bff3cff81bf80ff8080808080808080ffff04ffff0bff3cff5f80ffff04ff2fffff04ffff0bff3cff1780ff8080808080808080ffff04ffff02ff3effff04ff02ffff04ffff04ff05ffff04ffff02ff36ffff04ff02ffff04ff825fffffff04ff0bffff01ff018080808080ff0b8080ff80808080ff808080808080ff825fff80ff808080ff80808080ffff01ff04ffff04ff28ffff04ff825fffff808080ffff04ffff04ff10ffff04ff8217ffffff04ff825fffff80808080ff80808080ff0180ffff04ffff01ffffff32ff463fffff0233ff0401ffff01ff0220ffffff02ffff03ff05ffff01ff02ff26ffff04ff02ffff04ff0dffff04ffff0bff2affff0bff3cff2c80ffff0bff2affff0bff2affff0bff3cff1280ff0980ffff0bff2aff0bffff0bff3cff8080808080ff8080808080ffff010b80ff0180ff02ffff03ffff22ffff09ffff0dff0580ff3a80ffff09ffff0dff0b80ff3a80ffff15ff17ffff0181ff8080ffff01ff0bff05ff0bff1780ffff01ff088080ff0180ffff0bff2affff0bff3cff2480ffff0bff2affff0bff2affff0bff3cff1280ff0580ffff0bff2affff02ff26ffff04ff02ffff04ff07ffff04ffff0bff3cff3c80ff8080808080ffff0bff3cff8080808080ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff3effff04ff02ffff04ff09ff80808080ffff02ff3effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
ff02ffff01ff02ffff03ff822fffffff01ff04ffff04ff38ffff04ff825fffff808080ffff04ffff04ff34ffff04ff0bffff01ff01808080ffff04ffff04ff28ffff04ffff0bffff02ff36ffff04ff02ffff04ff825fffffff04ff0bffff01ff018080808080ffff02ff3effff04ff02ffff04ffff04ffff02ff2effff04ff02ffff04ff05ffff04ffff02ff2effff04ff02ffff04ff17ffff04ffff02ff2effff04ff02ffff04ff81bfffff04ff820bffffff04ffff02ff2effff04ff02ffff04ff82017fffff04ffff0bff3cff8205ff80ffff04ffff0bff3cff8202ff80ffff04ffff02ff3effff04ff02ffff04ffff04ff05ffff04ffff02ff36ffff04ff02ffff04ff825fffffff04ff0bffff01ff018080808080ff0b8080ff80808080ff80808080808080ffff04ffff0bff3cff8080ffff04ffff0bff3cff81bf80ff8080808080808080ffff04ffff0bff3cff5f80ffff04ff2fffff04ffff0bff3cff1780ff8080808080808080ffff04ffff02ff3effff04ff02ffff04ffff04ff05ffff04ffff02ff36ffff04ff02ffff04ff825fffffff04ff0bffff01ff018080808080ff0b8080ff80808080ff808080808080ffff01ff01ff808080ff8080808080ff808080ff80808080ffff01ff04ffff04ff10ffff04ff8217ffffff01ff01808080ff808080ff0180ffff04ffff01ffffff32ff3d46ffff0233ff0401ffff01ff0220ffffff02ffff03ff05ffff01ff02ff26ffff04ff02ffff04ff0dffff04ffff0bff2affff0bff3cff2c80ffff0bff2affff0bff2affff0bff3cff1280ff0980ffff0bff2aff0bffff0bff3cff8080808080ff8080808080ffff010b80ff0180ff02ffff03ffff22ffff09ffff0dff0580ff3a80ffff09ffff0dff0b80ff3a80ffff15ff17ffff0181ff8080ffff01ff0bff05ff0bff1780ffff01ff088080ff0180ffff0bff2affff0bff3cff2480ffff0bff2affff0bff2affff0bff3cff1280ff0580ffff0bff2affff02ff26ffff04ff02ffff04ff07ffff04ffff0bff3cff3c80ff8080808080ffff0bff3cff8080808080ff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff3effff04ff02ffff04ff09ff80808080ffff02ff3effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff018080
10 changes: 0 additions & 10 deletions secure_the_mint/puzzles/secure_the_mint_p2_delegated_puzzle.clsp

This file was deleted.

This file was deleted.

7 changes: 3 additions & 4 deletions secure_the_mint/secure_the_bag.py
Expand Up @@ -152,7 +152,7 @@ def to_coin_spends(self, pre_launcher_parent_id: bytes32) -> List[CoinSpend]:
)

eve_coin = Coin(launcher_coin.name(), eve_puzzle.get_tree_hash(), amount)
innersol = Program.to([pre_launcher_coin.name(), [eve_coin.name()]])
innersol = Program.to([eve_coin.name()])
ownership_layer_solution = Program.to([innersol]) # supports DID
nft_layer_solution = Program.to([ownership_layer_solution])
singleton_solution = Program.to(
Expand Down Expand Up @@ -338,14 +338,13 @@ def read_secure_the_bag_targets(
trade_prices = Program.to(
[[p.amount, OFFER_MOD_HASH] for p in requested_payments[None]]
)
eve_delegated_puzzle = OFFER_DELEGATE.curry(
p2_puzzle = OFFER_DELEGATE.curry(
OFFER_MOD_HASH, payments, trade_prices
)
else:
requested_payments = None
eve_delegated_puzzle = DIRECT_DELEGATE.curry(target_puzzle_hash)
p2_puzzle = DIRECT_DELEGATE.curry(target_puzzle_hash)

p2_puzzle = SECURE_P2_DELEGATE.curry(eve_delegated_puzzle)
pre_launcher_puzzle = PRE_LAUNCHER_MOD.curry(
SINGLETON_MOD_HASH,
LAUNCHER_PUZZLE_HASH,
Expand Down
40 changes: 18 additions & 22 deletions tests/secure_the_mint/test_secure_the_bag.py
@@ -1,10 +1,13 @@
from __future__ import annotations

from typing import Optional
from clvm_tools.binutils import disassemble

import pytest
from blspy import G2Element
from chia.types.blockchain_format.program import Program, INFINITE_COST
from chia.types.blockchain_format.sized_bytes import bytes32
from chia.types.spend_bundle import SpendBundle
from chia.types.condition_opcodes import ConditionOpcode
from chia.util.hash import std_hash
from chia.util.ints import uint64, uint16
Expand Down Expand Up @@ -401,12 +404,19 @@ def test_read_secure_the_bag_targets(requested_mojos: Optional[int]) -> None:
assert pre_launcher_spend.coin.amount == 1
if requested_mojos:
assert bytes32(pre_launcher_spend.coin.puzzle_hash) == bytes32.fromhex(
"a285f08f62b2cd3fb316985d9ab7bc5e3e72a936cab1142d10e6f0928fa80b53"
"455ce2a6ea837ba124548e574475430edfce0a9add8a087fd7a6a1e593950b58"
)
else:
assert bytes32(pre_launcher_spend.coin.puzzle_hash) == bytes32.fromhex(
"ee0337177546718dc63a12302ef78eb00732459a52e12d666e56b4db258c4387"
"36d16c1fee484220fb22dc45c1ebed3195ee577dcfdb61dd98f99579146cb4cf"
)
#
# print(
# SpendBundle(
# coin_spends=coin_spends_0, aggregated_signature=G2Element()
# ).to_json_dict()
# )


assert targets[0].puzzle_hash == pre_launcher_spend.coin.puzzle_hash
assert targets[0].amount == pre_launcher_spend.coin.amount
Expand All @@ -425,35 +435,20 @@ def test_read_secure_the_bag_targets(requested_mojos: Optional[int]) -> None:
)
assert pre_launcher_conditions.first().first() == ConditionOpcode.ASSERT_MY_COIN_ID

# pre launcher asserts eve coin announcement
# pre launcher asserts launcher coin announcement
assert (
pre_launcher_conditions.rest().rest().first().first()
== ConditionOpcode.ASSERT_PUZZLE_ANNOUNCEMENT
== ConditionOpcode.ASSERT_COIN_ANNOUNCEMENT
)
announcement_message = Program.to([eve_spend.coin.puzzle_hash, 1, []]).get_tree_hash()
assert pre_launcher_conditions.rest().rest().first().rest().first() == std_hash(
eve_spend.coin.puzzle_hash + pre_launcher_spend.coin.name()
launcher_spend.coin.name() + announcement_message
)

_, eve_spend_conditions = eve_spend.puzzle_reveal.run_with_cost(
INFINITE_COST, eve_spend.solution
)

# eve coin announces pre_launcher_coin
assert (
eve_spend_conditions.rest().rest().first().first()
== ConditionOpcode.CREATE_PUZZLE_ANNOUNCEMENT
)
assert (
eve_spend_conditions.rest().rest().first().rest().first()
== pre_launcher_spend.coin.name()
)

# print(
# SpendBundle(
# coin_spends=coin_spends_0, aggregated_signature=G2Element()
# ).to_json_dict()
# )

if requested_mojos:
offer = mint_spend_0.to_offer(pre_launcher_parent_id)
assert len(offer.requested_payments[None]) == 1
Expand All @@ -462,8 +457,9 @@ def test_read_secure_the_bag_targets(requested_mojos: Optional[int]) -> None:

# eve coin asserts offer condition
assert_puzzle_condition = (
eve_spend_conditions.rest().rest().rest().rest().first()
eve_spend_conditions.rest().rest().rest().first()
)

assert (
assert_puzzle_condition.first()
== ConditionOpcode.ASSERT_PUZZLE_ANNOUNCEMENT
Expand Down

0 comments on commit b030fc3

Please sign in to comment.