DelegateProxy if you are building an app that uses multiple parties for its own operations.
Templates
template WalletUserProxy
A proxy to attribute the activity of a wallet user to the wallet app provider. The intended usage is for the wallet app provider toNote 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
- create a
WalletUserProxycontract with theproviderset to the app provider’s party- setup their wallet frontend such that users call the proxy’s choices instead of the original token standard choices.
- Choice Archive Controller: provider Returns: () (no fields)
Choice WalletUserProxy_AllocationFactory_AllocateController: (DA.Internal.Record.getField @“user” proxyArg) Returns: ProxyResult AllocationInstructionResult Choice WalletUserProxy_Allocation_WithdrawController: (DA.Internal.Record.getField @“user” proxyArg) Returns: ProxyResult Allocation_WithdrawResult Choice WalletUserProxy_BatchTransferController: getFirstSender transferCalls Returns: WalletUserProxy_BatchTransferResult Choice WalletUserProxy_PublicFetchController: actor Returns: WalletUserProxy Choice WalletUserProxy_TransferFactory_TransferController: (DA.Internal.Record.getField @“user” proxyArg) Returns: ProxyResult TransferInstructionResult Choice WalletUserProxy_TransferInstruction_AcceptController: (DA.Internal.Record.getField @“user” proxyArg) Returns: ProxyResult TransferInstructionResult Choice WalletUserProxy_TransferInstruction_RejectController: (DA.Internal.Record.getField @“user” proxyArg) Returns: ProxyResult TransferInstructionResult Choice WalletUserProxy_TransferInstruction_WithdrawController: (DA.Internal.Record.getField @“user” proxyArg) Returns: ProxyResult TransferInstructionResult
Data Types
type InstrumentHoldingMap
= Map InstrumentId [ContractId Holding]instance GetField “senderChangeMap” WalletUserProxy_BatchTransferResult InstrumentHoldingMapinstance SetField “senderChangeMap” WalletUserProxy_BatchTransferResult InstrumentHoldingMap
data ProxyArg arg
Generic argument to the proxy choices.ProxyArginstance Eq arg => Eq (ProxyArg arg) instance Show arg => Show (ProxyArg arg) instance GetField “choiceArg” (ProxyArg arg) arg instance GetField “featuredAppRightCid” (ProxyArg arg) (ContractId 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 instance SetField “choiceArg” (ProxyArg arg) arg instance SetField “featuredAppRightCid” (ProxyArg arg) (ContractId 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
data ProxyResult r
Generic result of the proxy choices.ProxyResultinstance 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 WalletUserProxy WalletUserProxy_AllocationFactory_Allocate (ProxyResult AllocationInstructionResult) instance HasExercise WalletUserProxy WalletUserProxy_Allocation_Withdraw (ProxyResult Allocation_WithdrawResult) instance HasExercise WalletUserProxy WalletUserProxy_TransferFactory_Transfer (ProxyResult TransferInstructionResult) instance HasExercise WalletUserProxy WalletUserProxy_TransferInstruction_Accept (ProxyResult TransferInstructionResult) instance HasExercise WalletUserProxy WalletUserProxy_TransferInstruction_Reject (ProxyResult TransferInstructionResult) instance HasExercise WalletUserProxy WalletUserProxy_TransferInstruction_Withdraw (ProxyResult TransferInstructionResult) instance HasFromAnyChoice WalletUserProxy WalletUserProxy_AllocationFactory_Allocate (ProxyResult AllocationInstructionResult) instance HasFromAnyChoice WalletUserProxy WalletUserProxy_Allocation_Withdraw (ProxyResult Allocation_WithdrawResult) instance HasFromAnyChoice WalletUserProxy WalletUserProxy_TransferFactory_Transfer (ProxyResult TransferInstructionResult) instance HasFromAnyChoice WalletUserProxy WalletUserProxy_TransferInstruction_Accept (ProxyResult TransferInstructionResult) instance HasFromAnyChoice WalletUserProxy WalletUserProxy_TransferInstruction_Reject (ProxyResult TransferInstructionResult) instance HasFromAnyChoice WalletUserProxy WalletUserProxy_TransferInstruction_Withdraw (ProxyResult TransferInstructionResult) instance HasToAnyChoice WalletUserProxy WalletUserProxy_AllocationFactory_Allocate (ProxyResult AllocationInstructionResult) instance HasToAnyChoice WalletUserProxy WalletUserProxy_Allocation_Withdraw (ProxyResult Allocation_WithdrawResult) instance HasToAnyChoice WalletUserProxy WalletUserProxy_TransferFactory_Transfer (ProxyResult TransferInstructionResult) instance HasToAnyChoice WalletUserProxy WalletUserProxy_TransferInstruction_Accept (ProxyResult TransferInstructionResult) instance HasToAnyChoice WalletUserProxy WalletUserProxy_TransferInstruction_Reject (ProxyResult TransferInstructionResult) instance HasToAnyChoice WalletUserProxy WalletUserProxy_TransferInstruction_Withdraw (ProxyResult TransferInstructionResult)
data TransferFactoryCall
A call to the token standard factory to initiate a token standard transfer. Specialized because it is used in the batch transfer choice below.TransferFactoryCallinstance Eq TransferFactoryCall instance Show TransferFactoryCall instance GetField “choiceArg” TransferFactoryCall TransferFactory_Transfer instance GetField “factoryCid” TransferFactoryCall (ContractId TransferFactory) instance GetField “transferCalls” WalletUserProxy_BatchTransfer [TransferFactoryCall] instance SetField “choiceArg” TransferFactoryCall TransferFactory_Transfer instance SetField “factoryCid” TransferFactoryCall (ContractId TransferFactory) instance SetField “transferCalls” WalletUserProxy_BatchTransfer [TransferFactoryCall]
data WalletUserProxy_BatchTransferResult
WalletUserProxy_BatchTransferResultinstance Eq WalletUserProxy_BatchTransferResult instance Show 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 WalletUserProxy WalletUserProxy_BatchTransfer WalletUserProxy_BatchTransferResult instance HasFromAnyChoice WalletUserProxy WalletUserProxy_BatchTransfer WalletUserProxy_BatchTransferResult instance HasToAnyChoice WalletUserProxy WalletUserProxy_BatchTransfer WalletUserProxy_BatchTransferResult
Functions
getFirstSender
: [TransferFactoryCall] -> PartyDetermine the sender of the transfer in the first call.
runBatch
: WalletUserProxy -> WalletUserProxy_BatchTransfer -> Update WalletUserProxy_BatchTransferResultValidate the batch call and run it
executeTransferCalls
: WalletUserProxy -> Party -> Optional (ContractId FeaturedAppRight) -> [TransferFactoryCall] -> InstrumentHoldingMap -> [TransferInstructionResult] -> Update WalletUserProxy_BatchTransferResultRun the individual transfer calls in the batch with proper threading of input holdings.
exerciseProxyChoice
: HasExercise t ch r => WalletUserProxy -> ContractId t -> ProxyArg ch -> (ContractId t -> Update Party) -> Update (ProxyResult r)Shared code to execute the proxied choice.
validateAppRight
: WalletUserProxy -> ContractId FeaturedAppRight -> Update ()
createAppMarker
: WalletUserProxy -> Party -> ContractId FeaturedAppRight -> Update FeaturedAppRight_CreateActivityMarkerResult
proxyBeneficiaries
: WalletUserProxy -> Party -> [AppRewardBeneficiary]Get the list of beneficiaries for the featured app marker.
validProxy
: WalletUserProxy -> Bool