@wowok/agent-mcp 3.4.1 → 3.4.3
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.
- package/dist/.build-stamp.json +5 -0
- package/dist/chain-semantics/composition-truth.js +1 -1
- package/dist/chain-semantics/eval-order.js +1 -1
- package/dist/chain-semantics/field-capability.js +1 -1
- package/dist/chain-semantics/freeze-map.js +1 -1
- package/dist/chain-semantics/fund-flow.js +1 -1
- package/dist/chain-semantics/guard-verbs.js +1 -1
- package/dist/chain-semantics/object-graph.js +1 -1
- package/dist/composition/audit.js +1 -1
- package/dist/composition/compile.d.ts +10 -3
- package/dist/composition/compile.js +1 -1
- package/dist/composition/emit-phases.d.ts +30 -2
- package/dist/composition/emit-phases.js +1 -1
- package/dist/composition/guard-fill.d.ts +8 -0
- package/dist/composition/guard-fill.js +1 -1
- package/dist/composition/inflight.js +1 -1
- package/dist/composition/input-normalize.js +1 -1
- package/dist/composition/materialize.d.ts +2 -0
- package/dist/composition/materialize.js +1 -1
- package/dist/composition/mode-gates.js +1 -1
- package/dist/composition/param-disclosure.js +1 -1
- package/dist/composition/plan-retry-ledger.d.ts +16 -0
- package/dist/composition/plan-retry-ledger.js +1 -1
- package/dist/composition/plan.d.ts +15 -1
- package/dist/composition/plan.js +1 -1
- package/dist/config/config-audit.spec.js +1 -1
- package/dist/config/judgment.d.ts +5 -0
- package/dist/config/judgment.js +1 -1
- package/dist/evaluation/builtins/arbitration-score.d.ts +1 -0
- package/dist/evaluation/builtins/arbitration-score.js +1 -1
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/graph-service.d.ts +8 -0
- package/dist/evaluation/builtins/graph-service.js +1 -1
- package/dist/evaluation/capability.d.ts +9 -0
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/extract.d.ts +9 -1
- package/dist/evaluation/extract.js +1 -1
- package/dist/evaluation/match-operation.js +1 -1
- package/dist/evaluation/match-policy.d.ts +5 -3
- package/dist/evaluation/match-policy.js +1 -1
- package/dist/evaluation/standards.d.ts +1 -0
- package/dist/evaluation/standards.js +1 -1
- package/dist/evaluation/structured-lines.js +1 -1
- package/dist/evaluation/types.d.ts +1 -0
- package/dist/extensions/capability.js +1 -1
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/harness/recover.js +1 -1
- package/dist/index.js +1 -1
- package/dist/intent/types.d.ts +1 -1
- package/dist/intent/types.js +1 -1
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.d.ts +17 -1
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arb-fund-facts.d.ts +7 -0
- package/dist/knowledge/arb-fund-facts.js +1 -1
- package/dist/knowledge/arbitration-rail-verifier.d.ts +35 -0
- package/dist/knowledge/arbitration-rail-verifier.js +1 -0
- package/dist/knowledge/arbitration-templates.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +13 -1
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/judgment-baselines.json +1 -0
- package/dist/knowledge/baselines/rules/guard.json +7 -6
- package/dist/knowledge/baselines/rules/progress.json +4 -4
- package/dist/knowledge/baselines/rules/reward.json +118 -3
- package/dist/knowledge/builtin-templates.d.ts +19 -2
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/chain-query-registry.d.ts +14 -0
- package/dist/knowledge/chain-query-registry.js +1 -0
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/fee-param-bindings.d.ts +2 -0
- package/dist/knowledge/fee-param-bindings.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-binding-table.js +1 -1
- package/dist/knowledge/guard-binding-verifier.d.ts +7 -0
- package/dist/knowledge/guard-binding-verifier.js +1 -1
- package/dist/knowledge/guard-bindings.js +1 -1
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-host-context.js +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-node-gates.d.ts +3 -1
- package/dist/knowledge/guard-node-gates.js +1 -1
- package/dist/knowledge/guard-puzzle.js +1 -1
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +2 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +2 -0
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/knob-docs.js +1 -1
- package/dist/knowledge/param-schema.d.ts +1 -1
- package/dist/knowledge/param-schema.js +1 -1
- package/dist/knowledge/param-tiers.d.ts +2 -0
- package/dist/knowledge/param-tiers.js +1 -1
- package/dist/knowledge/path-oracle/products/food-delivery.js +1 -1
- package/dist/knowledge/pattern-resolutions.d.ts +2 -0
- package/dist/knowledge/pattern-resolutions.js +1 -1
- package/dist/knowledge/product-detail-source.d.ts +37 -0
- package/dist/knowledge/product-detail-source.js +1 -0
- package/dist/knowledge/product-doc-b5.d.ts +16 -0
- package/dist/knowledge/product-doc-b5.js +1 -0
- package/dist/knowledge/progress-ledger.js +1 -1
- package/dist/knowledge/projection.spec.js +1 -1
- package/dist/knowledge/publish-gate.d.ts +20 -0
- package/dist/knowledge/publish-gate.js +1 -0
- package/dist/knowledge/publish-readiness.d.ts +25 -0
- package/dist/knowledge/publish-readiness.js +1 -0
- package/dist/knowledge/publish-surface-contract.d.ts +16 -0
- package/dist/knowledge/publish-surface-contract.js +1 -0
- package/dist/knowledge/rail-exit-satisfiability.d.ts +25 -0
- package/dist/knowledge/rail-exit-satisfiability.js +1 -0
- package/dist/knowledge/reward-ledger.d.ts +1 -1
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-risk.d.ts +1 -1
- package/dist/knowledge/reward-risk.js +1 -1
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/service-ledger.d.ts +3 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/template-loader.d.ts +41 -2
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +17 -0
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/template-test-profiles.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +4 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/monitor/normalize.d.ts +1 -1
- package/dist/monitor/normalize.js +1 -1
- package/dist/monitor/types.js +1 -1
- package/dist/participation/customer-interest.d.ts +4 -0
- package/dist/participation/customer-interest.js +1 -1
- package/dist/participation/game-context.js +1 -1
- package/dist/participation/node-action-advisor.d.ts +4 -0
- package/dist/participation/node-action-advisor.js +1 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/participation/time-window.d.ts +11 -0
- package/dist/participation/time-window.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +28 -3
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/object-panorama.d.ts +4 -0
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/review/order.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +24 -0
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/allocation.d.ts +11 -7
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/arbitration.d.ts +4 -0
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +28 -0
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +21 -0
- package/dist/schema/call/contact.d.ts +4 -0
- package/dist/schema/call/demand.d.ts +4 -0
- package/dist/schema/call/guard.d.ts +12 -0
- package/dist/schema/call/handler.d.ts +1 -0
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +16 -8
- package/dist/schema/call/normalize-error.d.ts +1 -0
- package/dist/schema/call/normalize-error.js +1 -0
- package/dist/schema/call/order.d.ts +7 -3
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/payment.d.ts +7 -3
- package/dist/schema/call/permission.d.ts +4 -0
- package/dist/schema/call/personal.d.ts +4 -0
- package/dist/schema/call/progress.d.ts +4 -0
- package/dist/schema/call/progress.js +1 -1
- package/dist/schema/call/proof.d.ts +8 -0
- package/dist/schema/call/proof.js +1 -1
- package/dist/schema/call/receipt.js +1 -1
- package/dist/schema/call/repository.d.ts +4 -0
- package/dist/schema/call/reward.d.ts +6 -2
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.d.ts +2 -2
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +21 -7
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +10 -6
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/envelope-unify.d.ts +1 -0
- package/dist/schema/envelope-unify.js +1 -1
- package/dist/schema/evaluation/index.d.ts +43 -0
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +14 -2
- package/dist/schema/goal/planning.d.ts +18 -0
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/intent-radar/index.d.ts +12 -0
- package/dist/schema/intent-radar/index.js +1 -1
- package/dist/schema/keeper/index.d.ts +1 -0
- package/dist/schema/local/index.d.ts +10 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/local/wip.js +1 -1
- package/dist/schema/messenger/index.d.ts +1 -0
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +98 -13
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +22 -0
- package/dist/schema/query/bi.d.ts +28 -2
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +67 -61
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workflow/index.js +1 -1
- package/dist/schema-query-impl/index.d.ts +1 -0
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +2 -1
- package/dist/schemas/benchmark_migration_operation.output.json +74 -0
- package/dist/schemas/benchmark_migration_operation.schema.json +33 -1
- package/dist/schemas/bridge_operation.output.json +2 -1
- package/dist/schemas/bridge_operation.schema.json +40 -0
- package/dist/schemas/evaluation_operation.output.json +96 -0
- package/dist/schemas/evaluation_operation.schema.json +39 -0
- package/dist/schemas/goal_operation.schema.json +32 -0
- package/dist/schemas/guard2file.schema.json +8 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/intent_radar.output.json +10 -2
- package/dist/schemas/intent_radar.schema.json +5 -1
- package/dist/schemas/keeper_operation.output.json +2 -1
- package/dist/schemas/local_cache_operation.output.json +2 -1
- package/dist/schemas/local_history_operation.output.json +2 -1
- package/dist/schemas/local_info_operation.output.json +2 -1
- package/dist/schemas/local_mark_operation.output.json +2 -1
- package/dist/schemas/local_mark_operation.schema.json +10 -1
- package/dist/schemas/machineNode2file.schema.json +8 -0
- package/dist/schemas/messenger_operation.output.json +2 -1
- package/dist/schemas/messenger_operation.schema.json +2 -1
- package/dist/schemas/monitor_events.output.json +2 -1
- package/dist/schemas/monitor_subscription.output.json +2 -1
- package/dist/schemas/onchain_events.output.json +206 -13
- package/dist/schemas/onchain_events.schema.json +16 -0
- package/dist/schemas/onchain_operations.output.json +22 -3
- package/dist/schemas/onchain_operations.schema.json +982 -327
- package/dist/schemas/onchain_operations_allocation.schema.json +20 -13
- package/dist/schemas/onchain_operations_arbitration.schema.json +9 -1
- package/dist/schemas/onchain_operations_contact.schema.json +8 -0
- package/dist/schemas/onchain_operations_demand.schema.json +8 -0
- package/dist/schemas/onchain_operations_gen_passport.schema.json +8 -0
- package/dist/schemas/onchain_operations_gen_proof.schema.json +8 -0
- package/dist/schemas/onchain_operations_guard.schema.json +655 -115
- package/dist/schemas/onchain_operations_machine.schema.json +11 -3
- package/dist/schemas/onchain_operations_order.schema.json +14 -11
- package/dist/schemas/onchain_operations_payment.schema.json +12 -9
- package/dist/schemas/onchain_operations_permission.schema.json +8 -0
- package/dist/schemas/onchain_operations_personal.schema.json +8 -0
- package/dist/schemas/onchain_operations_progress.schema.json +9 -1
- package/dist/schemas/onchain_operations_proof.schema.json +9 -1
- package/dist/schemas/onchain_operations_repository.schema.json +8 -0
- package/dist/schemas/onchain_operations_reward.schema.json +14 -11
- package/dist/schemas/onchain_operations_service.schema.json +25 -12
- package/dist/schemas/onchain_operations_treasury.schema.json +17 -19
- package/dist/schemas/onchain_table_data.output.json +52 -10
- package/dist/schemas/persona_operation.output.json +57 -0
- package/dist/schemas/persona_operation.schema.json +9 -0
- package/dist/schemas/query_toolkit.output.json +326 -23
- package/dist/schemas/query_toolkit.schema.json +18 -5
- package/dist/schemas/wip_file.output.json +2 -2
- package/dist/schemas/wip_file.schema.json +2 -2
- package/dist/schemas/workflow_operation.schema.json +1 -1
- package/dist/tools/error-catalog.d.ts +17 -0
- package/dist/tools/error-catalog.js +1 -0
- package/dist/tools/handlers/benchmark-migration.d.ts +29 -8
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/entry-edge-recipe.d.ts +101 -0
- package/dist/tools/handlers/entry-edge-recipe.js +1 -0
- package/dist/tools/handlers/escrow-deficit.d.ts +10 -0
- package/dist/tools/handlers/escrow-deficit.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/fund-rail-recipe.d.ts +10 -0
- package/dist/tools/handlers/fund-rail-recipe.js +1 -0
- package/dist/tools/handlers/intent-radar.js +1 -1
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/mark-namespace.d.ts +30 -0
- package/dist/tools/handlers/mark-namespace.js +1 -0
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain-name-registration.d.ts +1 -0
- package/dist/tools/handlers/onchain-name-registration.js +1 -1
- package/dist/tools/handlers/onchain-name-registration.spec.js +1 -1
- package/dist/tools/handlers/onchain.d.ts +40 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/publish-binding-echo.d.ts +22 -0
- package/dist/tools/handlers/publish-binding-echo.js +1 -0
- package/dist/tools/handlers/query.d.ts +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/review-chain.d.ts +1 -0
- package/dist/tools/handlers/review-chain.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/handlers/stale-build-check.d.ts +9 -0
- package/dist/tools/handlers/stale-build-check.js +1 -0
- package/dist/tools/handlers/submission-assembly.d.ts +55 -0
- package/dist/tools/handlers/submission-assembly.js +1 -0
- package/dist/tools/handlers/wip.js +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/move-fn-index.gen.js +1 -1
- package/dist/tools/publish-gate-state.d.ts +5 -0
- package/dist/tools/publish-gate-state.js +1 -0
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/retry.js +1 -1
- package/dist/tools/runtime-health.js +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/upgrade-check.d.ts +1 -0
- package/dist/tools/upgrade-check.js +1 -1
- package/dist/tools/wip-verify-ledger.d.ts +2 -0
- package/dist/tools/wip-verify-ledger.js +1 -1
- package/dist/tools/wrap.d.ts +15 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +5 -3
package/dist/intent/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IndustryScenario } from "../evaluation/capability.js";
|
|
2
2
|
import type { PersonaRole } from "../persona/types.js";
|
|
3
|
-
export type IntentTargetType = "NewOrderEvent" | "ProgressEvent" | "ThresholdPendingEvent" | "DemandPresentEvent" | "DemandFeedbackEvent" | "DemandChangedEvent" | "ServiceEvent" | "ArbitrationEvent" | "NewEntityEvent" | "ArbEvent" | "VoteEvent" | "FeedbackEvent" | "AllocationEvent" | "TreasuryEvent" | "RewardClaimEvent" | "RewardFundEvent" | "RewardWithdrawEvent" | "NewPaymentEvent" | "PermissionChangedEvent" | "RepositoryDataOverwriteEvent";
|
|
3
|
+
export type IntentTargetType = "NewOrderEvent" | "ProgressEvent" | "ThresholdPendingEvent" | "DemandPresentEvent" | "DemandFeedbackEvent" | "DemandChangedEvent" | "ServiceEvent" | "ArbitrationEvent" | "NewEntityEvent" | "ArbEvent" | "VoteEvent" | "FeedbackEvent" | "AllocationEvent" | "TreasuryEvent" | "RewardClaimEvent" | "RewardFundEvent" | "RewardWithdrawEvent" | "NewPaymentEvent" | "PermissionChangedEvent" | "RepositoryDataOverwriteEvent" | "RowRemovedEvent" | "OrderTagOverwriteEvent" | "OrderTagRemovedEvent" | "PrincipalRefundedEvent";
|
|
4
4
|
export interface IntentRecord {
|
|
5
5
|
id: string;
|
|
6
6
|
intent: string;
|
package/dist/intent/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const INTENT_MAX_PER_SCOPE=0x32;export const ALL_INTENT_TARGET_TYPES=['NewOrderEvent','ProgressEvent','ThresholdPendingEvent','DemandPresentEvent','DemandFeedbackEvent','DemandChangedEvent','ServiceEvent','ArbitrationEvent','NewEntityEvent','ArbEvent','VoteEvent','FeedbackEvent','AllocationEvent','TreasuryEvent','RewardClaimEvent','RewardFundEvent','RewardWithdrawEvent','NewPaymentEvent','PermissionChangedEvent','RepositoryDataOverwriteEvent'];
|
|
1
|
+
export const INTENT_MAX_PER_SCOPE=0x32;export const ALL_INTENT_TARGET_TYPES=['NewOrderEvent','ProgressEvent','ThresholdPendingEvent','DemandPresentEvent','DemandFeedbackEvent','DemandChangedEvent','ServiceEvent','ArbitrationEvent','NewEntityEvent','ArbEvent','VoteEvent','FeedbackEvent','AllocationEvent','TreasuryEvent','RewardClaimEvent','RewardFundEvent','RewardWithdrawEvent','NewPaymentEvent','PermissionChangedEvent','RepositoryDataOverwriteEvent','RowRemovedEvent','OrderTagOverwriteEvent','OrderTagRemovedEvent','PrincipalRefundedEvent'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAX_SHARING_COUNT,MAX_ALLOCATOR_COUNT}from'@wowok/wowok';export{MAX_ALLOCATOR_COUNT};export const ALLOCATION_MAX_SHARING_COUNT=MAX_SHARING_COUNT;export const ALLOCATION_MODE_AMOUNT=0x0;export const ALLOCATION_MODE_RATE=0x1;export const ALLOCATION_MODE_SURPLUS=0x2;export const ALLOCATION_MODE_RATE_GROSS=0x3;export const ALLOCATION_MODE_FORMULA=0x4;export const RATE_TOTAL_FULL=0x2710;export const ALLOCATION_ERROR_CODES={'ERECIPIENT_IDENTIFIER_NOT_ADDRESS':0x1,'EALLOCATOR_COUNT_EXCEEDED':0x2,'ENO_ALLOCATOR':0x3,'ERATE_NOT_10000':0x4,'EMULTIPLE_SURPLUS':0x5,'ERATE_EXCEEDS_10000':0x6,'EINSUFFICIENT_BALANCE':0x7,'EALLOCATORS_EMPTY':0x8,'ENO_PAYMENT_INFO':0x9,'ESHARING_COUNT_EXCEEDED':0xa,'ESHARING_MODE_INVALID':0xb,'EAMOUNT_BELOW_THRESHOLD':0xc,'EAMOUNT_EXCEEDS_MAX':0xd,'EZERO_DISTRIBUTION':0xe,'ERECIPIENT_NOT_FOR_OBJECT':0xf,'E_ONCE_TRIGGERED':0x10,'EMIXED_RATE_BASES':0x11,'EFORMULA_SPEC_INVALID':0x18,'EEMPTY_POOL_BATCH':0x1a};export const ORDER_ALLOCATION_ALREADY_SPECIFIED='E_ALLOCATION_ALREADY_SPECIFIED';export const ALLOCATION_SCENES=[{'id':'allocation_standard_three_way_split','name':'Standard\x20three-way\x20split\x20(merchant\x20/\x20platform\x20/\x20logistics)','trigger_source':'service_order_allocators','distribution_strategy':'pure_rate','coin_type_note':'All\x20three\x20Treasury\x20objects\x20must\x20use\x20the\x20same\x20Coin<T>\x20type\x20as\x20the\x20Allocation','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x203\x20Rate\x20sharing\x20items,\x20sum(rates)\x20===\x2010000','Each\x20sharing.who=Entity\x20points\x20to\x20a\x20Treasury\x20address','Guard\x20verifies\x20order.service\x20binding\x20(query\x201563)\x20to\x20prevent\x20cross-project\x20bypass','Guard\x20verifies\x20progress.current_node\x20===\x20\x27Complete\x27'],'dependencies':['Service','Treasury','Guard','Order','Progress','Machine','Payment'],'key_constraints':['F-A-05:\x20sum(rates)\x20===\x2010000\x20(pure\x20Rate\x20mode)','Treasury\x20Permission\x20should\x20match\x20Service\x20Permission\x20(R-A-12)','order_allocators\x20immutable\x20after\x20Service\x20publish\x20(R-A-10)'],'recommended_templates':['T-A-02']},{'id':'allocation_merchant_full_payment','name':'Merchant\x20full\x20payment\x20(single\x20recipient,\x20100%)','trigger_source':'service_order_allocators','distribution_strategy':'pure_rate','coin_type_note':'Simplest\x20configuration\x20—\x20single\x20Treasury\x20or\x20personal\x20address','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'single_relaxed','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x201\x20Rate\x20sharing\x20=\x2010000','Guard\x20only\x20verifies\x20order\x20status\x20(no\x20complex\x20conditions)','who=Entity\x20can\x20be\x20either\x20Treasury\x20or\x20personal\x20wallet'],'dependencies':['Service','Guard','Order','Payment'],'key_constraints':['Simplest\x20allocation\x20configuration','No\x20multi-party\x20coordination\x20required'],'recommended_templates':['T-A-01']},{'id':'allocation_refund_first_surplus_to_merchant','name':'Refund\x20first\x20+\x20surplus\x20to\x20merchant\x20(Amount\x20+\x20Surplus\x20hybrid)','trigger_source':'service_order_allocators','distribution_strategy':'amount_plus_surplus','coin_type_note':'Refund\x20amount\x20must\x20match\x20Coin<T>\x20precision','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Amount','Surplus'],'guard_requirement':'required','non_zero_threshold':!![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x202\x20sharing\x20items','sharing[0]:\x20Amount=refund_value,\x20who=Entity(customer_address)','sharing[1]:\x20Surplus,\x20who=Entity(merchant_treasury)','fix\x20=\x20refund_value\x20(cached\x20Amount\x20sum)','threshold\x20=\x20refund_value\x20(ensure\x20sufficient\x20balance\x20for\x20Amount)'],'dependencies':['Service','Treasury','Guard','Order','Payment'],'key_constraints':['F-A-04:\x20at\x20most\x201\x20Surplus\x20per\x20Allocator','F-A-07:\x20fix\x20>=\x20threshold\x20(Amount\x20sum\x20must\x20cover\x20threshold)','fix\x20must\x20precisely\x20match\x20the\x20refund\x20amount'],'recommended_templates':['T-A-03']},{'id':'allocation_treasury_personal_alternatives','name':'Treasury\x20+\x20Personal\x20alternative\x20strategies\x20(caller-specified\x20guard)','trigger_source':'service_order_allocators','distribution_strategy':'first_match_alternatives','coin_type_note':'Both\x20target\x20addresses\x20must\x20accept\x20the\x20same\x20Coin<T>','typical_allocator_count':0x2,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'multiple_unique','non_zero_threshold':![],'uses_max':![],'common_patterns':['2\x20Allocators,\x20each\x20with\x201\x20Rate=10000\x20sharing','Allocator[0]:\x20guard=guard_treasury,\x20who=Entity(treasury_address)','Allocator[1]:\x20guard=guard_personal,\x20who=Entity(personal_address)','Two\x20Guard\x20objects\x20must\x20be\x20different\x20addresses\x20(R-A-11)','caller-specified\x20guard:\x20caller\x20selects\x20Treasury\x20or\x20Personal\x20path\x20via\x20alloc_by_guard;\x20the\x20Passport\x20hard-verifies\x20the\x20selected\x20Guard\x20(failure\x20aborts\x20with\x20E_VERIFY_FAILED;\x20caller\x20must\x20switch\x20guard\x20and\x20retry)'],'dependencies':['Service','Treasury','Guard','Order','Payment'],'key_constraints':['F-A-14:\x20allocators[].guard\x20must\x20be\x20unique','Treasury\x20Permission\x20should\x20match\x20Service\x20Permission\x20(R-A-12)','Guard\x20A\x20and\x20Guard\x20B\x20may\x20share\x20root/table\x20but\x20must\x20differ\x20in\x20description'],'recommended_templates':['T-A-04']},{'id':'allocation_tiered_by_order_amount','name':'Tiered\x20split\x20by\x20order\x20amount\x20(multi-Allocator\x20amount-threshold\x20switch)','trigger_source':'service_order_allocators','distribution_strategy':'tiered_by_amount','coin_type_note':'Amount\x20threshold\x20uses\x20Coin<T>\x20smallest\x20unit\x20(e.g.\x20MIST\x20for\x20WOW)','typical_allocator_count':0x2,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'multiple_unique','non_zero_threshold':![],'uses_max':![],'common_patterns':['2\x20Allocators\x20triggered\x20by\x20mutually\x20exclusive\x20Guard\x20conditions','Allocator[0]:\x20guard\x20verifies\x20order.amount\x20<\x20threshold,\x20Rate=10000\x20to\x20merchant','Allocator[1]:\x20guard\x20verifies\x20order.amount\x20>=\x20threshold,\x20Rate=8000/2000\x20split','caller-specified\x20guard:\x20caller\x20selects\x20the\x20matching\x20Allocator\x20based\x20on\x20order\x20amount;\x20allocator\x20order\x20is\x20irrelevant','Guard\x20queries\x20order.amount\x20(query\x201561)'],'dependencies':['Service','Treasury','Guard','Order','Payment'],'key_constraints':['Guard\x20conditions\x20must\x20be\x20mutually\x20exclusive\x20(R-A-4-02\x20design\x20clarity)','Caller\x20must\x20select\x20correct\x20guard\x20based\x20on\x20order.amount\x20(no\x20auto-fallback)'],'recommended_templates':['T-A-05']},{'id':'allocation_dynamic_recipient','name':'Multi-role\x20split\x20with\x20dynamic\x20recipient\x20(GuardIdentifier)','trigger_source':'service_order_allocators','distribution_strategy':'dynamic_recipient','coin_type_note':'Passport\x20table\x20must\x20contain\x20address-typed\x20entry\x20at\x20the\x20referenced\x20identifier','typical_allocator_count':0x1,'sharing_who_types':['Entity','GuardIdentifier'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x203\x20Rate\x20sharing\x20items','sharing[0]:\x20Rate=8000,\x20who=Entity(merchant_treasury)','sharing[1]:\x20Rate=1000,\x20who=Entity(platform_treasury)','sharing[2]:\x20Rate=1000,\x20who=GuardIdentifier(0)\x20—\x20resolves\x20from\x20Passport\x20table','Customer\x20submits\x20Passport\x20with\x20referrer\x20address\x20at\x20identifier=0'],'dependencies':['Service','Treasury','Guard','Passport','Order','Payment'],'key_constraints':['F-A-13:\x20Passport\x20table[identifier]\x20must\x20be\x20address\x20type\x20(else\x20ERECIPIENT_IDENTIFIER_NOT_ADDRESS)','Guard\x20must\x20verify\x20Passport\x20completeness','Customer\x20order\x20must\x20include\x20Passport\x20with\x20referrer\x20address'],'recommended_templates':['T-A-06']},{'id':'allocation_arbitration_fees','name':'Arbitration\x20fees\x20split\x20(arbitrator\x20/\x20platform)','trigger_source':'arbitration_fees','distribution_strategy':'pure_rate','coin_type_note':'Coin<T>\x20must\x20match\x20Arbitration\x27s\x20fee\x20Coin\x20type','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Triggered\x20by\x20the\x20Arbitration\x20fee-allocation\x20operation\x20(permission\x20365),\x20direct\x20or\x20Passport\x20path','Single\x20Allocator,\x202\x20Rate\x20sharing\x20items:\x208000\x20arbitrator\x20/\x202000\x20platform','payment_info\x20reuses\x20Arbitration\x27s\x20payment_info','Caller\x20must\x20hold\x20ARBITRATION_FEES_ALLOC=365\x20permission'],'dependencies':['Arbitration','Treasury','Guard','Payment'],'key_constraints':['Independent\x20from\x20Service-order\x20Allocation','Requires\x20ARBITRATION_FEES_ALLOC=365\x20permission'],'recommended_templates':['T-A-08']},{'id':'allocation_refund_to_order','name':'Refund\x20Allocator\x20(100%\x20to\x20Order\x20object)','trigger_source':'service_order_allocators','distribution_strategy':'refund_to_order','coin_type_note':'who=Entity\x20must\x20be\x20the\x20Order\x20object\x20address\x20(NOT\x20a\x20personal\x20wallet)','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x201\x20Rate=10000\x20sharing','who=Entity(order_address)\x20—\x20funds\x20flow\x20back\x20to\x20Order,\x20not\x20personal\x20wallet','Guard\x20verifies\x20customer\x20refund\x20request\x20and\x20eligibility','Customer-side\x20risk\x20assessment\x20adds\x208-point\x20weight\x20(onchain_topology\x20graph\x20evaluation)'],'dependencies':['Service','Guard','Order','Payment'],'key_constraints':['who=Entity\x20MUST\x20be\x20Order\x20object\x20address\x20(not\x20personal\x20address)','Customer\x20due-diligence\x20rewards\x20this\x20configuration\x20(8-point\x20weight)','Refund\x20funds\x20return\x20to\x20Order\x20for\x20downstream\x20handling'],'recommended_templates':['T-A-07']},{'id':'allocation_max_capped_retain','name':'Max-capped\x20allocation\x20(retain\x20residual\x20balance)','trigger_source':'service_order_allocators','distribution_strategy':'max_capped','coin_type_note':'max\x20field\x20uses\x20Coin<T>\x20smallest\x20unit','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Amount','Rate'],'guard_requirement':'required','non_zero_threshold':!![],'uses_max':!![],'common_patterns':['Single\x20Allocator\x20with\x20max\x20field\x20set','max\x20triple\x20role:\x20Amount\x20cap\x20+\x20NET\x20Rate\x20base\x20+\x20Surplus\x20cap','Amount\x20sharing\x20consumes\x20fix;\x20NET\x20Rate\x20sharing\x20uses\x20(max\x20-\x20fix)\x20as\x20base\x20(RateGross\x20uses\x20max\x20itself)','Residual\x20balance\x20remains\x20in\x20Allocation\x20for\x20subsequent\x20alloc()\x20calls'],'dependencies':['Service','Treasury','Guard','Order','Payment'],'key_constraints':['F-A-08:\x20Amount\x20sum\x20<=\x20max\x20(EAMOUNT_EXCEEDS_MAX)','NET\x20Rate:\x20max\x20-\x20fix\x20becomes\x20the\x20base\x20(NOT\x20balance\x20-\x20fix);\x20RateGross:\x20the\x20base\x20is\x20max\x20(fix\x20not\x20removed)','Residual\x20balance\x20may\x20be\x20claimed\x20by\x20re-triggering\x20alloc()'],'recommended_templates':[]},{'id':'allocation_multi_node_trigger','name':'Multi-Machine-node\x20triggered\x20allocation\x20(Complete\x20/\x20Refund\x20/\x20Lost)','trigger_source':'service_order_allocators','distribution_strategy':'multi_node_trigger','coin_type_note':'All\x20Allocators\x20share\x20the\x20same\x20Allocation\x27s\x20Coin<T>','typical_allocator_count':0x3,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'multiple_unique','non_zero_threshold':![],'uses_max':![],'common_patterns':['3\x20Allocators\x20mapped\x20to\x20Machine\x20terminal\x20nodes\x20(Complete/Refund/Lost)','Each\x20Allocator\x27s\x20Guard\x20verifies\x20progress.current_node\x20==\x20<node_name>','Mutually\x20exclusive\x20Guard\x20conditions\x20(only\x20one\x20terminal\x20node\x20active\x20at\x20a\x20time)','Machine.required_allocators[]\x20describes\x20each\x20trigger_node\x20mapping'],'dependencies':['Service','Treasury','Guard','Order','Progress','Machine','Payment'],'key_constraints':['Guard\x20conditions\x20must\x20be\x20mutually\x20exclusive','Sequence-sensitive:\x20business-flow\x20order','Machine.required_allocators[trigger_node]\x20must\x20map\x20to\x20Allocator\x20indices'],'recommended_templates':[]},{'id':'allocation_standalone_periodic_split','name':'Standalone\x20periodic\x20split\x20(investment\x20dividends\x20/\x20shared\x20income)','trigger_source':'standalone','distribution_strategy':'periodic_split','coin_type_note':'Coin<T>\x20must\x20match\x20the\x20asset\x20being\x20distributed\x20(e.g.\x20profit\x20token)','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x20N\x20Rate\x20sharing\x20items,\x20sum(rates)\x20===\x2010000','Each\x20sharing.who=Entity\x20points\x20to\x20a\x20beneficiary\x20wallet\x20(not\x20Treasury)','Guard\x20verifies\x20time-based\x20trigger\x20(e.g.\x20context(Clock).timestamp\x20>=\x20next_release)\x20or\x20signer\x20authorization','User\x20calls\x20receive()\x20to\x20deposit\x20funds,\x20then\x20alloc()\x20to\x20trigger\x20distribution','No\x20Service/Order/Progress/Machine\x20context\x20required'],'dependencies':['Treasury','Guard','Payment'],'key_constraints':['F-A-05:\x20sum(rates)\x20===\x2010000\x20(pure\x20Rate\x20mode)','R-A-3-04:\x20standalone\x20mode\x20has\x20no\x20Service-layer\x20access\x20control\x20—\x20Guard\x20+\x20Passport\x20MUST\x20be\x20sufficient','Caller\x20is\x20fully\x20responsible\x20for\x20receive\x20→\x20alloc\x20lifecycle\x20(no\x20auto-trigger)','Guard\x20should\x20bind\x20Signer\x20to\x20prevent\x20unauthorized\x20alloc()\x20calls'],'recommended_templates':['T-A-09']},{'id':'allocation_standalone_vesting','name':'Standalone\x20vesting\x20release\x20(time-locked\x20multi-stage\x20unlock)','trigger_source':'standalone','distribution_strategy':'time_locked_vesting','coin_type_note':'Coin<T>\x20must\x20match\x20the\x20vested\x20asset\x20(e.g.\x20locked\x20team\x20tokens)','typical_allocator_count':0x3,'sharing_who_types':['Entity'],'modes_used':['Amount','Rate','Surplus'],'guard_requirement':'multiple_unique','non_zero_threshold':!![],'uses_max':!![],'common_patterns':['N\x20Allocators,\x20each\x20mapped\x20to\x20a\x20vesting\x20stage\x20(e.g.\x2025%\x20at\x20month\x2012,\x2025%\x20at\x20month\x2024,\x2050%\x20surplus\x20at\x20month\x2036)','Each\x20Allocator\x27s\x20Guard\x20verifies\x20context(Clock).timestamp\x20>=\x20stage_unlock_time','Amount\x20sharing\x20per\x20stage\x20with\x20max\x20field\x20capping\x20the\x20cumulative\x20release','Final\x20Allocator\x20uses\x20Surplus\x20to\x20drain\x20remaining\x20balance\x20after\x20last\x20vesting\x20stage','Mutually\x20exclusive\x20Guard\x20conditions\x20(only\x20one\x20stage\x20active\x20at\x20a\x20time,\x20based\x20on\x20timestamp)','User\x20calls\x20receive()\x20to\x20deposit\x20locked\x20tokens,\x20then\x20alloc()\x20at\x20each\x20vesting\x20milestone'],'dependencies':['Treasury','Guard','Passport','Payment'],'key_constraints':['F-A-04:\x20at\x20most\x201\x20Surplus\x20per\x20Allocator\x20(final\x20stage\x20uses\x20Surplus\x20to\x20drain\x20remainder)','F-A-08:\x20Amount\x20sum\x20<=\x20max\x20(EAMOUNT_EXCEEDS_MAX)','R-A-3-04:\x20standalone\x20mode\x20has\x20no\x20Service-layer\x20access\x20control\x20—\x20Guard\x20time-lock\x20MUST\x20be\x20enforced','Guard\x20conditions\x20must\x20be\x20mutually\x20exclusive\x20by\x20timestamp\x20(R-A-4-02)','Caller\x20must\x20wait\x20for\x20time-lock\x20expiry\x20before\x20alloc()\x20succeeds;\x20otherwise\x20alloc()\x20silently\x20returns\x20(R-A-4-01)'],'recommended_templates':['T-A-10']}];export const ALLOCATION_LEDGER_VERSION='1.0.0';export function getScenesByTriggerSource(a){return ALLOCATION_SCENES['filter'](b=>b['trigger_source']===a);}export function getScenesByMode(a){return ALLOCATION_SCENES['filter'](b=>b['modes_used']['includes'](a));}export function getScenesByStrategy(a){return ALLOCATION_SCENES['filter'](b=>b['distribution_strategy']===a);}export function findSceneById(a){return ALLOCATION_SCENES['find'](b=>b['id']===a);}export function inferSceneFromIntent(a){const b=a['toLowerCase']();if(b['includes']('arbitration')||b['includes']('fees\x20alloc'))return findSceneById('allocation_arbitration_fees');if(b['includes']('standalone')||b['includes']('periodic\x20split')||b['includes']('investment\x20dividend')||b['includes']('shared\x20income')||b['includes']('dividend'))return findSceneById('allocation_standalone_periodic_split');if(b['includes']('vesting')||b['includes']('time-lock')||b['includes']('unlock\x20period')||b['includes']('locked\x20release')||b['includes']('token\x20unlock'))return findSceneById('allocation_standalone_vesting');if(b['includes']('refund')){if(b['includes']('order')||b['includes']('100%'))return findSceneById('allocation_refund_to_order');if(b['includes']('surplus')||b['includes']('merchant'))return findSceneById('allocation_refund_first_surplus_to_merchant');}if(b['includes']('alternative')||b['includes']('priority')||b['includes']('treasury')&&b['includes']('personal'))return findSceneById('allocation_treasury_personal_alternatives');if(b['includes']('tiered')||b['includes']('threshold\x20switch'))return findSceneById('allocation_tiered_by_order_amount');if(b['includes']('dynamic\x20recipient')||b['includes']('referrer')||b['includes']('guardidentifier'))return findSceneById('allocation_dynamic_recipient');if(b['includes']('retain')||b['includes']('max'))return findSceneById('allocation_max_capped_retain');if(b['includes']('multi-node')||b['includes']('multi\x20machine')||b['includes']('multi_node'))return findSceneById('allocation_multi_node_trigger');const c=(a['match'](/%/g)||[])['length'];if(c<=0x1)return findSceneById('allocation_merchant_full_payment');if(c>=0x2)return findSceneById('allocation_standard_three_way_split');return undefined;}export function getAllScenes(){return[...ALLOCATION_SCENES];}export function getScenesCount(){return ALLOCATION_SCENES['length'];}export function allocationModeToNumber(a){switch(a){case'Amount':return ALLOCATION_MODE_AMOUNT;case'Rate':return ALLOCATION_MODE_RATE;case'Surplus':return ALLOCATION_MODE_SURPLUS;case'RateGross':return ALLOCATION_MODE_RATE_GROSS;case'Formula':return ALLOCATION_MODE_FORMULA;}}export function allocationModeFromNumber(a){switch(a){case ALLOCATION_MODE_AMOUNT:return'Amount';case ALLOCATION_MODE_RATE:return'Rate';case ALLOCATION_MODE_SURPLUS:return'Surplus';case ALLOCATION_MODE_RATE_GROSS:return'RateGross';case ALLOCATION_MODE_FORMULA:return'Formula';default:throw new Error('Invalid\x20AllocationMode\x20number:\x20'+a);}}export function getRecipientType(a){if('GuardIdentifier'in a)return'GuardIdentifier';if('Entity'in a)return'Entity';return'Signer';}export function isSignerRecipient(a){return'Signer'in a;}export function isEntityRecipient(a){return'Entity'in a;}export function isGuardIdentifierRecipient(a){return'GuardIdentifier'in a;}export function getErrorName(a){for(const [b,d]of Object['entries'](ALLOCATION_ERROR_CODES)){if(d===a)return b;}return undefined;}export function getErrorDescription(a){const b={0x1:'GuardIdentifier\x20resolved\x20value\x20is\x20not\x20an\x20address\x20type',0x2:'Allocator\x20count\x20exceeds\x20MAX_ALLOCATOR_COUNT\x20(100)',0x3:'No\x20Allocator\x20in\x20the\x20allocators\x20vector',0x4:'Pure\x20Rate\x20mode\x20sum\x20!=\x2010000\x20(no\x20Surplus\x20to\x20absorb\x20remainder)',0x5:'Multiple\x20Surplus\x20sharing\x20in\x20a\x20single\x20Allocator',0x6:'Rate\x20+\x20Surplus\x20sum\x20>\x2010000',0x7:'balance\x20<\x20threshold\x20(insufficient\x20balance\x20to\x20trigger\x20alloc)',0x8:'allocators.allocators\x20is\x20empty',0x9:'payment_info\x20is\x20None\x20when\x20alloc()\x20is\x20called',0xa:'sharing\x20count\x20exceeds\x20MAX_SHARING_COUNT\x20(100)',0xb:'sharing\x20mode\x20is\x20not\x200\x20(Amount)\x20/\x201\x20(Rate)\x20/\x202\x20(Surplus)\x20/\x203\x20(RateGross)\x20/\x204\x20(Formula)',0xc:'Amount\x20sum\x20(fix)\x20<\x20threshold',0xd:'Amount\x20sum\x20(fix)\x20>\x20max',0xe:'distribution\x20computes\x20to\x20zero\x20while\x20the\x20pool\x20still\x20holds\x20funds\x20(or\x20balance\x20is\x200)',0xf:'GuardIdentifier\x20recipient\x20address\x20!=\x20payment_info.for_object\x20anchor\x20(abort\x20fires\x20only\x20when\x20a\x20for_object\x20binding\x20is\x20declared)',0x10:'once-trigger\x20key\x20already\x20consumed\x20—\x20the\x20guard\x20submitted\x20the\x20reserved\x20identifier\x20255\x20and\x20its\x20raw\x20submission\x20bytes\x20were\x20recorded\x20as\x20a\x20(guard,\x20allocator\x20index,\x20raw\x20bytes)\x20dynamic-field\x20key\x20on\x20this\x20Allocation',0x11:'mixed\x20rate\x20bases\x20—\x20one\x20allocator\x20carries\x20both\x20NET\x20Rate\x20and\x20RateGross\x20entries\x20while\x20a\x20fixed\x20Amount\x20total\x20is\x20present\x20(rejected\x20only\x20when\x20fix\x20>\x200;\x20with\x20fix\x20==\x200\x20the\x20two\x20bases\x20coincide\x20and\x20mixing\x20is\x20allowed)',0x12:'RateGross\x20+\x20fixed\x20Amount\x20without\x20a\x20max\x20cap\x20—\x20plan\x20payability\x20unprovable\x20at\x20declaration\x20time',0x13:'guard\x20not\x20bound\x20to\x20any\x20allocator\x20on\x20this\x20Allocation\x20(was\x20a\x20silent\x20no-op\x20success\x20before)',0x14:'allocator\x20append\x20rejected:\x20new\x20Allocators\x20is\x20not\x20a\x20pure\x20extension\x20(prefix/threshold\x20changed)',0x15:'once-for-object\x20slot\x20(identifier\x20254)\x20armed\x20but\x20payment_info\x20declares\x20no\x20for_object\x20binding',0x18:'FormulaSpec\x20rejected:\x20selector\x20is\x20not\x20COUNT(0)/SUM(1),\x20allocator/slot\x20index\x20out\x20of\x20range,\x20or\x20the\x20target\x20sharing\x20slot\x20is\x20not\x20a\x20Formula\x20(mode\x204)\x20leg'};return b[a];}
|
|
1
|
+
import{MAX_SHARING_COUNT,MAX_ALLOCATOR_COUNT}from'@wowok/wowok';export{MAX_ALLOCATOR_COUNT};export const ALLOCATION_MAX_SHARING_COUNT=MAX_SHARING_COUNT;export const ALLOCATION_MODE_AMOUNT=0x0;export const ALLOCATION_MODE_RATE=0x1;export const ALLOCATION_MODE_SURPLUS=0x2;export const ALLOCATION_MODE_RATE_GROSS=0x3;export const ALLOCATION_MODE_FORMULA=0x4;export const RATE_TOTAL_FULL=0x2710;export const ALLOCATION_ERROR_CODES={'ERECIPIENT_IDENTIFIER_NOT_ADDRESS':0x1,'EALLOCATOR_COUNT_EXCEEDED':0x2,'ENO_ALLOCATOR':0x3,'ERATE_NOT_10000':0x4,'EMULTIPLE_SURPLUS':0x5,'ERATE_EXCEEDS_10000':0x6,'EINSUFFICIENT_BALANCE':0x7,'EALLOCATORS_EMPTY':0x8,'ENO_PAYMENT_INFO':0x9,'ESHARING_COUNT_EXCEEDED':0xa,'ESHARING_MODE_INVALID':0xb,'EAMOUNT_BELOW_THRESHOLD':0xc,'EAMOUNT_EXCEEDS_MAX':0xd,'EZERO_DISTRIBUTION':0xe,'ERECIPIENT_NOT_FOR_OBJECT':0xf,'E_ONCE_TRIGGERED':0x10,'EMIXED_RATE_BASES':0x11,'EFORMULA_SPEC_INVALID':0x18,'EEMPTY_POOL_BATCH':0x1a};export const ORDER_ALLOCATION_ALREADY_SPECIFIED='E_ALLOCATION_ALREADY_SPECIFIED';export const ALLOCATION_SCENES=[{'id':'allocation_standard_three_way_split','name':'Standard\x20three-way\x20split\x20(merchant\x20/\x20platform\x20/\x20logistics)','trigger_source':'service_order_allocators','distribution_strategy':'pure_rate','coin_type_note':'All\x20three\x20Treasury\x20objects\x20must\x20use\x20the\x20same\x20Coin<T>\x20type\x20as\x20the\x20Allocation','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x203\x20Rate\x20sharing\x20items,\x20sum(rates)\x20===\x2010000','Each\x20sharing.who=Entity\x20points\x20to\x20a\x20Treasury\x20address','Guard\x20verifies\x20order.service\x20binding\x20(query\x201563)\x20to\x20prevent\x20cross-project\x20bypass','Guard\x20verifies\x20progress.current_node\x20===\x20\x27Complete\x27'],'dependencies':['Service','Treasury','Guard','Order','Progress','Machine','Payment'],'key_constraints':['F-A-05:\x20sum(rates)\x20===\x2010000\x20(pure\x20Rate\x20mode)','Treasury\x20Permission\x20should\x20match\x20Service\x20Permission\x20(R-A-12)','order_allocators\x20immutable\x20after\x20Service\x20publish\x20(R-A-10)'],'recommended_templates':['T-A-02']},{'id':'allocation_merchant_full_payment','name':'Merchant\x20full\x20payment\x20(single\x20recipient,\x20100%)','trigger_source':'service_order_allocators','distribution_strategy':'pure_rate','coin_type_note':'Simplest\x20configuration\x20—\x20single\x20Treasury\x20or\x20personal\x20address','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'single_relaxed','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x201\x20Rate\x20sharing\x20=\x2010000','Guard\x20only\x20verifies\x20order\x20status\x20(no\x20complex\x20conditions)','who=Entity\x20can\x20be\x20either\x20Treasury\x20or\x20personal\x20wallet'],'dependencies':['Service','Guard','Order','Payment'],'key_constraints':['Simplest\x20allocation\x20configuration','No\x20multi-party\x20coordination\x20required'],'recommended_templates':['T-A-01']},{'id':'allocation_refund_first_surplus_to_merchant','name':'Refund\x20first\x20+\x20surplus\x20to\x20merchant\x20(Amount\x20+\x20Surplus\x20hybrid)','trigger_source':'service_order_allocators','distribution_strategy':'amount_plus_surplus','coin_type_note':'Refund\x20amount\x20must\x20match\x20Coin<T>\x20precision','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Amount','Surplus'],'guard_requirement':'required','non_zero_threshold':!![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x202\x20sharing\x20items','sharing[0]:\x20Amount=refund_value,\x20who=Entity(customer_address)','sharing[1]:\x20Surplus,\x20who=Entity(merchant_treasury)','fix\x20=\x20refund_value\x20(cached\x20Amount\x20sum)','threshold\x20=\x20refund_value\x20(ensure\x20sufficient\x20balance\x20for\x20Amount)'],'dependencies':['Service','Treasury','Guard','Order','Payment'],'key_constraints':['F-A-04:\x20at\x20most\x201\x20Surplus\x20per\x20Allocator','F-A-07:\x20fix\x20>=\x20threshold\x20(Amount\x20sum\x20must\x20cover\x20threshold)','fix\x20must\x20precisely\x20match\x20the\x20refund\x20amount'],'recommended_templates':['T-A-03']},{'id':'allocation_treasury_personal_alternatives','name':'Treasury\x20+\x20Personal\x20alternative\x20strategies\x20(caller-specified\x20guard)','trigger_source':'service_order_allocators','distribution_strategy':'first_match_alternatives','coin_type_note':'Both\x20target\x20addresses\x20must\x20accept\x20the\x20same\x20Coin<T>','typical_allocator_count':0x2,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'multiple_unique','non_zero_threshold':![],'uses_max':![],'common_patterns':['2\x20Allocators,\x20each\x20with\x201\x20Rate=10000\x20sharing','Allocator[0]:\x20guard=guard_treasury,\x20who=Entity(treasury_address)','Allocator[1]:\x20guard=guard_personal,\x20who=Entity(personal_address)','Two\x20Guard\x20objects\x20must\x20be\x20different\x20addresses\x20(R-A-11)','caller-specified\x20guard:\x20caller\x20selects\x20Treasury\x20or\x20Personal\x20path\x20via\x20alloc_by_guard;\x20the\x20Passport\x20hard-verifies\x20the\x20selected\x20Guard\x20(failure\x20aborts\x20with\x20E_VERIFY_FAILED;\x20caller\x20must\x20switch\x20guard\x20and\x20retry)'],'dependencies':['Service','Treasury','Guard','Order','Payment'],'key_constraints':['F-A-14:\x20allocators[].guard\x20must\x20be\x20unique','Treasury\x20Permission\x20should\x20match\x20Service\x20Permission\x20(R-A-12)','Guard\x20A\x20and\x20Guard\x20B\x20may\x20share\x20root/table\x20but\x20must\x20differ\x20in\x20description'],'recommended_templates':['T-A-04']},{'id':'allocation_tiered_by_order_amount','name':'Tiered\x20split\x20by\x20order\x20amount\x20(multi-Allocator\x20amount-threshold\x20switch)','trigger_source':'service_order_allocators','distribution_strategy':'tiered_by_amount','coin_type_note':'Amount\x20threshold\x20uses\x20Coin<T>\x20smallest\x20unit\x20(e.g.\x20MIST\x20for\x20WOW)','typical_allocator_count':0x2,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'multiple_unique','non_zero_threshold':![],'uses_max':![],'common_patterns':['2\x20Allocators\x20triggered\x20by\x20mutually\x20exclusive\x20Guard\x20conditions','Allocator[0]:\x20guard\x20verifies\x20order.amount\x20<\x20threshold,\x20Rate=10000\x20to\x20merchant','Allocator[1]:\x20guard\x20verifies\x20order.amount\x20>=\x20threshold,\x20Rate=8000/2000\x20split','caller-specified\x20guard:\x20caller\x20selects\x20the\x20matching\x20Allocator\x20based\x20on\x20order\x20amount;\x20allocator\x20order\x20is\x20irrelevant','Guard\x20queries\x20order.amount\x20(query\x201561)'],'dependencies':['Service','Treasury','Guard','Order','Payment'],'key_constraints':['Guard\x20conditions\x20must\x20be\x20mutually\x20exclusive\x20(R-A-4-02\x20design\x20clarity)','Caller\x20must\x20select\x20correct\x20guard\x20based\x20on\x20order.amount\x20(no\x20auto-fallback)'],'recommended_templates':['T-A-05']},{'id':'allocation_dynamic_recipient','name':'Multi-role\x20split\x20with\x20dynamic\x20recipient\x20(GuardIdentifier)','trigger_source':'service_order_allocators','distribution_strategy':'dynamic_recipient','coin_type_note':'Passport\x20table\x20must\x20contain\x20address-typed\x20entry\x20at\x20the\x20referenced\x20identifier','typical_allocator_count':0x1,'sharing_who_types':['Entity','GuardIdentifier'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x203\x20Rate\x20sharing\x20items','sharing[0]:\x20Rate=8000,\x20who=Entity(merchant_treasury)','sharing[1]:\x20Rate=1000,\x20who=Entity(platform_treasury)','sharing[2]:\x20Rate=1000,\x20who=GuardIdentifier(0)\x20—\x20resolves\x20from\x20Passport\x20table','Customer\x20submits\x20Passport\x20with\x20referrer\x20address\x20at\x20identifier=0'],'dependencies':['Service','Treasury','Guard','Passport','Order','Payment'],'key_constraints':['F-A-13:\x20Passport\x20table[identifier]\x20must\x20be\x20address\x20type\x20(else\x20ERECIPIENT_IDENTIFIER_NOT_ADDRESS)','Guard\x20must\x20verify\x20Passport\x20completeness','Customer\x20order\x20must\x20include\x20Passport\x20with\x20referrer\x20address'],'recommended_templates':['T-A-06']},{'id':'allocation_arbitration_fees','name':'Arbitration\x20fees\x20split\x20(arbitrator\x20/\x20platform)','trigger_source':'arbitration_fees','distribution_strategy':'pure_rate','coin_type_note':'Coin<T>\x20must\x20match\x20Arbitration\x27s\x20fee\x20Coin\x20type','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Triggered\x20by\x20the\x20Arbitration\x20fee-allocation\x20operation\x20(permission\x20365),\x20direct\x20or\x20Passport\x20path','Single\x20Allocator,\x202\x20Rate\x20sharing\x20items:\x208000\x20arbitrator\x20/\x202000\x20platform','payment_info\x20reuses\x20Arbitration\x27s\x20payment_info','Caller\x20must\x20hold\x20ARBITRATION_FEES_ALLOC=365\x20permission'],'dependencies':['Arbitration','Treasury','Guard','Payment'],'key_constraints':['Independent\x20from\x20Service-order\x20Allocation','Requires\x20ARBITRATION_FEES_ALLOC=365\x20permission'],'recommended_templates':['T-A-08']},{'id':'allocation_refund_to_order','name':'Refund\x20Allocator\x20(100%\x20to\x20Order\x20object)','trigger_source':'service_order_allocators','distribution_strategy':'refund_to_order','coin_type_note':'who=Entity\x20must\x20be\x20the\x20Order\x20object\x20address\x20(NOT\x20a\x20personal\x20wallet)','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x201\x20Rate=10000\x20sharing','who=Entity(order_address)\x20—\x20funds\x20flow\x20back\x20to\x20Order,\x20not\x20personal\x20wallet','Guard\x20verifies\x20customer\x20refund\x20request\x20and\x20eligibility','Customer-side\x20risk\x20assessment\x20adds\x208-point\x20weight\x20(onchain_topology\x20graph\x20evaluation)'],'dependencies':['Service','Guard','Order','Payment'],'key_constraints':['who=Entity\x20MUST\x20be\x20Order\x20object\x20address\x20(not\x20personal\x20address)','Customer\x20due-diligence\x20rewards\x20this\x20configuration\x20(8-point\x20weight)','Refund\x20funds\x20return\x20to\x20Order\x20for\x20downstream\x20handling'],'recommended_templates':['T-A-07']},{'id':'allocation_max_capped_retain','name':'Max-capped\x20allocation\x20(retain\x20residual\x20balance)','trigger_source':'service_order_allocators','distribution_strategy':'max_capped','coin_type_note':'max\x20field\x20uses\x20Coin<T>\x20smallest\x20unit','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Amount','Rate'],'guard_requirement':'required','non_zero_threshold':!![],'uses_max':!![],'common_patterns':['Single\x20Allocator\x20with\x20max\x20field\x20set','max\x20triple\x20role:\x20Amount\x20cap\x20+\x20NET\x20Rate\x20base\x20+\x20Surplus\x20cap','Amount\x20sharing\x20consumes\x20fix;\x20NET\x20Rate\x20sharing\x20uses\x20(max\x20-\x20fix)\x20as\x20base\x20(RateGross\x20uses\x20max\x20itself)','Residual\x20balance\x20remains\x20in\x20Allocation\x20for\x20subsequent\x20alloc()\x20calls'],'dependencies':['Service','Treasury','Guard','Order','Payment'],'key_constraints':['F-A-08:\x20Amount\x20sum\x20<=\x20max\x20(EAMOUNT_EXCEEDS_MAX)','NET\x20Rate:\x20max\x20-\x20fix\x20becomes\x20the\x20base\x20(NOT\x20balance\x20-\x20fix);\x20RateGross:\x20the\x20base\x20is\x20max\x20(fix\x20not\x20removed)','Residual\x20balance\x20may\x20be\x20claimed\x20by\x20re-triggering\x20alloc()'],'recommended_templates':[]},{'id':'allocation_multi_node_trigger','name':'Multi-Machine-node\x20triggered\x20allocation\x20(Complete\x20/\x20Refund\x20/\x20Lost)','trigger_source':'service_order_allocators','distribution_strategy':'multi_node_trigger','coin_type_note':'All\x20Allocators\x20share\x20the\x20same\x20Allocation\x27s\x20Coin<T>','typical_allocator_count':0x3,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'multiple_unique','non_zero_threshold':![],'uses_max':![],'common_patterns':['3\x20Allocators\x20mapped\x20to\x20Machine\x20terminal\x20nodes\x20(Complete/Refund/Lost)','Each\x20Allocator\x27s\x20Guard\x20verifies\x20progress.current_node\x20==\x20<node_name>','Mutually\x20exclusive\x20Guard\x20conditions\x20(only\x20one\x20terminal\x20node\x20active\x20at\x20a\x20time)','Machine.required_allocators[]\x20describes\x20each\x20trigger_node\x20mapping'],'dependencies':['Service','Treasury','Guard','Order','Progress','Machine','Payment'],'key_constraints':['Guard\x20conditions\x20must\x20be\x20mutually\x20exclusive','Sequence-sensitive:\x20business-flow\x20order','Machine.required_allocators[trigger_node]\x20must\x20map\x20to\x20Allocator\x20indices'],'recommended_templates':[]},{'id':'allocation_standalone_periodic_split','name':'Standalone\x20periodic\x20split\x20(investment\x20dividends\x20/\x20shared\x20income)','trigger_source':'standalone','distribution_strategy':'periodic_split','coin_type_note':'Coin<T>\x20must\x20match\x20the\x20asset\x20being\x20distributed\x20(e.g.\x20profit\x20token)','typical_allocator_count':0x1,'sharing_who_types':['Entity'],'modes_used':['Rate'],'guard_requirement':'required','non_zero_threshold':![],'uses_max':![],'common_patterns':['Single\x20Allocator,\x20N\x20Rate\x20sharing\x20items,\x20sum(rates)\x20===\x2010000','Each\x20sharing.who=Entity\x20points\x20to\x20a\x20beneficiary\x20wallet\x20(not\x20Treasury)','Guard\x20verifies\x20time-based\x20trigger\x20(e.g.\x20context(Clock).timestamp\x20>=\x20next_release)\x20or\x20signer\x20authorization','User\x20calls\x20receive()\x20to\x20deposit\x20funds,\x20then\x20alloc()\x20to\x20trigger\x20distribution','No\x20Service/Order/Progress/Machine\x20context\x20required'],'dependencies':['Treasury','Guard','Payment'],'key_constraints':['F-A-05:\x20sum(rates)\x20===\x2010000\x20(pure\x20Rate\x20mode)','R-A-3-04:\x20standalone\x20mode\x20has\x20no\x20Service-layer\x20access\x20control\x20—\x20Guard\x20+\x20Passport\x20MUST\x20be\x20sufficient','Caller\x20is\x20fully\x20responsible\x20for\x20receive\x20→\x20alloc\x20lifecycle\x20(no\x20auto-trigger)','Guard\x20should\x20bind\x20Signer\x20to\x20prevent\x20unauthorized\x20alloc()\x20calls'],'recommended_templates':['T-A-09']},{'id':'allocation_standalone_vesting','name':'Standalone\x20vesting\x20release\x20(time-locked\x20multi-stage\x20unlock)','trigger_source':'standalone','distribution_strategy':'time_locked_vesting','coin_type_note':'Coin<T>\x20must\x20match\x20the\x20vested\x20asset\x20(e.g.\x20locked\x20team\x20tokens)','typical_allocator_count':0x3,'sharing_who_types':['Entity'],'modes_used':['Amount','Rate','Surplus'],'guard_requirement':'multiple_unique','non_zero_threshold':!![],'uses_max':!![],'common_patterns':['N\x20Allocators,\x20each\x20mapped\x20to\x20a\x20vesting\x20stage\x20(e.g.\x2025%\x20at\x20month\x2012,\x2025%\x20at\x20month\x2024,\x2050%\x20surplus\x20at\x20month\x2036)','Each\x20Allocator\x27s\x20Guard\x20verifies\x20context(Clock).timestamp\x20>=\x20stage_unlock_time','Amount\x20sharing\x20per\x20stage\x20with\x20max\x20field\x20capping\x20the\x20cumulative\x20release','Final\x20Allocator\x20uses\x20Surplus\x20to\x20drain\x20remaining\x20balance\x20after\x20last\x20vesting\x20stage','Mutually\x20exclusive\x20Guard\x20conditions\x20(only\x20one\x20stage\x20active\x20at\x20a\x20time,\x20based\x20on\x20timestamp)','User\x20calls\x20receive()\x20to\x20deposit\x20locked\x20tokens,\x20then\x20alloc()\x20at\x20each\x20vesting\x20milestone'],'dependencies':['Treasury','Guard','Passport','Payment'],'key_constraints':['F-A-04:\x20at\x20most\x201\x20Surplus\x20per\x20Allocator\x20(final\x20stage\x20uses\x20Surplus\x20to\x20drain\x20remainder)','F-A-08:\x20Amount\x20sum\x20<=\x20max\x20(EAMOUNT_EXCEEDS_MAX)','R-A-3-04:\x20standalone\x20mode\x20has\x20no\x20Service-layer\x20access\x20control\x20—\x20Guard\x20time-lock\x20MUST\x20be\x20enforced','Guard\x20conditions\x20must\x20be\x20mutually\x20exclusive\x20by\x20timestamp\x20(R-A-4-02)','Caller\x20must\x20wait\x20for\x20time-lock\x20expiry\x20before\x20alloc()\x20succeeds;\x20otherwise\x20alloc()\x20silently\x20returns\x20(R-A-4-01)'],'recommended_templates':['T-A-10']}];export const ALLOCATION_LEDGER_VERSION='1.0.0';export function getScenesByTriggerSource(a){return ALLOCATION_SCENES['filter'](b=>b['trigger_source']===a);}export function getScenesByMode(a){return ALLOCATION_SCENES['filter'](b=>b['modes_used']['includes'](a));}export function getScenesByStrategy(a){return ALLOCATION_SCENES['filter'](b=>b['distribution_strategy']===a);}export function findSceneById(a){return ALLOCATION_SCENES['find'](b=>b['id']===a);}export function inferSceneFromIntent(a){const b=a['toLowerCase']();if(b['includes']('arbitration')||b['includes']('fees\x20alloc'))return findSceneById('allocation_arbitration_fees');if(b['includes']('standalone')||b['includes']('periodic\x20split')||b['includes']('investment\x20dividend')||b['includes']('shared\x20income')||b['includes']('dividend'))return findSceneById('allocation_standalone_periodic_split');if(b['includes']('vesting')||b['includes']('time-lock')||b['includes']('unlock\x20period')||b['includes']('locked\x20release')||b['includes']('token\x20unlock'))return findSceneById('allocation_standalone_vesting');if(b['includes']('refund')){if(b['includes']('order')||b['includes']('100%'))return findSceneById('allocation_refund_to_order');if(b['includes']('surplus')||b['includes']('merchant'))return findSceneById('allocation_refund_first_surplus_to_merchant');}if(b['includes']('alternative')||b['includes']('priority')||b['includes']('treasury')&&b['includes']('personal'))return findSceneById('allocation_treasury_personal_alternatives');if(b['includes']('tiered')||b['includes']('threshold\x20switch'))return findSceneById('allocation_tiered_by_order_amount');if(b['includes']('dynamic\x20recipient')||b['includes']('referrer')||b['includes']('guardidentifier'))return findSceneById('allocation_dynamic_recipient');if(b['includes']('retain')||b['includes']('max'))return findSceneById('allocation_max_capped_retain');if(b['includes']('multi-node')||b['includes']('multi\x20machine')||b['includes']('multi_node'))return findSceneById('allocation_multi_node_trigger');const c=(a['match'](/%/g)||[])['length'];if(c<=0x1)return findSceneById('allocation_merchant_full_payment');if(c>=0x2)return findSceneById('allocation_standard_three_way_split');return undefined;}export function getAllScenes(){return[...ALLOCATION_SCENES];}export function getScenesCount(){return ALLOCATION_SCENES['length'];}export function allocationModeToNumber(a){switch(a){case'Amount':return ALLOCATION_MODE_AMOUNT;case'Rate':return ALLOCATION_MODE_RATE;case'Surplus':return ALLOCATION_MODE_SURPLUS;case'RateGross':return ALLOCATION_MODE_RATE_GROSS;case'Formula':return ALLOCATION_MODE_FORMULA;}}export function allocationModeFromNumber(a){switch(a){case ALLOCATION_MODE_AMOUNT:return'Amount';case ALLOCATION_MODE_RATE:return'Rate';case ALLOCATION_MODE_SURPLUS:return'Surplus';case ALLOCATION_MODE_RATE_GROSS:return'RateGross';case ALLOCATION_MODE_FORMULA:return'Formula';default:throw new Error('Invalid\x20AllocationMode\x20number:\x20'+a);}}export function getRecipientType(a){if('GuardIdentifier'in a)return'GuardIdentifier';if('Entity'in a)return'Entity';return'Signer';}export function isSignerRecipient(a){return'Signer'in a;}export function isEntityRecipient(a){return'Entity'in a;}export function isGuardIdentifierRecipient(a){return'GuardIdentifier'in a;}export function getErrorName(a){for(const [b,d]of Object['entries'](ALLOCATION_ERROR_CODES)){if(d===a)return b;}return undefined;}export function getErrorDescription(a){const b={0x1:'GuardIdentifier\x20resolved\x20value\x20is\x20not\x20an\x20address\x20type',0x2:'Allocator\x20count\x20exceeds\x20MAX_ALLOCATOR_COUNT\x20(100)',0x3:'No\x20Allocator\x20in\x20the\x20allocators\x20vector',0x4:'Pure\x20Rate\x20mode\x20sum\x20!=\x2010000\x20(no\x20Surplus\x20to\x20absorb\x20remainder)',0x5:'Multiple\x20Surplus\x20sharing\x20in\x20a\x20single\x20Allocator',0x6:'Rate\x20+\x20Surplus\x20sum\x20>\x2010000',0x7:'balance\x20<\x20threshold\x20(insufficient\x20balance\x20to\x20trigger\x20alloc)',0x8:'allocators.allocators\x20is\x20empty',0x9:'payment_info\x20is\x20None\x20when\x20alloc()\x20is\x20called',0xa:'sharing\x20count\x20exceeds\x20MAX_SHARING_COUNT\x20(100)',0xb:'sharing\x20mode\x20is\x20not\x200\x20(Amount)\x20/\x201\x20(Rate)\x20/\x202\x20(Surplus)\x20/\x203\x20(RateGross)\x20/\x204\x20(Formula)',0xc:'Amount\x20sum\x20(fix)\x20<\x20threshold',0xd:'Amount\x20sum\x20(fix)\x20>\x20max',0xe:'distribution\x20computes\x20to\x20zero\x20while\x20the\x20pool\x20still\x20holds\x20funds\x20(or\x20balance\x20is\x200)',0xf:'GuardIdentifier\x20recipient\x20address\x20!=\x20payment_info.for_object\x20anchor\x20(abort\x20fires\x20only\x20when\x20a\x20for_object\x20binding\x20is\x20declared)',0x10:'once-trigger\x20key\x20already\x20consumed\x20—\x20the\x20guard\x20submitted\x20the\x20reserved\x20identifier\x20255\x20and\x20its\x20raw\x20submission\x20bytes\x20were\x20recorded\x20as\x20a\x20(guard,\x20allocator\x20index,\x20raw\x20bytes)\x20dynamic-field\x20key\x20on\x20this\x20Allocation',0x11:'mixed\x20rate\x20bases\x20—\x20one\x20allocator\x20carries\x20both\x20NET\x20Rate\x20and\x20RateGross\x20entries\x20while\x20a\x20fixed\x20Amount\x20total\x20is\x20present\x20(rejected\x20only\x20when\x20fix\x20>\x200;\x20with\x20fix\x20==\x200\x20the\x20two\x20bases\x20coincide\x20and\x20mixing\x20is\x20allowed)',0x12:'RateGross\x20+\x20fixed\x20Amount\x20without\x20a\x20max\x20cap\x20—\x20plan\x20payability\x20unprovable\x20at\x20declaration\x20time',0x13:'guard\x20not\x20bound\x20to\x20any\x20allocator\x20on\x20this\x20Allocation\x20(was\x20a\x20silent\x20no-op\x20success\x20before)',0x14:'allocator\x20append\x20rejected:\x20new\x20Allocators\x20is\x20not\x20a\x20pure\x20extension\x20(prefix/threshold\x20changed)',0x15:'once-for-object\x20slot\x20(identifier\x20254)\x20armed\x20but\x20payment_info\x20declares\x20no\x20for_object\x20binding',0x18:'FormulaSpec\x20rejected:\x20selector\x20is\x20not\x20COUNT(0)/SUM(1)/SUM_BOUND(2),\x20allocator/slot\x20index\x20out\x20of\x20range,\x20or\x20the\x20target\x20sharing\x20slot\x20is\x20not\x20a\x20Formula\x20(mode\x204)\x20leg'};return b[a];}
|
|
@@ -21,6 +21,7 @@ export interface RailGuardInput {
|
|
|
21
21
|
track: "settlement" | "refund";
|
|
22
22
|
table: unknown[];
|
|
23
23
|
recoverTwin?: boolean;
|
|
24
|
+
recipient?: string;
|
|
24
25
|
root?: unknown;
|
|
25
26
|
}
|
|
26
27
|
export interface RailNodeInput {
|
|
@@ -28,7 +29,7 @@ export interface RailNodeInput {
|
|
|
28
29
|
semanticRole?: string;
|
|
29
30
|
fromNodes?: string[];
|
|
30
31
|
}
|
|
31
|
-
export type RailFindingCode = "RAIL_TERMINAL_UNCOVERED" | "RAIL_AWARD_EXIT_MISSING" | "RAIL_CLAIMED_BY_LEG" | "RAIL_DEAD_LITERAL" | "RAIL_NO_CALLER_IDENTITY_BOUND" | "RAIL_NO_CALLER_IDENTITY" | "REFUND_RAIL_REPLAY_DISCLOSURE";
|
|
32
|
+
export type RailFindingCode = "RAIL_TERMINAL_UNCOVERED" | "RAIL_AWARD_EXIT_MISSING" | "RAIL_CLAIMED_BY_LEG" | "RAIL_DEAD_LITERAL" | "RAIL_NO_CALLER_IDENTITY_BOUND" | "RAIL_NO_CALLER_IDENTITY" | "REFUND_RAIL_REPLAY_DISCLOSURE" | "REFUND_GATE_POLARITY_MIX" | "RAIL_NODE_SET_OVERLAP" | "RECOVER_COVERS_REFUND_TERMINAL";
|
|
32
33
|
export type RailFindingLevel = "critical" | "info";
|
|
33
34
|
export interface RailFinding {
|
|
34
35
|
code: RailFindingCode;
|
|
@@ -36,8 +37,23 @@ export interface RailFinding {
|
|
|
36
37
|
detail: string;
|
|
37
38
|
railKey?: string;
|
|
38
39
|
}
|
|
40
|
+
type Value = {
|
|
41
|
+
known: true;
|
|
42
|
+
value: unknown;
|
|
43
|
+
} | {
|
|
44
|
+
known: false;
|
|
45
|
+
};
|
|
46
|
+
export declare function resolveValue(table: GuardTableRow[], side: GuardTreeNode | undefined): Value;
|
|
47
|
+
export declare function railNodePins(tree: unknown, table: GuardTableRow[]): {
|
|
48
|
+
pos: Set<string>;
|
|
49
|
+
neg: Set<string>;
|
|
50
|
+
};
|
|
39
51
|
export declare function hasCallerIdentityLeg(tree: unknown): boolean;
|
|
52
|
+
export declare function refundGatePolarityMix(root: unknown): {
|
|
53
|
+
arms: string;
|
|
54
|
+
} | undefined;
|
|
40
55
|
export declare function verifyAllocatorRails(guards: RailGuardInput[], nodes: RailNodeInput[], opts?: {
|
|
41
56
|
arbitrationBound?: boolean;
|
|
42
57
|
declaredKeys?: ReadonlySet<string>;
|
|
43
58
|
}): RailFinding[];
|
|
59
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ONCE_SLOT_BYTES,TASK_BINDING_SLOT}from'./onchain-constants.js';const SYM_NODE='progress.current',SYM_CLAIMED='order.claimed_by\x20some';function slotValue(a,b){if(b===undefined)return{'value':undefined,'isSubmission':![]};const c=a['find'](d=>d['identifier']===b);if(!c)return{'value':undefined,'isSubmission':![]};return{'value':c['value'],'isSubmission':c['b_submission']===!![]};}function classifyQueryLhs(a){if(a===SYM_NODE)return{'kind':'node'};if(a===SYM_CLAIMED)return{'kind':'claimed'};return{'kind':'unknown'};}function resolveValue(a,b){if(!b||b['type']!=='identifier')return{'known':![]};const c=slotValue(a,b['identifier']);if(c['isSubmission'])return{'known':![]};if(c['value']===undefined)return{'known':![]};return{'known':!![],'value':c['value']};}function evaluate(a,b,d){if(!b||typeof b['type']!=='string')return undefined;switch(b['type']){case'logic_and':{const e=Array['isArray'](b['nodes'])?b['nodes']:[];let f=![];for(const g of e){const h=evaluate(a,g,d);if(h===![])return![];if(h===undefined)f=!![];}return f?undefined:!![];}case'logic_or':{const i=Array['isArray'](b['nodes'])?b['nodes']:[];let j=![];for(const k of i){const l=evaluate(a,k,d);if(l===!![])return!![];if(l===undefined)j=!![];}return j?undefined:![];}case'logic_not':{const m=evaluate(a,b['node'],d);if(m===undefined)return undefined;return!m;}case'logic_equal':{const n=Array['isArray'](b['nodes'])?b['nodes']:[];if(n['length']<0x2)return undefined;const o=classifyQueryLhs(n[0x0]?.['query']),p=resolveValue(a,n[0x1]),q=o['kind']==='unknown'?classifyQueryLhs(n[0x1]?.['query']):o,r=!p['known']&&n[0x1]?.['query']!==undefined?resolveValue(a,n[0x0]):p;if(q['kind']==='node'){if(!r['known']||typeof r['value']!=='string')return undefined;return d['node']===r['value'];}if(q['kind']==='claimed'){if(!r['known']||typeof r['value']!=='boolean')return undefined;return d['claimed']===r['value'];}return undefined;}default:return undefined;}}function satisfiable(a,b,c){return evaluate(a,b,c)!==![];}function findDeadLiterals(a,b,c,d){if(!a||typeof a['type']!=='string')return;if(a['type']==='logic_and'&&Array['isArray'](a['nodes'])){const e=new Map();for(const f of a['nodes']){const g=resolvableEquality(f,b);if(g)e['set'](g['symbol'],g['value']);}for(const h of a['nodes']){const i=resolvableEquality(h,b);if(i){const k=e['get'](i['symbol']);if(k!==undefined&&k!==i['value']){d['push']({'code':'RAIL_DEAD_LITERAL','level':'critical','detail':deadLiteralDetail(c,i['symbol'],k,i['value'])});return;}continue;}const j=findClash(h,b,e);if(j){d['push']({'code':'RAIL_DEAD_LITERAL','level':'critical','detail':deadLiteralDetail(c,j['symbol'],j['pinned'],j['value'])});return;}}for(const l of a['nodes'])findDeadLiterals(l,b,c,d);return;}if(Array['isArray'](a['nodes'])){for(const m of a['nodes'])findDeadLiterals(m,b,c,d);}if(a['node'])findDeadLiterals(a['node'],b,c,d);}function resolvableEquality(c,d){if(!c||c['type']!=='logic_equal'||!Array['isArray'](c['nodes']))return undefined;for(const [e,f]of[[c['nodes'][0x0],c['nodes'][0x1]],[c['nodes'][0x1],c['nodes'][0x0]]]){if(!e||typeof e['query']!=='string')continue;const g=classifyQueryLhs(e['query']);if(g['kind']==='unknown')continue;const h=resolveValue(d,f);if(!h['known'])continue;return{'symbol':g['kind']==='node'?SYM_NODE:SYM_CLAIMED,'value':h['value']};}return undefined;}function findClash(a,b,c){if(!a||typeof a['type']!=='string')return undefined;if(a['type']==='logic_not')return undefined;const d=resolvableEquality(a,b);if(d){const e=c['get'](d['symbol']);if(e!==undefined&&e!==d['value'])return{'symbol':d['symbol'],'pinned':e,'value':d['value']};return undefined;}if(Array['isArray'](a['nodes']))for(const f of a['nodes']){const g=findClash(f,b,c);if(g)return g;}if(a['node'])return findClash(a['node'],b,c);return undefined;}function deadLiteralDetail(a,b,c,d){return'allocator\x20guard\x20\x27'+a+'\x27:\x20one\x20conjunction\x20scope\x20carries\x20'+b+'\x20'+('==\x20'+JSON['stringify'](c)+'\x20and\x20ALSO\x20'+b+'\x20==\x20'+JSON['stringify'](d)+'\x20—\x20the\x20second\x20')+'literal\x20contradicts\x20the\x20first\x20and\x20is\x20a\x20DEAD\x20literal\x20(azx7-mn-261014\x20CR-azx7-01:\x20a\x20pinned\x20'+'node\x20equality\x20made\x20the\x20sibling\x20closed_cancel/item_lost\x20legs\x20unreachable,\x20stranding\x20the\x20'+'escrow\x20at\x20every\x20other\x20terminal).\x20Hoist\x20the\x20node\x20predicate\x20to\x20ONE\x20top-level\x20n-ary\x20logic_or\x20'+'instead\x20of\x20AND-prepending\x20a\x20single-node\x20gate.';}export function hasCallerIdentityLeg(a){let b=![];const c=d=>{if(b||d===null||typeof d!=='object')return;if(Array['isArray'](d)){for(const f of d)c(f);return;}const e=d;if(e['type']==='context'&&e['context']==='Signer'){b=!![];return;}if(typeof e['query']==='string'){const g=e['query']['toLowerCase']();if(g['startsWith']('context')||g['includes']('signer'))b=!![];else{if(/order\.agent|permission\.(owner|admin)|named.?operator/['test'](g))b=!![];}}if(!b){for(const h of Object['keys'](e))c(e[h]);}};return c(a),b;}function claimedAxisSensitive(a,b){const c=a['table'];return satisfiable(c,a['root'],{'node':b,'claimed':!![]})!==satisfiable(c,a['root'],{'node':b,'claimed':![]});}export function verifyAllocatorRails(a,b,c){const d=[];if(a['length']===0x0)return d;{const j=c?.['declaredKeys'],k=[],l=[],m=[];for(const n of a){if(n['root']===undefined||hasCallerIdentityLeg(n['root']))continue;const o=n['track']==='settlement'||n['track']==='refund'||n['recoverTwin']===!![];if(!o){m['push'](n['key']);continue;}if(j?.['has'](n['key']))l['push'](n);else k['push'](n);}for(const q of k){d['push']({'code':'RAIL_NO_CALLER_IDENTITY_BOUND','level':'critical','railKey':q['key'],'detail':'allocator\x20rail\x20\x27'+q['key']+'\x27\x20('+q['track']+'\x20track'+((q['recoverTwin']===!![]?',\x20merchant-recovery\x20twin':'')+')\x20carries\x20NO\x20caller-identity\x20leg\x20')+'(no\x20context(Signer)\x20comparison,\x20no\x20order.agent\x20has\x20/\x20permission.*\x20/\x20named-operator\x20query\x20'+'resolving\x20the\x20caller)\x20—\x20ANY\x20address\x20whose\x20tx\x20reaches\x20the\x20allocator\x20can\x20trigger\x20this\x20route\x20'+'(ks11:\x20an\x20unexpected\x20account\x20swept\x20a\x20merchant-recovery\x20payout\x20and\x20doubled\x20the\x20allocation\x20draw).\x20'+'Money\x20rails\x20are\x20not\x20forwards\x20—\x20the\x20chain\x20injects\x20no\x20caller\x20rail\x20on\x20them,\x20so\x20the\x20guard\x20IS\x20the\x20'+'only\x20gate.\x20Bind\x20the\x20caller\x20per\x20pattern.identity_check_order_holder\x20(order.owner/agent,\x20host\x20'+'machine_forward)\x20or\x20pattern.repository_write_authorization\x20(permission-resolved,\x20host\x20'+'service_allocator_guard);\x20see\x20guard-host-context.ts\x20for\x20the\x20per-host\x20signer\x20semantics\x20—\x20the\x20'+'caller\x20of\x20an\x20allocator\x20gate\x20is\x20the\x20SETTLEMENT\x20TRIGGERER,\x20not\x20the\x20order\x20owner,\x20so\x20a\x20'+'forward-edge\x20identity\x20guard\x20pasted\x20here\x20checks\x20the\x20WRONG\x20subject.\x20A\x20deliberately\x20legless\x20'+'rail\x20(the\x20merchant-recovery\x20sweep\x20face:\x20payee\x20bound\x20by\x20the\x20paired\x20allocator\x20row,\x20'+'permissionless\x20keeper\x20firing)\x20must\x20carry\x20an\x20explicit\x20declare\x20—\x20guard_resolutions\x20'+'{kind:\x27declare\x27,\x20reason}\x20or\x20the\x20template\x27s\x20identity_leg_exempt\x20—\x20and\x20then\x20ships\x20with\x20a\x20'+'permanent\x20non-blocking\x20disclosure\x20instead\x20of\x20this\x20block.'});}for(const r of l){d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','railKey':r['key'],'detail':'allocator\x20rail\x20\x27'+r['key']+'\x27\x20carries\x20no\x20caller-identity\x20leg\x20and\x20ships\x20under\x20an\x20explicit\x20'+'declare\x20exemption\x20({kind:\x27declare\x27}\x20/\x20identity_leg_exempt):\x20the\x20legless\x20shape\x20is\x20the\x20'+'sanctioned\x20merchant-recovery\x20face\x20—\x20the\x20payee\x20is\x20bound\x20by\x20the\x20paired\x20allocator\x20row,\x20never\x20'+'by\x20the\x20caller.\x20This\x20receipt\x20rides\x20the\x20plan\x20notes\x20and\x20is\x20re-surfaced\x20at\x20publish;\x20it\x20never\x20blocks.'});}m['length']>0x0&&d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','detail':'allocator\x20rail(s)\x20['+m['join'](',\x20')+']\x20carry\x20no\x20caller-identity\x20leg\x20'+'(no\x20context(Signer)\x20comparison,\x20no\x20order.agent\x20has\x20/\x20permission.*\x20/\x20named-operator\x20'+'query\x20resolving\x20the\x20caller)\x20—\x20ANY\x20address\x20whose\x20tx\x20reaches\x20the\x20allocator\x20can\x20'+'trigger\x20this\x20settlement\x20route\x20(sahr:\x20a\x20bystander\x20accelerated\x20another\x20party\x27s\x20'+'payout).\x20LEGITIMATE\x20when\x20the\x20scene\x20verifies\x20identity\x20upstream\x20(verifier_level\x20'+'level3_scene_combined)\x20or\x20the\x20venue\x20is\x20intentionally\x20open-trigger;\x20otherwise\x20bind\x20'+'the\x20caller\x20per\x20pattern.identity_check_order_holder\x20(order.owner/agent,\x20host\x20'+'machine_forward)\x20or\x20pattern.repository_write_authorization\x20(permission-resolved,\x20'+'host\x20service_allocator_guard).\x20See\x20guard-host-context.ts\x20for\x20the\x20per-host\x20signer\x20'+'semantics\x20—\x20the\x20caller\x20of\x20an\x20allocator\x20gate\x20is\x20the\x20SETTLEMENT\x20TRIGGERER,\x20not\x20the\x20'+'order\x20owner,\x20so\x20a\x20forward-edge\x20identity\x20guard\x20pasted\x20here\x20checks\x20the\x20WRONG\x20subject.'});}for(const u of a){if(u['track']!=='refund'||u['root']===undefined)continue;const v=u['table']['some'](w=>w['identifier']===TASK_BINDING_SLOT||w['identifier']===ONCE_SLOT_BYTES);if(v)continue;d['push']({'code':'REFUND_RAIL_REPLAY_DISCLOSURE','level':'info','railKey':u['key'],'detail':'refund\x20rail\x20\x27'+u['key']+'\x27\x20carries\x20no\x20once-key\x20row\x20(no\x20per-order\x20254\x20anchor,\x20no\x20per-period\x20255\x20key):\x20'+'the\x20refund\x20leg\x20stays\x20re-triggerable\x20on\x20its\x20node\x20state\x20across\x20the\x20order\x27s\x20life.\x20This\x20is\x20the\x20'+'SANCTIONED\x20shape\x20—\x20the\x20once-key\x20injection\x20is\x20deliberately\x20banned\x20on\x20refund\x20tracks\x20(a\x20refund\x20may\x20'+'fire\x20on\x20several\x20terminal\x20legs;\x20a\x20per-order\x20once\x20anchor\x20deadlocks\x20the\x20second\x20leg),\x20so\x20the\x20'+'replay\x20surface\x20is\x20disclosed,\x20not\x20gated.\x20Replay\x20cannot\x20redirect\x20funds:\x20the\x20recipient\x20binding\x20pins\x20'+'every\x20payout\x20to\x20the\x20paying\x20order,\x20and\x20balance\x20exhaustion\x20bounds\x20repetition\x20—\x20a\x20firing\x20aborts\x20on\x20'+'zero/insufficient\x20balance\x20once\x20the\x20pool\x20can\x20no\x20longer\x20fund\x20the\x20group\x20(a\x20Rate\x20group\x20summing\x20to\x20'+'10000\x20empties\x20the\x20pool\x20on\x20the\x20first\x20payout;\x20an\x20Amount-shaped\x20group\x20repeats\x20until\x20the\x20balance\x20'+'runs\x20below\x20the\x20fixed\x20leg).'});}if(b['length']===0x0)return d;const e=b['filter'](w=>w['semanticRole']==='cancelled'||w['semanticRole']==='final'),f=b['map'](w=>({'node':w['name'],'claimed':!![]}));for(const w of a){if(w['root']===undefined)continue;const x=w['table'];findDeadLiterals(w['root'],x,w['key'],d);}for(const y of e){const z=[{'node':y['name'],'claimed':![]}];for(const B of y['fromNodes']??[])z['push']({'node':B,'claimed':![]});const A=a['some'](C=>z['some'](D=>satisfiable(C['table'],C['root'],D)));!A&&d['push']({'code':'RAIL_TERMINAL_UNCOVERED','level':'critical','detail':'terminal\x20node\x20\x27'+y['name']+'\x27\x20(role\x20'+y['semanticRole']+')\x20has\x20NO\x20allocator\x20rail\x20'+'satisfiable\x20on\x20it\x20or\x20its\x20direct\x20predecessors\x20—\x20an\x20order\x20reaching\x20this\x20terminal\x20'+'strands\x20its\x20escrow\x20forever\x20(azx7-mn-261014\x20CR-azx7-01:\x20refund\x20'+'rejected\x20with\x20the\x20allocation\x20EINSUFFICIENT_BALANCE\x20abort\x20at\x20closed_cancel/item_lost;\x20crs-mn-261014\x20F-30:\x20a\x20double-'+'negated\x20claimed_by\x20leg\x20—\x20a\x20banned\x20shape\x20since\x20decision\x2011\x20—\x20bricked\x20the\x20refund\x20at\x20returned).\x20'+'Guards/allocators\x20freeze\x20at\x20publish\x20—\x20fix\x20the\x20rail\x27s\x20NODE-SET\x20before\x20publishing\x20'+'(decision\x2011:\x20exits\x20are\x20node-gated;\x20there\x20is\x20no\x20claimed_by\x20polarity\x20leg\x20to\x20fall\x20back\x20on).'});}const h=a['some'](C=>f['some'](D=>satisfiable(C['table'],C['root'],D)));!h&&d['push']({'code':'RAIL_AWARD_EXIT_MISSING','level':'critical','detail':'no\x20allocator\x20rail\x20is\x20satisfiable\x20on\x20ANY\x20machine\x20node\x20—\x20every\x20order\x20state\x20'+'(awarded\x20or\x20not)\x20strands\x20its\x20escrow\x20(escrow-exit\x20invariant,\x20az-mn-261007).\x20'+'Decision\x2011\x20two-rail\x20independence:\x20exits\x20are\x20NODE-GATED\x20—\x20an\x20awarded\x20order\x20exits\x20'+'through\x20the\x20SAME\x20terminal\x20rails\x20as\x20any\x20other\x20order\x20(its\x20award\x20is\x20a\x20separate\x20'+'commercial\x20indemnity;\x20a\x20claimed_by\x20gate\x20would\x20be\x20the\x20RAIL_CLAIMED_BY_LEG\x20violation,\x20'+'not\x20the\x20cure).\x20Partition\x20the\x20terminals\x20between\x20a\x20refund/settle\x20rail\x20and\x20a\x20'+'merchant-side\x20recovery\x20sweep\x20(tpl_allocator_node_gate_recover,\x20terminal-node-gated).\x20'+'Historical\x20(O11,\x20alg26-tn-261026):\x20a\x20recover\x20rail\x20keyed\x20on\x20the\x20bare\x20claimed_by\x20stamp\x20'+'routed\x20a\x20dismissal\x20to\x20the\x20LOSING\x20party\x20—\x20that\x20polarity\x20shape\x20is\x20banned\x20since\x20decision\x2011.'});const i=a['filter'](C=>C['root']!==undefined);{const C=new Set();for(const D of b){for(const E of i){if(claimedAxisSensitive(E,D['name']))C['add'](E['key']);}}C['size']>0x0&&d['push']({'code':'RAIL_CLAIMED_BY_LEG','level':'critical','detail':'allocator\x20rail(s)\x20['+[...C]['join'](',\x20')+']\x20flip\x20on\x20the\x20order.claimed_by\x20axis\x20—\x20'+'a\x20fund\x20rail\x20READS\x20the\x20arbitration\x20payout\x20stamp\x20(decision\x2011\x20two-rail\x20independence\x20violation;\x20'+'mirrors\x20R-FUND-RAIL-CLAIMED-BY).\x20The\x20fund\x20track\x20completes\x20by\x20ORDER-LEVEL\x20NODE\x20STATE:\x20gate\x20the\x20'+'rail\x20on\x20progress.current\x20node\x20sets\x20(refund/settle\x20faces),\x20partition\x20the\x20terminals\x20with\x20a\x20'+'terminal-node-gated\x20recovery\x20sweep\x20(tpl_allocator_node_gate_recover),\x20and\x20let\x20the\x20arbitrator\x20'+'rule\x20on\x20the\x20order\x27s\x20state\x20and\x20fund\x20destinations\x20—\x20a\x20double\x20collection\x20(settle+indemnity,\x20'+'refund+bounty)\x20is\x20a\x20legal\x20commercial\x20outcome\x20disclosed\x20at\x20the\x20MCP\x20confirmation\x20gate.\x20'+'Historical:\x20the\x20INV-C1\x20polarity\x20pair\x20(refund\x20some==false\x20/\x20recover\x20some==true)\x20was\x20the\x20old\x20'+'cure\x20and\x20the\x20W5-01\x20direction-blind\x20bug\x27s\x20cause\x20—\x20both\x20legs\x20were\x20removed\x20template-wide.'});}return d;}
|
|
1
|
+
import{ONCE_SLOT_BYTES,TASK_BINDING_SLOT}from'./onchain-constants.js';const SYM_NODE='progress.current',SYM_CLAIMED='order.claimed_by\x20some';function slotValue(a,b){if(b===undefined)return{'value':undefined,'isSubmission':![]};const c=a['find'](d=>d['identifier']===b);if(!c)return{'value':undefined,'isSubmission':![]};return{'value':c['value'],'isSubmission':c['b_submission']===!![]};}function classifyQueryLhs(a){if(a===SYM_NODE)return{'kind':'node'};if(a===SYM_CLAIMED)return{'kind':'claimed'};return{'kind':'unknown'};}export function resolveValue(a,b){if(!b||b['type']!=='identifier')return{'known':![]};const c=slotValue(a,b['identifier']);if(c['isSubmission'])return{'known':![]};if(c['value']===undefined)return{'known':![]};return{'known':!![],'value':c['value']};}function evaluate(a,b,d){if(!b||typeof b['type']!=='string')return undefined;switch(b['type']){case'logic_and':{const e=Array['isArray'](b['nodes'])?b['nodes']:[];let f=![];for(const g of e){const h=evaluate(a,g,d);if(h===![])return![];if(h===undefined)f=!![];}return f?undefined:!![];}case'logic_or':{const i=Array['isArray'](b['nodes'])?b['nodes']:[];let j=![];for(const k of i){const l=evaluate(a,k,d);if(l===!![])return!![];if(l===undefined)j=!![];}return j?undefined:![];}case'logic_not':{const m=evaluate(a,b['node'],d);if(m===undefined)return undefined;return!m;}case'logic_equal':{const n=Array['isArray'](b['nodes'])?b['nodes']:[];if(n['length']<0x2)return undefined;const o=classifyQueryLhs(n[0x0]?.['query']),p=resolveValue(a,n[0x1]),q=o['kind']==='unknown'?classifyQueryLhs(n[0x1]?.['query']):o,r=!p['known']&&n[0x1]?.['query']!==undefined?resolveValue(a,n[0x0]):p;if(q['kind']==='node'){if(!r['known']||typeof r['value']!=='string')return undefined;return d['node']===r['value'];}if(q['kind']==='claimed'){if(!r['known']||typeof r['value']!=='boolean')return undefined;return d['claimed']===r['value'];}return undefined;}default:return undefined;}}function satisfiable(a,b,c){return evaluate(a,b,c)!==![];}function railPinnedNodes(a,b,d,e){if(!a||typeof a!=='object')return;const f=a;if(f['type']==='logic_equal'&&Array['isArray'](f['nodes'])&&f['nodes']['length']>=0x2){const h=classifyQueryLhs(f['nodes'][0x0]?.['query']),i=h['kind']==='unknown'?classifyQueryLhs(f['nodes'][0x1]?.['query']):h,j=h['kind']==='unknown'?f['nodes'][0x0]:f['nodes'][0x1];if(i['kind']==='node'){const k=resolveValue(b,j);k['known']&&typeof k['value']==='string'&&(d?e['neg']:e['pos'])['add'](k['value']);}return;}const g=f['type']==='logic_not'?!d:d;if(f['type']==='logic_not'){railPinnedNodes(f['node'],b,g,e);return;}if(Array['isArray'](f['nodes'])){for(const l of f['nodes'])railPinnedNodes(l,b,g,e);}}export function railNodePins(a,b){const c={'pos':new Set(),'neg':new Set()};return railPinnedNodes(a,b,![],c),c;}function findDeadLiterals(a,b,c,d){if(!a||typeof a['type']!=='string')return;if(a['type']==='logic_and'&&Array['isArray'](a['nodes'])){const e=new Map();for(const f of a['nodes']){const g=resolvableEquality(f,b);if(g)e['set'](g['symbol'],g['value']);}for(const h of a['nodes']){const i=resolvableEquality(h,b);if(i){const k=e['get'](i['symbol']);if(k!==undefined&&k!==i['value']){d['push']({'code':'RAIL_DEAD_LITERAL','level':'critical','detail':deadLiteralDetail(c,i['symbol'],k,i['value'])});return;}continue;}const j=findClash(h,b,e);if(j){d['push']({'code':'RAIL_DEAD_LITERAL','level':'critical','detail':deadLiteralDetail(c,j['symbol'],j['pinned'],j['value'])});return;}}for(const l of a['nodes'])findDeadLiterals(l,b,c,d);return;}if(Array['isArray'](a['nodes'])){for(const m of a['nodes'])findDeadLiterals(m,b,c,d);}if(a['node'])findDeadLiterals(a['node'],b,c,d);}function resolvableEquality(c,d){if(!c||c['type']!=='logic_equal'||!Array['isArray'](c['nodes']))return undefined;for(const [e,f]of[[c['nodes'][0x0],c['nodes'][0x1]],[c['nodes'][0x1],c['nodes'][0x0]]]){if(!e||typeof e['query']!=='string')continue;const g=classifyQueryLhs(e['query']);if(g['kind']==='unknown')continue;const h=resolveValue(d,f);if(!h['known'])continue;return{'symbol':g['kind']==='node'?SYM_NODE:SYM_CLAIMED,'value':h['value']};}return undefined;}function findClash(a,b,c){if(!a||typeof a['type']!=='string')return undefined;if(a['type']==='logic_not')return undefined;const d=resolvableEquality(a,b);if(d){const e=c['get'](d['symbol']);if(e!==undefined&&e!==d['value'])return{'symbol':d['symbol'],'pinned':e,'value':d['value']};return undefined;}if(Array['isArray'](a['nodes']))for(const f of a['nodes']){const g=findClash(f,b,c);if(g)return g;}if(a['node'])return findClash(a['node'],b,c);return undefined;}function deadLiteralDetail(a,b,c,d){return'allocator\x20guard\x20\x27'+a+'\x27:\x20one\x20conjunction\x20scope\x20carries\x20'+b+'\x20'+('==\x20'+JSON['stringify'](c)+'\x20and\x20ALSO\x20'+b+'\x20==\x20'+JSON['stringify'](d)+'\x20—\x20the\x20second\x20')+'literal\x20contradicts\x20the\x20first\x20and\x20is\x20a\x20DEAD\x20literal\x20(azx7-mn-261014\x20CR-azx7-01:\x20a\x20pinned\x20'+'node\x20equality\x20made\x20the\x20sibling\x20closed_cancel/item_lost\x20legs\x20unreachable,\x20stranding\x20the\x20'+'escrow\x20at\x20every\x20other\x20terminal).\x20Hoist\x20the\x20node\x20predicate\x20to\x20ONE\x20top-level\x20n-ary\x20logic_or\x20'+'instead\x20of\x20AND-prepending\x20a\x20single-node\x20gate.';}export function hasCallerIdentityLeg(a){let b=![];const c=d=>{if(b||d===null||typeof d!=='object')return;if(Array['isArray'](d)){for(const f of d)c(f);return;}const e=d;if(e['type']==='context'&&e['context']==='Signer'){b=!![];return;}if(typeof e['query']==='string'){const g=e['query']['toLowerCase']();if(g['startsWith']('context')||g['includes']('signer'))b=!![];else{if(/order\.agent|permission\.(owner|admin)|named.?operator/['test'](g))b=!![];}}if(!b){for(const h of Object['keys'](e))c(e[h]);}};return c(a),b;}export function refundGatePolarityMix(a){let b;const c=e=>{const f=JSON['stringify'](e);if(f===undefined)return'…';return f['length']>0x50?f['slice'](0x0,0x4d)+'…':f;},d=e=>{if(b!==undefined||e===null||typeof e!=='object')return;if(Array['isArray'](e)){for(const g of e)d(g);return;}const f=e;if(f['type']==='logic_or'&&Array['isArray'](f['nodes'])){const h=f['nodes'],i=h['filter'](l=>hasCallerIdentityLeg(l)),j=h['filter'](l=>l!==null&&typeof l==='object'&&l['type']==='logic_not');if(i['length']>0x0&&j['length']>0x0){b={'arms':[...i,...j]['map'](c)['join']('\x20\x20|\x20\x20')};return;}}for(const l of Object['keys'](f))d(f[l]);};return d(a),b;}function claimedAxisSensitive(a,b){const c=a['table'];return satisfiable(c,a['root'],{'node':b,'claimed':!![]})!==satisfiable(c,a['root'],{'node':b,'claimed':![]});}export function verifyAllocatorRails(a,b,c){const d=[];if(a['length']===0x0)return d;{const j=c?.['declaredKeys'],k=[],l=[],m=[];for(const o of a){if(o['root']===undefined||hasCallerIdentityLeg(o['root']))continue;const q=o['track']==='settlement'||o['track']==='refund'||o['recoverTwin']===!![];if(!q){m['push'](o['key']);continue;}if(j?.['has'](o['key']))l['push'](o);else k['push'](o);}for(const r of k){d['push']({'code':'RAIL_NO_CALLER_IDENTITY_BOUND','level':'critical','railKey':r['key'],'detail':'allocator\x20rail\x20\x27'+r['key']+'\x27\x20('+r['track']+'\x20track'+((r['recoverTwin']===!![]?',\x20merchant-recovery\x20twin':'')+')\x20carries\x20NO\x20caller-identity\x20leg\x20')+'(no\x20context(Signer)\x20comparison,\x20no\x20order.agent\x20has\x20/\x20permission.*\x20/\x20named-operator\x20query\x20'+'resolving\x20the\x20caller)\x20—\x20ANY\x20address\x20whose\x20tx\x20reaches\x20the\x20allocator\x20can\x20trigger\x20this\x20route\x20'+'(ks11:\x20an\x20unexpected\x20account\x20swept\x20a\x20merchant-recovery\x20payout\x20and\x20doubled\x20the\x20allocation\x20draw).\x20'+'Money\x20rails\x20are\x20not\x20forwards\x20—\x20the\x20chain\x20injects\x20no\x20caller\x20rail\x20on\x20them,\x20so\x20the\x20guard\x20IS\x20the\x20'+'only\x20gate.\x20Bind\x20the\x20caller\x20per\x20pattern.identity_check_order_holder\x20(order.owner/agent,\x20host\x20'+'machine_forward)\x20or\x20pattern.repository_write_authorization\x20(permission-resolved,\x20host\x20'+'service_allocator_guard);\x20see\x20guard-host-context.ts\x20for\x20the\x20per-host\x20signer\x20semantics\x20—\x20the\x20'+'caller\x20of\x20an\x20allocator\x20gate\x20is\x20the\x20SETTLEMENT\x20TRIGGERER,\x20not\x20the\x20order\x20owner,\x20so\x20a\x20'+'forward-edge\x20identity\x20guard\x20pasted\x20here\x20checks\x20the\x20WRONG\x20subject.\x20A\x20deliberately\x20legless\x20'+'rail\x20(the\x20merchant-recovery\x20sweep\x20face:\x20payee\x20bound\x20by\x20the\x20paired\x20allocator\x20row,\x20'+'permissionless\x20keeper\x20firing)\x20must\x20carry\x20an\x20explicit\x20declare\x20—\x20guard_resolutions\x20'+'{kind:\x27declare\x27,\x20reason}\x20or\x20the\x20template\x27s\x20identity_leg_exempt\x20—\x20and\x20then\x20ships\x20with\x20a\x20'+'permanent\x20non-blocking\x20disclosure\x20instead\x20of\x20this\x20block.'});}for(const u of l){d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','railKey':u['key'],'detail':'allocator\x20rail\x20\x27'+u['key']+'\x27\x20carries\x20no\x20caller-identity\x20leg\x20and\x20ships\x20under\x20an\x20explicit\x20'+'declare\x20exemption\x20({kind:\x27declare\x27}\x20/\x20identity_leg_exempt):\x20the\x20legless\x20shape\x20is\x20the\x20'+'sanctioned\x20merchant-recovery\x20face\x20—\x20the\x20payee\x20is\x20bound\x20by\x20the\x20paired\x20allocator\x20row,\x20never\x20'+'by\x20the\x20caller.\x20This\x20receipt\x20rides\x20the\x20plan\x20notes\x20and\x20is\x20re-surfaced\x20at\x20publish;\x20it\x20never\x20blocks.'});}m['length']>0x0&&d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','detail':'allocator\x20rail(s)\x20['+m['join'](',\x20')+']\x20carry\x20no\x20caller-identity\x20leg\x20'+'(no\x20context(Signer)\x20comparison,\x20no\x20order.agent\x20has\x20/\x20permission.*\x20/\x20named-operator\x20'+'query\x20resolving\x20the\x20caller)\x20—\x20ANY\x20address\x20whose\x20tx\x20reaches\x20the\x20allocator\x20can\x20'+'trigger\x20this\x20settlement\x20route\x20(sahr:\x20a\x20bystander\x20accelerated\x20another\x20party\x27s\x20'+'payout).\x20LEGITIMATE\x20when\x20the\x20scene\x20verifies\x20identity\x20upstream\x20(verifier_level\x20'+'level3_scene_combined)\x20or\x20the\x20venue\x20is\x20intentionally\x20open-trigger;\x20otherwise\x20bind\x20'+'the\x20caller\x20per\x20pattern.identity_check_order_holder\x20(order.owner/agent,\x20host\x20'+'machine_forward)\x20or\x20pattern.repository_write_authorization\x20(permission-resolved,\x20'+'host\x20service_allocator_guard).\x20See\x20guard-host-context.ts\x20for\x20the\x20per-host\x20signer\x20'+'semantics\x20—\x20the\x20caller\x20of\x20an\x20allocator\x20gate\x20is\x20the\x20SETTLEMENT\x20TRIGGERER,\x20not\x20the\x20'+'order\x20owner,\x20so\x20a\x20forward-edge\x20identity\x20guard\x20pasted\x20here\x20checks\x20the\x20WRONG\x20subject.'});}for(const v of a){if(v['track']!=='refund'||v['root']===undefined)continue;const w=v['table']['some'](x=>x['identifier']===TASK_BINDING_SLOT||x['identifier']===ONCE_SLOT_BYTES);if(w)continue;d['push']({'code':'REFUND_RAIL_REPLAY_DISCLOSURE','level':'info','railKey':v['key'],'detail':'refund\x20rail\x20\x27'+v['key']+'\x27\x20carries\x20no\x20once-key\x20row\x20(no\x20per-order\x20254\x20anchor,\x20no\x20per-period\x20255\x20key):\x20'+'the\x20refund\x20leg\x20stays\x20re-triggerable\x20on\x20its\x20node\x20state\x20across\x20the\x20order\x27s\x20life.\x20This\x20is\x20the\x20'+'SANCTIONED\x20shape\x20—\x20the\x20once-key\x20injection\x20is\x20deliberately\x20banned\x20on\x20refund\x20tracks\x20(a\x20refund\x20may\x20'+'fire\x20on\x20several\x20terminal\x20legs;\x20a\x20per-order\x20once\x20anchor\x20deadlocks\x20the\x20second\x20leg),\x20so\x20the\x20'+'replay\x20surface\x20is\x20disclosed,\x20not\x20gated.\x20Replay\x20cannot\x20redirect\x20funds:\x20the\x20recipient\x20binding\x20pins\x20'+'every\x20payout\x20to\x20the\x20paying\x20order,\x20and\x20balance\x20exhaustion\x20bounds\x20repetition\x20—\x20a\x20firing\x20aborts\x20on\x20'+'zero/insufficient\x20balance\x20once\x20the\x20pool\x20can\x20no\x20longer\x20fund\x20the\x20group\x20(a\x20Rate\x20group\x20summing\x20to\x20'+'10000\x20empties\x20the\x20pool\x20on\x20the\x20first\x20payout;\x20an\x20Amount-shaped\x20group\x20repeats\x20until\x20the\x20balance\x20'+'runs\x20below\x20the\x20fixed\x20leg).'});}for(const x of a){if(x['root']===undefined)continue;const y=refundGatePolarityMix(x['root']);if(y===undefined)continue;d['push']({'code':'REFUND_GATE_POLARITY_MIX','level':'critical','railKey':x['key'],'detail':'allocator\x20rail\x20\x27'+x['key']+'\x27\x20('+x['track']+'\x20track)\x20mixes\x20caller-identity\x20arms\x20and\x20NOT-state\x20arms\x20in\x20ONE\x20logic_or\x20group:\x20'+(y['arms']+'.\x20The\x20OR\x20makes\x20the\x20NOT-state\x20arm\x20a\x20LEGAL-CALLER\x20ALTERNATIVE\x20to\x20the\x20identity\x20legs\x20—\x20whoever\x20simply\x20')+'has\x20not\x20reached\x20that\x20state\x20passes\x20as\x20a\x20caller,\x20so\x20any\x20address\x20that\x20never\x20opened\x20a\x20dispute\x20can\x20sweep\x20the\x20rail\x20'+'(cour-mn-261102-z5t8\x20A2,\x20mainnet\x20REFUND-POLARITY:\x20the\x20buyer\x27s\x20not-in-dispute\x20state\x20was\x20compiled\x20into\x20'+'refund_gate\x27s\x20caller\x20identity\x20options).\x20A\x20negated\x20state\x20leg\x20is\x20a\x20payout\x20FREEZE,\x20never\x20an\x20authorization.\x20'+'Fix:\x20hoist\x20the\x20logic_not\x20leg\x20OUT\x20of\x20the\x20OR\x20into\x20a\x20TOP-LEVEL\x20logic_and\x20conjunction\x20—\x20'+'logic_and[\x20logic_or[<identity\x20legs>],\x20logic_not(<state\x20leg>)\x20]\x20—\x20the\x20recover_gate\x20shape\x20(etsm\x20F-04):\x20'+'the\x20freeze\x20then\x20gates\x20EVERY\x20caller\x20instead\x20of\x20widening\x20the\x20caller\x20set.\x20Guards\x20freeze\x20at\x20publish\x20—\x20fix\x20before\x20publishing.'});}{const z=new Map(),A=C=>{const D=z['get'](C['key']);if(D)return D;const E={'pos':new Set(),'neg':new Set()};railPinnedNodes(C['root'],C['table'],![],E);for(const F of E['neg'])E['pos']['delete'](F);return z['set'](C['key'],E['pos']),E['pos'];},B=(C,D)=>{if(C['size']!==D['size'])return![];for(const E of C)if(!D['has'](E))return![];return!![];};for(const C of a){if(C['root']===undefined)continue;const D=A(C);if(D['size']===0x0)continue;for(const E of a){if(E['key']===C['key']||E['root']===undefined)continue;const F=A(E);if((C['recipient']??'')===''||(E['recipient']??'')===''||C['recipient']===E['recipient']&&B(D,F))continue;if(F['size']===0x0)continue;const G=[...D]['filter'](H=>F['has'](H));if(G['length']===0x0)continue;d['push']({'code':'RAIL_NODE_SET_OVERLAP','level':'info','railKey':C['key'],'detail':'rail\x20\x27'+C['key']+'\x27\x20(→'+C['recipient']+')\x20and\x20\x27'+E['track']+'\x27\x20rail\x20\x27'+E['key']+'\x27\x20(→'+E['recipient']+')\x20are\x20BOTH\x20node-gated\x20onto\x20['+G['join'](',\x20')+']\x20—\x20'+'on\x20that\x20state\x20either\x20alloc_by_guard\x20fire\x20takes\x20the\x20pool\x20(first-to-fire),\x20so\x20the\x20pair\x20is\x20a\x20structural\x20double-payout/drain\x20surface\x20'+'(cstc2\x20C-1:\x20recover\x20∩\x20refund\x20on\x20closed_cancel\x20let\x20a\x20merchant\x20sweep\x20drain\x20escrow\x20the\x20refund\x20rail\x20was\x20the\x20designed\x20exit\x20for).\x20'+'Decision\x2011\x20keeps\x20the\x20two\x20tracks\x20INDEPENDENT\x20(no\x20claimed_by\x20coupling\x20—\x20that\x20cure\x20is\x20banned);\x20the\x20cure\x20is\x20the\x20decision-11\x20NODE\x20PARTITION:\x20'+'shrink\x20one\x20rail\x27s\x20node\x20set\x20so\x20every\x20terminal\x20keeps\x20EXACTLY\x20ONE\x20fund\x20exit\x20(RAIL_TERMINAL_UNCOVERED\x20still\x20enforces\x20the\x20coverage\x20side).\x20'+'Ships\x20INFO\x20(闸序纪律):\x20the\x20HKS-01(c)\x20enumeration\x20(2026-11-03)\x20shows\x20~10\x20surviving\x20templates\x20with\x20sanctioned\x20'+'recover/award\x20rails\x20still\x20overlapping\x20refund/settle\x20node\x20sets\x20—\x20the\x20per-template\x20adjudication\x20bundle\x20HKS-01(c-2)\x20must\x20clean\x20'+'them\x20before\x20this\x20upgrades\x20to\x20a\x20compile\x20blocker\x20(the\x20first\x20upgrade\x20attempt\x20hard-blocked\x20the\x20catalog\x20and\x20was\x20reverted).'});}}}for(const H of a){if(H['recoverTwin']!==!![]||H['root']===undefined)continue;const I={'pos':new Set(),'neg':new Set()};railPinnedNodes(H['root'],H['table'],![],I);for(const K of I['neg'])I['pos']['delete'](K);const J=[...I['pos']]['filter'](L=>/^(closed_cancel|cancelled)$/i['test'](L));if(J['length']===0x0)continue;d['push']({'code':'RECOVER_COVERS_REFUND_TERMINAL','level':'critical','railKey':H['key'],'detail':'recover\x20rail\x20\x27'+H['key']+'\x27\x20(→'+(H['recipient']??'?')+')\x20covers\x20the\x20buyer\x20refund\x20terminal(s)\x20'+('['+J['join'](',\x20')+']\x20—\x20at\x20that\x20state\x20the\x20REFUND\x20rail\x20is\x20the\x20designed\x20exit,\x20so\x20this\x20merchant-recovery\x20')+'twin\x20sweeps\x20an\x20ALREADY-REFUNDED\x20order:\x20the\x20refund\x20pays\x20the\x20buyer\x20back\x20and\x20the\x20recover\x20twin\x20(no\x20caller\x20'+'leg,\x20keeper-reachable)\x20drains\x20whatever\x20the\x20refund\x20left\x20behind\x20(the\x20live\x20mainnet\x20ks11\x20deduction;\x20'+'C-F01\x20root\x20cause).\x20Node-gate\x20partition\x20discipline:\x20re-anchor\x20the\x20recover\x20set\x20to\x20SETTLEMENT-side\x20'+'terminals\x20(e.g.\x20{completed,\x20reviewed})\x20so\x20every\x20terminal\x20keeps\x20EXACTLY\x20ONE\x20fund\x20exit\x20—\x20the\x20buyer\x27s\x20'+'terminal\x20belongs\x20to\x20the\x20refund\x20rail\x20alone.\x20Guards\x20freeze\x20at\x20publish:\x20fix\x20the\x20recover_node*\x20set\x20'+'BEFORE\x20the\x20guard\x20create\x20/\x20machine\x20bind\x20lands.\x20(The\x20order-scoped\x20advance\x20paths\x20additionally\x20carry\x20the\x20'+'chain\x20backstop\x20abort\x2015\x20E_ORDER_PRINCIPAL_REFUNDED,\x20but\x20the\x20sweep\x20itself\x20is\x20an\x20alloc\x20side-effect\x20—\x20'+'this\x20gate\x20is\x20the\x20only\x20surface\x20that\x20sees\x20it\x20first.)'});}if(b['length']===0x0)return d;const e=b['filter'](L=>L['semanticRole']==='cancelled'||L['semanticRole']==='final'),f=b['map'](L=>({'node':L['name'],'claimed':!![]}));for(const L of a){if(L['root']===undefined)continue;const M=L['table'];findDeadLiterals(L['root'],M,L['key'],d);}for(const N of e){const O=[{'node':N['name'],'claimed':![]}];for(const Q of N['fromNodes']??[])O['push']({'node':Q,'claimed':![]});const P=a['some'](R=>O['some'](S=>satisfiable(R['table'],R['root'],S)));!P&&d['push']({'code':'RAIL_TERMINAL_UNCOVERED','level':'critical','detail':'terminal\x20node\x20\x27'+N['name']+'\x27\x20(role\x20'+N['semanticRole']+')\x20has\x20NO\x20allocator\x20rail\x20'+'satisfiable\x20on\x20it\x20or\x20its\x20direct\x20predecessors\x20—\x20an\x20order\x20reaching\x20this\x20terminal\x20'+'strands\x20its\x20escrow\x20forever\x20(azx7-mn-261014\x20CR-azx7-01:\x20refund\x20'+'rejected\x20with\x20the\x20allocation\x20EINSUFFICIENT_BALANCE\x20abort\x20at\x20closed_cancel/item_lost;\x20crs-mn-261014\x20F-30:\x20a\x20double-'+'negated\x20claimed_by\x20leg\x20—\x20a\x20banned\x20shape\x20since\x20decision\x2011\x20—\x20bricked\x20the\x20refund\x20at\x20returned).\x20'+'Guards/allocators\x20freeze\x20at\x20publish\x20—\x20fix\x20the\x20rail\x27s\x20NODE-SET\x20before\x20publishing\x20'+'(decision\x2011:\x20exits\x20are\x20node-gated;\x20there\x20is\x20no\x20claimed_by\x20polarity\x20leg\x20to\x20fall\x20back\x20on).'});}const h=a['some'](R=>f['some'](S=>satisfiable(R['table'],R['root'],S)));!h&&d['push']({'code':'RAIL_AWARD_EXIT_MISSING','level':'critical','detail':'no\x20allocator\x20rail\x20is\x20satisfiable\x20on\x20ANY\x20machine\x20node\x20—\x20every\x20order\x20state\x20'+'(awarded\x20or\x20not)\x20strands\x20its\x20escrow\x20(escrow-exit\x20invariant,\x20az-mn-261007).\x20'+'Decision\x2011\x20two-rail\x20independence:\x20exits\x20are\x20NODE-GATED\x20—\x20an\x20awarded\x20order\x20exits\x20'+'through\x20the\x20SAME\x20terminal\x20rails\x20as\x20any\x20other\x20order\x20(its\x20award\x20is\x20a\x20separate\x20'+'commercial\x20indemnity;\x20a\x20claimed_by\x20gate\x20would\x20be\x20the\x20RAIL_CLAIMED_BY_LEG\x20violation,\x20'+'not\x20the\x20cure).\x20Partition\x20the\x20terminals\x20between\x20a\x20refund/settle\x20rail\x20and\x20a\x20'+'merchant-side\x20recovery\x20sweep\x20(tpl_allocator_node_gate_recover,\x20terminal-node-gated).\x20'+'Historical\x20(O11,\x20alg26-tn-261026):\x20a\x20recover\x20rail\x20keyed\x20on\x20the\x20bare\x20claimed_by\x20stamp\x20'+'routed\x20a\x20dismissal\x20to\x20the\x20LOSING\x20party\x20—\x20that\x20polarity\x20shape\x20is\x20banned\x20since\x20decision\x2011.'});const i=a['filter'](R=>R['root']!==undefined);{const R=new Set();for(const S of b){for(const T of i){if(claimedAxisSensitive(T,S['name']))R['add'](T['key']);}}R['size']>0x0&&d['push']({'code':'RAIL_CLAIMED_BY_LEG','level':'critical','detail':'allocator\x20rail(s)\x20['+[...R]['join'](',\x20')+']\x20flip\x20on\x20the\x20order.claimed_by\x20axis\x20—\x20'+'a\x20fund\x20rail\x20READS\x20the\x20arbitration\x20payout\x20stamp\x20(decision\x2011\x20two-rail\x20independence\x20violation;\x20'+'mirrors\x20R-FUND-RAIL-CLAIMED-BY).\x20The\x20fund\x20track\x20completes\x20by\x20ORDER-LEVEL\x20NODE\x20STATE:\x20gate\x20the\x20'+'rail\x20on\x20progress.current\x20node\x20sets\x20(refund/settle\x20faces),\x20partition\x20the\x20terminals\x20with\x20a\x20'+'terminal-node-gated\x20recovery\x20sweep\x20(tpl_allocator_node_gate_recover),\x20and\x20let\x20the\x20arbitrator\x20'+'rule\x20on\x20the\x20order\x27s\x20state\x20and\x20fund\x20destinations\x20—\x20a\x20double\x20collection\x20(settle+indemnity,\x20'+'refund+bounty)\x20is\x20a\x20legal\x20commercial\x20outcome\x20disclosed\x20at\x20the\x20MCP\x20confirmation\x20gate.\x20'+'Historical:\x20the\x20INV-C1\x20polarity\x20pair\x20(refund\x20some==false\x20/\x20recover\x20some==true)\x20was\x20the\x20old\x20'+'cure\x20and\x20the\x20W5-01\x20direction-blind\x20bug\x27s\x20cause\x20—\x20both\x20legs\x20were\x20removed\x20template-wide.'});}return d;}
|
|
@@ -40,5 +40,12 @@ export interface OrderFundFacts {
|
|
|
40
40
|
export interface BuiltOrderFundFacts {
|
|
41
41
|
structured: OrderFundFacts;
|
|
42
42
|
text: string;
|
|
43
|
+
arb_key_diagnostic?: ArbKeyDiagnostic;
|
|
44
|
+
}
|
|
45
|
+
export interface ArbKeyDiagnostic {
|
|
46
|
+
ref: string;
|
|
47
|
+
resolved_address?: string;
|
|
48
|
+
resolved_type?: string;
|
|
49
|
+
note: string;
|
|
43
50
|
}
|
|
44
51
|
export declare function buildOrderFundFacts(opts: ArbFundFactsOptions): Promise<BuiltOrderFundFacts | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{batchQueryObjectsByIds}from'../graph/onchain/sdk-batch.js';const PAYMENT_HISTORY_CAP=0x5;function asBigIntOrUndefined(a){try{if(typeof a==='bigint')return a;if(typeof a==='number'&&Number['isFinite'](a))return BigInt(Math['trunc'](a));if(typeof a==='string'&&a['trim']()!=='')return BigInt(a);}catch{}return undefined;}function asMsOrUndefined(a){if(typeof a==='number'&&Number['isFinite'](a))return a;if(typeof a==='string'&&/^\d+$/['test'](a['trim']()))return Number(a['trim']());return undefined;}function pickData(a){return a?.['data']??a;}function pickAddr(a){return a?.['object']??a?.['data']?.['object']??a?.['id'];}function releasedTo(a,b){const c=Array['isArray'](a?.['record'])?a['record']:[];if(c['length']===0x0)return undefined;const d=b['toLowerCase']();let e=![],f=![];for(const g of c){const h=typeof g==='string'?g:g?.['recipient']??g?.['to'];if(typeof h!=='string'||h['trim']()==='')return undefined;if(h['toLowerCase']()===d)e=!![];else f=!![];}if(e&&f)return'mixed';return e?'order':'other';}function rawVersion(a){const b=a?.['version']??a?.['data']?.['version'];return b===undefined||b===null||String(b)===''?undefined:String(b);}const READ_CONSISTENCY='live\x20read\x20(cache\x20bypassed);\x20a\x20read\x20issued\x20in\x20the\x20same\x20second\x20as\x20a\x20committing\x20transaction\x20can\x20trail\x20the\x20committed\x20effect\x20by\x20one\x20checkpoint\x20—\x20if\x20any\x20field\x20contradicts\x20a\x20transaction\x20just\x20submitted,\x20re-query\x20once\x20(compare\x20object_versions\x20across\x20the\x20two\x20reads)\x20before\x20concluding';export async function buildOrderFundFacts(b){const c=b['noCache']??!![];let d,e,f,g,h,i;if(b['arbRef']){const I=await batchQueryObjectsByIds([b['arbRef']],b['network'],c),J=I['find'](L=>pickData(L)?.['type']==='Arb'||pickData(L)?.['order']),K=pickData(J);i=rawVersion(J),K?.['order']&&typeof K['order']==='string'&&(d=K['order'],e=pickAddr(J),f=typeof K['status']==='number'?K['status']:undefined,g=K['indemnity']?.['amount']??null,h=K['time']);}if(!d&&b['orderRef'])d=b['orderRef'];if(!d)return undefined;const j=await batchQueryObjectsByIds([d],b['network'],c),k=pickData(j[0x0]);if(!k||k['amount']===undefined)return undefined;const l=rawVersion(j[0x0]),m=[];if(typeof k['allocation']==='string'&&k['allocation'])m['push'](k['allocation']);if(typeof k['progress']==='string'&&k['progress'])m['push'](k['progress']);const n=m['length']>0x0?await batchQueryObjectsByIds(m,b['network'],c):[],q=new Map();for(const L of n){const M=pickAddr(L);if(M)q['set'](M['toLowerCase'](),L);}const r=k['allocation']?q['get'](String(k['allocation'])['toLowerCase']()):undefined,s=pickData(r),u=k['progress']?q['get'](String(k['progress'])['toLowerCase']()):undefined,v=pickData(u),x=rawVersion(r),y=rawVersion(u),z=[],A=Array['isArray'](s?.['payment'])?s['payment']['slice'](-PAYMENT_HISTORY_CAP):[];if(A['length']>0x0){const N=await batchQueryObjectsByIds(A,b['network'],c),O=new Map();for(const P of N){const Q=pickAddr(P);if(Q)O['set'](Q['toLowerCase'](),P);}for(const R of A){const S=pickData(O['get'](String(R)['toLowerCase']()));if(!S)continue;z['push']({'payment':R,'amount':String(S['amount']??'0'),'time':S['time']??'',...S['info']?.['remark']?{'remark':String(S['info']['remark'])}:{},...releasedTo(S,String(d))?{'released_to':releasedTo(S,String(d))}:{}});}}const B=asBigIntOrUndefined(k['amount'])??0x0n,C=s?asBigIntOrUndefined(s['balance']):undefined,D=C!==undefined?B-C:undefined,E=asMsOrUndefined(h),F=[];if(E!==undefined)for(const T of z){const U=asMsOrUndefined(T['time']);U!==undefined&&U>E&&F['push']({'payment':T['payment'],'amount':T['amount'],'time':T['time']});}const G={...e?{'arb_case':e}:{},...f!==undefined?{'arb_status':f}:{},...g!==undefined?{'arb_indemnity':g}:{},'order':d,'order_amount':String(k['amount']),'claimed_by':typeof k['claimed_by']==='string'?k['claimed_by']:null,'progress_node':typeof v?.['current']==='string'&&v['current']!==''?v['current']:null,'allocation':typeof k['allocation']==='string'&&k['allocation']?k['allocation']:null,'allocation_balance':C!==undefined?String(C):null,'escrow_deficit':D!==undefined?String(D):null,'withdraw_history':z,'escrow_payouts_after_case':F,'object_versions':{...i?{'arb_case':i}:{},...l?{'order':l}:{},...x?{'allocation':x}:{},...y?{'progress':y}:{}},'read_consistency':READ_CONSISTENCY,...k['time']!==undefined?{'order_time':k['time']}:{},...h!==undefined?{'case_time':h}:{}},H=['ORDER\x20FUND\x20FACTS\x20(raw\x20units,\x20live\x20read):'];H['push']('-\x20freshness:\x20'+READ_CONSISTENCY),H['push']('-\x20order\x20'+d+':\x20amount='+G['order_amount']);G['allocation']?H['push']('-\x20escrow\x20allocation\x20'+G['allocation']+':\x20balance='+G['allocation_balance']+'\x20(deficit\x20vs\x20amount:\x20'+G['escrow_deficit']+')'):H['push']('-\x20escrow\x20allocation:\x20none\x20(zero-amount\x20order\x20carries\x20no\x20escrow)');H['push']('-\x20compensation\x20claimed_by:\x20'+(G['claimed_by']??'null\x20(unclaimed)')),H['push']('-\x20workflow\x20node:\x20'+(G['progress_node']??'(none)'));if(z['length']>0x0){H['push']('-\x20escrow\x20payouts\x20so\x20far\x20('+z['length']+(A['length']===PAYMENT_HISTORY_CAP?'+':'')+'):');for(const V of z){const W=V['released_to']==='order'?'\x20→\x20order\x20(buyer-side\x20refund)':V['released_to']==='other'?'\x20→\x20NOT\x20the\x20order\x20(merchant/Entity\x20side)':V['released_to']==='mixed'?'\x20→\x20split\x20order\x20+\x20other\x20recipients':'';H['push']('\x20\x20*\x20'+V['amount']+'\x20at\x20'+V['time']+W+(V['remark']?'\x20—\x20'+V['remark']:'')+'\x20['+V['payment']+']');}}if(D!==undefined&&D>0x0n){const X=z['some'](a0=>a0['released_to']===undefined),Y=z['length']>0x0&&z['every'](a0=>a0['released_to']==='order'),Z=z['some'](a0=>a0['released_to']==='other'||a0['released_to']==='mixed');if(Y)H['push']('NET\x20GUIDANCE:\x20the\x20escrow\x20has\x20already\x20paid\x20out\x20'+D+'\x20raw\x20units\x20to\x20the\x20ORDER\x20(buyer-side\x20refund\x20rail,\x20'+'per\x20payout\x20records)\x20—\x20net\x20the\x20indemnity\x20against\x20the\x20refunded\x20principal;\x20compensate\x20the\x20delta,\x20not\x20the\x20full\x20loss.');else Z?H['push']('NET\x20GUIDANCE:\x20the\x20escrow\x20paid\x20out\x20'+D+'\x20raw\x20units\x20but\x20at\x20least\x20one\x20payout\x20went\x20to\x20NON-order\x20recipients\x20'+'(merchant/Entity\x20side\x20—\x20settlement\x20or\x20recover).\x20The\x20buyer\x20received\x20nothing\x20from\x20those;\x20their\x20loss\x20is\x20the\x20FULL\x20'+'price\x20and\x20the\x20indemnity\x20must\x20NOT\x20be\x20reduced\x20by\x20this\x20deficit.'):H['push']('NET\x20GUIDANCE:\x20the\x20escrow\x20has\x20already\x20paid\x20out\x20'+D+'\x20raw\x20units\x20more\x20than\x20it\x20holds'+((X?'\x20(payout\x20polarity\x20unknown\x20for\x20at\x20least\x20one\x20payout\x20—\x20records\x20unreadable)':'')+'.\x20')+'Polarity\x20decides\x20the\x20netting:\x20refunded\x20TO\x20THE\x20ORDER\x20(buyer\x20rail)\x20→\x20net\x20the\x20indemnity\x20against\x20the\x20refunded\x20principal,\x20'+'compensate\x20the\x20delta;\x20released\x20to\x20the\x20MERCHANT\x20side\x20→\x20the\x20buyer\x27s\x20loss\x20is\x20the\x20full\x20price,\x20do\x20NOT\x20reduce\x20the\x20award.\x20'+'Read\x20the\x20Payment\x20records\x20before\x20deciding.');}return G['claimed_by']&&H['push']('NOTE:\x20claimed_by\x20is\x20set\x20—\x20the\x20order\x20has\x20already\x20marked\x20a\x20compensation\x20claim;\x20a\x20further\x20ruling\x20pays\x20on\x20top\x20of\x20any\x20escrow\x20payout.'),F['length']>0x0&&H['push']('ESCROW\x20MOVED\x20DURING\x20THE\x20CASE:\x20'+F['length']+'\x20payout(s)\x20landed\x20after\x20the\x20case\x20was\x20filed\x20'+('(first:\x20'+F[0x0]['amount']+'\x20raw\x20at\x20'+F[0x0]['time']+').\x20')+'Reconcile\x20each\x20with\x20the\x20ruling\x20direction\x20—\x20a\x20sweep\x20that\x20contradicts\x20the\x20award\x20(e.g.\x20a\x20merchant\x20recover\x20on\x20a\x20'+'buyer-favorable\x20ruling)\x20belongs\x20in\x20the\x20ruling\x20text\x20and\x20the\x20parties\x27\x20statements,\x20never\x20in\x20a\x20silent\x20pass.'),H['push']('DUAL-TRACK\x20REMINDER:\x20the\x20escrow\x20track\x20(refund\x20/\x20recover\x20allocators)\x20and\x20this\x20arbitration\x20are\x20INDEPENDENT\x20'+'commercial\x20routes\x20—\x20the\x20protocol\x20deliberately\x20does\x20not\x20couple\x20them,\x20and\x20neither\x20blocks\x20the\x20other.\x20Both\x20are\x20'+'observable\x20here:\x20re-read\x20these\x20facts\x20before\x20you\x20finalize\x20the\x20ruling\x20and\x20again\x20before\x20the\x20indemnity\x20is\x20claimed;\x20'+'an\x20escrow\x20movement\x20that\x20lands\x20after\x20the\x20award\x20is\x20visible\x20in\x20the\x20payout\x20history\x20above.'),{'structured':G,'text':H['join']('\x0a')};}
|
|
1
|
+
import{batchQueryObjectsByIds}from'../graph/onchain/sdk-batch.js';const PAYMENT_HISTORY_CAP=0x5;function asBigIntOrUndefined(a){try{if(typeof a==='bigint')return a;if(typeof a==='number'&&Number['isFinite'](a))return BigInt(Math['trunc'](a));if(typeof a==='string'&&a['trim']()!=='')return BigInt(a);}catch{}return undefined;}function asMsOrUndefined(a){if(typeof a==='number'&&Number['isFinite'](a))return a;if(typeof a==='string'&&/^\d+$/['test'](a['trim']()))return Number(a['trim']());return undefined;}function pickData(a){return a?.['data']??a;}function pickAddr(a){return a?.['object']??a?.['data']?.['object']??a?.['id'];}function releasedTo(a,b){const c=Array['isArray'](a?.['record'])?a['record']:[];if(c['length']===0x0)return undefined;const d=b['toLowerCase']();let e=![],f=![];for(const g of c){const h=typeof g==='string'?g:g?.['recipient']??g?.['to'];if(typeof h!=='string'||h['trim']()==='')return undefined;if(h['toLowerCase']()===d)e=!![];else f=!![];}if(e&&f)return'mixed';return e?'order':'other';}function rawVersion(a){const b=a?.['version']??a?.['data']?.['version'];return b===undefined||b===null||String(b)===''?undefined:String(b);}const READ_CONSISTENCY='live\x20read\x20(cache\x20bypassed);\x20a\x20read\x20issued\x20in\x20the\x20same\x20second\x20as\x20a\x20committing\x20transaction\x20can\x20trail\x20the\x20committed\x20effect\x20by\x20one\x20checkpoint\x20—\x20if\x20any\x20field\x20contradicts\x20a\x20transaction\x20just\x20submitted,\x20re-query\x20once\x20(compare\x20object_versions\x20across\x20the\x20two\x20reads)\x20before\x20concluding';export async function buildOrderFundFacts(b){const c=b['noCache']??!![];let d,e,f,g,h,i,j;if(b['arbRef']){const J=await batchQueryObjectsByIds([b['arbRef']],b['network'],c),K=J['find'](M=>pickData(M)?.['type']==='Arb'||pickData(M)?.['order']),L=pickData(K);j=rawVersion(K);if(L?.['order']&&typeof L['order']==='string')d=L['order'],e=pickAddr(K),f=typeof L['status']==='number'?L['status']:undefined,g=L['indemnity']?.['amount']??null,h=L['time'];else{const M=J[0x0],N=pickData(M),O=typeof N?.['type']==='string'?N['type']:typeof M?.['type']==='string'?M['type']:undefined,P=M?pickAddr(M):undefined,Q=O==='Arbitration'?'It\x20resolved\x20to\x20an\x20Arbitration\x20VENUE\x20(the\x20service-level\x20arbitration\x20object)\x20—\x20venues\x20and\x20cases\x20share\x20the\x20\x27arb\x27\x20vocabulary\x20but\x20are\x20different\x20objects:\x20case-scoped\x20ops\x20(confirm\x20/\x20vote\x20/\x20arbitration\x20/\x20reset\x20/\x20feedback\x20/\x20arb_withdraw,\x20order.arb_claim_compensation)\x20address\x20the\x20CASE\x20through\x20`arb`,\x20while\x20venue\x20ops\x20(fee\x20/\x20pause\x20/\x20voting_guard\x20/\x20usage_guard)\x20address\x20the\x20VENUE\x20through\x20the\x20root\x20`object`\x20field.':'Case\x20ops\x20address\x20the\x20Arb\x20CASE\x20through\x20`arb`;\x20venue\x20ops\x20address\x20the\x20Arbitration\x20venue\x20through\x20the\x20root\x20`object`\x20field.';i={'ref':b['arbRef'],...P?{'resolved_address':P}:{},...O?{'resolved_type':O}:{},'note':'The\x20arb\x20reference\x20did\x20not\x20resolve\x20to\x20an\x20Arb\x20CASE\x20(the\x20dispute\x20instance\x20created\x20by\x20`dispute`).\x20'+Q+'\x20Re-key\x20with\x20the\x20case\x27s\x200x\x20address\x20or\x20its\x20LocalMark\x20name'+(b['orderRef']?'\x20—\x20the\x20order-side\x20facts\x20below\x20were\x20built\x20from\x20the\x20order\x20reference,\x20not\x20from\x20this\x20arb\x20ref.':'.')};}}if(!d&&b['orderRef'])d=b['orderRef'];if(!d)return undefined;const k=await batchQueryObjectsByIds([d],b['network'],c),l=pickData(k[0x0]);if(!l||l['amount']===undefined)return undefined;const m=rawVersion(k[0x0]),n=[];if(typeof l['allocation']==='string'&&l['allocation'])n['push'](l['allocation']);if(typeof l['progress']==='string'&&l['progress'])n['push'](l['progress']);const q=n['length']>0x0?await batchQueryObjectsByIds(n,b['network'],c):[],r=new Map();for(const R of q){const S=pickAddr(R);if(S)r['set'](S['toLowerCase'](),R);}const s=l['allocation']?r['get'](String(l['allocation'])['toLowerCase']()):undefined,u=pickData(s),v=l['progress']?r['get'](String(l['progress'])['toLowerCase']()):undefined,x=pickData(v),y=rawVersion(s),z=rawVersion(v),A=[],B=Array['isArray'](u?.['payment'])?u['payment']['slice'](-PAYMENT_HISTORY_CAP):[];if(B['length']>0x0){const T=await batchQueryObjectsByIds(B,b['network'],c),U=new Map();for(const V of T){const W=pickAddr(V);if(W)U['set'](W['toLowerCase'](),V);}for(const X of B){const Y=pickData(U['get'](String(X)['toLowerCase']()));if(!Y)continue;A['push']({'payment':X,'amount':String(Y['amount']??'0'),'time':Y['time']??'',...Y['info']?.['remark']?{'remark':String(Y['info']['remark'])}:{},...releasedTo(Y,String(d))?{'released_to':releasedTo(Y,String(d))}:{}});}}const C=asBigIntOrUndefined(l['amount'])??0x0n,D=u?asBigIntOrUndefined(u['balance']):undefined,E=D!==undefined?C-D:undefined,F=asMsOrUndefined(h),G=[];if(F!==undefined)for(const Z of A){const a0=asMsOrUndefined(Z['time']);a0!==undefined&&a0>F&&G['push']({'payment':Z['payment'],'amount':Z['amount'],'time':Z['time']});}const H={...e?{'arb_case':e}:{},...f!==undefined?{'arb_status':f}:{},...g!==undefined?{'arb_indemnity':g}:{},'order':d,'order_amount':String(l['amount']),'claimed_by':typeof l['claimed_by']==='string'?l['claimed_by']:null,'progress_node':typeof x?.['current']==='string'&&x['current']!==''?x['current']:null,'allocation':typeof l['allocation']==='string'&&l['allocation']?l['allocation']:null,'allocation_balance':D!==undefined?String(D):null,'escrow_deficit':E!==undefined?String(E):null,'withdraw_history':A,'escrow_payouts_after_case':G,'object_versions':{...j?{'arb_case':j}:{},...m?{'order':m}:{},...y?{'allocation':y}:{},...z?{'progress':z}:{}},'read_consistency':READ_CONSISTENCY,...l['time']!==undefined?{'order_time':l['time']}:{},...h!==undefined?{'case_time':h}:{}},I=['ORDER\x20FUND\x20FACTS\x20(raw\x20units,\x20live\x20read):'];I['push']('-\x20freshness:\x20'+READ_CONSISTENCY),I['push']('-\x20order\x20'+d+':\x20amount='+H['order_amount']);H['allocation']?I['push']('-\x20escrow\x20allocation\x20'+H['allocation']+':\x20balance='+H['allocation_balance']+'\x20(deficit\x20vs\x20amount:\x20'+H['escrow_deficit']+')'):I['push']('-\x20escrow\x20allocation:\x20none\x20(zero-amount\x20order\x20carries\x20no\x20escrow)');I['push']('-\x20compensation\x20claimed_by:\x20'+(H['claimed_by']??'null\x20(unclaimed)')),I['push']('-\x20workflow\x20node:\x20'+(H['progress_node']??'(none)'));if(A['length']>0x0){I['push']('-\x20escrow\x20payouts\x20so\x20far\x20('+A['length']+(B['length']===PAYMENT_HISTORY_CAP?'+':'')+'):');for(const a1 of A){const a2=a1['released_to']==='order'?'\x20→\x20order\x20(buyer-side\x20refund)':a1['released_to']==='other'?'\x20→\x20NOT\x20the\x20order\x20(merchant/Entity\x20side)':a1['released_to']==='mixed'?'\x20→\x20split\x20order\x20+\x20other\x20recipients':'';I['push']('\x20\x20*\x20'+a1['amount']+'\x20at\x20'+a1['time']+a2+(a1['remark']?'\x20—\x20'+a1['remark']:'')+'\x20['+a1['payment']+']');}}if(E!==undefined&&E>0x0n){const a3=A['some'](a6=>a6['released_to']===undefined),a4=A['length']>0x0&&A['every'](a6=>a6['released_to']==='order'),a5=A['some'](a6=>a6['released_to']==='other'||a6['released_to']==='mixed');if(a4)I['push']('NET\x20GUIDANCE:\x20the\x20escrow\x20has\x20already\x20paid\x20out\x20'+E+'\x20raw\x20units\x20to\x20the\x20ORDER\x20(buyer-side\x20refund\x20rail,\x20'+'per\x20payout\x20records)\x20—\x20net\x20the\x20indemnity\x20against\x20the\x20refunded\x20principal;\x20compensate\x20the\x20delta,\x20not\x20the\x20full\x20loss.');else a5?I['push']('NET\x20GUIDANCE:\x20the\x20escrow\x20paid\x20out\x20'+E+'\x20raw\x20units\x20but\x20at\x20least\x20one\x20payout\x20went\x20to\x20NON-order\x20recipients\x20'+'(merchant/Entity\x20side\x20—\x20settlement\x20or\x20recover).\x20The\x20buyer\x20received\x20nothing\x20from\x20those;\x20their\x20loss\x20is\x20the\x20FULL\x20'+'price\x20and\x20the\x20indemnity\x20must\x20NOT\x20be\x20reduced\x20by\x20this\x20deficit.'):I['push']('NET\x20GUIDANCE:\x20the\x20escrow\x20has\x20already\x20paid\x20out\x20'+E+'\x20raw\x20units\x20more\x20than\x20it\x20holds'+((a3?'\x20(payout\x20polarity\x20unknown\x20for\x20at\x20least\x20one\x20payout\x20—\x20records\x20unreadable)':'')+'.\x20')+'Polarity\x20decides\x20the\x20netting:\x20refunded\x20TO\x20THE\x20ORDER\x20(buyer\x20rail)\x20→\x20net\x20the\x20indemnity\x20against\x20the\x20refunded\x20principal,\x20'+'compensate\x20the\x20delta;\x20released\x20to\x20the\x20MERCHANT\x20side\x20→\x20the\x20buyer\x27s\x20loss\x20is\x20the\x20full\x20price,\x20do\x20NOT\x20reduce\x20the\x20award.\x20'+'Read\x20the\x20Payment\x20records\x20before\x20deciding.');}return H['claimed_by']&&I['push']('NOTE:\x20claimed_by\x20is\x20set\x20—\x20the\x20order\x20has\x20already\x20marked\x20a\x20compensation\x20claim;\x20a\x20further\x20ruling\x20pays\x20on\x20top\x20of\x20any\x20escrow\x20payout.'),G['length']>0x0&&I['push']('ESCROW\x20MOVED\x20DURING\x20THE\x20CASE:\x20'+G['length']+'\x20payout(s)\x20landed\x20after\x20the\x20case\x20was\x20filed\x20'+('(first:\x20'+G[0x0]['amount']+'\x20raw\x20at\x20'+G[0x0]['time']+').\x20')+'Reconcile\x20each\x20with\x20the\x20ruling\x20direction\x20—\x20a\x20sweep\x20that\x20contradicts\x20the\x20award\x20(e.g.\x20a\x20merchant\x20recover\x20on\x20a\x20'+'buyer-favorable\x20ruling)\x20belongs\x20in\x20the\x20ruling\x20text\x20and\x20the\x20parties\x27\x20statements,\x20never\x20in\x20a\x20silent\x20pass.'),i&&I['push']('ARB\x20KEY\x20WARNING:\x20arb\x20reference\x20\x22'+i['ref']+'\x22\x20did\x20not\x20resolve\x20to\x20an\x20Arb\x20case'+(i['resolved_type']||i['resolved_address']?'\x20—\x20it\x20resolved\x20to\x20'+(i['resolved_type']??'an\x20unknown\x20object\x20type')+(''+(i['resolved_address']?'\x20('+i['resolved_address']+')':'')):'')+('.\x20'+i['note'])),I['push']('DUAL-TRACK\x20REMINDER:\x20the\x20escrow\x20track\x20(refund\x20/\x20recover\x20allocators)\x20and\x20this\x20arbitration\x20are\x20INDEPENDENT\x20'+'commercial\x20routes\x20—\x20the\x20protocol\x20deliberately\x20does\x20not\x20couple\x20them,\x20and\x20neither\x20blocks\x20the\x20other.\x20Both\x20are\x20'+'observable\x20here:\x20re-read\x20these\x20facts\x20before\x20you\x20finalize\x20the\x20ruling\x20and\x20again\x20before\x20the\x20indemnity\x20is\x20claimed;\x20'+'an\x20escrow\x20movement\x20that\x20lands\x20after\x20the\x20award\x20is\x20visible\x20in\x20the\x20payout\x20history\x20above.'),{'structured':H,'text':I['join']('\x0a'),...i?{'arb_key_diagnostic':i}:{}};}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface ArbRulingReading {
|
|
2
|
+
ruling: boolean;
|
|
3
|
+
won: boolean;
|
|
4
|
+
dismissed: boolean;
|
|
5
|
+
amountUnresolved: boolean;
|
|
6
|
+
presence: boolean;
|
|
7
|
+
presenceNegated: boolean;
|
|
8
|
+
statusGate: boolean;
|
|
9
|
+
venueBound: boolean;
|
|
10
|
+
orderBound: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function readArbRulingGuard(root: unknown, table?: unknown): ArbRulingReading;
|
|
13
|
+
export interface ArbRailEdge {
|
|
14
|
+
prev: string;
|
|
15
|
+
next: string;
|
|
16
|
+
forward: string;
|
|
17
|
+
guardRef?: string;
|
|
18
|
+
unguarded: boolean;
|
|
19
|
+
openOperator: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function projectMachineEdges(nodes: unknown): ArbRailEdge[];
|
|
22
|
+
export type ArbRailFindingCode = "ARB_RULING_PRESENCE_ONLY" | "ARB_RULING_STATUS_GATE" | "ARB_RULING_VENUE_UNBOUND" | "ARB_RULING_ONE_SIDED" | "ARB_RULING_ZERO_EXIT";
|
|
23
|
+
export type ArbRailFindingLevel = "critical" | "warning" | "info";
|
|
24
|
+
export interface ArbRailFinding {
|
|
25
|
+
code: ArbRailFindingCode;
|
|
26
|
+
level: ArbRailFindingLevel;
|
|
27
|
+
detail: string;
|
|
28
|
+
guardRef?: string;
|
|
29
|
+
node?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ArbRailInput {
|
|
32
|
+
edges: ArbRailEdge[];
|
|
33
|
+
readings: Map<string, ArbRulingReading>;
|
|
34
|
+
}
|
|
35
|
+
export declare function verifyArbitrationRulingRails(input: ArbRailInput): ArbRailFinding[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{resolveValue}from'./allocator-rail-verifier.js';const Q_AMOUNT='arb.indemnity.amount',Q_PRESENCE='arb.indemnity\x20some',Q_STATUS='arb.status',Q_VENUE='arb.arbitration',Q_ORDER='arb.order',NO_RULING={'ruling':![],'won':![],'dismissed':![],'amountUnresolved':![],'presence':![],'presenceNegated':![],'statusGate':![],'venueBound':![],'orderBound':![]};function isZero(a){if(typeof a==='number')return a===0x0;if(typeof a==='bigint')return a===0x0n;if(typeof a==='string'){const b=a['trim']();return b==='0'||b==='0x0'||b==='0n';}return![];}function literalOf(a,b){if(!b||typeof b!=='object')return undefined;if(b['type']==='constant')return b['value'];const c=resolveValue(a,b);return c['known']?c['value']:undefined;}function queryName(a){if(!a||typeof a!=='object')return undefined;return typeof a['query']==='string'?a['query']:undefined;}export function readArbRulingGuard(a,b){const c=Array['isArray'](b)?b:[],d={...NO_RULING},e=(g,h,i,j,k)=>{d['ruling']=!![];switch(g){case Q_STATUS:d['statusGate']=!![];return;case Q_VENUE:d['venueBound']=!![];return;case Q_ORDER:d['orderBound']=!![];return;case Q_PRESENCE:d['presence']=!![];if(i===![]||i===!![]&&h)d['presenceNegated']=!![];return;case Q_AMOUNT:{const l=j==='logic_equal'||j==='logic_as_u256_equal';if(l){if(i===undefined){d['amountUnresolved']=!![];return;}if(isZero(i)){if(h)d['won']=!![];else d['dismissed']=!![];return;}if(!h)d['won']=!![];else d['amountUnresolved']=!![];return;}if(j==='logic_as_u256_greater'){if(k&&!h)d['won']=!![];else d['amountUnresolved']=!![];return;}d['amountUnresolved']=!![];return;}default:return;}},f=(g,h,i)=>{if(g===null||typeof g!=='object')return;if(Array['isArray'](g)){for(const o of g)f(o,h,i);return;}const j=g,l=typeof j['type']==='string'?j['type']:'';l==='logic_not'&&f(j['node'],!h,![]);const m=Array['isArray'](j['nodes'])?j['nodes']:[],n=l==='logic_equal'||l==='logic_as_u256_equal'||l==='logic_as_u256_greater'||l==='logic_as_u256_less';if(n){const p=m[0x0]??j['left'],r=m[0x1]??j['right'],s=queryName(p),u=queryName(r);if(s!==undefined&&/^arb\./['test'](s)){e(s,h,literalOf(c,r),l,!![]);return;}if(u!==undefined&&/^arb\./['test'](u)){e(u,h,literalOf(c,p),l,![]);return;}for(const w of m)f(w,h,!![]);return;}if(!i&&l==='query'&&typeof j['query']==='string'&&/^arb\./['test'](j['query'])){const x=j['query'];d['ruling']=!![];if(x===Q_STATUS)d['statusGate']=!![];else{if(x===Q_VENUE)d['venueBound']=!![];else{if(x===Q_ORDER)d['orderBound']=!![];else{if(x===Q_PRESENCE)d['presence']=!![];else{if(x===Q_AMOUNT)d['amountUnresolved']=!![];}}}}return;}for(const [y,z]of Object['entries'](j)){if(y==='node'&&l==='logic_not')continue;f(z,h,![]);}};return f(a,![],![]),d;}function forwardGuardRef(a){const b=a?.['guard'],c=typeof b==='string'&&b['trim']()!==''?b:b!==null&&typeof b==='object'?b['guard']??b['$ref']:undefined;return typeof c==='string'&&c['trim']()!==''?c['trim']():undefined;}export function projectMachineEdges(a){const b=[];if(!Array['isArray'](a))return b;for(const c of a){const d=c,e=typeof d?.['name']==='string'?d['name']:'';if(!e)continue;const g=Array['isArray'](d?.['pairs'])?d['pairs']:Array['isArray'](d?.['value'])?d['value']:[];for(const h of g){const i=h,j=typeof i?.['prev_node']==='string'?i['prev_node']:'',k=Array['isArray'](i?.['forwards'])?i['forwards']:[];for(const l of k){const m=l,n=typeof m?.['name']==='string'&&m['name']!==''?m['name']:j+'_to_'+e,o=forwardGuardRef(m),q=m?.['permissionIndex']??m?.['permission_index'],r=m?.['namedOperator']??m?.['named_operator'],s=typeof q==='number'&&Number['isFinite'](q)||typeof q==='string'&&q['trim']()!==''||typeof r==='string'&&r['trim']()!=='';b['push']({'prev':j,'next':e,'forward':n,'guardRef':o?.['toLowerCase'](),'unguarded':o===undefined,'openOperator':!s});}}}return b;}function readingOf(a,b){return a['guardRef']===undefined?undefined:b['get'](a['guardRef']);}export function verifyArbitrationRulingRails(a){const b=[],{edges:c,readings:d}=a,f=[];for(const i of c){const j=readingOf(i,d);if(j===undefined||!j['ruling'])continue;f['push']({'edge':i,'r':j});j['presence']&&!j['won']&&!j['dismissed']&&!j['amountUnresolved']&&b['push']({'code':'ARB_RULING_PRESENCE_ONLY','level':'critical','guardRef':i['guardRef'],'detail':'ruling\x20exit\x20\x27'+i['forward']+'\x27\x20('+i['prev']+'\x20→\x20'+i['next']+',\x20guard\x20'+i['guardRef']+')\x20reads\x20arb.indemnity\x20'+'PRESENCE\x20but\x20never\x20compares\x20arb.indemnity.amount.\x20Presence\x20is\x20not\x20direction:\x20a\x20merchant-favor\x20'+'ruling\x20that\x20awarded\x20the\x20buyer\x20NOTHING\x20still\x20sets\x20Some(0),\x20so\x20this\x20edge\x20opens\x20a\x20buyer-ward\x20'+'transition\x20on\x20a\x20ruling\x20the\x20buyer\x20LOST\x20(rex-mn-261021\x20T5,\x20mainnet:\x20a\x20defeated\x20buyer\x20pulled\x20the\x20'+'refund\x20and\x20the\x20ruling\x20was\x20unenforceable).\x20Guards\x20freeze\x20at\x20publish\x20(IMMUT-001).\x20Add\x20the\x20amount\x20'+'leg\x20exactly\x20as\x20tpl_forward_arb_ruling_won\x20ships\x20it\x20—\x20logic_not\x20over\x20'+'logic_as_u256_equal[arb.indemnity.amount,\x200],\x20optionally\x20plus\x20the\x20F-54\x20floor\x20leg\x20'+'logic_as_u256_greater[arb.indemnity.amount,\x20refund\x20×\x20arb_indemnity_floor_bps\x20/\x2010000].\x20The\x20'+'amount\x20query\x20errors\x20on\x20a\x20None\x20field,\x20so\x20both\x20polarities\x20fail\x20closed\x20against\x20never-ruled\x20and\x20'+'reset\x20states.'});j['statusGate']&&b['push']({'code':'ARB_RULING_STATUS_GATE','level':'critical','guardRef':i['guardRef'],'detail':'ruling\x20exit\x20\x27'+i['forward']+'\x27\x20('+i['prev']+'\x20→\x20'+i['next']+',\x20guard\x20'+i['guardRef']+')\x20gates\x20on\x20arb.status.\x20'+'The\x20status\x20vocabulary\x20(0/1\x20confirming,\x202\x20voting,\x203\x20arbitrated,\x204\x20objectionable,\x205\x20finished,\x20'+'6\x20withdrawn)\x20carries\x20NO\x20direction\x20—\x20a\x20merchant-favor\x20and\x20a\x20buyer-favor\x20final\x20are\x20'+'status-identical\x20—\x20and\x20it\x20is\x20TRANSIENT:\x20a\x20legitimate\x20arb_withdraw\x20by\x20the\x20arbitrator\x20advances\x20'+'5\x20→\x206\x20AFTER\x20the\x20award\x20settles,\x20so\x20the\x20gate\x20flips\x20false\x20under\x20a\x20settled\x20order\x20and\x20never\x20'+'returns\x20(booking\x20o10:\x201.5\x20WOW\x20locked\x20with\x20no\x20on-chain\x20exit).\x20Guard\x20AND\x20Machine\x20are\x20immutable\x20'+'after\x20publish\x20(IMMUT-001),\x20so\x20this\x20is\x20unrepairable.\x20Gate\x20on\x20the\x20indemnity\x20legs\x20instead\x20—\x20the\x20'+'only\x20direction-bearing,\x20transient-proof\x20signal:\x20buyer-won\x20=\x20arb.indemnity.amount\x20!=\x200\x20'+'(tpl_forward_arb_ruling_won),\x20merchant-favor\x20=\x20arb.indemnity.amount\x20==\x200\x20'+'(tpl_forward_arb_ruling_dismissed).\x20arb_withdraw\x20sweeps\x20only\x20the\x20fee\x20balance\x20and\x20never\x20'+'touches\x20the\x20indemnity,\x20so\x20both\x20survive\x20a\x20fee\x20withdrawal;\x20a\x20reset\x20clears\x20it,\x20which\x20correctly\x20'+'re-gates\x20the\x20edge.'});if(!j['venueBound']){const k=i['openOperator']?'\x20WORSE\x20HERE:\x20the\x20forward\x20also\x20declares\x20NEITHER\x20a\x20permission\x20index\x20NOR\x20a\x20named\x20operator,\x20so\x20'+'ANY\x20address\x20can\x20drive\x20it\x20—\x20an\x20open\x20operator\x20plus\x20a\x20missing\x20venue\x20leg\x20is\x20the\x20unilateral\x20'+'force-refund\x20(tbs7\x20F-02:\x20forge\x20a\x20self-arbitrated\x20case,\x20rule\x20your\x20own\x20indemnity,\x20drive\x20the\x20edge).':'';b['push']({'code':'ARB_RULING_VENUE_UNBOUND','level':'warning','guardRef':i['guardRef'],'detail':'ruling\x20exit\x20\x27'+i['forward']+'\x27\x20('+i['prev']+'\x20→\x20'+i['next']+',\x20guard\x20'+i['guardRef']+')\x20carries\x20NO\x20venue\x20'+'binding\x20leg\x20(arb.arbitration\x20==\x20the\x20Arbitration\x20address\x20the\x20Service\x20publishes\x20with).\x20'+'arb.order\x20is\x20a\x20CASE-CREATOR-FILLED\x20field\x20and\x20nothing\x20on\x20chain\x20ties\x20an\x20Arb\x20case\x20to\x20the\x20'+'store\x27s\x20designated\x20venue,\x20so\x20anyone\x20can\x20mint\x20an\x20Arbitration\x20against\x20this\x20order\x20with\x20'+'themselves\x20as\x20sole\x20arbiter,\x20rule\x20a\x20self-serving\x20indemnity,\x20and\x20satisfy\x20every\x20other\x20leg\x20'+('here.'+k+'\x20Add\x20the\x20venue\x20leg\x20(identifier\x20filled\x20with\x20the\x20SAME\x20Arbitration\x20address\x20the\x20')+'Service\x20is\x20published\x20with)\x20and\x20route\x20cases\x20from\x20any\x20other\x20venue\x20to\x20keeper\x20review\x20instead\x20of\x20'+'the\x20machine\x20edge;\x20pair\x20it\x20with\x20KEEPER\x20execution\x20—\x20merchant-only\x20execution\x20means\x20an\x20adverse\x20'+'ruling\x20simply\x20never\x20advances\x20(bs29:\x20judgments\x20without\x20enforcement).'});}}if(f['length']===0x0)return b;const g=f['some'](l=>l['r']['won']),h=f['some'](l=>l['r']['dismissed']);if(g!==h){const l=g?'dismissed':'won',m=g?'won':'dismissed',n=[...new Set(f['map'](q=>q['edge']['prev'])['filter'](q=>q!==''))],o=n['map'](q=>{const s=c['filter'](u=>u['prev']===q&&readingOf(u,d)?.['ruling']!==!![]);if(s['length']===0x0)return'\x20\x20-\x20\x27'+q+'\x27:\x20NO\x20non-ruling\x20exit';const t=s['map'](u=>u['forward']+(u['unguarded']?'\x20(UNGUARDED)':''));return'\x20\x20-\x20\x27'+q+'\x27:\x20'+t['join'](',\x20');}),p=g?'A\x20MERCHANT-FAVOR\x20ruling\x20(indemnity\x20Some(0))\x20has\x20no\x20machine\x20edge\x20here:\x20the\x20winner\x20cannot\x20close\x20the\x20'+'claim\x20or\x20resume\x20settlement\x20through\x20the\x20ruling,\x20so\x20the\x20case\x20concludes\x20and\x20the\x20order\x20sits\x20where\x20it\x20'+'was\x20(bs29\x20—\x20judgments\x20without\x20enforcement).\x20The\x20buyer\x20also\x20pays\x20nothing\x20for\x20losing,\x20which\x20removes\x20'+'the\x20cost\x20of\x20filing\x20a\x20speculative\x20dispute.':'A\x20BUYER-FAVOR\x20ruling\x20(indemnity\x20>\x200)\x20has\x20no\x20machine\x20edge\x20here:\x20the\x20buyer\x20wins\x20the\x20case\x20and\x20still\x20'+'cannot\x20reach\x20a\x20refund,\x20because\x20the\x20only\x20ruling\x20exits\x20open\x20on\x20amount\x20==\x200.\x20The\x20award\x20then\x20depends\x20'+'entirely\x20on\x20claiming\x20it\x20out\x20of\x20the\x20service\x27s\x20compensation\x20pool\x20—\x20which\x20aborts\x20code\x2027\x20'+'(E_COMPENSATION_NOT_MATCH)\x20when\x20the\x20pool\x20does\x20not\x20cover\x20the\x20indemnity.';b['push']({'code':'ARB_RULING_ONE_SIDED','level':'info','detail':'this\x20machine\x20carries\x20'+m['toUpperCase']()+'\x20ruling\x20exit(s)\x20only\x20—\x20no\x20'+l['toUpperCase']()+'\x20'+'polarity\x20anywhere\x20in\x20the\x20graph,\x20so\x20one\x20of\x20the\x20four\x20arbitration\x20outcomes\x20cannot\x20move\x20the\x20order.\x0a'+(p+'\x0a')+'Non-ruling\x20exits\x20from\x20the\x20same\x20waypoint(s)\x20—\x20the\x20paths\x20an\x20unruled\x20or\x20opposite-polarity\x20case\x20must\x20'+('travel\x20instead:\x0a'+o['join']('\x0a')+'\x0a')+('NOT\x20a\x20violation\x20by\x20itself:\x20'+(l==='dismissed'?'8\x20of\x20the\x2016\x20builtin\x20arbitration\x20archetypes\x20ship\x20won-only,\x20all\x20three\x20licensing\x20ones\x20by\x20design\x20(the\x20dismissed\x20twin\x20omits\x20\x27licensing\x27\x20from\x20applicable_industries)':'no\x20builtin\x20archetype\x20ships\x20dismissed-only,\x20so\x20verify\x20this\x20is\x20deliberate')+'.\x20')+('It\x20IS\x20a\x20disclosure\x20the\x20operator\x20must\x20accept\x20consciously:\x20if\x20a\x20'+l+'\x20outcome\x20is\x20reachable\x20in\x20')+('this\x20business,\x20add\x20the\x20twin\x20exit\x20—\x20'+(l==='dismissed'?'tpl_forward_arb_ruling_dismissed\x20(arb.indemnity.amount\x20==\x200,\x20positive\x20equality:\x20the\x20single\x20decisive\x20merchant-favor\x20form;\x20NEVER\x20arb.indemnity\x20some\x20==\x20false,\x20which\x20conflates\x20never-ruled,\x20reset\x20and\x20ruled-zero)':'tpl_forward_arb_ruling_won\x20(arb.indemnity.amount\x20!=\x200\x20plus\x20the\x20F-54\x20floor)')+'\x20—\x20declared\x20on\x20the\x20')+'TARGET\x20node\x20with\x20prev\x20set\x20to\x20the\x20waypoint,\x20one\x20guard\x20instance\x20per\x20exit\x20edge.'});}{const q=[...new Set(f['map'](s=>s['edge']['prev'])['filter'](s=>s!==''))];for(const s of q){const t=c['filter'](x=>x['prev']===s);if(t['length']===0x0)continue;const u=t['filter'](x=>readingOf(x,d)?.['ruling']!==!![]);if(u['length']>0x0)continue;const v=t['map'](x=>x['guardRef']??x['forward']);b['push']({'code':'ARB_RULING_ZERO_EXIT','level':'warning','node':s,'detail':'dispute\x20waypoint\x20\x27'+s+'\x27\x20has\x20ONLY\x20ruling-keyed\x20exits\x20('+v['join'](',\x20')+')\x20—\x20a\x20case\x20that\x20NEVER\x20'+'rules\x20fires\x20NOTHING.\x20Both\x20ruling\x20roots\x20fail\x20closed\x20on\x20the\x20None\x20indemnity\x20field,\x20so\x20a\x20'+'withdrawn\x20case\x20(arb_withdraw),\x20a\x20reset\x20(the\x20objection\x20cycle\x20clears\x20the\x20indemnity)\x20or\x20an\x20'+('abandoned\x20one\x20leaves\x20the\x20order\x20resting\x20at\x20\x27'+s+'\x27\x20permanently,\x20with\x20no\x20edge\x20to\x20drive\x20and\x20no\x20')+'later\x20repair\x20(Machine\x20+\x20Allocator\x20freeze\x20at\x20publish,\x20IMMUT-001/IMMUT-002).\x0a'+'TWO\x20READINGS,\x20and\x20this\x20gate\x20cannot\x20decide\x20between\x20them\x20at\x20publish\x20time\x20—\x20the\x20chain\x20stores\x20no\x20'+('semantic\x20role\x20and\x20the\x20escrow\x20state\x20behind\x20\x27'+s+'\x27\x20is\x20not\x20statically\x20readable:\x0a')+('\x20\x20•\x20SANCTIONED\x20(ignore):\x20\x27'+s+'\x27\x20is\x20a\x20fund\x20endpoint\x20the\x20escrow\x20already\x20drained\x20at,\x20and\x20these\x20')+'ruling\x20edges\x20are\x20a\x20POST-SETTLEMENT\x20re-router.\x20This\x20is\x20the\x20shipped\x20licensing\x20shape\x20(\x27granted\x27)\x20'+'and\x20the\x20reason\x20the\x20scan-face\x20twin\x20R-ARB-ZERO-EXIT\x20exempts\x20declared\x20final/cancelled\x20nodes.\x0a'+('\x20\x20•\x20STRANDING\x20(fix\x20before\x20publish):\x20escrow\x20is\x20still\x20held\x20at\x20\x27'+s+'\x27.\x20Then\x20add\x20the\x20buyer\x27s\x20')+'single-hop\x20void\x20escape\x20—\x20WithdrawClaim\x20(operator\x20order_payer,\x20'+'pattern.identity_check_order_holder:\x20signer\x20==\x20order\x20owner)\x20into\x20a\x20cancelled\x20terminal.\x20No\x20'+'ruling\x20means\x20arb.claimed_by\x20is\x20none,\x20so\x20the\x20order\x20is\x20untouched\x20and\x20the\x20node-gated\x20refund\x20rail\x20'+'stays\x20open\x20for\x20full\x20escrow\x20back\x20(decision\x2011\x20KEEP\x20face:\x20never\x20add\x20a\x20claimed_by\x20leg\x20to\x20the\x20'+'fund\x20rail\x20itself\x20—\x20R-FUND-RAIL-CLAIMED-BY).\x20A\x20ForceSettleExpired\x20clock\x20edge\x20substitutes\x20ONLY\x20'+'if\x20it\x20routes\x20buyer-ward.\x0a'+('Decide\x20by\x20reading\x20this\x20store\x27s\x20allocator\x20rails:\x20if\x20no\x20rail\x20can\x20drain\x20at\x20\x27'+s+'\x27\x20or\x20before\x20it,\x20')+'this\x20is\x20the\x20stranding\x20reading.'});}}return b;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const ARBITRATION_ACTIVATION_NOTES=['ACTIVATION:\x20a\x20newly\x20created\x20Arbitration\x20is\x20born\x20PAUSED\x20(bPaused=true).\x20This\x20template\x20passes\x20pause:false\x20in\x20the\x20create\x20payload\x20to\x20unpause\x20in\x20the\x20SAME\x20transaction\x20(the\x20creator\x20is\x20an\x20admin\x20of\x20the\x20new\x20Permission,\x20so\x20the\x20356\x20check\x20passes).\x20If\x20the\x20unpause\x20is\x20skipped,\x20no\x20dispute\x20can\x20be\x20filed\x20(E_PAUSED)\x20until\x20a\x20separate\x20{operation_type:\x27arbitration\x27,\x20data:{object:\x27<arb>\x27,\x20pause:false}}\x20is\x20issued.','PERMISSIONS:\x20a\x20freshly\x20created\x20Arbitration\x27s\x20Permission\x20table\x20starts\x20EMPTY\x20—\x20its\x20CREATOR\x20is\x20seeded\x20as\x20the\x20sole\x20admin\x20and\x20always\x20passes\x20every\x20assert,\x20so\x20only\x20NON-admin\x20callers\x20abort\x20with\x20\x27Missing\x20permission\x27\x20(code\x205)\x20until\x20grants\x20are\x20issued\x20via\x20its\x20Permission\x20object:\x20356\x20(pause/unpause),\x20358\x20(vote),\x20359\x20(issue\x20ruling),\x20361\x20(arbitrator\x20material\x20confirm),\x20plus\x20357/362/363/364-368\x20(fee\x20/\x20deadline\x20/\x20reset\x20/\x20withdraw\x20/\x20receive).','OPEN\x20VOTE\x20IS\x20NOT\x20PERMISSIONLESS:\x20an\x20empty\x20voting_guard\x20means\x20EQUAL\x20WEIGHT\x20(1\x20person\x201\x20vote),\x20but\x20vote()\x20still\x20asserts\x20ARBITRATION_VOTE=358\x20—\x20\x27anyone\x20can\x20vote\x27\x20requires\x20granting\x20358\x20to\x20the\x20intended\x20voters\x20first.'];export const ARBITRATION_TEMPLATES=[{'id':'T-AB-01','name':'Single-arbiter\x20quick\x20ruling','description':'Simplest\x20Arbitration:\x20one\x20arbiter\x20makes\x20all\x20rulings.\x20voting_guard\x20empty\x20(open\x20vote,\x20but\x20only\x20arbiter\x20has\x20358\x20perm).\x20Suitable\x20for\x20small-scale\x20/\x20fast\x20dispute\x20resolution.','applicable_scenes':['arbitration_create','arbitration_ruling','arbitration_confirm'],'industry_tags':['retail','freelance','small_business'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner\x20(also\x20admin)','required':!![]},{'name':'arbiter_address','type':'address','description':'Single\x20arbiter\x20address\x20(gets\x20ARBITRATION_VOTE=358\x20+\x20ARBITRATION_ARBITRATION=359)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type\x20for\x20arbitration\x20fee\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20application\x20fee\x20(u64,\x20in\x20Coin\x20base\x20units)','required':![],'default':0x0},{'name':'arbitration_name','type':'string','description':'Local\x20name\x20for\x20the\x20Arbitration\x20object','required':![]}],'body':a=>({'object':{'name':a['arbitration_name']??'single_arb_arbitration','type_parameter':a['coin_type'],'permission':{'name':(a['arbitration_name']??'single_arb')+'_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x0),'pause':![]}),'notes':['voting_guard\x20remains\x20empty\x20→\x20plain\x20votes\x20hard-require\x20the\x20vote\x20permission\x20(358):\x20by\x20default\x20ONLY\x20the\x20creator-admin\x20can\x20vote\x20(here\x20the\x20arbiter).\x20This\x20is\x20NOT\x20open\x20voting\x20—\x20a\x20dispute\x20dead-locks\x20when\x20that\x20admin\x20is\x20unresponsive\x20(crs9-F-36;\x20R-ARB-VOTE-LOCK\x20blocks\x20the\x20service\x20publish).\x20Weight\x20semantics\x20stay\x20one-voter-one-vote;\x20for\x20real\x20open\x20voting\x20bind\x20the\x20always-true\x20guard\x20(T-AB-03\x20/\x20tpl_voting_guard_open_vote)','Only\x20arbiter_address\x20should\x20be\x20granted\x20ARBITRATION_VOTE\x20(358)\x20+\x20ARBITRATION_ARBITRATION\x20(359)','Fast\x20ruling:\x20arbiter\x20confirms\x20materials\x20→\x20votes\x20→\x20makes\x20ruling\x20in\x20one\x20session','Not\x20suitable\x20for\x20high-value\x20disputes\x20(no\x20consensus\x20check)',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-02','name':'Multi-arbiter\x20voting\x20(weighted)','description':'Multiple\x20arbiters\x20vote\x20with\x20weighted\x20voting_guard.\x20Each\x20arbiter\x27s\x20Guard\x20has\x20FixedValue\x20weight.\x20Ruling\x20requires\x20majority\x20weight.','applicable_scenes':['arbitration_create','arbitration_vote','arbitration_voting_guard_config'],'industry_tags':['governance','dao','committee'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'arbiter_guards','type':'string[]','description':'Guard\x20addresses\x20for\x20each\x20arbiter\x20(will\x20be\x20added\x20to\x20voting_guard)','required':!![]},{'name':'vote_weights','type':'string[]','description':'FixedValue\x20weights\x20for\x20each\x20arbiter\x20(parallel\x20to\x20arbiter_guards)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee','required':![],'default':0x0}],'body':a=>{const b=a['arbiter_guards']['map']((c,d)=>({'guard':c,'vote_weight':{'FixedValue':Number(a['vote_weights'][d]??0x1)}}));return{'object':{'name':'weighted_arbitration','type_parameter':a['coin_type'],'permission':{'name':'weighted_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x0),'pause':![],'voting_guard':{'op':'set','guards':b}};},'notes':['voting_guard\x20non-empty\x20→\x20votes\x20MUST\x20be\x20submitted\x20via\x20the\x20Passport-verified\x20voting\x20path','Each\x20arbiter\x27s\x20Guard\x20must\x20be\x20a\x20valid\x20Guard\x20object\x20they\x20can\x20submit\x20Passport\x20for','Consider:\x20max(arbiter_weights)\x20/\x20total_weights\x20<\x200.5\x20to\x20avoid\x20collusion\x20(see\x20R-AB-3-01)','Max\x2050\x20voting_guards\x20(MAX_VOTING_GUARD_COUNT)',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-03','name':'Public\x20voting\x20arbitration','description':'voting_guard\x20allows\x20public\x20to\x20vote\x20(anyone\x20with\x20a\x20Guard\x20can\x20vote).\x20Suitable\x20for\x20community-driven\x20dispute\x20resolution.','applicable_scenes':['arbitration_create','arbitration_vote','arbitration_voting_guard_config'],'industry_tags':['community','public_goods','social'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'public_guard','type':'address','description':'Guard\x20address\x20anyone\x20can\x20submit\x20Passport\x20for\x20(e.g.\x20based\x20on\x20account\x20existence)','required':!![]},{'name':'vote_weight','type':'number','description':'FixedValue\x20weight\x20per\x20public\x20voter\x20(e.g.\x201)','required':![],'default':0x1},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]}],'body':a=>({'object':{'name':'public_arbitration','type_parameter':a['coin_type'],'permission':{'name':'public_arb_permission'}},'description':a['description'],'fee':'0','pause':![],'voting_guard':{'op':'set','guards':[{'guard':a['public_guard'],'vote_weight':{'FixedValue':Number(a['vote_weight']??0x1)}}]}}),'notes':['Public\x20voting:\x20anyone\x20holding\x20the\x20public_guard\x20can\x20vote','This\x20shape\x20also\x20clears\x20R-ARB-VOTE-LOCK:\x20an\x20EMPTY\x20voting_guard\x20is\x20NOT\x20open\x20voting\x20(plain\x20votes\x20would\x20hard-require\x20the\x20vote\x20permission\x20358,\x20admin-only\x20by\x20default,\x20crs9-F-36)\x20—\x20the\x20always-true\x20guard\x20is\x20the\x20declared\x20voter\x20universe\x20(tpl_voting_guard_open_vote\x20is\x20the\x20guard-side\x20template)','Once\x20voting_guard\x20is\x20set,\x20every\x20vote\x20call\x20MUST\x20carry\x20voting_guard\x20in\x20the\x20payload\x20(a\x20plain\x20vote\x20aborts\x20on-chain\x20with\x20E_VOTING_GUARD_USED,\x20abort\x202)','Consider\x20using\x20GuardIdentifier\x20(dynamic\x20weight)\x20for\x20token-weighted\x20voting','Low/zero\x20fee\x20to\x20encourage\x20participation\x20—\x20but\x20watch\x20for\x20spam\x20disputes','Suitable\x20for\x20community\x20moderation,\x20content\x20disputes,\x20public\x20goods\x20arbitration',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-04','name':'Scope-restricted\x20arbitration','description':'usage_guard\x20filters\x20which\x20disputes\x20can\x20be\x20filed.\x20Only\x20users\x20passing\x20the\x20Guard\x20can\x20file\x20disputes.\x20Suitable\x20for\x20verified-merchant\x20/\x20KYC\x20arbitration.','applicable_scenes':['arbitration_create','arbitration_usage_guard_config','arbitration_dispute'],'industry_tags':['kyc','verified_merchant','enterprise'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'usage_guard_address','type':'address','description':'Guard\x20address\x20that\x20filters\x20who\x20can\x20file\x20disputes\x20(KYC/verification)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'arbiter_address','type':'address','description':'Arbiter\x20address\x20(single\x20arbiter\x20for\x20simplicity)','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(higher\x20to\x20deter\x20spam)','required':![],'default':0x3b9aca00}],'body':a=>({'object':{'name':'restricted_arbitration','type_parameter':a['coin_type'],'permission':{'name':'restricted_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x3b9aca00),'pause':![],'usage_guard':a['usage_guard_address']}),'notes':['usage_guard\x20set\x20→\x20disputes\x20MUST\x20be\x20filed\x20via\x20the\x20Passport-verified\x20dispute\x20variant','Guard\x20verifies:\x20KYC\x20/\x20membership\x20/\x20token-balance\x20/\x20etc.','Higher\x20fee\x20(default\x201\x20WOW)\x20to\x20deter\x20spam\x20from\x20verified\x20users','Arbiter\x20should\x20also\x20be\x20Guard-verified\x20for\x20consistency',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-05','name':'Arbitration\x20committee','description':'Multi-arbiter\x20committee\x20with\x20weighted\x20voting\x20+\x20usage_guard.\x20Most\x20controlled\x20configuration\x20—\x20restricted\x20dispute\x20filing\x20+\x20weighted\x20voting\x20+\x20multi-arbiter\x20ruling.','applicable_scenes':['arbitration_create','arbitration_voting_guard_config','arbitration_usage_guard_config','arbitration_ruling'],'industry_tags':['enterprise','legal','high_value'],'params':[{'name':'owner_address','type':'address','description':'Committee\x20owner','required':!![]},{'name':'committee_guards','type':'string[]','description':'Guard\x20addresses\x20for\x20each\x20committee\x20member','required':!![]},{'name':'member_weights','type':'string[]','description':'Vote\x20weights\x20for\x20each\x20member\x20(parallel\x20to\x20committee_guards)','required':!![]},{'name':'membership_guard','type':'address','description':'usage_guard\x20for\x20dispute\x20filing\x20(membership\x20verification)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(high\x20for\x20high-value\x20disputes)','required':![],'default':0x2540be400}],'body':a=>{const b=a['committee_guards']['map']((c,d)=>({'guard':c,'vote_weight':{'FixedValue':Number(a['member_weights'][d]??0x1)}}));return{'object':{'name':'committee_arbitration','type_parameter':a['coin_type'],'permission':{'name':'committee_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x2540be400),'pause':![],'voting_guard':{'op':'set','guards':b},'usage_guard':a['membership_guard']};},'notes':['Most\x20restrictive\x20config:\x20weighted\x20voting\x20+\x20restricted\x20filing','Suitable\x20for\x20high-value\x20B2B\x20disputes,\x20legal\x20arbitration,\x20enterprise\x20SLA\x20enforcement','Committee\x20members\x20should\x20have\x20clear\x20escalation\x20/\x20tiebreaker\x20rules','All\x20disputes\x20require\x20Passport\x20(both\x20filing\x20and\x20voting)',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-06','name':'Fee-split\x20arbitration','description':'Pre-configured\x20fee-distribution\x20destination.\x20After\x20the\x20fee\x20withdrawal\x20(364),\x20fees\x20are\x20automatically\x20distributed\x20to\x20the\x20Allocation\x20(for\x20arbiter\x20compensation).','applicable_scenes':['arbitration_create','arbitration_arb_withdraw','arbitration_fees_alloc'],'industry_tags':['marketplace','service','platform'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'allocation_address','type':'address','description':'Allocation\x20object\x20address\x20for\x20fee\x20distribution\x20to\x20arbiters','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'arbiter_address','type':'address','description':'Arbiter\x20(single\x20for\x20simplicity)','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(will\x20be\x20split\x20to\x20arbiters\x20via\x20Allocation)','required':![],'default':0x12a05f200}],'body':a=>({'object':{'name':'feesplit_arbitration','type_parameter':a['coin_type'],'permission':{'name':'feesplit_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x12a05f200),'pause':![]}),'notes':['Fee-split\x20is\x20a\x202-step\x20process:\x20withdraw\x20fees\x20from\x20the\x20Arb\x20object\x20(364)\x20→\x20transfer\x20them\x20out\x20of\x20the\x20Arbitration\x20balance\x20(365/366)','Fee\x20withdrawal\x20(364)\x20moves\x20fees\x20from\x20the\x20Arb\x20object\x20into\x20the\x20Arbitration\x20balance','Fee\x20distribution\x20(365)\x20or\x20the\x20balance\x20transfer\x20(366)\x20moves\x20fees\x20to\x20the\x20Allocation/Treasury','Allocation\x20policy\x20determines\x20how\x20fees\x20are\x20split\x20among\x20arbiters','Payment\x20object\x20is\x20created\x20for\x20bookkeeping\x20(payment_remark\x20+\x20payment_index)',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-07','name':'Appeal\x20arbitration\x20(reset\x20flow)','description':'Template\x20for\x20reset\x20operation\x20—\x20disputant\x20objects\x20to\x20ruling\x20and\x20resubmits\x20materials.\x20Restarts\x20Arb\x20lifecycle\x20from\x20Principal_confirming.','applicable_scenes':['arbitration_reset','arbitration_ruling'],'industry_tags':['legal','appeal','high_value'],'params':[{'name':'arbitration_object','type':'address','description':'Existing\x20Arbitration\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'Arb\x20object\x20address\x20to\x20reset\x20(must\x20be\x20in\x20Objectionable/Arbitrated\x20status)','required':!![]},{'name':'reset_feedback','type':'string','description':'Feedback\x20explaining\x20why\x20disputant\x20objects\x20to\x20the\x20ruling','required':!![]}],'body':a=>({'object':a['arbitration_object'],'reset':{'arb':a['arb_address'],'feedback':a['reset_feedback']}}),'notes':['Precondition:\x20Arb\x20must\x20be\x20in\x20Objectionable\x20(4)\x20or\x20Arbitrated\x20(3)\x20status','Post-condition:\x20Arb\x20status\x20→\x20Principal_confirming\x20(0),\x20lifecycle\x20restarts','Original\x20ruling\x20is\x20invalidated\x20—\x20new\x20voting\x20+\x20ruling\x20required','Consider\x20capping\x20reset\x20count\x20to\x20prevent\x20infinite\x20appeals','reset\x20feedback\x20is\x20permanent\x20—\x20recorded\x20on-chain\x20for\x20audit\x20trail']}];export const ARBITRATION_TEMPLATES_VERSION='1.0.0';export function getAllTemplates(){return[...ARBITRATION_TEMPLATES];}export function getTemplateById(a){return ARBITRATION_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return ARBITRATION_TEMPLATES['filter'](b=>b['applicable_scenes']['includes'](a));}export function getTemplatesByIndustry(a){return ARBITRATION_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function suggestTemplateForScene(a){const b=getTemplatesByScene(a);return b['length']>0x0?b[0x0]:undefined;}export function listTemplates(){return ARBITRATION_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenes':a['applicable_scenes']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}return{'ok':!![],'body':c['body'](b)};}
|
|
1
|
+
export const ARBITRATION_ACTIVATION_NOTES=['ACTIVATION:\x20a\x20newly\x20created\x20Arbitration\x20is\x20born\x20PAUSED\x20(bPaused=true).\x20This\x20template\x20passes\x20pause:false\x20in\x20the\x20create\x20payload\x20to\x20unpause\x20in\x20the\x20SAME\x20transaction\x20(the\x20creator\x20is\x20an\x20admin\x20of\x20the\x20new\x20Permission,\x20so\x20the\x20356\x20check\x20passes).\x20If\x20the\x20unpause\x20is\x20skipped,\x20no\x20dispute\x20can\x20be\x20filed\x20(E_PAUSED)\x20until\x20a\x20separate\x20{operation_type:\x27arbitration\x27,\x20data:{object:\x27<arb>\x27,\x20pause:false}}\x20is\x20issued.','PERMISSIONS:\x20a\x20freshly\x20created\x20Arbitration\x27s\x20Permission\x20table\x20starts\x20EMPTY\x20—\x20its\x20CREATOR\x20is\x20seeded\x20as\x20the\x20sole\x20admin\x20and\x20always\x20passes\x20every\x20assert,\x20so\x20only\x20NON-admin\x20callers\x20abort\x20with\x20\x27Missing\x20permission\x27\x20(code\x205)\x20until\x20grants\x20are\x20issued\x20via\x20its\x20Permission\x20object:\x20356\x20(pause/unpause),\x20358\x20(vote),\x20359\x20(issue\x20ruling),\x20361\x20(arbitrator\x20material\x20confirm),\x20plus\x20357/362/363/364-368\x20(fee\x20/\x20deadline\x20/\x20reset\x20/\x20withdraw\x20/\x20receive).','OPEN\x20VOTE\x20IS\x20NOT\x20PERMISSIONLESS:\x20an\x20empty\x20voting_guard\x20means\x20EQUAL\x20WEIGHT\x20(1\x20person\x201\x20vote),\x20but\x20vote()\x20still\x20asserts\x20ARBITRATION_VOTE=358\x20—\x20\x27anyone\x20can\x20vote\x27\x20requires\x20granting\x20358\x20to\x20the\x20intended\x20voters\x20first.','VOTER\x20UNIVERSE\x20IS\x20DECLARED\x20BY\x20THE\x20voting_guard:\x20always-true\x20root\x20=\x20public\x20venue\x20(tpl_voting_guard_open_vote);\x20party-restricted\x20root\x20=\x20closed\x20venue\x20(tpl_voting_guard_party_only:\x20panel\x20vec_contains_address\x20∨\x20order.owner\x20with\x20the\x20arb.order==order\x20anti-spoof\x20leg).\x20Upw2-mn\x20pddk-b4:\x20a\x20closed\x20venue\x20shipping\x20a\x20constant-true\x20guard\x20let\x20an\x20outsider\x20vote\x20—\x20pick\x20the\x20twin\x20deliberately.'];export const ARBITRATION_TEMPLATES=[{'id':'T-AB-01','name':'Single-arbiter\x20quick\x20ruling','description':'Simplest\x20Arbitration:\x20one\x20arbiter\x20makes\x20all\x20rulings.\x20voting_guard\x20empty\x20(open\x20vote,\x20but\x20only\x20arbiter\x20has\x20358\x20perm).\x20Suitable\x20for\x20small-scale\x20/\x20fast\x20dispute\x20resolution.','applicable_scenes':['arbitration_create','arbitration_ruling','arbitration_confirm'],'industry_tags':['retail','freelance','small_business'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner\x20(also\x20admin)','required':!![]},{'name':'arbiter_address','type':'address','description':'Single\x20arbiter\x20address\x20(gets\x20ARBITRATION_VOTE=358\x20+\x20ARBITRATION_ARBITRATION=359)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type\x20for\x20arbitration\x20fee\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20application\x20fee\x20(u64,\x20in\x20Coin\x20base\x20units)','required':![],'default':0x0},{'name':'arbitration_name','type':'string','description':'Local\x20name\x20for\x20the\x20Arbitration\x20object','required':![]}],'body':a=>({'object':{'name':a['arbitration_name']??'single_arb_arbitration','type_parameter':a['coin_type'],'permission':{'name':(a['arbitration_name']??'single_arb')+'_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x0),'pause':![]}),'notes':['voting_guard\x20remains\x20empty\x20→\x20plain\x20votes\x20hard-require\x20the\x20vote\x20permission\x20(358):\x20by\x20default\x20ONLY\x20the\x20creator-admin\x20can\x20vote\x20(here\x20the\x20arbiter).\x20This\x20is\x20NOT\x20open\x20voting\x20—\x20a\x20dispute\x20dead-locks\x20when\x20that\x20admin\x20is\x20unresponsive\x20(crs9-F-36;\x20R-ARB-VOTE-LOCK\x20blocks\x20the\x20service\x20publish).\x20Weight\x20semantics\x20stay\x20one-voter-one-vote;\x20for\x20real\x20open\x20voting\x20bind\x20the\x20always-true\x20guard\x20(T-AB-03\x20/\x20tpl_voting_guard_open_vote);\x20for\x20a\x20closed\x20venue\x20where\x20only\x20the\x20dispute\x20parties\x20+\x20venue\x20staff\x20may\x20vote,\x20bind\x20tpl_voting_guard_party_only\x20instead','Only\x20arbiter_address\x20should\x20be\x20granted\x20ARBITRATION_VOTE\x20(358)\x20+\x20ARBITRATION_ARBITRATION\x20(359)','Fast\x20ruling:\x20arbiter\x20confirms\x20materials\x20→\x20votes\x20→\x20makes\x20ruling\x20in\x20one\x20session','Not\x20suitable\x20for\x20high-value\x20disputes\x20(no\x20consensus\x20check)',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-02','name':'Multi-arbiter\x20voting\x20(weighted)','description':'Multiple\x20arbiters\x20vote\x20with\x20weighted\x20voting_guard.\x20Each\x20arbiter\x27s\x20Guard\x20has\x20FixedValue\x20weight.\x20Ruling\x20requires\x20majority\x20weight.','applicable_scenes':['arbitration_create','arbitration_vote','arbitration_voting_guard_config'],'industry_tags':['governance','dao','committee'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'arbiter_guards','type':'string[]','description':'Guard\x20addresses\x20for\x20each\x20arbiter\x20(will\x20be\x20added\x20to\x20voting_guard)','required':!![]},{'name':'vote_weights','type':'string[]','description':'FixedValue\x20weights\x20for\x20each\x20arbiter\x20(parallel\x20to\x20arbiter_guards)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee','required':![],'default':0x0}],'body':a=>{const b=a['arbiter_guards']['map']((c,d)=>({'guard':c,'vote_weight':{'FixedValue':Number(a['vote_weights'][d]??0x1)}}));return{'object':{'name':'weighted_arbitration','type_parameter':a['coin_type'],'permission':{'name':'weighted_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x0),'pause':![],'voting_guard':{'op':'set','guards':b}};},'notes':['voting_guard\x20non-empty\x20→\x20votes\x20MUST\x20be\x20submitted\x20via\x20the\x20Passport-verified\x20voting\x20path','Each\x20arbiter\x27s\x20Guard\x20must\x20be\x20a\x20valid\x20Guard\x20object\x20they\x20can\x20submit\x20Passport\x20for','Consider:\x20max(arbiter_weights)\x20/\x20total_weights\x20<\x200.5\x20to\x20avoid\x20collusion\x20(see\x20R-AB-3-01)','Max\x2050\x20voting_guards\x20(MAX_VOTING_GUARD_COUNT)',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-03','name':'Public\x20voting\x20arbitration','description':'voting_guard\x20allows\x20public\x20to\x20vote\x20(anyone\x20with\x20a\x20Guard\x20can\x20vote).\x20Suitable\x20for\x20community-driven\x20dispute\x20resolution.','applicable_scenes':['arbitration_create','arbitration_vote','arbitration_voting_guard_config'],'industry_tags':['community','public_goods','social'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'public_guard','type':'address','description':'Guard\x20address\x20anyone\x20can\x20submit\x20Passport\x20for\x20(e.g.\x20based\x20on\x20account\x20existence)','required':!![]},{'name':'vote_weight','type':'number','description':'FixedValue\x20weight\x20per\x20public\x20voter\x20(e.g.\x201)','required':![],'default':0x1},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]}],'body':a=>({'object':{'name':'public_arbitration','type_parameter':a['coin_type'],'permission':{'name':'public_arb_permission'}},'description':a['description'],'fee':'0','pause':![],'voting_guard':{'op':'set','guards':[{'guard':a['public_guard'],'vote_weight':{'FixedValue':Number(a['vote_weight']??0x1)}}]}}),'notes':['Public\x20voting:\x20anyone\x20holding\x20the\x20public_guard\x20can\x20vote','This\x20shape\x20also\x20clears\x20R-ARB-VOTE-LOCK:\x20an\x20EMPTY\x20voting_guard\x20is\x20NOT\x20open\x20voting\x20(plain\x20votes\x20would\x20hard-require\x20the\x20vote\x20permission\x20358,\x20admin-only\x20by\x20default,\x20crs9-F-36)\x20—\x20the\x20always-true\x20guard\x20is\x20the\x20declared\x20voter\x20universe\x20(tpl_voting_guard_open_vote\x20is\x20the\x20guard-side\x20template).\x20Use\x20this\x20shape\x20ONLY\x20for\x20deliberately\x20public\x20venues:\x20a\x20closed\x20commercial\x20venue\x20must\x20restrict\x20its\x20voter\x20universe\x20(tpl_voting_guard_party_only\x20—\x20the\x20parties\x20+\x20venue\x20panel),\x20or\x20every\x20Passport\x20holder\x20can\x20vote\x20(upw2-mn\x20pddk-b4)','Once\x20voting_guard\x20is\x20set,\x20every\x20vote\x20call\x20MUST\x20carry\x20voting_guard\x20in\x20the\x20payload\x20(a\x20plain\x20vote\x20aborts\x20on-chain\x20with\x20E_VOTING_GUARD_USED,\x20abort\x202)','Consider\x20using\x20GuardIdentifier\x20(dynamic\x20weight)\x20for\x20token-weighted\x20voting','Low/zero\x20fee\x20to\x20encourage\x20participation\x20—\x20but\x20watch\x20for\x20spam\x20disputes','Suitable\x20for\x20community\x20moderation,\x20content\x20disputes,\x20public\x20goods\x20arbitration',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-04','name':'Scope-restricted\x20arbitration','description':'usage_guard\x20filters\x20which\x20disputes\x20can\x20be\x20filed.\x20Only\x20users\x20passing\x20the\x20Guard\x20can\x20file\x20disputes.\x20Suitable\x20for\x20verified-merchant\x20/\x20KYC\x20arbitration.','applicable_scenes':['arbitration_create','arbitration_usage_guard_config','arbitration_dispute'],'industry_tags':['kyc','verified_merchant','enterprise'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'usage_guard_address','type':'address','description':'Guard\x20address\x20that\x20filters\x20who\x20can\x20file\x20disputes\x20(KYC/verification)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'arbiter_address','type':'address','description':'Arbiter\x20address\x20(single\x20arbiter\x20for\x20simplicity)','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(higher\x20to\x20deter\x20spam)','required':![],'default':0x3b9aca00}],'body':a=>({'object':{'name':'restricted_arbitration','type_parameter':a['coin_type'],'permission':{'name':'restricted_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x3b9aca00),'pause':![],'usage_guard':a['usage_guard_address']}),'notes':['usage_guard\x20set\x20→\x20disputes\x20MUST\x20be\x20filed\x20via\x20the\x20Passport-verified\x20dispute\x20variant','Guard\x20verifies:\x20KYC\x20/\x20membership\x20/\x20token-balance\x20/\x20etc.','Higher\x20fee\x20(default\x201\x20WOW)\x20to\x20deter\x20spam\x20from\x20verified\x20users','Arbiter\x20should\x20also\x20be\x20Guard-verified\x20for\x20consistency',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-05','name':'Arbitration\x20committee','description':'Multi-arbiter\x20committee\x20with\x20weighted\x20voting\x20+\x20usage_guard.\x20Most\x20controlled\x20configuration\x20—\x20restricted\x20dispute\x20filing\x20+\x20weighted\x20voting\x20+\x20multi-arbiter\x20ruling.','applicable_scenes':['arbitration_create','arbitration_voting_guard_config','arbitration_usage_guard_config','arbitration_ruling'],'industry_tags':['enterprise','legal','high_value'],'params':[{'name':'owner_address','type':'address','description':'Committee\x20owner','required':!![]},{'name':'committee_guards','type':'string[]','description':'Guard\x20addresses\x20for\x20each\x20committee\x20member','required':!![]},{'name':'member_weights','type':'string[]','description':'Vote\x20weights\x20for\x20each\x20member\x20(parallel\x20to\x20committee_guards)','required':!![]},{'name':'membership_guard','type':'address','description':'usage_guard\x20for\x20dispute\x20filing\x20(membership\x20verification)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(high\x20for\x20high-value\x20disputes)','required':![],'default':0x2540be400}],'body':a=>{const b=a['committee_guards']['map']((c,d)=>({'guard':c,'vote_weight':{'FixedValue':Number(a['member_weights'][d]??0x1)}}));return{'object':{'name':'committee_arbitration','type_parameter':a['coin_type'],'permission':{'name':'committee_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x2540be400),'pause':![],'voting_guard':{'op':'set','guards':b},'usage_guard':a['membership_guard']};},'notes':['Most\x20restrictive\x20config:\x20weighted\x20voting\x20+\x20restricted\x20filing','Suitable\x20for\x20high-value\x20B2B\x20disputes,\x20legal\x20arbitration,\x20enterprise\x20SLA\x20enforcement','Committee\x20members\x20should\x20have\x20clear\x20escalation\x20/\x20tiebreaker\x20rules','All\x20disputes\x20require\x20Passport\x20(both\x20filing\x20and\x20voting)',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-06','name':'Fee-split\x20arbitration','description':'Pre-configured\x20fee-distribution\x20destination.\x20After\x20the\x20fee\x20withdrawal\x20(364),\x20fees\x20are\x20automatically\x20distributed\x20to\x20the\x20Allocation\x20(for\x20arbiter\x20compensation).','applicable_scenes':['arbitration_create','arbitration_arb_withdraw','arbitration_fees_alloc'],'industry_tags':['marketplace','service','platform'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'allocation_address','type':'address','description':'Allocation\x20object\x20address\x20for\x20fee\x20distribution\x20to\x20arbiters','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'arbiter_address','type':'address','description':'Arbiter\x20(single\x20for\x20simplicity)','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(will\x20be\x20split\x20to\x20arbiters\x20via\x20Allocation)','required':![],'default':0x12a05f200}],'body':a=>({'object':{'name':'feesplit_arbitration','type_parameter':a['coin_type'],'permission':{'name':'feesplit_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x12a05f200),'pause':![]}),'notes':['Fee-split\x20is\x20a\x202-step\x20process:\x20withdraw\x20fees\x20from\x20the\x20Arb\x20object\x20(364)\x20→\x20transfer\x20them\x20out\x20of\x20the\x20Arbitration\x20balance\x20(365/366)','Fee\x20withdrawal\x20(364)\x20moves\x20fees\x20from\x20the\x20Arb\x20object\x20into\x20the\x20Arbitration\x20balance','Fee\x20distribution\x20(365)\x20or\x20the\x20balance\x20transfer\x20(366)\x20moves\x20fees\x20to\x20the\x20Allocation/Treasury','Allocation\x20policy\x20determines\x20how\x20fees\x20are\x20split\x20among\x20arbiters','Payment\x20object\x20is\x20created\x20for\x20bookkeeping\x20(payment_remark\x20+\x20payment_index)',...ARBITRATION_ACTIVATION_NOTES]},{'id':'T-AB-07','name':'Appeal\x20arbitration\x20(reset\x20flow)','description':'Template\x20for\x20reset\x20operation\x20—\x20disputant\x20objects\x20to\x20ruling\x20and\x20resubmits\x20materials.\x20Restarts\x20Arb\x20lifecycle\x20from\x20Principal_confirming.','applicable_scenes':['arbitration_reset','arbitration_ruling'],'industry_tags':['legal','appeal','high_value'],'params':[{'name':'arbitration_object','type':'address','description':'Existing\x20Arbitration\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'Arb\x20object\x20address\x20to\x20reset\x20(must\x20be\x20in\x20Objectionable/Arbitrated\x20status)','required':!![]},{'name':'reset_feedback','type':'string','description':'Feedback\x20explaining\x20why\x20disputant\x20objects\x20to\x20the\x20ruling','required':!![]}],'body':a=>({'object':a['arbitration_object'],'reset':{'arb':a['arb_address'],'feedback':a['reset_feedback']}}),'notes':['Precondition:\x20Arb\x20must\x20be\x20in\x20Objectionable\x20(4)\x20or\x20Arbitrated\x20(3)\x20status','Post-condition:\x20Arb\x20status\x20→\x20Principal_confirming\x20(0),\x20lifecycle\x20restarts','Original\x20ruling\x20is\x20invalidated\x20—\x20new\x20voting\x20+\x20ruling\x20required','Consider\x20capping\x20reset\x20count\x20to\x20prevent\x20infinite\x20appeals','reset\x20feedback\x20is\x20permanent\x20—\x20recorded\x20on-chain\x20for\x20audit\x20trail']}];export const ARBITRATION_TEMPLATES_VERSION='1.0.0';export function getAllTemplates(){return[...ARBITRATION_TEMPLATES];}export function getTemplateById(a){return ARBITRATION_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return ARBITRATION_TEMPLATES['filter'](b=>b['applicable_scenes']['includes'](a));}export function getTemplatesByIndustry(a){return ARBITRATION_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function suggestTemplateForScene(a){const b=getTemplatesByScene(a);return b['length']>0x0?b[0x0]:undefined;}export function listTemplates(){return ARBITRATION_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenes':a['applicable_scenes']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}return{'ok':!![],'body':c['body'](b)};}
|
|
@@ -47,12 +47,24 @@ export declare function computeTerminalReachability(nodes: unknown[]): {
|
|
|
47
47
|
terminals: string[];
|
|
48
48
|
unreachable: string[];
|
|
49
49
|
};
|
|
50
|
+
export interface ChainRailNode {
|
|
51
|
+
name: string;
|
|
52
|
+
semanticRole?: string;
|
|
53
|
+
fromNodes?: string[];
|
|
54
|
+
}
|
|
55
|
+
export declare function chainNodeRailMatrix(nodes: Array<{
|
|
56
|
+
name?: unknown;
|
|
57
|
+
pairs?: Array<{
|
|
58
|
+
prev_node?: unknown;
|
|
59
|
+
} | undefined> | undefined;
|
|
60
|
+
}>): ChainRailNode[];
|
|
50
61
|
export declare const REVIEW_FAMILY_NODE_REGEX: RegExp;
|
|
51
62
|
export declare function lintReviewLockedTerminals(nodes: unknown[], guardPins: Map<string, string[]>): {
|
|
52
63
|
critical: string[];
|
|
53
64
|
warnings: string[];
|
|
54
65
|
};
|
|
55
66
|
export declare function arbitrationVotingLockDetail(votingGuard: unknown): string | null;
|
|
67
|
+
export declare function arbitrationVotingGuardNoIdentityDetail(root: unknown, table?: unknown): string | null;
|
|
56
68
|
export declare function guardTimeProfileDetail(g: {
|
|
57
69
|
ref: string;
|
|
58
70
|
description?: unknown;
|
|
@@ -107,4 +119,4 @@ export declare function hasBlockingErrors(findings: AuditFinding[]): boolean;
|
|
|
107
119
|
export declare function getErrors(findings: AuditFinding[]): AuditFinding[];
|
|
108
120
|
export declare function getWarnings(findings: AuditFinding[]): AuditFinding[];
|
|
109
121
|
export declare function summarizeFindings(findings: AuditFinding[]): string;
|
|
110
|
-
export declare const AUDIT_RULES_VERSION =
|
|
122
|
+
export declare const AUDIT_RULES_VERSION = 12;
|