> ## Documentation Index
> Fetch the complete documentation index at: https://docs.canton.network/llms.txt
> Use this file to discover all available pages before exploring further.

# Splice.Util.FeaturedApp.WalletUserProxy

> Documentation for Splice.Util.FeaturedApp.WalletUserProxy

Utility template for proxying token standard choices so that featured app markers are created for a wallet app provider by their users when they are using token standard workflows.

You can either use this template directly, or copy the code under a **different package name** and a **different module name**.

Note: use the `DelegateProxy` if you are building an app that uses multiple parties for its own operations.

## Templates

<div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxy-95528">
  **template** WalletUserProxy
</div>

> A proxy to attribute the activity of a wallet user to the wallet app provider.
>
> The intended usage is for the wallet app provider to
>
> 1. create a `WalletUserProxy` contract with the `provider` set to the app provider's party
> 2. setup their wallet frontend such that users call the proxy's choices instead of the original token standard choices.
>
> Note that the weights are specified on the proxy contract, so that they are under the providers control. If they were specified on the choices, then the user could in principle change them, and grant themselves a higher reward than intended.
>
> Note also that the batch transfer support can be used without having a featured app right.
>
> Signatory: provider
>
> | Field              | Type                                                                                                                                                                                            | Description                                                                    |
> | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
> | provider           | [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932)                                                                                                        | The app provider whose featured app right should be triggered                  |
> | providerWeight     | [Decimal](/appdev/reference/daml-standard-library/prelude#type-ghc-types-decimal-18135)                                                                                                         | Reward weight for the provider                                                 |
> | userWeight         | [Decimal](/appdev/reference/daml-standard-library/prelude#type-ghc-types-decimal-18135)                                                                                                         | Reward weight for the user, set to 0.0 if the user should not receive a reward |
> | extraBeneficiaries | \[AppRewardBeneficiary]                                                                                                                                                                         | Extra beneficiaries to add                                                     |
> | optAllowList       | [Optional](/appdev/reference/daml-standard-library/prelude#type-da-internal-prelude-optional-37153) \[[Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932)] | An optional allow list of parties that can use the proxy                       |
>
> * **Choice** Archive
>
>   Controller: provider
>
>   Returns: ()
>
>   (no fields)
>
> * <div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxyallocationfactoryallocate-70856">
>     **Choice** WalletUserProxy\_AllocationFactory\_Allocate
>   </div>
>
>   Controller: (DA.Internal.Record.getField @"user" proxyArg)
>
>   Returns: ProxyResult AllocationInstructionResult
>
>   | Field    | Type                                                                                                                 | Description |
>   | -------- | -------------------------------------------------------------------------------------------------------------------- | ----------- |
>   | cid      | [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) AllocationFactory |             |
>   | proxyArg | ProxyArg AllocationFactory\_Allocate                                                                                 |             |
>
> * <div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxyallocationwithdraw-8358">
>     **Choice** WalletUserProxy\_Allocation\_Withdraw
>   </div>
>
>   Controller: (DA.Internal.Record.getField @"user" proxyArg)
>
>   Returns: ProxyResult Allocation\_WithdrawResult
>
>   | Field    | Type                                                                                                          | Description |
>   | -------- | ------------------------------------------------------------------------------------------------------------- | ----------- |
>   | cid      | [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) Allocation |             |
>   | proxyArg | ProxyArg Allocation\_Withdraw                                                                                 |             |
>
> * <div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxybatchtransfer-93002">
>     **Choice** WalletUserProxy\_BatchTransfer
>   </div>
>
>   Controller: getFirstSender transferCalls
>
>   Returns: WalletUserProxy\_BatchTransferResult
>
>   | Field                  | Type                                                                                                                                                                                                                      | Description                                                                                                                                                                                                                                                                                                                                                                                                                                            |
>   | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
>   | transferCalls          | \[TransferFactoryCall]                                                                                                                                                                                                    | Transfers to execute via their respective transfer factories. Input holdings are properly threaded through for all instrument-ids. The sender change is always added back as an additional input to follow-up transfers for the same instrument-ids. Note that we accept fully specified calls to factories for maximum flexibility. Some token admins may actually use different factories for different recipients, e.g., to implement preapprovals. |
>   | optFeaturedAppRightCid | [Optional](/appdev/reference/daml-standard-library/prelude#type-da-internal-prelude-optional-37153) ([ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) FeaturedAppRight) | The featured app right contract of the provider to use on every transfer. Optional so the batched choice can be used without a featured app right.                                                                                                                                                                                                                                                                                                     |
>
> * <div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxypublicfetch-18804">
>     **Choice** WalletUserProxy\_PublicFetch
>   </div>
>
>   Controller: actor
>
>   Returns: WalletUserProxy
>
>   | Field | Type                                                                                     | Description |
>   | ----- | ---------------------------------------------------------------------------------------- | ----------- |
>   | actor | [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932) |             |
>
> * <div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxytransferfactorytransfer-32457">
>     **Choice** WalletUserProxy\_TransferFactory\_Transfer
>   </div>
>
>   Controller: (DA.Internal.Record.getField @"user" proxyArg)
>
>   Returns: ProxyResult TransferInstructionResult
>
>   | Field    | Type                                                                                                               | Description |
>   | -------- | ------------------------------------------------------------------------------------------------------------------ | ----------- |
>   | cid      | [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) TransferFactory |             |
>   | proxyArg | ProxyArg TransferFactory\_Transfer                                                                                 |             |
>
> * <div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxytransferinstructionaccept-38416">
>     **Choice** WalletUserProxy\_TransferInstruction\_Accept
>   </div>
>
>   Controller: (DA.Internal.Record.getField @"user" proxyArg)
>
>   Returns: ProxyResult TransferInstructionResult
>
>   | Field    | Type                                                                                                                   | Description |
>   | -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------- |
>   | cid      | [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) TransferInstruction |             |
>   | proxyArg | ProxyArg TransferInstruction\_Accept                                                                                   |             |
>
> * <div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxytransferinstructionreject-59713">
>     **Choice** WalletUserProxy\_TransferInstruction\_Reject
>   </div>
>
>   Controller: (DA.Internal.Record.getField @"user" proxyArg)
>
>   Returns: ProxyResult TransferInstructionResult
>
>   | Field    | Type                                                                                                                   | Description |
>   | -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------- |
>   | cid      | [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) TransferInstruction |             |
>   | proxyArg | ProxyArg TransferInstruction\_Reject                                                                                   |             |
>
> * <div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxytransferinstructionwithdraw-40772">
>     **Choice** WalletUserProxy\_TransferInstruction\_Withdraw
>   </div>
>
>   Controller: (DA.Internal.Record.getField @"user" proxyArg)
>
>   Returns: ProxyResult TransferInstructionResult
>
>   | Field    | Type                                                                                                                   | Description |
>   | -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------- |
>   | cid      | [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) TransferInstruction |             |
>   | proxyArg | ProxyArg TransferInstruction\_Withdraw                                                                                 |             |

## Data Types

<div id="type-splice-util-featuredapp-walletuserproxy-instrumentholdingmap-68187">
  **type** InstrumentHoldingMap
  \= [Map](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-map-90052) InstrumentId \[[ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) Holding]

  **instance** GetField "senderChangeMap" WalletUserProxy\_BatchTransferResult InstrumentHoldingMap

  **instance** SetField "senderChangeMap" WalletUserProxy\_BatchTransferResult InstrumentHoldingMap
</div>

<div id="type-splice-util-featuredapp-walletuserproxy-proxyarg-78125">
  **data** ProxyArg arg
</div>

> Generic argument to the proxy choices.
>
> <div id="constr-splice-util-featuredapp-walletuserproxy-proxyarg-32408">
>   ProxyArg
> </div>
>
> > | Field               | Type                                                                                                                | Description                                                    |
> > | ------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
> > | user                | [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932)                            | The wallet user that is using the wallet to exercise a choice. |
> > | choiceArg           | arg                                                                                                                 | The argument to the choice that the user is exercising.        |
> > | featuredAppRightCid | [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) FeaturedAppRight | The featured app right contract of the provider.               |
>
> **instance** [Eq](/appdev/reference/daml-standard-library/prelude#class-ghc-classes-eq-22713) arg => [Eq](/appdev/reference/daml-standard-library/prelude#class-ghc-classes-eq-22713) (ProxyArg arg)
>
> **instance** [Show](/appdev/reference/daml-standard-library/prelude#class-ghc-show-show-65360) arg => [Show](/appdev/reference/daml-standard-library/prelude#class-ghc-show-show-65360) (ProxyArg arg)
>
> **instance** GetField "choiceArg" (ProxyArg arg) arg
>
> **instance** GetField "featuredAppRightCid" (ProxyArg arg) ([ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) FeaturedAppRight)
>
> **instance** GetField "proxyArg" WalletUserProxy\_AllocationFactory\_Allocate (ProxyArg AllocationFactory\_Allocate)
>
> **instance** GetField "proxyArg" WalletUserProxy\_Allocation\_Withdraw (ProxyArg Allocation\_Withdraw)
>
> **instance** GetField "proxyArg" WalletUserProxy\_TransferFactory\_Transfer (ProxyArg TransferFactory\_Transfer)
>
> **instance** GetField "proxyArg" WalletUserProxy\_TransferInstruction\_Accept (ProxyArg TransferInstruction\_Accept)
>
> **instance** GetField "proxyArg" WalletUserProxy\_TransferInstruction\_Reject (ProxyArg TransferInstruction\_Reject)
>
> **instance** GetField "proxyArg" WalletUserProxy\_TransferInstruction\_Withdraw (ProxyArg TransferInstruction\_Withdraw)
>
> **instance** GetField "user" (ProxyArg arg) [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932)
>
> **instance** SetField "choiceArg" (ProxyArg arg) arg
>
> **instance** SetField "featuredAppRightCid" (ProxyArg arg) ([ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) FeaturedAppRight)
>
> **instance** SetField "proxyArg" WalletUserProxy\_AllocationFactory\_Allocate (ProxyArg AllocationFactory\_Allocate)
>
> **instance** SetField "proxyArg" WalletUserProxy\_Allocation\_Withdraw (ProxyArg Allocation\_Withdraw)
>
> **instance** SetField "proxyArg" WalletUserProxy\_TransferFactory\_Transfer (ProxyArg TransferFactory\_Transfer)
>
> **instance** SetField "proxyArg" WalletUserProxy\_TransferInstruction\_Accept (ProxyArg TransferInstruction\_Accept)
>
> **instance** SetField "proxyArg" WalletUserProxy\_TransferInstruction\_Reject (ProxyArg TransferInstruction\_Reject)
>
> **instance** SetField "proxyArg" WalletUserProxy\_TransferInstruction\_Withdraw (ProxyArg TransferInstruction\_Withdraw)
>
> **instance** SetField "user" (ProxyArg arg) [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932)

<div id="type-splice-util-featuredapp-walletuserproxy-proxyresult-11789">
  **data** ProxyResult r
</div>

> Generic result of the proxy choices.
>
> <div id="constr-splice-util-featuredapp-walletuserproxy-proxyresult-146">
>   ProxyResult
> </div>
>
> > | Field        | Type                                         | Description |
> > | ------------ | -------------------------------------------- | ----------- |
> > | markerResult | FeaturedAppRight\_CreateActivityMarkerResult |             |
> > | choiceResult | r                                            |             |
>
> **instance** GetField "choiceResult" (ProxyResult r) r
>
> **instance** GetField "markerResult" (ProxyResult r) FeaturedAppRight\_CreateActivityMarkerResult
>
> **instance** SetField "choiceResult" (ProxyResult r) r
>
> **instance** SetField "markerResult" (ProxyResult r) FeaturedAppRight\_CreateActivityMarkerResult
>
> **instance** [HasExercise](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasexercise-70422) WalletUserProxy WalletUserProxy\_AllocationFactory\_Allocate (ProxyResult AllocationInstructionResult)
>
> **instance** [HasExercise](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasexercise-70422) WalletUserProxy WalletUserProxy\_Allocation\_Withdraw (ProxyResult Allocation\_WithdrawResult)
>
> **instance** [HasExercise](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasexercise-70422) WalletUserProxy WalletUserProxy\_TransferFactory\_Transfer (ProxyResult TransferInstructionResult)
>
> **instance** [HasExercise](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasexercise-70422) WalletUserProxy WalletUserProxy\_TransferInstruction\_Accept (ProxyResult TransferInstructionResult)
>
> **instance** [HasExercise](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasexercise-70422) WalletUserProxy WalletUserProxy\_TransferInstruction\_Reject (ProxyResult TransferInstructionResult)
>
> **instance** [HasExercise](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasexercise-70422) WalletUserProxy WalletUserProxy\_TransferInstruction\_Withdraw (ProxyResult TransferInstructionResult)
>
> **instance** [HasFromAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasfromanychoice-81184) WalletUserProxy WalletUserProxy\_AllocationFactory\_Allocate (ProxyResult AllocationInstructionResult)
>
> **instance** [HasFromAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasfromanychoice-81184) WalletUserProxy WalletUserProxy\_Allocation\_Withdraw (ProxyResult Allocation\_WithdrawResult)
>
> **instance** [HasFromAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasfromanychoice-81184) WalletUserProxy WalletUserProxy\_TransferFactory\_Transfer (ProxyResult TransferInstructionResult)
>
> **instance** [HasFromAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasfromanychoice-81184) WalletUserProxy WalletUserProxy\_TransferInstruction\_Accept (ProxyResult TransferInstructionResult)
>
> **instance** [HasFromAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasfromanychoice-81184) WalletUserProxy WalletUserProxy\_TransferInstruction\_Reject (ProxyResult TransferInstructionResult)
>
> **instance** [HasFromAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasfromanychoice-81184) WalletUserProxy WalletUserProxy\_TransferInstruction\_Withdraw (ProxyResult TransferInstructionResult)
>
> **instance** [HasToAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hastoanychoice-82571) WalletUserProxy WalletUserProxy\_AllocationFactory\_Allocate (ProxyResult AllocationInstructionResult)
>
> **instance** [HasToAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hastoanychoice-82571) WalletUserProxy WalletUserProxy\_Allocation\_Withdraw (ProxyResult Allocation\_WithdrawResult)
>
> **instance** [HasToAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hastoanychoice-82571) WalletUserProxy WalletUserProxy\_TransferFactory\_Transfer (ProxyResult TransferInstructionResult)
>
> **instance** [HasToAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hastoanychoice-82571) WalletUserProxy WalletUserProxy\_TransferInstruction\_Accept (ProxyResult TransferInstructionResult)
>
> **instance** [HasToAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hastoanychoice-82571) WalletUserProxy WalletUserProxy\_TransferInstruction\_Reject (ProxyResult TransferInstructionResult)
>
> **instance** [HasToAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hastoanychoice-82571) WalletUserProxy WalletUserProxy\_TransferInstruction\_Withdraw (ProxyResult TransferInstructionResult)

<div id="type-splice-util-featuredapp-walletuserproxy-transferfactorycall-48419">
  **data** TransferFactoryCall
</div>

> A call to the token standard factory to initiate a token standard transfer. Specialized because it is used in the batch transfer choice below.
>
> <div id="constr-splice-util-featuredapp-walletuserproxy-transferfactorycall-65712">
>   TransferFactoryCall
> </div>
>
> > | Field      | Type                                                                                                               | Description |
> > | ---------- | ------------------------------------------------------------------------------------------------------------------ | ----------- |
> > | factoryCid | [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) TransferFactory |             |
> > | choiceArg  | TransferFactory\_Transfer                                                                                          |             |
>
> **instance** [Eq](/appdev/reference/daml-standard-library/prelude#class-ghc-classes-eq-22713) TransferFactoryCall
>
> **instance** [Show](/appdev/reference/daml-standard-library/prelude#class-ghc-show-show-65360) TransferFactoryCall
>
> **instance** GetField "choiceArg" TransferFactoryCall TransferFactory\_Transfer
>
> **instance** GetField "factoryCid" TransferFactoryCall ([ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) TransferFactory)
>
> **instance** GetField "transferCalls" WalletUserProxy\_BatchTransfer \[TransferFactoryCall]
>
> **instance** SetField "choiceArg" TransferFactoryCall TransferFactory\_Transfer
>
> **instance** SetField "factoryCid" TransferFactoryCall ([ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) TransferFactory)
>
> **instance** SetField "transferCalls" WalletUserProxy\_BatchTransfer \[TransferFactoryCall]

<div id="type-splice-util-featuredapp-walletuserproxy-walletuserproxybatchtransferresult-21051">
  **data** WalletUserProxy\_BatchTransferResult
</div>

> <div id="constr-splice-util-featuredapp-walletuserproxy-walletuserproxybatchtransferresult-77048">
>   WalletUserProxy\_BatchTransferResult
> </div>
>
> > | Field           | Type                         | Description |
> > | --------------- | ---------------------------- | ----------- |
> > | transferResults | \[TransferInstructionResult] |             |
> > | senderChangeMap | InstrumentHoldingMap         |             |
>
> **instance** [Eq](/appdev/reference/daml-standard-library/prelude#class-ghc-classes-eq-22713) WalletUserProxy\_BatchTransferResult
>
> **instance** [Show](/appdev/reference/daml-standard-library/prelude#class-ghc-show-show-65360) WalletUserProxy\_BatchTransferResult
>
> **instance** GetField "senderChangeMap" WalletUserProxy\_BatchTransferResult InstrumentHoldingMap
>
> **instance** GetField "transferResults" WalletUserProxy\_BatchTransferResult \[TransferInstructionResult]
>
> **instance** SetField "senderChangeMap" WalletUserProxy\_BatchTransferResult InstrumentHoldingMap
>
> **instance** SetField "transferResults" WalletUserProxy\_BatchTransferResult \[TransferInstructionResult]
>
> **instance** [HasExercise](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasexercise-70422) WalletUserProxy WalletUserProxy\_BatchTransfer WalletUserProxy\_BatchTransferResult
>
> **instance** [HasFromAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasfromanychoice-81184) WalletUserProxy WalletUserProxy\_BatchTransfer WalletUserProxy\_BatchTransferResult
>
> **instance** [HasToAnyChoice](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hastoanychoice-82571) WalletUserProxy WalletUserProxy\_BatchTransfer WalletUserProxy\_BatchTransferResult

## Functions

<div id="function-splice-util-featuredapp-walletuserproxy-getfirstsender-96870">
  getFirstSender
  : \[TransferFactoryCall] -> [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932)

  Determine the sender of the transfer in the first call.
</div>

<div id="function-splice-util-featuredapp-walletuserproxy-runbatch-13560">
  runBatch
  : WalletUserProxy -> WalletUserProxy\_BatchTransfer -> [Update](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-update-68072) WalletUserProxy\_BatchTransferResult

  Validate the batch call and run it
</div>

<div id="function-splice-util-featuredapp-walletuserproxy-executetransfercalls-34186">
  executeTransferCalls
  : WalletUserProxy -> [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932) -> [Optional](/appdev/reference/daml-standard-library/prelude#type-da-internal-prelude-optional-37153) ([ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) FeaturedAppRight) -> \[TransferFactoryCall] -> InstrumentHoldingMap -> \[TransferInstructionResult] -> [Update](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-update-68072) WalletUserProxy\_BatchTransferResult

  Run the individual transfer calls in the batch with proper threading of input holdings.
</div>

<div id="function-splice-util-featuredapp-walletuserproxy-exerciseproxychoice-45581">
  exerciseProxyChoice
  : [HasExercise](/appdev/reference/daml-standard-library/prelude#class-da-internal-template-functions-hasexercise-70422) t ch r => WalletUserProxy -> [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) t -> ProxyArg ch -> ([ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) t -> [Update](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-update-68072) [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932)) -> [Update](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-update-68072) (ProxyResult r)

  Shared code to execute the proxied choice.
</div>

<div id="function-splice-util-featuredapp-walletuserproxy-validateappright-75174">
  validateAppRight
  : WalletUserProxy -> [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) FeaturedAppRight -> [Update](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-update-68072) ()
</div>

<div id="function-splice-util-featuredapp-walletuserproxy-checkallowlist-76724">
  checkAllowList
  : [Optional](/appdev/reference/daml-standard-library/prelude#type-da-internal-prelude-optional-37153) \[[Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932)] -> [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932) -> [Update](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-update-68072) ()
</div>

<div id="function-splice-util-featuredapp-walletuserproxy-createappmarker-13733">
  createAppMarker
  : WalletUserProxy -> [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932) -> [ContractId](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-contractid-95282) FeaturedAppRight -> [Update](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-update-68072) FeaturedAppRight\_CreateActivityMarkerResult
</div>

<div id="function-splice-util-featuredapp-walletuserproxy-proxybeneficiaries-11168">
  proxyBeneficiaries
  : WalletUserProxy -> [Party](/appdev/reference/daml-standard-library/prelude#type-da-internal-lf-party-57932) -> \[AppRewardBeneficiary]

  Get the list of beneficiaries for the featured app marker.
</div>

<div id="function-splice-util-featuredapp-walletuserproxy-validproxy-47629">
  validProxy
  : WalletUserProxy -> [Bool](/appdev/reference/daml-standard-library/prelude#type-ghc-types-bool-66265)
</div>

<div id="function-splice-util-featuredapp-walletuserproxy-require-57479">
  require
  : [CanAssert](/appdev/reference/daml-standard-library/prelude#class-da-internal-assert-canassert-67323) m => [Text](/appdev/reference/daml-standard-library/prelude#type-ghc-types-text-51952) -> [Bool](/appdev/reference/daml-standard-library/prelude#type-ghc-types-bool-66265) -> m ()

  Check whether a required condition is true. If it's not, abort the transaction with a message saying that the requirement was not met.
</div>
