Skip to content

Feat/remove credit from contract#58

Merged
0xdevcollins merged 8 commits into
testnetfrom
feat/remove-credit-from-contract
Jul 4, 2026
Merged

Feat/remove credit from contract#58
0xdevcollins merged 8 commits into
testnetfrom
feat/remove-credit-from-contract

Conversation

@0xdevcollins

@0xdevcollins 0xdevcollins commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

Remove the on-chain credit surface (both contracts) — v1.0.0 → v1.1.0

Credits move fully off-chain (Postgres ledger); the contracts become reputation + earnings only. See boundless-credits-reputation-prd.md §2 for the rationale.

boundless-profile

  • Profile struct: { bootstrapped_at, credits, reputation }{ bootstrapped_at, reputation }.
  • Removed spend_credits, earn_credits, refund_credits, admin_grant_credits, set_default_bootstrap_credits, get_default_bootstrap_credits, and the InsufficientCredits error.
  • bootstrap / bootstrap_self now just create a reputation-0 profile.

boundless-events

  • Dropped application_credit_cost from EventRecord / CreateEventParams and credit_earn from WinnerSpec.
  • apply / withdraw / claim_milestone / select_winners carry no credit args.
  • Removed the unused InsufficientCredits = 44 error (left as a numbering gap).

Versioning

  • INITIAL_VERSION + contractmeta + crate versions → 1.1.0 (minor bump; no consumer depended on credits).
  • migrate() is a no-op stamp for 1.0.0 → 1.1.0 (nothing to rewrite).

Tests

  • cargo test: profile 41/41, events 150/150. Snapshots regenerated (embedded version string 1.0.0 → 1.1.0).

Mainnet status — already executed (2026-07-03)

Applied in place via the timelocked H6 flow (2-of-3 multisig). No data migration: both contracts were freshly deployed with zero profiles and zero events, so the dropped-field structs have no old-shape rows to deserialize.

Contract propose tx apply tx live wasm
events (CCFVEGOQ…) 03b1b30b b2c84d7c (ledger 63315871) 2a8789bf…1de3
profile (CD3KH4OE…) 531ff5a2 663085fc (ledger 63315890) b9e3500c…9b02

Both contracts now report version() == "1.1.0". migrate() no-op stamp pending (audit marker only).

Not in this PR

  • Off-chain credits (UserCredits / CreditLedger, Bounty.applicationCreditCost) are untouched and remain the source of truth — that lives in boundless-nestjs (already merged on v2).
  • Deploy records (deployments/mainnet.json, mainnet-upgrades.jsonl) are updated locally but deployments/ is gitignored, so they are not tracked here.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 308 files, which is 158 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 14f86449-f0ef-4b49-be0a-f6b3b8f50cda

📥 Commits

Reviewing files that changed from the base of the PR and between 81231f8 and ac70024.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (308)
  • .github/workflows/rustfmt.yml
  • .github/workflows/verify-build.yml
  • BACKLOG.md
  • contracts/events/Cargo.toml
  • contracts/events/src/admin.rs
  • contracts/events/src/bounty.rs
  • contracts/events/src/crowdfunding.rs
  • contracts/events/src/errors.rs
  • contracts/events/src/event_ops.rs
  • contracts/events/src/events.rs
  • contracts/events/src/grant.rs
  • contracts/events/src/hackathon.rs
  • contracts/events/src/idempotency.rs
  • contracts/events/src/lib.rs
  • contracts/events/src/profile_client.rs
  • contracts/events/src/storage.rs
  • contracts/events/src/tests/admin.rs
  • contracts/events/src/tests/bounty_pillar.rs
  • contracts/events/src/tests/cancel_refund.rs
  • contracts/events/src/tests/contributions.rs
  • contracts/events/src/tests/cross_contract.rs
  • contracts/events/src/tests/crowdfunding.rs
  • contracts/events/src/tests/escrow_fee_math.rs
  • contracts/events/src/tests/grant_pillar.rs
  • contracts/events/src/tests/hackathon_pillar.rs
  • contracts/events/src/tests/token_whitelist.rs
  • contracts/events/src/token_whitelist.rs
  • contracts/events/src/types.rs
  • contracts/events/test_snapshots/tests/admin/apply_upgrade_after_expiry_reverts.1.json
  • contracts/events/test_snapshots/tests/admin/apply_upgrade_before_timelock_reverts.1.json
  • contracts/events/test_snapshots/tests/admin/cancel_pending_upgrade_clears_proposal.1.json
  • contracts/events/test_snapshots/tests/admin/cancel_with_no_pending_reverts.1.json
  • contracts/events/test_snapshots/tests/admin/id_base_encodes_deployment_sequence.1.json
  • contracts/events/test_snapshots/tests/admin/initializes_with_expected_config.1.json
  • contracts/events/test_snapshots/tests/admin/migrate_marks_current_version_and_blocks_replay.1.json
  • contracts/events/test_snapshots/tests/admin/pause_and_unpause_round_trip.1.json
  • contracts/events/test_snapshots/tests/admin/propose_upgrade_records_pending_and_emits.1.json
  • contracts/events/test_snapshots/tests/admin/propose_upgrade_rejects_empty_version.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/apply_after_deadline_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/apply_bootstraps_profile_and_records_applicant.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/apply_on_cancelled_event_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/apply_on_completed_event_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/apply_on_nonexistent_event_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/apply_on_wrong_pillar_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/apply_requires_applicant_auth.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/apply_when_paused_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/create_rejects_multi_release_kind.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/duplicate_apply_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/replayed_apply_reverts_idempotently.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/replayed_withdraw_reverts_idempotently.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/withdraw_after_submit_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/withdraw_on_nonexistent_event_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/withdraw_removes_the_applicant.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/withdraw_requires_applicant_auth.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/withdraw_when_paused_reverts.1.json
  • contracts/events/test_snapshots/tests/bounty_pillar/withdraw_without_apply_reverts.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/add_funds_on_cancelling_event_reverts.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/cancel_prorata_splits_remaining_across_partners_no_owner_residual.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/contributor_amount_zeroed_after_cancel.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/finalize_cancel_before_all_batches_reverts.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/full_partner_then_residual_pays_partners_and_owner.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/owner_only_cancel_settles_inline.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/owner_only_process_and_finalize_rejected_after_inline_settle.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/paged_cancel_processes_in_batches.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/process_cancel_batch_without_start_reverts.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/start_cancel_on_already_cancelled_reverts.1.json
  • contracts/events/test_snapshots/tests/cancel_refund/start_cancel_on_nonexistent_event_reverts.1.json
  • contracts/events/test_snapshots/tests/contributions/add_funds_on_nonexistent_event_reverts.1.json
  • contracts/events/test_snapshots/tests/contributions/add_funds_paged_storage_round_trip.1.json
  • contracts/events/test_snapshots/tests/contributions/add_funds_to_cancelled_event_reverts.1.json
  • contracts/events/test_snapshots/tests/contributions/anyone_can_top_up_an_active_event.1.json
  • contracts/events/test_snapshots/tests/contributions/below_minimum_contribution_reverts.1.json
  • contracts/events/test_snapshots/tests/contributions/cancel_at_boundary_pays_partners_full_no_owner_residual.1.json
  • contracts/events/test_snapshots/tests/contributions/cancel_clears_contributor_amounts_so_replay_state_is_clean.1.json
  • contracts/events/test_snapshots/tests/contributions/cancel_with_no_contributors_refunds_owner_in_full.1.json
  • contracts/events/test_snapshots/tests/contributions/cancel_with_owner_top_up_keeps_owner_residual_correct.1.json
  • contracts/events/test_snapshots/tests/contributions/cancel_with_partner_pool_refunds_partners_then_owner_residual.1.json
  • contracts/events/test_snapshots/tests/contributions/multiple_top_ups_from_same_contributor_aggregate_and_dont_duplicate_list.1.json
  • contracts/events/test_snapshots/tests/contributions/owner_top_up_grows_escrow_without_recording_contribution_entry.1.json
  • contracts/events/test_snapshots/tests/contributions/paged_cancel_owner_only_settles_inside_start.1.json
  • contracts/events/test_snapshots/tests/contributions/paged_cancel_processes_in_batches.1.json
  • contracts/events/test_snapshots/tests/contributions/replayed_add_funds_reverts.1.json
  • contracts/events/test_snapshots/tests/contributions/zero_or_negative_contribution_reverts.1.json
  • contracts/events/test_snapshots/tests/cross_contract/add_funds_uses_event_override_not_global.1.json
  • contracts/events/test_snapshots/tests/cross_contract/bounty_submit_requires_prior_application.1.json
  • contracts/events/test_snapshots/tests/cross_contract/bounty_submit_succeeds_after_apply.1.json
  • contracts/events/test_snapshots/tests/cross_contract/cancel_after_select_winners_refunds_only_remaining.1.json
  • contracts/events/test_snapshots/tests/cross_contract/cancel_already_cancelled_reverts.1.json
  • contracts/events/test_snapshots/tests/cross_contract/cancel_refunds_remaining_escrow_to_owner.1.json
  • contracts/events/test_snapshots/tests/cross_contract/claim_milestone_final_milestone_marks_event_completed.1.json
  • contracts/events/test_snapshots/tests/cross_contract/claim_milestone_idempotent_per_recipient_and_milestone.1.json
  • contracts/events/test_snapshots/tests/cross_contract/claim_milestone_invalid_milestone_index_reverts.1.json
  • contracts/events/test_snapshots/tests/cross_contract/claim_milestone_pays_per_milestone_amount.1.json
  • contracts/events/test_snapshots/tests/cross_contract/claim_milestone_rejects_non_grant_events.1.json
  • contracts/events/test_snapshots/tests/cross_contract/create_event_charges_override_rate_when_provided.1.json
  • contracts/events/test_snapshots/tests/cross_contract/create_event_omitted_override_falls_back_to_global_default.1.json
  • contracts/events/test_snapshots/tests/cross_contract/create_event_rejects_override_above_max_fee_bps.1.json
  • contracts/events/test_snapshots/tests/cross_contract/create_event_with_waiver_charges_no_fee.1.json
  • contracts/events/test_snapshots/tests/cross_contract/grant_last_milestone_sweeps_rounding_residue.1.json
  • contracts/events/test_snapshots/tests/cross_contract/hackathon_submit_creates_anchor_without_prior_apply.1.json
  • contracts/events/test_snapshots/tests/cross_contract/manager_can_be_rotated.1.json
  • contracts/events/test_snapshots/tests/cross_contract/manager_defaults_to_owner_and_override_is_recorded.1.json
  • contracts/events/test_snapshots/tests/cross_contract/manager_override_can_select_winners.1.json
  • contracts/events/test_snapshots/tests/cross_contract/resubmit_preserves_original_submitted_at_and_updates_uri.1.json
  • contracts/events/test_snapshots/tests/cross_contract/select_winners_handles_multi_recipient_distribution.1.json
  • contracts/events/test_snapshots/tests/cross_contract/select_winners_pays_against_remaining_escrow_including_top_ups.1.json
  • contracts/events/test_snapshots/tests/cross_contract/select_winners_pays_recipient_and_bumps_profile.1.json
  • contracts/events/test_snapshots/tests/cross_contract/select_winners_rejects_duplicate_position.1.json
  • contracts/events/test_snapshots/tests/cross_contract/select_winners_rejects_second_call_winners_already_selected.1.json
  • contracts/events/test_snapshots/tests/cross_contract/select_winners_replayed_reverts.1.json
  • contracts/events/test_snapshots/tests/cross_contract/select_winners_requires_position_in_distribution.1.json
  • contracts/events/test_snapshots/tests/cross_contract/submit_replayed_reverts.1.json
  • contracts/events/test_snapshots/tests/cross_contract/withdraw_refunds_half_credits.1.json
  • contracts/events/test_snapshots/tests/cross_contract/withdraw_submission_removes_anchor.1.json
  • contracts/events/test_snapshots/tests/cross_contract/withdraw_submission_without_submission_reverts.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/backer_pays_exactly_pledge_and_creator_bears_fee.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/builder_top_up_does_not_appear_in_contributor_list.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/cancel_after_partial_claim_pro_rates_remaining.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/cancel_refunds_all_partners_no_owner_residual.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/cancel_with_no_contributions_just_marks_cancelled.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/claim_milestone_last_drains_dust_with_fee.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/claim_milestone_out_of_range_reverts.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/claim_milestone_replay_reverts.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/claim_milestone_splits_evenly_and_charges_fee_at_release.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/claim_milestone_with_empty_escrow_reverts.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/community_top_ups_raise_escrow_from_zero.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/create_rejects_distribution_with_multiple_positions.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/create_rejects_missing_deadline.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/create_rejects_single_release_kind.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/create_with_zero_owner_deposit_and_auto_registered_winner.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/crowdfunding_claim_milestone_requires_admin_auth.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/select_winners_on_crowdfunding_reverts.1.json
  • contracts/events/test_snapshots/tests/crowdfunding/submit_on_crowdfunding_reverts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/add_funds_uses_event_override_bps.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/add_funds_zero_override_bps_charges_no_fee.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/crowdfunding_dynamic_milestone_split.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/crowdfunding_dynamic_rounding_no_dust.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/fee_account_accumulates_across_create_and_add_funds.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/fee_and_winner_balances_consistent.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/fee_rounding_on_odd_amounts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/fee_rounds_down_non_divisible_amount.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/global_fee_bps_used_when_no_override.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/grant_milestone_double_claim_rejected.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/grant_milestone_out_of_range_rejected.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/grant_milestone_pays_floored_per_milestone.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/large_budget_fee_does_not_overflow.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/mid_flight_global_bps_change_does_not_affect_override_event.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/multi_position_split_pays_correct_amounts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/override_at_max_bps_boundary_succeeds.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/override_bps_above_max_rejected.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/override_bps_used_on_create.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/partial_position_fill_leaves_residual_escrow.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/partner_funds_grow_winner_payout.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/replayed_create_event_reverts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/replayed_select_winners_reverts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/select_winners_duplicate_position_reverts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/select_winners_empty_list_reverts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/select_winners_invalid_position_reverts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/select_winners_on_cancelled_event_reverts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/select_winners_on_nonexistent_event_reverts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/select_winners_twice_reverts.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/single_release_pays_full_escrow_for_100_percent.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/three_way_33_33_34_split_rounding.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/zero_global_bps_no_override_charges_no_fee.1.json
  • contracts/events/test_snapshots/tests/escrow_fee_math/zero_override_bps_skips_fee.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/claim_milestone_already_claimed_reverts.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/claim_milestone_earns_credits_and_bumps_reputation.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/claim_milestone_last_sweeps_rounding_residue.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/claim_milestone_marks_completed_on_last.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/claim_milestone_on_single_release_reverts.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/claim_milestone_op_replay_reverts.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/claim_milestone_out_of_range_reverts.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/claim_milestone_pays_fixed_per_milestone_amount.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/claim_milestone_without_being_winner_reverts.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/grant_create_with_multi_release_succeeds.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/grant_create_with_single_release_reverts.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/grant_create_with_zero_milestones_reverts.1.json
  • contracts/events/test_snapshots/tests/grant_pillar/two_winner_grant_each_claims_their_share.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/claim_milestone_on_single_release_hackathon_reverts.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/create_deposits_full_budget_and_takes_fee_at_deposit.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/create_rejects_missing_deadline.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/create_rejects_multi_release_kind.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/create_rejects_past_deadline.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/resubmit_keeps_original_timestamp_and_updates_uri.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_demands_owner_auth.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_duplicate_position_reverts.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_empty_set_reverts.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_multi_position_splits_by_distribution.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_on_completed_event_reverts.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_on_missing_event_reverts.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_position_not_in_distribution_reverts.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_replayed_op_reverts.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_second_call_reverts_winners_already_selected.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/select_winners_single_recipient_sweeps_escrow.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/submit_after_deadline_reverts.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/submit_open_without_prior_apply_creates_anchor.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/submit_replayed_op_reverts.1.json
  • contracts/events/test_snapshots/tests/hackathon_pillar/withdraw_submission_removes_anchor.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/create_event_with_deregistered_token_reverts.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/create_event_with_unsupported_token_reverts.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/deregister_removes_support.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/deregister_requires_admin_auth.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/deregister_unregistered_token_is_idempotent.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/deregister_without_admin_auth_reverts.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/multiple_tokens_registered_independently.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/register_makes_token_supported.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/register_requires_admin_auth.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/register_same_token_twice_is_idempotent.1.json
  • contracts/events/test_snapshots/tests/token_whitelist/register_without_admin_auth_reverts.1.json
  • contracts/profile/Cargo.toml
  • contracts/profile/src/admin.rs
  • contracts/profile/src/bootstrap.rs
  • contracts/profile/src/credits.rs
  • contracts/profile/src/errors.rs
  • contracts/profile/src/events.rs
  • contracts/profile/src/lib.rs
  • contracts/profile/src/reputation.rs
  • contracts/profile/src/storage.rs
  • contracts/profile/src/tests/admin.rs
  • contracts/profile/src/tests/bootstrap.rs
  • contracts/profile/src/tests/common.rs
  • contracts/profile/src/tests/credits.rs
  • contracts/profile/src/tests/earnings.rs
  • contracts/profile/src/tests/mod.rs
  • contracts/profile/src/tests/reputation.rs
  • contracts/profile/src/types.rs
  • contracts/profile/test_snapshots/tests/admin/accept_after_expiry_reverts_and_admin_must_cancel_to_prune.1.json
  • contracts/profile/test_snapshots/tests/admin/accept_before_timelock_reverts.1.json
  • contracts/profile/test_snapshots/tests/admin/apply_upgrade_after_expiry_reverts_profile.1.json
  • contracts/profile/test_snapshots/tests/admin/apply_upgrade_before_timelock_reverts_profile.1.json
  • contracts/profile/test_snapshots/tests/admin/cancel_pending_clears_proposal.1.json
  • contracts/profile/test_snapshots/tests/admin/cancel_with_no_pending_reverts.1.json
  • contracts/profile/test_snapshots/tests/admin/first_set_events_contract_succeeds.1.json
  • contracts/profile/test_snapshots/tests/admin/initializes_with_expected_config.1.json
  • contracts/profile/test_snapshots/tests/admin/migrate_marks_version_and_blocks_replay_profile.1.json
  • contracts/profile/test_snapshots/tests/admin/pause_and_unpause_round_trip.1.json
  • contracts/profile/test_snapshots/tests/admin/propose_then_accept_after_timelock_swaps_events_contract.1.json
  • contracts/profile/test_snapshots/tests/admin/propose_upgrade_records_pending.1.json
  • contracts/profile/test_snapshots/tests/admin/second_set_events_contract_reverts_already_configured.1.json
  • contracts/profile/test_snapshots/tests/bootstrap/bootstrap_self_creates_profile_for_caller.1.json
  • contracts/profile/test_snapshots/tests/bootstrap/bootstrap_self_demands_the_callers_own_auth_not_admin.1.json
  • contracts/profile/test_snapshots/tests/bootstrap/bootstrap_self_is_idempotent_for_existing_profile.1.json
  • contracts/profile/test_snapshots/tests/bootstrap/bootstrap_self_rejects_a_replayed_op_id.1.json
  • contracts/profile/test_snapshots/tests/credits/admin_grant_adds_to_existing_profile.1.json
  • contracts/profile/test_snapshots/tests/credits/admin_grant_bootstraps_profile_for_unknown_user.1.json
  • contracts/profile/test_snapshots/tests/credits/admin_grant_called_by_non_admin_panics.1.json
  • contracts/profile/test_snapshots/tests/credits/admin_grant_empty_reason_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/admin_grant_replayed_op_id_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/admin_grant_saturates_instead_of_overflowing.1.json
  • contracts/profile/test_snapshots/tests/credits/admin_grant_while_paused_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/bootstrap_called_by_non_events_contract_panics.1.json
  • contracts/profile/test_snapshots/tests/credits/bootstrap_is_idempotent_as_a_noop_on_existing_profile.1.json
  • contracts/profile/test_snapshots/tests/credits/bootstrap_replayed_op_id_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/bootstrap_while_paused_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/bootstrap_without_events_contract_configured_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/earn_on_unbootstrapped_user_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/earn_replayed_op_id_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/earn_saturates_instead_of_overflowing.1.json
  • contracts/profile/test_snapshots/tests/credits/refund_adds_to_existing_profile.1.json
  • contracts/profile/test_snapshots/tests/credits/refund_called_by_non_events_contract_panics.1.json
  • contracts/profile/test_snapshots/tests/credits/refund_on_unbootstrapped_user_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/refund_replayed_op_id_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/refund_saturates_instead_of_overflowing.1.json
  • contracts/profile/test_snapshots/tests/credits/spend_deducts_from_existing_profile.1.json
  • contracts/profile/test_snapshots/tests/credits/spend_exact_balance_to_zero_succeeds.1.json
  • contracts/profile/test_snapshots/tests/credits/spend_more_than_balance_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/spend_on_unbootstrapped_user_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/spend_replayed_op_id_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/spend_without_events_contract_configured_reverts.1.json
  • contracts/profile/test_snapshots/tests/credits/spend_zero_amount_is_a_noop_but_marks_op_seen.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_accumulates.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_auth_rejection.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_multiple_tokens.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_multiple_users.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_rejects_duplicate_op_id.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_rejects_negative.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_rejects_zero.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_reverts_no_events_contract.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_reverts_when_paused.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_saturating_add.1.json
  • contracts/profile/test_snapshots/tests/earnings/register_earnings_succeeds.1.json
  • contracts/profile/test_snapshots/tests/reputation/admin_slash_happy_path_decrements_reputation.1.json
  • contracts/profile/test_snapshots/tests/reputation/admin_slash_is_idempotent_on_replay.1.json
  • contracts/profile/test_snapshots/tests/reputation/admin_slash_rejects_non_admin_caller.1.json
  • contracts/profile/test_snapshots/tests/reputation/admin_slash_reverts_on_empty_reason.1.json
  • contracts/profile/test_snapshots/tests/reputation/admin_slash_reverts_when_paused.1.json
  • contracts/profile/test_snapshots/tests/reputation/admin_slash_reverts_when_profile_not_found.1.json
  • contracts/profile/test_snapshots/tests/reputation/admin_slash_saturates_at_zero.1.json
  • contracts/profile/test_snapshots/tests/reputation/bump_accepts_u32_max_delta_without_overflow.1.json
  • contracts/profile/test_snapshots/tests/reputation/bump_accumulates_across_calls.1.json
  • contracts/profile/test_snapshots/tests/reputation/bump_happy_path_increments_reputation.1.json
  • contracts/profile/test_snapshots/tests/reputation/bump_is_idempotent_on_replay.1.json
  • contracts/profile/test_snapshots/tests/reputation/bump_rejects_caller_without_events_contract_auth.1.json
  • contracts/profile/test_snapshots/tests/reputation/bump_reverts_when_events_contract_not_configured.1.json
  • contracts/profile/test_snapshots/tests/reputation/bump_reverts_when_paused.1.json
  • contracts/profile/test_snapshots/tests/reputation/bump_reverts_when_profile_not_found.1.json
  • contracts/profile/test_snapshots/tests/reputation/bump_zero_delta_is_noop_but_marks_seen.1.json
  • contracts/profile/test_snapshots/tests/reputation/slash_happy_path_decrements_reputation.1.json
  • contracts/profile/test_snapshots/tests/reputation/slash_is_idempotent_on_replay.1.json
  • contracts/profile/test_snapshots/tests/reputation/slash_rejects_caller_without_events_contract_auth.1.json
  • contracts/profile/test_snapshots/tests/reputation/slash_reverts_when_events_contract_not_configured.1.json
  • contracts/profile/test_snapshots/tests/reputation/slash_reverts_when_paused.1.json
  • contracts/profile/test_snapshots/tests/reputation/slash_reverts_when_profile_not_found.1.json
  • contracts/profile/test_snapshots/tests/reputation/slash_saturates_at_zero.1.json
  • contracts/profile/test_snapshots/tests/reputation/slash_zero_delta_is_noop.1.json
  • deploy_and_upgrade.sh
  • deploy_mainnet.sh
  • docs/contract-ops-runbook.md

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/remove-credit-from-contract

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

0xdevcollins and others added 6 commits July 4, 2026 20:34
…emoval

Minor version bump marking the on-chain credit removal as a released
contract surface, with the regenerated test snapshots.

- INITIAL_VERSION + contractmeta -> 1.1.0 (events + profile); crate
  versions -> 1.1.0; version assertions and migrate() no-op comments
  updated to match.
- Regenerated affected test snapshots (embedded version 1.0.0 -> 1.1.0).
- BACKLOG: on-chain credit-removal upgrade marked applied on mainnet
  (both contracts read version() 1.1.0 as of 2026-07-03).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…-from-contract

# Conflicts:
#	contracts/events/src/tests/token_whitelist.rs
#	contracts/profile/src/tests/mod.rs
@0xdevcollins 0xdevcollins force-pushed the feat/remove-credit-from-contract branch from e206393 to 9207eb3 Compare July 4, 2026 19:35
@0xdevcollins 0xdevcollins requested review from Benjtalkshow and removed request for Benjtalkshow July 4, 2026 19:38
@0xdevcollins 0xdevcollins merged commit 1eceea0 into testnet Jul 4, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant