chia-blockchain 2.5.2rc2__py3-none-any.whl → 2.5.3rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/__init__.py +7 -0
- chia/_tests/blockchain/blockchain_test_utils.py +1 -1
- chia/_tests/blockchain/test_augmented_chain.py +54 -5
- chia/_tests/blockchain/test_blockchain.py +5 -12
- chia/_tests/blockchain/test_blockchain_transactions.py +3 -5
- chia/_tests/blockchain/test_get_block_generator.py +2 -2
- chia/_tests/blockchain/test_lookup_fork_chain.py +2 -2
- chia/_tests/clvm/benchmark_costs.py +2 -1
- chia/_tests/clvm/coin_store.py +4 -3
- chia/_tests/clvm/test_chialisp_deserialization.py +2 -2
- chia/_tests/clvm/test_curry_and_treehash.py +1 -1
- chia/_tests/clvm/test_puzzle_compression.py +2 -2
- chia/_tests/clvm/test_puzzles.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -2
- chia/_tests/clvm/test_spend_sim.py +1 -1
- chia/_tests/cmds/cmd_test_utils.py +2 -2
- chia/_tests/cmds/test_click_types.py +2 -2
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_show.py +4 -3
- chia/_tests/cmds/test_tx_config_args.py +1 -1
- chia/_tests/cmds/testing_classes.py +2 -2
- chia/_tests/cmds/wallet/test_consts.py +2 -2
- chia/_tests/cmds/wallet/test_did.py +2 -2
- chia/_tests/cmds/wallet/test_nft.py +2 -2
- chia/_tests/cmds/wallet/test_notifications.py +3 -2
- chia/_tests/cmds/wallet/test_vcs.py +2 -2
- chia/_tests/cmds/wallet/test_wallet.py +4 -8
- chia/_tests/conftest.py +4 -3
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_keys.py +1 -2
- chia/_tests/core/cmds/test_wallet.py +2 -2
- chia/_tests/core/consensus/test_block_creation.py +2 -2
- chia/_tests/core/consensus/test_pot_iterations.py +1 -1
- chia/_tests/core/custom_types/test_coin.py +2 -2
- chia/_tests/core/custom_types/test_proof_of_space.py +2 -2
- chia/_tests/core/custom_types/test_spend_bundle.py +2 -2
- chia/_tests/core/data_layer/conftest.py +1 -1
- chia/_tests/core/data_layer/test_data_layer.py +1 -1
- chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
- chia/_tests/core/data_layer/test_data_rpc.py +2 -2
- chia/_tests/core/data_layer/test_data_store.py +1 -1
- chia/_tests/core/data_layer/test_data_store_schema.py +1 -1
- chia/_tests/core/data_layer/util.py +2 -1
- chia/_tests/core/farmer/test_farmer_api.py +1 -1
- chia/_tests/core/full_node/full_sync/test_full_sync.py +1 -7
- chia/_tests/core/full_node/ram_db.py +2 -1
- chia/_tests/core/full_node/stores/test_block_store.py +2 -2
- chia/_tests/core/full_node/stores/test_coin_store.py +2 -2
- chia/_tests/core/full_node/stores/test_full_node_store.py +3 -3
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/stores/test_sync_store.py +1 -1
- chia/_tests/core/full_node/test_address_manager.py +1 -1
- chia/_tests/core/full_node/test_block_height_map.py +2 -2
- chia/_tests/core/full_node/test_conditions.py +1 -1
- chia/_tests/core/full_node/test_full_node.py +346 -164
- chia/_tests/core/full_node/test_generator_tools.py +3 -2
- chia/_tests/core/full_node/test_hint_management.py +2 -2
- chia/_tests/core/full_node/test_performance.py +2 -15
- chia/_tests/core/full_node/test_subscriptions.py +1 -1
- chia/_tests/core/full_node/test_transactions.py +186 -185
- chia/_tests/core/full_node/test_tx_processing_queue.py +1 -1
- chia/_tests/core/make_block_generator.py +2 -2
- chia/_tests/core/mempool/test_mempool.py +165 -22
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +1 -1
- chia/_tests/core/mempool/test_mempool_manager.py +476 -66
- chia/_tests/core/mempool/test_mempool_performance.py +2 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +19 -25
- chia/_tests/core/node_height.py +2 -1
- chia/_tests/core/server/test_capabilities.py +1 -1
- chia/_tests/core/server/test_dos.py +36 -28
- chia/_tests/core/server/test_loop.py +3 -3
- chia/_tests/core/server/test_rate_limits.py +1 -1
- chia/_tests/core/server/test_server.py +2 -2
- chia/_tests/core/services/test_services.py +1 -1
- chia/_tests/core/ssl/test_ssl.py +1 -1
- chia/_tests/core/test_coins.py +2 -1
- chia/_tests/core/test_cost_calculation.py +2 -2
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_db_conversion.py +2 -2
- chia/_tests/core/test_db_validation.py +26 -13
- chia/_tests/core/test_farmer_harvester_rpc.py +2 -2
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +2 -2
- chia/_tests/core/test_program.py +2 -2
- chia/_tests/core/test_rpc_util.py +1 -1
- chia/_tests/core/test_seeder.py +1 -1
- chia/_tests/core/util/test_block_cache.py +3 -3
- chia/_tests/core/util/test_jsonify.py +3 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_streamable.py +3 -4
- chia/_tests/environments/wallet.py +3 -2
- chia/_tests/farmer_harvester/test_farmer.py +3 -4
- chia/_tests/farmer_harvester/test_farmer_harvester.py +2 -2
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +2 -2
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +3 -4
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -1
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +2 -2
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +3 -4
- chia/_tests/generator/test_compression.py +20 -10
- chia/_tests/generator/test_rom.py +7 -9
- chia/_tests/plot_sync/test_delta.py +2 -2
- chia/_tests/plot_sync/test_plot_sync.py +2 -2
- chia/_tests/plot_sync/test_receiver.py +2 -2
- chia/_tests/plot_sync/test_sender.py +2 -2
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +3 -2
- chia/_tests/plotting/test_plot_manager.py +1 -1
- chia/_tests/pools/test_pool_cli_parsing.py +3 -2
- chia/_tests/pools/test_pool_cmdline.py +2 -2
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +3 -3
- chia/_tests/pools/test_pool_rpc.py +4 -5
- chia/_tests/pools/test_pool_wallet.py +1 -1
- chia/_tests/pools/test_wallet_pool_store.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +1 -1
- chia/_tests/rpc/test_rpc_server.py +1 -1
- chia/_tests/simulation/test_simulation.py +36 -8
- chia/_tests/simulation/test_simulator.py +5 -5
- chia/_tests/simulation/test_start_simulator.py +2 -2
- chia/_tests/timelord/test_new_peak.py +2 -2
- chia/_tests/tools/test_run_block.py +3 -2
- chia/_tests/util/benchmark_cost.py +2 -2
- chia/_tests/util/benchmarks.py +17 -6
- chia/_tests/util/blockchain.py +2 -1
- chia/_tests/util/blockchain_mock.py +9 -5
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/constants.py +2 -1
- chia/_tests/util/full_sync.py +6 -3
- chia/_tests/util/gen_ssl_certs.py +2 -2
- chia/_tests/util/generator_tools_testing.py +4 -3
- chia/_tests/util/get_name_puzzle_conditions.py +2 -2
- chia/_tests/util/misc.py +16 -2
- chia/_tests/util/network_protocol_data.py +17 -7
- chia/_tests/util/run_block.py +6 -8
- chia/_tests/util/setup_nodes.py +4 -3
- chia/_tests/util/spend_sim.py +9 -5
- chia/_tests/util/test_condition_tools.py +2 -2
- chia/_tests/util/test_config.py +2 -1
- chia/_tests/util/test_errors.py +2 -1
- chia/_tests/util/test_full_block_utils.py +17 -7
- chia/_tests/util/test_misc.py +1 -1
- chia/_tests/util/test_network_protocol_test.py +24 -24
- chia/_tests/util/test_replace_str_to_bytes.py +2 -2
- chia/_tests/util/test_trusted_peer.py +1 -1
- chia/_tests/util/time_out_assert.py +20 -7
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +5 -6
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +17 -15
- chia/_tests/wallet/cat_wallet/test_trades.py +2 -2
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -2
- chia/_tests/wallet/clawback/test_clawback_metadata.py +2 -2
- chia/_tests/wallet/conftest.py +3 -3
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +3 -5
- chia/_tests/wallet/db_wallet/test_dl_offers.py +2 -2
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +433 -384
- chia/_tests/wallet/did_wallet/test_did.py +3 -3
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +2 -2
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +2 -2
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +3 -4
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +1293 -703
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +28 -30
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +2 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +2 -2
- chia/_tests/wallet/rpc/config.py +1 -1
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +2 -2
- chia/_tests/wallet/rpc/test_wallet_rpc.py +20 -77
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +9 -7
- chia/_tests/wallet/sync/test_wallet_sync.py +79 -31
- chia/_tests/wallet/test_clvm_streamable.py +2 -2
- chia/_tests/wallet/test_coin_management.py +7 -7
- chia/_tests/wallet/test_coin_selection.py +20 -2
- chia/_tests/wallet/test_conditions.py +2 -2
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +2 -2
- chia/_tests/wallet/test_nft_store.py +2 -2
- chia/_tests/wallet/test_notifications.py +2 -2
- chia/_tests/wallet/test_puzzle_store.py +2 -2
- chia/_tests/wallet/test_sign_coin_spends.py +2 -2
- chia/_tests/wallet/test_signer_protocol.py +3 -3
- chia/_tests/wallet/test_singleton.py +3 -11
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +12 -13
- chia/_tests/wallet/test_singleton_store.py +2 -4
- chia/_tests/wallet/test_transaction_store.py +2 -2
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +53 -49
- chia/_tests/wallet/test_wallet_action_scope.py +24 -6
- chia/_tests/wallet/test_wallet_blockchain.py +1 -1
- chia/_tests/wallet/test_wallet_coin_store.py +2 -2
- chia/_tests/wallet/test_wallet_interested_store.py +2 -2
- chia/_tests/wallet/test_wallet_node.py +3 -3
- chia/_tests/wallet/test_wallet_retry.py +3 -3
- chia/_tests/wallet/test_wallet_state_manager.py +8 -8
- chia/_tests/wallet/test_wallet_test_framework.py +1 -1
- chia/_tests/wallet/test_wallet_trade_store.py +2 -2
- chia/_tests/wallet/test_wallet_utils.py +2 -2
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -2
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +15 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +5 -3
- chia/_tests/wallet/wallet_block_tools.py +15 -7
- chia/_tests/weight_proof/test_weight_proof.py +3 -3
- chia/cmds/chia.py +0 -2
- chia/cmds/cmd_classes.py +3 -3
- chia/cmds/cmd_helpers.py +4 -4
- chia/cmds/cmds_util.py +2 -2
- chia/cmds/coin_funcs.py +3 -2
- chia/cmds/coins.py +1 -1
- chia/cmds/data.py +2 -2
- chia/cmds/data_funcs.py +3 -2
- chia/cmds/db_upgrade_func.py +2 -2
- chia/cmds/db_validate_func.py +15 -8
- chia/cmds/farm.py +2 -4
- chia/cmds/keys.py +0 -2
- chia/cmds/keys_funcs.py +1 -1
- chia/cmds/netspace_funcs.py +2 -1
- chia/cmds/param_types.py +2 -2
- chia/cmds/plotnft.py +2 -2
- chia/cmds/plotnft_funcs.py +2 -2
- chia/cmds/rpc.py +1 -1
- chia/cmds/show.py +1 -2
- chia/cmds/show_funcs.py +6 -3
- chia/cmds/signer.py +1 -2
- chia/cmds/sim.py +1 -2
- chia/cmds/sim_funcs.py +2 -2
- chia/cmds/wallet.py +2 -2
- chia/cmds/wallet_funcs.py +4 -11
- chia/consensus/block_body_validation.py +3 -4
- chia/consensus/block_creation.py +10 -6
- chia/consensus/block_header_validation.py +3 -4
- chia/consensus/block_record.py +2 -3
- chia/consensus/block_rewards.py +1 -1
- chia/consensus/blockchain.py +20 -17
- chia/consensus/blockchain_interface.py +5 -4
- chia/consensus/coinbase.py +2 -2
- chia/consensus/constants.py +1 -1
- chia/consensus/cost_calculator.py +2 -1
- chia/consensus/default_constants.py +4 -3
- chia/consensus/deficit.py +3 -2
- chia/consensus/difficulty_adjustment.py +8 -9
- chia/consensus/find_fork_point.py +4 -3
- chia/consensus/full_block_to_block_record.py +4 -3
- chia/consensus/get_block_challenge.py +4 -3
- chia/consensus/get_block_generator.py +3 -2
- chia/consensus/make_sub_epoch_summary.py +3 -2
- chia/consensus/multiprocess_validation.py +9 -4
- chia/consensus/pos_quality.py +1 -1
- chia/consensus/pot_iterations.py +4 -3
- chia/consensus/vdf_info_computation.py +4 -3
- chia/daemon/client.py +1 -1
- chia/daemon/keychain_server.py +1 -1
- chia/daemon/server.py +1 -1
- chia/daemon/windows_signal.py +1 -1
- chia/data_layer/data_layer.py +4 -3
- chia/data_layer/data_layer_errors.py +1 -1
- chia/data_layer/data_layer_util.py +2 -2
- chia/data_layer/data_layer_wallet.py +47 -69
- chia/data_layer/data_store.py +1 -1
- chia/data_layer/dl_wallet_store.py +5 -6
- chia/data_layer/download_data.py +1 -1
- chia/data_layer/s3_plugin_service.py +4 -4
- chia/data_layer/singleton_record.py +23 -0
- chia/data_layer/util/benchmark.py +2 -1
- chia/farmer/farmer.py +4 -6
- chia/farmer/farmer_api.py +4 -6
- chia/full_node/bitcoin_fee_estimator.py +2 -1
- chia/full_node/block_height_map.py +2 -2
- chia/full_node/block_store.py +8 -9
- chia/{util → full_node}/check_fork_next_block.py +2 -1
- chia/full_node/coin_store.py +10 -10
- chia/full_node/fee_estimate.py +2 -1
- chia/full_node/fee_estimation.py +2 -1
- chia/full_node/fee_estimator.py +2 -1
- chia/full_node/fee_estimator_interface.py +1 -1
- chia/full_node/fee_history.py +2 -1
- chia/full_node/fee_tracker.py +2 -1
- chia/full_node/full_node.py +15 -13
- chia/full_node/full_node_api.py +12 -32
- chia/full_node/full_node_store.py +4 -3
- chia/full_node/hint_management.py +2 -1
- chia/full_node/hint_store.py +3 -3
- chia/full_node/mempool.py +80 -12
- chia/full_node/mempool_check_conditions.py +6 -7
- chia/full_node/mempool_manager.py +168 -21
- chia/full_node/pending_tx_cache.py +2 -2
- chia/full_node/subscriptions.py +2 -2
- chia/full_node/sync_store.py +2 -3
- chia/full_node/tx_processing_queue.py +2 -1
- chia/full_node/weight_proof.py +5 -8
- chia/harvester/harvester.py +5 -3
- chia/harvester/harvester_api.py +2 -2
- chia/introducer/introducer.py +30 -2
- chia/introducer/introducer_api.py +9 -1
- chia/legacy/keyring.py +1 -2
- chia/plot_sync/exceptions.py +2 -1
- chia/plot_sync/receiver.py +2 -2
- chia/plot_sync/sender.py +1 -1
- chia/plotting/cache.py +2 -2
- chia/plotting/check_plots.py +4 -2
- chia/plotting/create_plots.py +1 -1
- chia/plotting/manager.py +3 -3
- chia/plotting/util.py +2 -2
- chia/pools/pool_config.py +1 -1
- chia/pools/pool_puzzles.py +23 -17
- chia/pools/pool_wallet.py +22 -9
- chia/pools/pool_wallet_info.py +2 -2
- chia/protocols/farmer_protocol.py +3 -6
- chia/protocols/full_node_protocol.py +3 -2
- chia/protocols/harvester_protocol.py +3 -4
- chia/protocols/pool_protocol.py +2 -2
- chia/protocols/shared_protocol.py +2 -1
- chia/protocols/timelord_protocol.py +4 -4
- chia/protocols/wallet_protocol.py +2 -2
- chia/rpc/data_layer_rpc_api.py +3 -4
- chia/rpc/data_layer_rpc_client.py +3 -2
- chia/rpc/farmer_rpc_api.py +2 -2
- chia/rpc/farmer_rpc_client.py +2 -1
- chia/rpc/full_node_rpc_api.py +3 -2
- chia/rpc/full_node_rpc_client.py +3 -2
- chia/rpc/harvester_rpc_api.py +2 -1
- chia/rpc/rpc_client.py +2 -2
- chia/rpc/rpc_server.py +1 -1
- chia/rpc/wallet_request_types.py +2 -62
- chia/rpc/wallet_rpc_api.py +98 -628
- chia/rpc/wallet_rpc_client.py +5 -253
- chia/seeder/crawl_store.py +1 -1
- chia/seeder/crawler.py +2 -2
- chia/seeder/peer_record.py +2 -1
- chia/seeder/start_crawler.py +3 -1
- chia/server/address_manager.py +2 -1
- chia/server/address_manager_store.py +1 -1
- chia/server/capabilities.py +2 -1
- chia/server/introducer_peers.py +2 -1
- chia/server/node_discovery.py +1 -1
- chia/server/outbound_message.py +2 -1
- chia/server/server.py +2 -2
- chia/server/start_data_layer.py +2 -1
- chia/server/start_farmer.py +3 -1
- chia/server/start_full_node.py +4 -2
- chia/server/start_harvester.py +3 -1
- chia/server/start_introducer.py +12 -1
- chia/server/start_service.py +2 -1
- chia/server/start_timelord.py +3 -1
- chia/server/start_wallet.py +3 -1
- chia/server/upnp.py +1 -2
- chia/server/ws_connection.py +3 -4
- chia/simulator/add_blocks_in_batches.py +5 -3
- chia/simulator/block_tools.py +16 -12
- chia/simulator/full_node_simulator.py +9 -14
- chia/simulator/setup_services.py +5 -3
- chia/simulator/simulator_full_node_rpc_api.py +3 -2
- chia/simulator/simulator_full_node_rpc_client.py +3 -2
- chia/simulator/simulator_protocol.py +3 -2
- chia/simulator/simulator_test_tools.py +2 -2
- chia/simulator/start_simulator.py +3 -2
- chia/simulator/wallet_tools.py +3 -4
- chia/timelord/iters_from_block.py +4 -4
- chia/timelord/timelord.py +7 -12
- chia/timelord/timelord_api.py +3 -3
- chia/timelord/timelord_state.py +4 -3
- chia/types/block_protocol.py +2 -2
- chia/types/blockchain_format/coin.py +2 -2
- chia/types/blockchain_format/program.py +1 -1
- chia/types/blockchain_format/proof_of_space.py +3 -4
- chia/types/blockchain_format/tree_hash.py +1 -1
- chia/types/blockchain_format/vdf.py +3 -4
- chia/types/clvm_cost.py +1 -1
- chia/types/coin_record.py +4 -3
- chia/types/coin_spend.py +1 -1
- chia/types/eligible_coin_spends.py +9 -5
- chia/types/fee_rate.py +1 -1
- chia/types/generator_types.py +3 -3
- chia/types/internal_mempool_item.py +3 -2
- chia/types/mempool_item.py +10 -3
- chia/types/mempool_submission_status.py +2 -1
- chia/types/mojos.py +1 -1
- chia/types/peer_info.py +2 -1
- chia/types/transaction_queue_entry.py +2 -1
- chia/types/unfinished_header_block.py +4 -4
- chia/types/validation_state.py +2 -1
- chia/types/weight_proof.py +1 -9
- chia/util/augmented_chain.py +20 -9
- chia/util/block_cache.py +8 -4
- chia/util/condition_tools.py +2 -2
- chia/util/full_block_utils.py +3 -4
- chia/util/generator_tools.py +2 -2
- chia/util/initial-config.yaml +2 -11
- chia/util/network.py +2 -2
- chia/util/prev_transaction_block.py +2 -1
- chia/util/task_timing.py +1 -1
- chia/util/vdf_prover.py +3 -3
- chia/util/ws_message.py +1 -1
- chia/wallet/cat_wallet/cat_info.py +3 -2
- chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -2
- chia/wallet/cat_wallet/cat_utils.py +6 -4
- chia/wallet/cat_wallet/cat_wallet.py +16 -18
- chia/wallet/cat_wallet/lineage_store.py +2 -1
- chia/wallet/coin_selection.py +5 -5
- chia/wallet/conditions.py +22 -16
- chia/wallet/db_wallet/db_wallet_puzzles.py +15 -15
- chia/wallet/derivation_record.py +2 -2
- chia/wallet/derive_keys.py +2 -2
- chia/wallet/did_wallet/did_info.py +3 -2
- chia/wallet/did_wallet/did_wallet.py +41 -19
- chia/wallet/did_wallet/did_wallet_puzzles.py +18 -12
- chia/wallet/driver_protocol.py +1 -1
- chia/wallet/lineage_proof.py +3 -2
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +6 -7
- chia/wallet/nft_wallet/nft_info.py +5 -5
- chia/wallet/nft_wallet/nft_puzzle_utils.py +293 -0
- chia/wallet/nft_wallet/nft_puzzles.py +21 -298
- chia/wallet/nft_wallet/nft_wallet.py +47 -62
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +4 -8
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +3 -2
- chia/wallet/nft_wallet/transfer_program_puzzle.py +6 -10
- chia/wallet/nft_wallet/uncurry_nft.py +6 -8
- chia/wallet/notification_manager.py +5 -5
- chia/wallet/notification_store.py +3 -2
- chia/wallet/outer_puzzles.py +2 -1
- chia/wallet/puzzles/clawback/drivers.py +21 -8
- chia/wallet/puzzles/clawback/metadata.py +3 -2
- chia/wallet/puzzles/clawback/puzzle_decorator.py +5 -4
- chia/wallet/puzzles/deployed_puzzle_hashes.json +0 -10
- chia/wallet/puzzles/p2_conditions.py +3 -2
- chia/wallet/puzzles/p2_delegated_conditions.py +3 -2
- chia/wallet/puzzles/p2_delegated_puzzle.py +3 -2
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -3
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +3 -2
- chia/wallet/puzzles/p2_puzzle_hash.py +4 -3
- chia/wallet/puzzles/puzzle_utils.py +3 -2
- chia/wallet/puzzles/singleton_top_layer.py +26 -10
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +21 -9
- chia/wallet/puzzles/tails.py +21 -129
- chia/wallet/signer_protocol.py +3 -2
- chia/wallet/singleton.py +12 -6
- chia/wallet/singleton_record.py +3 -2
- chia/wallet/trade_manager.py +31 -55
- chia/wallet/trade_record.py +3 -2
- chia/wallet/trading/offer.py +14 -13
- chia/wallet/trading/trade_store.py +3 -4
- chia/wallet/transaction_record.py +2 -2
- chia/wallet/util/blind_signer_tl.py +3 -2
- chia/wallet/util/compute_hints.py +3 -2
- chia/wallet/util/compute_memos.py +2 -2
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +1 -1
- chia/wallet/util/merkle_utils.py +1 -1
- chia/wallet/util/new_peak_queue.py +2 -1
- chia/wallet/util/notifications.py +5 -4
- chia/wallet/util/peer_request_cache.py +3 -2
- chia/wallet/util/puzzle_compression.py +6 -4
- chia/wallet/util/puzzle_decorator.py +6 -4
- chia/wallet/util/query_filter.py +3 -2
- chia/wallet/util/tx_config.py +3 -3
- chia/wallet/util/wallet_sync_utils.py +2 -2
- chia/wallet/util/wallet_types.py +2 -3
- chia/wallet/vc_wallet/cr_cat_drivers.py +18 -22
- chia/wallet/vc_wallet/cr_cat_wallet.py +14 -10
- chia/wallet/vc_wallet/cr_outer_puzzle.py +2 -2
- chia/wallet/vc_wallet/vc_drivers.py +50 -68
- chia/wallet/vc_wallet/vc_store.py +2 -2
- chia/wallet/vc_wallet/vc_wallet.py +47 -15
- chia/wallet/wallet.py +51 -46
- chia/wallet/wallet_action_scope.py +4 -0
- chia/wallet/wallet_blockchain.py +12 -7
- chia/wallet/wallet_coin_record.py +3 -2
- chia/wallet/wallet_coin_store.py +3 -2
- chia/wallet/wallet_info.py +2 -1
- chia/wallet/wallet_interested_store.py +3 -2
- chia/wallet/wallet_nft_store.py +4 -4
- chia/wallet/wallet_node.py +3 -4
- chia/wallet/wallet_pool_store.py +3 -4
- chia/wallet/wallet_protocol.py +19 -5
- chia/wallet/wallet_puzzle_store.py +2 -2
- chia/wallet/wallet_retry_store.py +3 -6
- chia/wallet/wallet_singleton_store.py +2 -2
- chia/wallet/wallet_state_manager.py +20 -197
- chia/wallet/wallet_transaction_store.py +2 -2
- chia/wallet/wallet_user_store.py +2 -1
- chia/wallet/wallet_weight_proof_handler.py +3 -2
- {chia_blockchain-2.5.2rc2.dist-info → chia_blockchain-2.5.3rc2.dist-info}/METADATA +3 -2
- chia_blockchain-2.5.3rc2.dist-info/RECORD +891 -0
- mozilla-ca/cacert.pem +64 -33
- chia/_tests/clvm/test_condition_codes.py +0 -13
- chia/_tests/cmds/wallet/test_dao.py +0 -565
- chia/_tests/wallet/dao_wallet/__init__.py +0 -0
- chia/_tests/wallet/dao_wallet/config.py +0 -3
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +0 -1330
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +0 -3488
- chia/cmds/dao.py +0 -1064
- chia/cmds/dao_funcs.py +0 -598
- chia/consensus/puzzles/__init__.py +0 -0
- chia/consensus/puzzles/chialisp_deserialisation.clsp +0 -69
- chia/consensus/puzzles/chialisp_deserialisation.clsp.hex +0 -1
- chia/consensus/puzzles/rom_bootstrap_generator.clsp +0 -37
- chia/consensus/puzzles/rom_bootstrap_generator.clsp.hex +0 -1
- chia/full_node/puzzles/__init__.py +0 -0
- chia/full_node/puzzles/block_program_zero.clsp +0 -14
- chia/full_node/puzzles/block_program_zero.clsp.hex +0 -1
- chia/full_node/puzzles/decompress_coin_spend_entry.clsp +0 -5
- chia/full_node/puzzles/decompress_coin_spend_entry.clsp.hex +0 -1
- chia/full_node/puzzles/decompress_coin_spend_entry_with_prefix.clsp +0 -7
- chia/full_node/puzzles/decompress_coin_spend_entry_with_prefix.clsp.hex +0 -1
- chia/full_node/puzzles/decompress_puzzle.clsp +0 -6
- chia/full_node/puzzles/decompress_puzzle.clsp.hex +0 -1
- chia/pools/puzzles/__init__.py +0 -0
- chia/pools/puzzles/pool_member_innerpuz.clsp +0 -70
- chia/pools/puzzles/pool_member_innerpuz.clsp.hex +0 -1
- chia/pools/puzzles/pool_waitingroom_innerpuz.clsp +0 -69
- chia/pools/puzzles/pool_waitingroom_innerpuz.clsp.hex +0 -1
- chia/simulator/simulator_constants.py +0 -13
- chia/types/blockchain_format/foliage.py +0 -8
- chia/types/blockchain_format/pool_target.py +0 -5
- chia/types/blockchain_format/reward_chain_block.py +0 -6
- chia/types/blockchain_format/sized_bytes.py +0 -11
- chia/util/ints.py +0 -19
- chia/wallet/cat_wallet/dao_cat_info.py +0 -28
- chia/wallet/cat_wallet/dao_cat_wallet.py +0 -669
- chia/wallet/cat_wallet/puzzles/__init__.py +0 -0
- chia/wallet/cat_wallet/puzzles/cat_truths.clib +0 -31
- chia/wallet/cat_wallet/puzzles/cat_v2.clsp +0 -397
- chia/wallet/cat_wallet/puzzles/cat_v2.clsp.hex +0 -1
- chia/wallet/cat_wallet/puzzles/delegated_tail.clsp +0 -25
- chia/wallet/cat_wallet/puzzles/delegated_tail.clsp.hex +0 -1
- chia/wallet/cat_wallet/puzzles/everything_with_signature.clsp +0 -15
- chia/wallet/cat_wallet/puzzles/everything_with_signature.clsp.hex +0 -1
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id.clsp +0 -26
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id.clsp.hex +0 -1
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id_or_singleton.clsp +0 -42
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id_or_singleton.clsp.hex +0 -1
- chia/wallet/cat_wallet/puzzles/genesis_by_puzzle_hash.clsp +0 -24
- chia/wallet/cat_wallet/puzzles/genesis_by_puzzle_hash.clsp.hex +0 -1
- chia/wallet/dao_wallet/__init__.py +0 -0
- chia/wallet/dao_wallet/dao_info.py +0 -61
- chia/wallet/dao_wallet/dao_utils.py +0 -811
- chia/wallet/dao_wallet/dao_wallet.py +0 -2119
- chia/wallet/did_wallet/puzzles/__init__.py +0 -0
- chia/wallet/did_wallet/puzzles/did_innerpuz.clsp +0 -135
- chia/wallet/did_wallet/puzzles/did_innerpuz.clsp.hex +0 -1
- chia/wallet/payment.py +0 -33
- chia/wallet/puzzles/augmented_condition.clsp +0 -13
- chia/wallet/puzzles/augmented_condition.clsp.hex +0 -1
- chia/wallet/puzzles/condition_codes.clib +0 -77
- chia/wallet/puzzles/curry-and-treehash.clib +0 -102
- chia/wallet/puzzles/curry.clib +0 -135
- chia/wallet/puzzles/curry_by_index.clib +0 -16
- chia/wallet/puzzles/dao_cat_eve.clsp +0 -17
- chia/wallet/puzzles/dao_cat_eve.clsp.hex +0 -1
- chia/wallet/puzzles/dao_cat_launcher.clsp +0 -36
- chia/wallet/puzzles/dao_cat_launcher.clsp.hex +0 -1
- chia/wallet/puzzles/dao_finished_state.clsp +0 -35
- chia/wallet/puzzles/dao_finished_state.clsp.hex +0 -1
- chia/wallet/puzzles/dao_finished_state.clsp.hex.sha256tree +0 -1
- chia/wallet/puzzles/dao_lockup.clsp +0 -288
- chia/wallet/puzzles/dao_lockup.clsp.hex +0 -1
- chia/wallet/puzzles/dao_lockup.clsp.hex.sha256tree +0 -1
- chia/wallet/puzzles/dao_proposal.clsp +0 -377
- chia/wallet/puzzles/dao_proposal.clsp.hex +0 -1
- chia/wallet/puzzles/dao_proposal.clsp.hex.sha256tree +0 -1
- chia/wallet/puzzles/dao_proposal_timer.clsp +0 -78
- chia/wallet/puzzles/dao_proposal_timer.clsp.hex +0 -1
- chia/wallet/puzzles/dao_proposal_timer.clsp.hex.sha256tree +0 -1
- chia/wallet/puzzles/dao_proposal_validator.clsp +0 -87
- chia/wallet/puzzles/dao_proposal_validator.clsp.hex +0 -1
- chia/wallet/puzzles/dao_proposal_validator.clsp.hex.sha256tree +0 -1
- chia/wallet/puzzles/dao_spend_p2_singleton_v2.clsp +0 -240
- chia/wallet/puzzles/dao_spend_p2_singleton_v2.clsp.hex +0 -1
- chia/wallet/puzzles/dao_spend_p2_singleton_v2.clsp.hex.sha256tree +0 -1
- chia/wallet/puzzles/dao_treasury.clsp +0 -115
- chia/wallet/puzzles/dao_treasury.clsp.hex +0 -1
- chia/wallet/puzzles/dao_update_proposal.clsp +0 -44
- chia/wallet/puzzles/dao_update_proposal.clsp.hex +0 -1
- chia/wallet/puzzles/json.clib +0 -25
- chia/wallet/puzzles/merkle_utils.clib +0 -18
- chia/wallet/puzzles/notification.clsp +0 -7
- chia/wallet/puzzles/notification.clsp.hex +0 -1
- chia/wallet/puzzles/p2_1_of_n.clsp +0 -22
- chia/wallet/puzzles/p2_1_of_n.clsp.hex +0 -1
- chia/wallet/puzzles/p2_conditions.clsp +0 -3
- chia/wallet/puzzles/p2_conditions.clsp.hex +0 -1
- chia/wallet/puzzles/p2_delegated_conditions.clsp +0 -18
- chia/wallet/puzzles/p2_delegated_conditions.clsp.hex +0 -1
- chia/wallet/puzzles/p2_delegated_puzzle.clsp +0 -19
- chia/wallet/puzzles/p2_delegated_puzzle.clsp.hex +0 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.clsp +0 -91
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.clsp.hex +0 -1
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.clsp +0 -108
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.clsp.hex +0 -1
- chia/wallet/puzzles/p2_parent.clsp +0 -19
- chia/wallet/puzzles/p2_parent.clsp.hex +0 -1
- chia/wallet/puzzles/p2_puzzle_hash.clsp +0 -18
- chia/wallet/puzzles/p2_puzzle_hash.clsp.hex +0 -1
- chia/wallet/puzzles/p2_singleton.clsp +0 -30
- chia/wallet/puzzles/p2_singleton.clsp.hex +0 -1
- chia/wallet/puzzles/p2_singleton_aggregator.clsp +0 -81
- chia/wallet/puzzles/p2_singleton_aggregator.clsp.hex +0 -1
- chia/wallet/puzzles/p2_singleton_or_delayed_puzhash.clsp +0 -50
- chia/wallet/puzzles/p2_singleton_or_delayed_puzhash.clsp.hex +0 -1
- chia/wallet/puzzles/p2_singleton_via_delegated_puzzle.clsp +0 -47
- chia/wallet/puzzles/p2_singleton_via_delegated_puzzle.clsp.hex +0 -1
- chia/wallet/puzzles/settlement_payments.clsp +0 -49
- chia/wallet/puzzles/settlement_payments.clsp.hex +0 -1
- chia/wallet/puzzles/sha256tree.clib +0 -11
- chia/wallet/puzzles/singleton_launcher.clsp +0 -16
- chia/wallet/puzzles/singleton_launcher.clsp.hex +0 -1
- chia/wallet/puzzles/singleton_top_layer.clsp +0 -177
- chia/wallet/puzzles/singleton_top_layer.clsp.hex +0 -1
- chia/wallet/puzzles/singleton_top_layer_v1_1.clsp +0 -107
- chia/wallet/puzzles/singleton_top_layer_v1_1.clsp.hex +0 -1
- chia/wallet/puzzles/singleton_truths.clib +0 -21
- chia/wallet/vc_wallet/cr_puzzles/__init__.py +0 -0
- chia/wallet/vc_wallet/cr_puzzles/conditions_w_fee_announce.clsp +0 -3
- chia/wallet/vc_wallet/cr_puzzles/conditions_w_fee_announce.clsp.hex +0 -1
- chia/wallet/vc_wallet/cr_puzzles/credential_restriction.clsp +0 -304
- chia/wallet/vc_wallet/cr_puzzles/credential_restriction.clsp.hex +0 -1
- chia/wallet/vc_wallet/cr_puzzles/flag_proofs_checker.clsp +0 -45
- chia/wallet/vc_wallet/cr_puzzles/flag_proofs_checker.clsp.hex +0 -1
- chia/wallet/vc_wallet/vc_puzzles/__init__.py +0 -0
- chia/wallet/vc_wallet/vc_puzzles/covenant_layer.clsp +0 -30
- chia/wallet/vc_wallet/vc_puzzles/covenant_layer.clsp.hex +0 -1
- chia/wallet/vc_wallet/vc_puzzles/eml_covenant_morpher.clsp +0 -75
- chia/wallet/vc_wallet/vc_puzzles/eml_covenant_morpher.clsp.hex +0 -1
- chia/wallet/vc_wallet/vc_puzzles/eml_transfer_program_covenant_adapter.clsp +0 -32
- chia/wallet/vc_wallet/vc_puzzles/eml_transfer_program_covenant_adapter.clsp.hex +0 -1
- chia/wallet/vc_wallet/vc_puzzles/eml_update_metadata_with_DID.clsp +0 -80
- chia/wallet/vc_wallet/vc_puzzles/eml_update_metadata_with_DID.clsp.hex +0 -1
- chia/wallet/vc_wallet/vc_puzzles/exigent_metadata_layer.clsp +0 -163
- chia/wallet/vc_wallet/vc_puzzles/exigent_metadata_layer.clsp.hex +0 -1
- chia/wallet/vc_wallet/vc_puzzles/p2_announced_delegated_puzzle.clsp +0 -16
- chia/wallet/vc_wallet/vc_puzzles/p2_announced_delegated_puzzle.clsp.hex +0 -1
- chia/wallet/vc_wallet/vc_puzzles/standard_vc_backdoor_puzzle.clsp +0 -74
- chia/wallet/vc_wallet/vc_puzzles/standard_vc_backdoor_puzzle.clsp.hex +0 -1
- chia/wallet/vc_wallet/vc_puzzles/std_parent_morpher.clsp +0 -23
- chia/wallet/vc_wallet/vc_puzzles/std_parent_morpher.clsp.hex +0 -1
- chia/wallet/vc_wallet/vc_puzzles/viral_backdoor.clsp +0 -64
- chia/wallet/vc_wallet/vc_puzzles/viral_backdoor.clsp.hex +0 -1
- chia_blockchain-2.5.2rc2.dist-info/RECORD +0 -1042
- {chia_blockchain-2.5.2rc2.dist-info → chia_blockchain-2.5.3rc2.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.2rc2.dist-info → chia_blockchain-2.5.3rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.2rc2.dist-info → chia_blockchain-2.5.3rc2.dist-info}/entry_points.txt +0 -0
|
@@ -1,288 +0,0 @@
|
|
|
1
|
-
; This code is the "voting mode" for a DAO CAT.
|
|
2
|
-
; The coin can be spent from this state to vote on a proposal or claim a dividend.
|
|
3
|
-
; It locks the CAT in while it has active votes/dividends going on.
|
|
4
|
-
; Once a vote or dividend closes, then the coin can spend itself to remove that coin from the "active list"
|
|
5
|
-
; If the "active list" is empty the coin can leave the voting mode
|
|
6
|
-
|
|
7
|
-
(mod (
|
|
8
|
-
; this is the first curry
|
|
9
|
-
SINGLETON_MOD_HASH
|
|
10
|
-
SINGLETON_LAUNCHER_PUZHASH
|
|
11
|
-
DAO_FINISHED_STATE_MOD_HASH
|
|
12
|
-
CAT_MOD_HASH
|
|
13
|
-
CAT_TAIL_HASH
|
|
14
|
-
; this is the second curry
|
|
15
|
-
SELF_HASH ; this is the self_hash Optimization
|
|
16
|
-
ACTIVE_VOTES ; "active votes" list
|
|
17
|
-
INNERPUZ
|
|
18
|
-
; this is the solution
|
|
19
|
-
my_id ; if my_id is 0 we do the return to return_address (exit voting mode) spend case
|
|
20
|
-
inner_solution
|
|
21
|
-
my_amount
|
|
22
|
-
new_proposal_vote_id_or_removal_id ; removal_id is a list of removal_ids
|
|
23
|
-
proposal_innerpuzhash ; list of singleton innerpuzhashes which should match the order of the new_proposal_vote_id list
|
|
24
|
-
vote_info
|
|
25
|
-
vote_amount
|
|
26
|
-
my_inner_puzhash
|
|
27
|
-
new_innerpuzhash ; only include this if we're changing owners - secured because coin is still made from inner_puz
|
|
28
|
-
)
|
|
29
|
-
(include condition_codes.clib)
|
|
30
|
-
(include curry-and-treehash.clib)
|
|
31
|
-
(include *standard-cl-21*)
|
|
32
|
-
|
|
33
|
-
(defun calculate_finished_state (singleton_struct dao_finished_state)
|
|
34
|
-
(puzzle-hash-of-curried-function dao_finished_state
|
|
35
|
-
(sha256 ONE dao_finished_state)
|
|
36
|
-
(sha256tree singleton_struct)
|
|
37
|
-
)
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
; take two lists and merge them into one
|
|
41
|
-
(defun merge_list (list_a list_b)
|
|
42
|
-
(if list_a
|
|
43
|
-
(c (f list_a) (merge_list (r list_a) list_b))
|
|
44
|
-
list_b
|
|
45
|
-
)
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
(defun wrap_in_cat_layer (CAT_MOD_HASH CAT_TAIL_HASH INNERPUZHASH)
|
|
49
|
-
(puzzle-hash-of-curried-function CAT_MOD_HASH
|
|
50
|
-
INNERPUZHASH
|
|
51
|
-
(sha256 ONE CAT_TAIL_HASH)
|
|
52
|
-
(sha256 ONE CAT_MOD_HASH)
|
|
53
|
-
)
|
|
54
|
-
)
|
|
55
|
-
|
|
56
|
-
; loop through conditions and check that they aren't trying to create anything they shouldn't
|
|
57
|
-
(defun check_conditions (conditions vote_added_puzhash my_amount message vote_amount my_inner_puzhash seen_vote seen_change)
|
|
58
|
-
(if conditions
|
|
59
|
-
(if (= (f (f conditions)) CREATE_COIN) ; this guarantees that the new coin is obeying the rules - other coins are banned to avoid re-voting
|
|
60
|
-
(if (= (f (r (f conditions))) vote_added_puzhash)
|
|
61
|
-
(if seen_vote ; assert we haven't already made a coin with the new vote included
|
|
62
|
-
(x)
|
|
63
|
-
(if (= (f (r (r (f conditions)))) my_amount) ; we vote with all our value
|
|
64
|
-
(if seen_change ; assert that we haven't already recreated ourself in some fashion
|
|
65
|
-
(x)
|
|
66
|
-
(c (f conditions) (check_conditions (r conditions) vote_added_puzhash my_amount message vote_amount my_inner_puzhash 1 1))
|
|
67
|
-
)
|
|
68
|
-
(if (= (f (r (r (f conditions)))) vote_amount) ; we vote with part of our power
|
|
69
|
-
(c (f conditions) (check_conditions (r conditions) vote_added_puzhash my_amount message vote_amount my_inner_puzhash 1 seen_change))
|
|
70
|
-
(x)
|
|
71
|
-
)
|
|
72
|
-
)
|
|
73
|
-
)
|
|
74
|
-
(if (all
|
|
75
|
-
(= (f (r (f conditions))) my_inner_puzhash)
|
|
76
|
-
(not seen_change)
|
|
77
|
-
(= (f (r (r (f conditions)))) (- my_amount vote_amount))
|
|
78
|
-
) ; we recreate ourselves with unused voting power
|
|
79
|
-
(c (f conditions) (check_conditions (r conditions) vote_added_puzhash my_amount message vote_amount my_inner_puzhash seen_vote 1))
|
|
80
|
-
(x)
|
|
81
|
-
)
|
|
82
|
-
)
|
|
83
|
-
(if (= (f (f conditions)) CREATE_PUZZLE_ANNOUNCEMENT) ; this secures the values used to generate message - other messages are banned in case of LIES
|
|
84
|
-
(if (= (f (r (f conditions))) message)
|
|
85
|
-
(c (f conditions) (check_conditions (r conditions) vote_added_puzhash my_amount message vote_amount my_inner_puzhash seen_vote seen_change))
|
|
86
|
-
(x)
|
|
87
|
-
)
|
|
88
|
-
(c (f conditions) (check_conditions (r conditions) vote_added_puzhash my_amount message vote_amount my_inner_puzhash seen_vote seen_change))
|
|
89
|
-
)
|
|
90
|
-
)
|
|
91
|
-
(if (all seen_vote seen_change) ; check all value is accounted for
|
|
92
|
-
()
|
|
93
|
-
(x)
|
|
94
|
-
)
|
|
95
|
-
)
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
; go through our list of active votes and check that we aren't revoting
|
|
99
|
-
(defun check_not_previously_voted (
|
|
100
|
-
SINGLETON_MOD_HASH
|
|
101
|
-
SINGLETON_LAUNCHER_PUZHASH
|
|
102
|
-
INNERPUZ
|
|
103
|
-
my_id
|
|
104
|
-
new_vote_id
|
|
105
|
-
active_votes
|
|
106
|
-
proposal_innerpuzhash
|
|
107
|
-
)
|
|
108
|
-
(if active_votes
|
|
109
|
-
(if (= new_vote_id (f active_votes)) ; check new vote id is not equal to an existent vote id
|
|
110
|
-
(x)
|
|
111
|
-
(check_not_previously_voted
|
|
112
|
-
SINGLETON_MOD_HASH
|
|
113
|
-
SINGLETON_LAUNCHER_PUZHASH
|
|
114
|
-
INNERPUZ
|
|
115
|
-
my_id
|
|
116
|
-
new_vote_id
|
|
117
|
-
(r active_votes)
|
|
118
|
-
proposal_innerpuzhash
|
|
119
|
-
)
|
|
120
|
-
)
|
|
121
|
-
(list ASSERT_PUZZLE_ANNOUNCEMENT
|
|
122
|
-
(sha256
|
|
123
|
-
(calculate_singleton_puzzle_hash
|
|
124
|
-
(c SINGLETON_MOD_HASH (c new_vote_id SINGLETON_LAUNCHER_PUZHASH))
|
|
125
|
-
proposal_innerpuzhash
|
|
126
|
-
)
|
|
127
|
-
my_id
|
|
128
|
-
)
|
|
129
|
-
)
|
|
130
|
-
)
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
(defun calculate_singleton_puzzle_hash (PROPOSAL_SINGLETON_STRUCT inner_puzzle_hash)
|
|
135
|
-
(puzzle-hash-of-curried-function (f PROPOSAL_SINGLETON_STRUCT)
|
|
136
|
-
inner_puzzle_hash
|
|
137
|
-
(sha256tree PROPOSAL_SINGLETON_STRUCT)
|
|
138
|
-
)
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
(defun calculate_lockup_puzzlehash (
|
|
142
|
-
SELF_HASH
|
|
143
|
-
active_votes
|
|
144
|
-
innerpuzhash
|
|
145
|
-
)
|
|
146
|
-
(puzzle-hash-of-curried-function SELF_HASH
|
|
147
|
-
innerpuzhash
|
|
148
|
-
(sha256tree active_votes)
|
|
149
|
-
(sha256 ONE SELF_HASH)
|
|
150
|
-
)
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
(defun for_every_removal_id (
|
|
154
|
-
SINGLETON_MOD_HASH
|
|
155
|
-
SINGLETON_LAUNCHER_PUZHASH
|
|
156
|
-
SELF_HASH
|
|
157
|
-
DAO_FINISHED_STATE_MOD_HASH
|
|
158
|
-
CAT_MOD_HASH
|
|
159
|
-
CAT_TAIL_HASH
|
|
160
|
-
ACTIVE_VOTES
|
|
161
|
-
INNERPUZ
|
|
162
|
-
removal_ids
|
|
163
|
-
my_amount
|
|
164
|
-
unused_votes
|
|
165
|
-
)
|
|
166
|
-
(if removal_ids
|
|
167
|
-
(c
|
|
168
|
-
(list
|
|
169
|
-
ASSERT_PUZZLE_ANNOUNCEMENT ; check proposal is actually finished
|
|
170
|
-
(sha256
|
|
171
|
-
(calculate_singleton_puzzle_hash
|
|
172
|
-
(c SINGLETON_MOD_HASH (c (f removal_ids) SINGLETON_LAUNCHER_PUZHASH))
|
|
173
|
-
(calculate_finished_state
|
|
174
|
-
(c SINGLETON_MOD_HASH (c (f removal_ids) SINGLETON_LAUNCHER_PUZHASH))
|
|
175
|
-
DAO_FINISHED_STATE_MOD_HASH
|
|
176
|
-
)
|
|
177
|
-
)
|
|
178
|
-
0
|
|
179
|
-
)
|
|
180
|
-
)
|
|
181
|
-
(for_every_removal_id
|
|
182
|
-
SINGLETON_MOD_HASH
|
|
183
|
-
SINGLETON_LAUNCHER_PUZHASH
|
|
184
|
-
SELF_HASH
|
|
185
|
-
DAO_FINISHED_STATE_MOD_HASH
|
|
186
|
-
CAT_MOD_HASH
|
|
187
|
-
CAT_TAIL_HASH
|
|
188
|
-
ACTIVE_VOTES
|
|
189
|
-
INNERPUZ
|
|
190
|
-
(r removal_ids)
|
|
191
|
-
my_amount
|
|
192
|
-
(c (f removal_ids) unused_votes)
|
|
193
|
-
)
|
|
194
|
-
)
|
|
195
|
-
(list
|
|
196
|
-
(list ASSERT_MY_AMOUNT my_amount) ; assert that we aren't lying about our amount to free up money and re-vote
|
|
197
|
-
(list
|
|
198
|
-
CREATE_COIN ; recreate self with the finished proposal ID removed
|
|
199
|
-
(calculate_lockup_puzzlehash
|
|
200
|
-
SELF_HASH
|
|
201
|
-
(remove_list_one_entries_from_list_two unused_votes ACTIVE_VOTES)
|
|
202
|
-
(sha256tree INNERPUZ)
|
|
203
|
-
)
|
|
204
|
-
my_amount
|
|
205
|
-
)
|
|
206
|
-
)
|
|
207
|
-
)
|
|
208
|
-
)
|
|
209
|
-
|
|
210
|
-
(defun remove_list_one_entries_from_list_two (list_one list_two)
|
|
211
|
-
(if list_one
|
|
212
|
-
(remove_item_from_list (f list_one) (remove_list_one_entries_from_list_two (r list_one) list_two))
|
|
213
|
-
list_two
|
|
214
|
-
)
|
|
215
|
-
)
|
|
216
|
-
|
|
217
|
-
(defun remove_item_from_list (item list_one)
|
|
218
|
-
(if list_one
|
|
219
|
-
(if (= (f list_one) item)
|
|
220
|
-
(r list_one) ; assuming there are no duplicates
|
|
221
|
-
(c (f list_one) (remove_item_from_list item (r list_one)))
|
|
222
|
-
)
|
|
223
|
-
() ; item was never in list_one, return list_two entirely
|
|
224
|
-
)
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
; main
|
|
229
|
-
(if my_id
|
|
230
|
-
(c (list ASSERT_MY_PUZZLEHASH (wrap_in_cat_layer CAT_MOD_HASH CAT_TAIL_HASH my_inner_puzhash))
|
|
231
|
-
(c
|
|
232
|
-
(list ASSERT_MY_AMOUNT my_amount)
|
|
233
|
-
(c
|
|
234
|
-
(list ASSERT_MY_COIN_ID my_id)
|
|
235
|
-
(c
|
|
236
|
-
(if new_proposal_vote_id_or_removal_id
|
|
237
|
-
(check_not_previously_voted ; this returns a single condition asserting announcement from vote singleton
|
|
238
|
-
SINGLETON_MOD_HASH
|
|
239
|
-
SINGLETON_LAUNCHER_PUZHASH
|
|
240
|
-
INNERPUZ
|
|
241
|
-
my_id
|
|
242
|
-
new_proposal_vote_id_or_removal_id
|
|
243
|
-
ACTIVE_VOTES
|
|
244
|
-
proposal_innerpuzhash
|
|
245
|
-
)
|
|
246
|
-
(list REMARK)
|
|
247
|
-
)
|
|
248
|
-
|
|
249
|
-
; loop over conditions and check that we aren't trying to leave voting state
|
|
250
|
-
(check_conditions
|
|
251
|
-
(a INNERPUZ inner_solution)
|
|
252
|
-
(calculate_lockup_puzzlehash ; compare created coin to our own calculation on what the next puzzle should be
|
|
253
|
-
SELF_HASH
|
|
254
|
-
(if new_proposal_vote_id_or_removal_id (c new_proposal_vote_id_or_removal_id ACTIVE_VOTES) ACTIVE_VOTES)
|
|
255
|
-
(if new_innerpuzhash new_innerpuzhash (sha256tree INNERPUZ))
|
|
256
|
-
)
|
|
257
|
-
my_amount
|
|
258
|
-
; TODO: add namespace to this announcement to allow announcements from the innerpuz
|
|
259
|
-
(sha256tree (list new_proposal_vote_id_or_removal_id vote_amount vote_info my_id))
|
|
260
|
-
vote_amount
|
|
261
|
-
my_inner_puzhash
|
|
262
|
-
0
|
|
263
|
-
0
|
|
264
|
-
)
|
|
265
|
-
)
|
|
266
|
-
)
|
|
267
|
-
)
|
|
268
|
-
)
|
|
269
|
-
|
|
270
|
-
; return to return_address or remove something from active list - check if our locked list is empty
|
|
271
|
-
(if ACTIVE_VOTES
|
|
272
|
-
(for_every_removal_id ; locked list is not empty, so we must be trying to remove something from it
|
|
273
|
-
SINGLETON_MOD_HASH
|
|
274
|
-
SINGLETON_LAUNCHER_PUZHASH
|
|
275
|
-
SELF_HASH
|
|
276
|
-
DAO_FINISHED_STATE_MOD_HASH
|
|
277
|
-
CAT_MOD_HASH
|
|
278
|
-
CAT_TAIL_HASH
|
|
279
|
-
ACTIVE_VOTES
|
|
280
|
-
INNERPUZ
|
|
281
|
-
new_proposal_vote_id_or_removal_id
|
|
282
|
-
my_amount
|
|
283
|
-
()
|
|
284
|
-
)
|
|
285
|
-
(a INNERPUZ inner_solution)
|
|
286
|
-
)
|
|
287
|
-
)
|
|
288
|
-
)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ff02ffff01ff02ffff03ff8205ffffff01ff02ffff01ff04ffff04ffff0148ffff04ffff02ff2cffff04ff02ffff04ff2fffff04ff5fffff04ff8302ffffff808080808080ffff01808080ffff04ffff04ffff0149ffff04ff8217ffffff01808080ffff04ffff04ffff0146ffff04ff8205ffffff01808080ffff04ffff02ffff03ff822fffffff01ff02ffff01ff02ff12ffff04ff02ffff04ff05ffff04ff0bffff04ff8202ffffff04ff8205ffffff04ff822fffffff04ff82017fffff04ff825fffff80808080808080808080ff0180ffff01ff02ffff01ff04ffff0101ffff018080ff018080ff0180ffff02ff3cffff04ff02ffff04ffff02ff8202ffff820bff80ffff04ffff02ff3affff04ff02ffff04ff8200bfffff04ffff02ffff03ff822fffffff01ff02ffff01ff04ff822fffff82017f80ff0180ffff01ff02ffff0182017fff018080ff0180ffff04ffff02ffff03ff8305ffffffff01ff02ffff018305ffffff0180ffff01ff02ffff01ff02ff38ffff04ff02ffff04ff8202ffff80808080ff018080ff0180ff808080808080ffff04ff8217ffffff04ffff02ff38ffff04ff02ffff04ffff04ff822fffffff04ff83017fffffff04ff8300bfffffff04ff8205ffffff018080808080ff80808080ffff04ff83017fffffff04ff8302ffffffff04ffff0180ffff04ffff0180ff808080808080808080808080808080ff0180ffff01ff02ffff01ff02ffff03ff82017fffff01ff02ffff01ff02ff16ffff04ff02ffff04ff05ffff04ff0bffff04ff8200bfffff04ff17ffff04ff2fffff04ff5fffff04ff82017fffff04ff8202ffffff04ff822fffffff04ff8217ffffff04ffff0180ff8080808080808080808080808080ff0180ffff01ff02ffff01ff02ff8202ffff820bff80ff018080ff0180ff018080ff0180ffff04ffff01ffffffff02ffff03ff05ffff01ff02ffff01ff02ff10ffff04ff02ffff04ffff06ff0580ffff04ffff0bffff0102ffff0bffff0101ffff010480ffff0bffff0102ffff0bffff0102ffff0bffff0101ffff010180ffff05ff058080ffff0bffff0102ff0bffff0bffff0101ffff018080808080ff8080808080ff0180ffff01ff02ffff010bff018080ff0180ffff0bffff0102ffff01a0a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222ffff0bffff0102ffff0bffff0102ffff01a09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0580ffff0bffff0102ffff02ff10ffff04ff02ffff04ff07ffff01ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b280808080ffff01a04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459a808080ff02ffff03ffff07ff0580ffff01ff02ffff01ff0bffff0102ffff02ff38ffff04ff02ffff04ffff05ff0580ff80808080ffff02ff38ffff04ff02ffff04ffff06ff0580ff8080808080ff0180ffff01ff02ffff01ff0bffff0101ff0580ff018080ff0180ffff02ff28ffff04ff02ffff04ff0bffff04ffff0bffff0101ff0b80ffff04ffff02ff38ffff04ff02ffff04ff05ff80808080ff808080808080ffff02ff28ffff04ff02ffff04ff05ffff04ff17ffff04ffff0bffff0101ff0b80ffff04ffff0bffff0101ff0580ff80808080808080ff02ffff03ff05ffff01ff02ffff01ff02ffff03ffff09ffff05ffff05ff058080ffff013380ffff01ff02ffff01ff02ffff03ffff09ffff05ffff06ffff05ff05808080ff0b80ffff01ff02ffff01ff02ffff03ff82017fffff01ff02ffff01ff0880ff0180ffff01ff02ffff01ff02ffff03ffff09ffff05ffff06ffff06ffff05ff0580808080ff1780ffff01ff02ffff01ff02ffff03ff8202ffffff01ff02ffff01ff0880ff0180ffff01ff02ffff01ff04ffff05ff0580ffff02ff3cffff04ff02ffff04ffff06ff0580ffff04ff0bffff04ff17ffff04ff2fffff04ff5fffff04ff8200bfffff04ffff0101ffff04ffff0101ff808080808080808080808080ff018080ff0180ff0180ffff01ff02ffff01ff02ffff03ffff09ffff05ffff06ffff06ffff05ff0580808080ff5f80ffff01ff02ffff01ff04ffff05ff0580ffff02ff3cffff04ff02ffff04ffff06ff0580ffff04ff0bffff04ff17ffff04ff2fffff04ff5fffff04ff8200bfffff04ffff0101ffff04ff8202ffff808080808080808080808080ff0180ffff01ff02ffff01ff0880ff018080ff0180ff018080ff0180ff018080ff0180ff0180ffff01ff02ffff01ff02ffff03ffff22ffff09ffff05ffff06ffff05ff05808080ff8200bf80ffff20ff8202ff80ffff09ffff05ffff06ffff06ffff05ff0580808080ffff11ff17ff5f808080ffff01ff02ffff01ff04ffff05ff0580ffff02ff3cffff04ff02ffff04ffff06ff0580ffff04ff0bffff04ff17ffff04ff2fffff04ff5fffff04ff8200bfffff04ff82017fffff04ffff0101ff808080808080808080808080ff0180ffff01ff02ffff01ff0880ff018080ff0180ff018080ff0180ff0180ffff01ff02ffff01ff02ffff03ffff09ffff05ffff05ff058080ffff013e80ffff01ff02ffff01ff02ffff03ffff09ffff05ffff06ffff05ff05808080ff2f80ffff01ff02ffff01ff04ffff05ff0580ffff02ff3cffff04ff02ffff04ffff06ff0580ffff04ff0bffff04ff17ffff04ff2fffff04ff5fffff04ff8200bfffff04ff82017fffff04ff8202ffff808080808080808080808080ff0180ffff01ff02ffff01ff0880ff018080ff0180ff0180ffff01ff02ffff01ff04ffff05ff0580ffff02ff3cffff04ff02ffff04ffff06ff0580ffff04ff0bffff04ff17ffff04ff2fffff04ff5fffff04ff8200bfffff04ff82017fffff04ff8202ffff808080808080808080808080ff018080ff0180ff018080ff0180ff0180ffff01ff02ffff01ff02ffff03ffff22ff82017fff8202ff80ffff01ff02ffff01ff0180ff0180ffff01ff02ffff01ff0880ff018080ff0180ff018080ff0180ffffff02ffff03ff8200bfffff01ff02ffff01ff02ffff03ffff09ff5fffff05ff8200bf8080ffff01ff02ffff01ff0880ff0180ffff01ff02ffff01ff02ff12ffff04ff02ffff04ff05ffff04ff0bffff04ff17ffff04ff2fffff04ff5fffff04ffff06ff8200bf80ffff04ff82017fff80808080808080808080ff018080ff0180ff0180ffff01ff02ffff01ff04ffff013fffff04ffff0bffff02ff2affff04ff02ffff04ffff04ff05ffff04ff5fff0b8080ffff04ff82017fff8080808080ff2f80ffff01808080ff018080ff0180ffff02ff28ffff04ff02ffff04ff09ffff04ff0bffff04ffff02ff38ffff04ff02ffff04ff05ff80808080ff808080808080ff02ff28ffff04ff02ffff04ff05ffff04ff17ffff04ffff02ff38ffff04ff02ffff04ff0bff80808080ffff04ffff0bffff0101ff0580ff80808080808080ffff02ffff03ff8205ffffff01ff02ffff01ff04ffff04ffff013fffff04ffff0bffff02ff2affff04ff02ffff04ffff04ff05ffff04ffff05ff8205ff80ff0b8080ffff04ffff02ff14ffff04ff02ffff04ffff04ff05ffff04ffff05ff8205ff80ff0b8080ffff04ff2fff8080808080ff8080808080ffff018080ffff01808080ffff02ff16ffff04ff02ffff04ff05ffff04ff0bffff04ff17ffff04ff2fffff04ff5fffff04ff8200bfffff04ff82017fffff04ff8202ffffff04ffff06ff8205ff80ffff04ff820bffffff04ffff04ffff05ff8205ff80ff8217ff80ff808080808080808080808080808080ff0180ffff01ff02ffff01ff04ffff04ffff0149ffff04ff820bffffff01808080ffff04ffff04ffff0133ffff04ffff02ff3affff04ff02ffff04ff17ffff04ffff02ff2effff04ff02ffff04ff8217ffffff04ff82017fff8080808080ffff04ffff02ff38ffff04ff02ffff04ff8202ffff80808080ff808080808080ffff04ff820bffffff0180808080ffff01808080ff018080ff0180ffff02ffff03ff05ffff01ff02ffff01ff02ff3effff04ff02ffff04ffff05ff0580ffff04ffff02ff2effff04ff02ffff04ffff06ff0580ffff04ff0bff8080808080ff8080808080ff0180ffff01ff02ffff010bff018080ff0180ff02ffff03ff0bffff01ff02ffff01ff02ffff03ffff09ffff05ff0b80ff0580ffff01ff02ffff01ff06ff0b80ff0180ffff01ff02ffff01ff04ffff05ff0b80ffff02ff3effff04ff02ffff04ff05ffff04ffff06ff0b80ff808080808080ff018080ff0180ff0180ffff01ff02ffff01ff0180ff018080ff0180ff018080
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
9fa63e652e131f89a9f8bb6f7abb5ffc6ac485a78dcfb8710cd9df5c368774d9
|
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
(mod (
|
|
2
|
-
; first hash
|
|
3
|
-
PROPOSAL_TIMER_MOD_HASH ; proposal timer needs to know which proposal created it
|
|
4
|
-
SINGLETON_MOD_HASH
|
|
5
|
-
LAUNCHER_PUZZLE_HASH
|
|
6
|
-
CAT_MOD_HASH
|
|
7
|
-
DAO_FINISHED_STATE_MOD_HASH
|
|
8
|
-
TREASURY_MOD_HASH
|
|
9
|
-
LOCKUP_SELF_HASH
|
|
10
|
-
CAT_TAIL_HASH
|
|
11
|
-
TREASURY_ID
|
|
12
|
-
; second hash
|
|
13
|
-
SELF_HASH
|
|
14
|
-
SINGLETON_ID
|
|
15
|
-
PROPOSED_PUZ_HASH ; this is what runs if this proposal is successful - the inner puzzle of this proposal
|
|
16
|
-
YES_VOTES ; yes votes are +1, no votes don't tally - we compare yes_votes/total_votes at the end
|
|
17
|
-
TOTAL_VOTES ; how many people responded
|
|
18
|
-
; solution
|
|
19
|
-
vote_amounts_or_proposal_validator_hash ; The qty of "votes" to add or subtract. ALWAYS POSITIVE.
|
|
20
|
-
vote_info ; vote_info is whether we are voting YES or NO. XXX rename vote_type?
|
|
21
|
-
vote_coin_ids_or_proposal_timelock_length ; this is either the coin ID we're taking a vote from
|
|
22
|
-
previous_votes_or_pass_margin ; this is the active votes of the lockup we're communicating with
|
|
23
|
-
; OR this is what percentage of the total votes must be YES - represented as an integer from 0 to 10,000 - typically this is set at 5100 (51%)
|
|
24
|
-
lockup_innerpuzhashes_or_attendance_required ; this is either the innerpuz of the locked up CAT we're taking a vote from OR
|
|
25
|
-
; the attendance required - the percentage of the current issuance which must have voted represented as 0 to 10,000 - this is announced by the treasury
|
|
26
|
-
innerpuz_reveal ; this is only added during the first vote
|
|
27
|
-
soft_close_length ; revealed by the treasury - 0 in add vote case
|
|
28
|
-
self_destruct_time ; revealed by the treasury
|
|
29
|
-
oracle_spend_delay ; used to recreate the treasury
|
|
30
|
-
self_destruct_flag ; if not 0, do the self-destruct spend
|
|
31
|
-
my_amount
|
|
32
|
-
)
|
|
33
|
-
(include condition_codes.clib)
|
|
34
|
-
(include utility_macros.clib)
|
|
35
|
-
(include curry-and-treehash.clib)
|
|
36
|
-
(include *standard-cl-21*)
|
|
37
|
-
|
|
38
|
-
(defconstant TEN_THOUSAND 10000)
|
|
39
|
-
|
|
40
|
-
(defun is_member (e L)
|
|
41
|
-
(if L
|
|
42
|
-
(if (= e (f L))
|
|
43
|
-
1
|
|
44
|
-
(is_member e (r L))
|
|
45
|
-
)
|
|
46
|
-
0
|
|
47
|
-
)
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
(defun-inline calculate_win_percentage (TOTAL PERCENTAGE)
|
|
51
|
-
(f (divmod (* TOTAL PERCENTAGE) TEN_THOUSAND))
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
(defun calculate_finished_state (singleton_struct DAO_FINISHED_STATE_MOD_HASH)
|
|
55
|
-
(puzzle-hash-of-curried-function DAO_FINISHED_STATE_MOD_HASH
|
|
56
|
-
(sha256 ONE DAO_FINISHED_STATE_MOD_HASH)
|
|
57
|
-
(sha256tree singleton_struct)
|
|
58
|
-
)
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
(defun calculate_timer_puzhash (
|
|
62
|
-
PROPOSAL_TIMER_MOD_HASH
|
|
63
|
-
SELF_HASH
|
|
64
|
-
MY_SINGLETON_STRUCT
|
|
65
|
-
)
|
|
66
|
-
(puzzle-hash-of-curried-function PROPOSAL_TIMER_MOD_HASH
|
|
67
|
-
(sha256tree MY_SINGLETON_STRUCT)
|
|
68
|
-
(sha256 ONE SELF_HASH)
|
|
69
|
-
)
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
(defun calculate_lockup_puzzlehash (
|
|
73
|
-
LOCKUP_SELF_HASH
|
|
74
|
-
previous_votes
|
|
75
|
-
lockup_innerpuzhash
|
|
76
|
-
)
|
|
77
|
-
(puzzle-hash-of-curried-function LOCKUP_SELF_HASH
|
|
78
|
-
lockup_innerpuzhash
|
|
79
|
-
(sha256tree previous_votes)
|
|
80
|
-
(sha256 ONE LOCKUP_SELF_HASH)
|
|
81
|
-
)
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
(defun recreate_self (
|
|
85
|
-
SELF_HASH
|
|
86
|
-
PROPOSAL_ID
|
|
87
|
-
PROPOSED_PUZ_HASH
|
|
88
|
-
YES_VOTES
|
|
89
|
-
TOTAL_VOTES
|
|
90
|
-
)
|
|
91
|
-
(puzzle-hash-of-curried-function SELF_HASH
|
|
92
|
-
(sha256 ONE TOTAL_VOTES)
|
|
93
|
-
(sha256 ONE YES_VOTES)
|
|
94
|
-
(sha256 ONE PROPOSED_PUZ_HASH)
|
|
95
|
-
(sha256 ONE PROPOSAL_ID)
|
|
96
|
-
(sha256 ONE SELF_HASH)
|
|
97
|
-
)
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
(defun wrap_in_cat_layer (CAT_MOD_HASH CAT_TAIL_HASH INNERPUZHASH)
|
|
101
|
-
(puzzle-hash-of-curried-function CAT_MOD_HASH
|
|
102
|
-
INNERPUZHASH
|
|
103
|
-
(sha256 ONE CAT_TAIL_HASH)
|
|
104
|
-
(sha256 ONE CAT_MOD_HASH)
|
|
105
|
-
)
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
(defun calculate_singleton_puzzle_hash (PROPOSAL_SINGLETON_STRUCT inner_puzzle_hash)
|
|
109
|
-
(puzzle-hash-of-curried-function (f PROPOSAL_SINGLETON_STRUCT)
|
|
110
|
-
inner_puzzle_hash
|
|
111
|
-
(sha256tree PROPOSAL_SINGLETON_STRUCT)
|
|
112
|
-
)
|
|
113
|
-
)
|
|
114
|
-
|
|
115
|
-
(defun calculate_treasury_puzzlehash (
|
|
116
|
-
treasury_singleton_struct
|
|
117
|
-
TREASURY_MOD_HASH
|
|
118
|
-
PROPOSAL_VALIDATOR_HASH
|
|
119
|
-
PROPOSAL_LENGTH
|
|
120
|
-
PROPOSAL_SOFTCLOSE_LENGTH
|
|
121
|
-
attendance_required
|
|
122
|
-
pass_percentage
|
|
123
|
-
self_destruct_time
|
|
124
|
-
oracle_spend_delay
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
(calculate_singleton_puzzle_hash treasury_singleton_struct
|
|
128
|
-
(puzzle-hash-of-curried-function TREASURY_MOD_HASH
|
|
129
|
-
(sha256 ONE oracle_spend_delay)
|
|
130
|
-
(sha256 ONE self_destruct_time)
|
|
131
|
-
(sha256 ONE pass_percentage)
|
|
132
|
-
(sha256 ONE attendance_required)
|
|
133
|
-
(sha256 ONE PROPOSAL_SOFTCLOSE_LENGTH)
|
|
134
|
-
(sha256 ONE PROPOSAL_LENGTH)
|
|
135
|
-
PROPOSAL_VALIDATOR_HASH
|
|
136
|
-
(sha256 ONE TREASURY_MOD_HASH)
|
|
137
|
-
)
|
|
138
|
-
)
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
(defun loop_over_vote_coins (
|
|
142
|
-
SINGLETON_ID
|
|
143
|
-
LOCKUP_SELF_HASH
|
|
144
|
-
CAT_MOD_HASH
|
|
145
|
-
CAT_TAIL_HASH
|
|
146
|
-
TREASURY_ID
|
|
147
|
-
SELF_HASH
|
|
148
|
-
YES_VOTES
|
|
149
|
-
TOTAL_VOTES
|
|
150
|
-
PROPOSED_PUZ_HASH
|
|
151
|
-
coin_id_list
|
|
152
|
-
vote_amount_list
|
|
153
|
-
previous_votes
|
|
154
|
-
lockup_innerpuzhashes
|
|
155
|
-
vote_info
|
|
156
|
-
sum
|
|
157
|
-
output
|
|
158
|
-
my_amount
|
|
159
|
-
distinct_ids
|
|
160
|
-
)
|
|
161
|
-
(if coin_id_list
|
|
162
|
-
(if (> (f vote_amount_list) 0)
|
|
163
|
-
(c
|
|
164
|
-
(list CREATE_PUZZLE_ANNOUNCEMENT (f coin_id_list))
|
|
165
|
-
(c
|
|
166
|
-
(list
|
|
167
|
-
ASSERT_PUZZLE_ANNOUNCEMENT ; take the vote
|
|
168
|
-
(sha256
|
|
169
|
-
(wrap_in_cat_layer
|
|
170
|
-
CAT_MOD_HASH
|
|
171
|
-
CAT_TAIL_HASH
|
|
172
|
-
(calculate_lockup_puzzlehash ; because the message comes from
|
|
173
|
-
LOCKUP_SELF_HASH
|
|
174
|
-
(f previous_votes)
|
|
175
|
-
(f lockup_innerpuzhashes)
|
|
176
|
-
)
|
|
177
|
-
)
|
|
178
|
-
(sha256tree (list SINGLETON_ID (f vote_amount_list) vote_info (f coin_id_list)))
|
|
179
|
-
)
|
|
180
|
-
)
|
|
181
|
-
(loop_over_vote_coins
|
|
182
|
-
SINGLETON_ID
|
|
183
|
-
LOCKUP_SELF_HASH
|
|
184
|
-
CAT_MOD_HASH
|
|
185
|
-
CAT_TAIL_HASH
|
|
186
|
-
TREASURY_ID
|
|
187
|
-
SELF_HASH
|
|
188
|
-
YES_VOTES
|
|
189
|
-
TOTAL_VOTES
|
|
190
|
-
PROPOSED_PUZ_HASH
|
|
191
|
-
(r coin_id_list)
|
|
192
|
-
(r vote_amount_list)
|
|
193
|
-
(r previous_votes)
|
|
194
|
-
(r lockup_innerpuzhashes)
|
|
195
|
-
vote_info
|
|
196
|
-
(+ (f vote_amount_list) sum)
|
|
197
|
-
output
|
|
198
|
-
my_amount
|
|
199
|
-
(if (is_member (f coin_id_list) distinct_ids) (x) (c (f coin_id_list) distinct_ids))
|
|
200
|
-
)
|
|
201
|
-
)
|
|
202
|
-
)
|
|
203
|
-
(x)
|
|
204
|
-
)
|
|
205
|
-
(c
|
|
206
|
-
(list
|
|
207
|
-
CREATE_COIN ; recreate self with vote information added
|
|
208
|
-
(recreate_self
|
|
209
|
-
SELF_HASH
|
|
210
|
-
SINGLETON_ID
|
|
211
|
-
PROPOSED_PUZ_HASH
|
|
212
|
-
(if vote_info (+ YES_VOTES sum) YES_VOTES)
|
|
213
|
-
(+ TOTAL_VOTES sum)
|
|
214
|
-
)
|
|
215
|
-
my_amount
|
|
216
|
-
(list TREASURY_ID) ; hint to Treasury ID so people can find it
|
|
217
|
-
)
|
|
218
|
-
(c
|
|
219
|
-
(list ASSERT_MY_AMOUNT my_amount)
|
|
220
|
-
(if TOTAL_VOTES
|
|
221
|
-
(c (list ASSERT_HEIGHT_RELATIVE 1) output)
|
|
222
|
-
output
|
|
223
|
-
)
|
|
224
|
-
)
|
|
225
|
-
)
|
|
226
|
-
)
|
|
227
|
-
|
|
228
|
-
)
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
(if self_destruct_flag
|
|
232
|
-
; assert self_destruct_time > proposal_timelock_length
|
|
233
|
-
; this is the code path for if we've not been accepted by the treasury for a long time, and we're "bad" for some reason
|
|
234
|
-
(if (> self_destruct_time vote_coin_ids_or_proposal_timelock_length)
|
|
235
|
-
(list
|
|
236
|
-
(list CREATE_COIN (calculate_finished_state (c SINGLETON_MOD_HASH (c SINGLETON_ID LAUNCHER_PUZZLE_HASH)) DAO_FINISHED_STATE_MOD_HASH) ONE (list TREASURY_ID))
|
|
237
|
-
(list ASSERT_HEIGHT_RELATIVE self_destruct_time)
|
|
238
|
-
(list ASSERT_PUZZLE_ANNOUNCEMENT ; make sure that we have a matching treasury oracle spend
|
|
239
|
-
(sha256
|
|
240
|
-
(calculate_treasury_puzzlehash
|
|
241
|
-
(c SINGLETON_MOD_HASH (c TREASURY_ID LAUNCHER_PUZZLE_HASH))
|
|
242
|
-
TREASURY_MOD_HASH
|
|
243
|
-
vote_amounts_or_proposal_validator_hash
|
|
244
|
-
vote_coin_ids_or_proposal_timelock_length ; check the veracity of these values by if the treasury uses them
|
|
245
|
-
soft_close_length
|
|
246
|
-
lockup_innerpuzhashes_or_attendance_required
|
|
247
|
-
previous_votes_or_pass_margin
|
|
248
|
-
self_destruct_time
|
|
249
|
-
oracle_spend_delay
|
|
250
|
-
)
|
|
251
|
-
0 ; the arguments are secured implicitly in the puzzle of the treasury
|
|
252
|
-
)
|
|
253
|
-
)
|
|
254
|
-
)
|
|
255
|
-
(x)
|
|
256
|
-
)
|
|
257
|
-
; We're not trying to self destruct
|
|
258
|
-
; Check whether we have a soft close to either try closing the proposal or adding votes
|
|
259
|
-
; soft_close_length is used to prevent people from spamming the proposal and preventing others from being able to vote.
|
|
260
|
-
; Someone could add 1 'no' vote to the proposal in every block until the proposal timelock has passed and then close the proposal as failed.
|
|
261
|
-
; soft_close_length imposes some fixed number of blocks have passed without the proposal being spent before it can be closed.
|
|
262
|
-
; This means there will always be some time for people to vote if they want before a proposal is closed.
|
|
263
|
-
(if soft_close_length
|
|
264
|
-
; Add the conditions which apply in both passed and failed cases
|
|
265
|
-
(c
|
|
266
|
-
(list ASSERT_HEIGHT_RELATIVE soft_close_length)
|
|
267
|
-
(c
|
|
268
|
-
(list CREATE_COIN (calculate_finished_state (c SINGLETON_MOD_HASH (c SINGLETON_ID LAUNCHER_PUZZLE_HASH)) DAO_FINISHED_STATE_MOD_HASH) ONE (list TREASURY_ID))
|
|
269
|
-
(c
|
|
270
|
-
(list
|
|
271
|
-
ASSERT_PUZZLE_ANNOUNCEMENT
|
|
272
|
-
(sha256 ; external timer
|
|
273
|
-
(calculate_timer_puzhash
|
|
274
|
-
PROPOSAL_TIMER_MOD_HASH
|
|
275
|
-
SELF_HASH
|
|
276
|
-
(c SINGLETON_MOD_HASH (c SINGLETON_ID LAUNCHER_PUZZLE_HASH))
|
|
277
|
-
|
|
278
|
-
)
|
|
279
|
-
SINGLETON_ID
|
|
280
|
-
)
|
|
281
|
-
)
|
|
282
|
-
(c
|
|
283
|
-
(list CREATE_PUZZLE_ANNOUNCEMENT vote_coin_ids_or_proposal_timelock_length)
|
|
284
|
-
; We are trying to close the proposal, so check whether it passed or failed
|
|
285
|
-
(if
|
|
286
|
-
(all
|
|
287
|
-
(gte TOTAL_VOTES lockup_innerpuzhashes_or_attendance_required)
|
|
288
|
-
(gte YES_VOTES (calculate_win_percentage TOTAL_VOTES previous_votes_or_pass_margin))
|
|
289
|
-
)
|
|
290
|
-
; Passed
|
|
291
|
-
(list
|
|
292
|
-
(list CREATE_COIN_ANNOUNCEMENT (sha256tree (list PROPOSED_PUZ_HASH 0))) ; the 0 at the end is announcement_args in proposal_validators
|
|
293
|
-
; the above coin annnouncement lets us validate this coin in the proposal validator
|
|
294
|
-
(list ASSERT_PUZZLE_ANNOUNCEMENT ; make sure that we actually have a matching treasury spend
|
|
295
|
-
(sha256
|
|
296
|
-
(calculate_treasury_puzzlehash
|
|
297
|
-
(c SINGLETON_MOD_HASH (c TREASURY_ID LAUNCHER_PUZZLE_HASH))
|
|
298
|
-
TREASURY_MOD_HASH
|
|
299
|
-
vote_amounts_or_proposal_validator_hash
|
|
300
|
-
vote_coin_ids_or_proposal_timelock_length ; check the veracity of these values by if the treasury uses them
|
|
301
|
-
soft_close_length
|
|
302
|
-
lockup_innerpuzhashes_or_attendance_required
|
|
303
|
-
previous_votes_or_pass_margin
|
|
304
|
-
self_destruct_time
|
|
305
|
-
oracle_spend_delay
|
|
306
|
-
)
|
|
307
|
-
SINGLETON_ID ; directed at singleton, but most values are implicitly announced in the puzzle
|
|
308
|
-
)
|
|
309
|
-
)
|
|
310
|
-
)
|
|
311
|
-
; Failed
|
|
312
|
-
(list
|
|
313
|
-
(list ASSERT_PUZZLE_ANNOUNCEMENT ; make sure that we verify solution values against the treasury's oracle spend
|
|
314
|
-
(sha256
|
|
315
|
-
(calculate_treasury_puzzlehash
|
|
316
|
-
(c SINGLETON_MOD_HASH (c TREASURY_ID LAUNCHER_PUZZLE_HASH))
|
|
317
|
-
TREASURY_MOD_HASH
|
|
318
|
-
vote_amounts_or_proposal_validator_hash
|
|
319
|
-
vote_coin_ids_or_proposal_timelock_length ; check the veracity of these values by if the treasury uses them
|
|
320
|
-
soft_close_length
|
|
321
|
-
lockup_innerpuzhashes_or_attendance_required
|
|
322
|
-
previous_votes_or_pass_margin
|
|
323
|
-
self_destruct_time
|
|
324
|
-
oracle_spend_delay
|
|
325
|
-
)
|
|
326
|
-
0 ; the arguments are secured implicitly in the puzzle of the treasury
|
|
327
|
-
)
|
|
328
|
-
)
|
|
329
|
-
)
|
|
330
|
-
)
|
|
331
|
-
)
|
|
332
|
-
)
|
|
333
|
-
)
|
|
334
|
-
)
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
; no soft_close_length so run the add votes path
|
|
338
|
-
(loop_over_vote_coins
|
|
339
|
-
SINGLETON_ID
|
|
340
|
-
LOCKUP_SELF_HASH
|
|
341
|
-
CAT_MOD_HASH
|
|
342
|
-
CAT_TAIL_HASH
|
|
343
|
-
TREASURY_ID
|
|
344
|
-
SELF_HASH
|
|
345
|
-
YES_VOTES
|
|
346
|
-
TOTAL_VOTES
|
|
347
|
-
PROPOSED_PUZ_HASH
|
|
348
|
-
vote_coin_ids_or_proposal_timelock_length
|
|
349
|
-
vote_amounts_or_proposal_validator_hash
|
|
350
|
-
previous_votes_or_pass_margin
|
|
351
|
-
lockup_innerpuzhashes_or_attendance_required
|
|
352
|
-
vote_info
|
|
353
|
-
0
|
|
354
|
-
(if (any YES_VOTES TOTAL_VOTES) ; this prevents the timer from being created if the coin has been created with fake votes
|
|
355
|
-
()
|
|
356
|
-
(c
|
|
357
|
-
(list
|
|
358
|
-
CREATE_COIN
|
|
359
|
-
(calculate_timer_puzhash
|
|
360
|
-
PROPOSAL_TIMER_MOD_HASH
|
|
361
|
-
SELF_HASH
|
|
362
|
-
(c SINGLETON_MOD_HASH (c SINGLETON_ID LAUNCHER_PUZZLE_HASH)) ; SINGLETON_STRUCT
|
|
363
|
-
)
|
|
364
|
-
0
|
|
365
|
-
)
|
|
366
|
-
(if (= (sha256tree innerpuz_reveal) PROPOSED_PUZ_HASH) ; reveal the proposed code on chain with the first vote
|
|
367
|
-
()
|
|
368
|
-
(x)
|
|
369
|
-
)
|
|
370
|
-
)
|
|
371
|
-
)
|
|
372
|
-
my_amount
|
|
373
|
-
()
|
|
374
|
-
)
|
|
375
|
-
)
|
|
376
|
-
)
|
|
377
|
-
)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ff02ffff01ff02ffff03ff8402ffffffffff01ff02ffff01ff02ffff03ffff15ff8400bfffffff8305ffff80ffff01ff02ffff01ff04ffff04ffff0133ffff04ffff02ff3cffff04ff02ffff04ffff04ff0bffff04ff8217ffff178080ffff04ff5fff8080808080ffff04ffff0101ffff04ffff04ff8205ffffff018080ffff018080808080ffff04ffff04ffff0152ffff04ff8400bfffffffff01808080ffff04ffff04ffff013fffff04ffff0bffff02ff2effff04ff02ffff04ffff04ff0bffff04ff8205ffff178080ffff04ff8200bfffff04ff83017fffffff04ff8305ffffffff04ff835fffffffff04ff8317ffffffff04ff830bffffffff04ff8400bfffffffff04ff84017fffffff808080808080808080808080ffff018080ffff01808080ffff0180808080ff0180ffff01ff02ffff01ff0880ff018080ff0180ff0180ffff01ff02ffff01ff02ffff03ff835fffffffff01ff02ffff01ff04ffff04ffff0152ffff04ff835fffffffff01808080ffff04ffff04ffff0133ffff04ffff02ff3cffff04ff02ffff04ffff04ff0bffff04ff8217ffff178080ffff04ff5fff8080808080ffff04ffff0101ffff04ffff04ff8205ffffff018080ffff018080808080ffff04ffff04ffff013fffff04ffff0bffff02ff12ffff04ff02ffff04ff05ffff04ff820bffffff04ffff04ff0bffff04ff8217ffff178080ff808080808080ff8217ff80ffff01808080ffff04ffff04ffff013effff04ff8305ffffffff01808080ffff02ffff03ffff22ffff02ff10ffff04ff02ffff04ff8300bfffffff04ff8317ffffff8080808080ffff02ff10ffff04ff02ffff04ff825fffffff04ffff05ffff14ffff12ff8300bfffff830bffff80ffff018227108080ff808080808080ffff01ff02ffff01ff04ffff04ffff013cffff04ffff02ff14ffff04ff02ffff04ffff04ff822fffffff04ffff0180ffff01808080ff80808080ffff01808080ffff04ffff04ffff013fffff04ffff0bffff02ff2effff04ff02ffff04ffff04ff0bffff04ff8205ffff178080ffff04ff8200bfffff04ff83017fffffff04ff8305ffffffff04ff835fffffffff04ff8317ffffffff04ff830bffffffff04ff8400bfffffffff04ff84017fffffff808080808080808080808080ff8217ff80ffff01808080ffff01808080ff0180ffff01ff02ffff01ff04ffff04ffff013fffff04ffff0bffff02ff2effff04ff02ffff04ffff04ff0bffff04ff8205ffff178080ffff04ff8200bfffff04ff83017fffffff04ff8305ffffffff04ff835fffffffff04ff8317ffffffff04ff830bffffffff04ff8400bfffffffff04ff84017fffffff808080808080808080808080ffff018080ffff01808080ffff018080ff018080ff018080808080ff0180ffff01ff02ffff01ff02ff3effff04ff02ffff04ff8217ffffff04ff82017fffff04ff2fffff04ff8202ffffff04ff8205ffffff04ff820bffffff04ff825fffffff04ff8300bfffffff04ff822fffffff04ff8305ffffffff04ff83017fffffff04ff830bffffffff04ff8317ffffffff04ff8302ffffffff04ffff0180ffff04ffff02ffff03ffff21ff825fffff8300bfff80ffff01ff02ffff01ff0180ff0180ffff01ff02ffff01ff04ffff04ffff0133ffff04ffff02ff12ffff04ff02ffff04ff05ffff04ff820bffffff04ffff04ff0bffff04ff8217ffff178080ff808080808080ffff04ffff0180ffff0180808080ffff02ffff03ffff09ffff02ff14ffff04ff02ffff04ff832fffffff80808080ff822fff80ffff01ff02ffff01ff0180ff0180ffff01ff02ffff01ff0880ff018080ff018080ff018080ff0180ffff04ff8405ffffffffff04ffff0180ff808080808080808080808080808080808080808080ff018080ff0180ff018080ff0180ffff04ffff01ffffffff20ffff15ff0bff058080ffff02ffff03ff05ffff01ff02ffff01ff02ff28ffff04ff02ffff04ffff06ff0580ffff04ffff0bffff0102ffff0bffff0101ffff010480ffff0bffff0102ffff0bffff0102ffff0bffff0101ffff010180ffff05ff058080ffff0bffff0102ff0bffff0bffff0101ffff018080808080ff8080808080ff0180ffff01ff02ffff010bff018080ff0180ff0bffff0102ffff01a0a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222ffff0bffff0102ffff0bffff0102ffff01a09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0580ffff0bffff0102ffff02ff28ffff04ff02ffff04ff07ffff01ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b280808080ffff01a04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459a808080ffff02ffff03ffff07ff0580ffff01ff02ffff01ff0bffff0102ffff02ff14ffff04ff02ffff04ffff05ff0580ff80808080ffff02ff14ffff04ff02ffff04ffff06ff0580ff8080808080ff0180ffff01ff02ffff01ff0bffff0101ff0580ff018080ff0180ffff02ffff03ff0bffff01ff02ffff01ff02ffff03ffff09ff05ffff05ff0b8080ffff01ff02ffff01ff0101ff0180ffff01ff02ffff01ff02ff2cffff04ff02ffff04ff05ffff04ffff06ff0b80ff8080808080ff018080ff0180ff0180ffff01ff02ffff01ff0180ff018080ff0180ff02ff38ffff04ff02ffff04ff0bffff04ffff0bffff0101ff0b80ffff04ffff02ff14ffff04ff02ffff04ff05ff80808080ff808080808080ffffff02ff38ffff04ff02ffff04ff05ffff04ffff02ff14ffff04ff02ffff04ff17ff80808080ffff04ffff0bffff0101ff0b80ff808080808080ffff02ff38ffff04ff02ffff04ff05ffff04ff17ffff04ffff02ff14ffff04ff02ffff04ff0bff80808080ffff04ffff0bffff0101ff0580ff80808080808080ff02ff38ffff04ff02ffff04ff05ffff04ffff0bffff0101ff5f80ffff04ffff0bffff0101ff2f80ffff04ffff0bffff0101ff1780ffff04ffff0bffff0101ff0b80ffff04ffff0bffff0101ff0580ff808080808080808080ffffff02ff38ffff04ff02ffff04ff05ffff04ff17ffff04ffff0bffff0101ff0b80ffff04ffff0bffff0101ff0580ff80808080808080ff02ff38ffff04ff02ffff04ff09ffff04ff0bffff04ffff02ff14ffff04ff02ffff04ff05ff80808080ff808080808080ffff02ff36ffff04ff02ffff04ff05ffff04ffff02ff38ffff04ff02ffff04ff0bffff04ffff0bffff0101ff8205ff80ffff04ffff0bffff0101ff8202ff80ffff04ffff0bffff0101ff82017f80ffff04ffff0bffff0101ff8200bf80ffff04ffff0bffff0101ff5f80ffff04ffff0bffff0101ff2f80ffff04ff17ffff04ffff0bffff0101ff0b80ff808080808080808080808080ff8080808080ff02ffff03ff820bffffff01ff02ffff01ff02ffff03ffff15ffff05ff8217ff80ffff018080ffff01ff02ffff01ff04ffff04ffff013effff04ffff05ff820bff80ffff01808080ffff04ffff04ffff013fffff04ffff0bffff02ff26ffff04ff02ffff04ff17ffff04ff2fffff04ffff02ff2affff04ff02ffff04ff0bffff04ffff05ff822fff80ffff04ffff05ff825fff80ff808080808080ff808080808080ffff02ff14ffff04ff02ffff04ffff04ff05ffff04ffff05ff8217ff80ffff04ff8300bfffffff04ffff05ff820bff80ffff018080808080ff8080808080ffff01808080ffff02ff3effff04ff02ffff04ff05ffff04ff0bffff04ff17ffff04ff2fffff04ff5fffff04ff8200bfffff04ff82017fffff04ff8202ffffff04ff8205ffffff04ffff06ff820bff80ffff04ffff06ff8217ff80ffff04ffff06ff822fff80ffff04ffff06ff825fff80ffff04ff8300bfffffff04ffff10ffff05ff8217ff80ff83017fff80ffff04ff8302ffffffff04ff8305ffffffff04ffff02ffff03ffff02ff2cffff04ff02ffff04ffff05ff820bff80ffff04ff830bffffff8080808080ffff01ff02ffff01ff0880ff0180ffff01ff02ffff01ff04ffff05ff820bff80ff830bffff80ff018080ff0180ff8080808080808080808080808080808080808080808080ff0180ffff01ff02ffff01ff0880ff018080ff0180ff0180ffff01ff02ffff01ff04ffff04ffff0133ffff04ffff02ff3affff04ff02ffff04ff8200bfffff04ff05ffff04ff8205ffffff04ffff02ffff03ff8300bfffffff01ff02ffff01ff10ff82017fff83017fff80ff0180ffff01ff02ffff0182017fff018080ff0180ffff04ffff10ff8202ffff83017fff80ff8080808080808080ffff04ff8305ffffffff04ffff04ff5fffff018080ffff018080808080ffff04ffff04ffff0149ffff04ff8305ffffffff01808080ffff02ffff03ff8202ffffff01ff02ffff01ff04ffff04ffff0152ffff04ffff0101ffff01808080ff8302ffff80ff0180ffff01ff02ffff018302ffffff018080ff01808080ff018080ff0180ff018080
|