Trying to write Triggers,
/Users/maxhsu/Desktop/projects/wallet-refapp/triggers/daml/AcceptSwapTrigger.daml:34:21: error:
• No instance for (DA.Internal.Record.HasField
“asset” (Optional AssetInSwap) Asset.Asset)
arising from a use of ‘getField’
• In the ‘asset’ field of a record
In the third argument of ‘T.dedupExerciseByKey’, namely
‘Preapprove_Transfer_In {asset = (getField @“asset” offeredAsset)}’
In the expression:
T.dedupExerciseByKey
@AssetHoldingAccount
((getField @“assetType” (getField @“asset” offeredAsset)), p)
Preapprove_Transfer_In {asset = (getField @“asset” offeredAsset)}typecheck
acceptSwapTrigger: T.Trigger ()
acceptSwapTrigger = T.Trigger
{ initialize = pure (),
updateState = \_ -> pure (),
registeredTemplates = T.RegisteredTemplates [T.registeredTemplate @Trade, T.registeredTemplate @AssetHoldingAccount, T.registeredTemplate @TransferPreApproval],
rule = \p -> do
tradeRequests <- T.query @Trade
let isMe = (\tradeRequests -> tradeRequests.receiver == p)
let meList = filter (\(_, contract) -> isMe contract) tradeRequests
debug ("asset holding account invites", meList)
unless ( DA.Foldable.null meList ) do
case meList of
[] -> pure ()
(cid, c) :: _ -> do
optOfferedAsset <- T.queryContractId c.offeredAssetCid
let offeredAsset = (fromSome optOfferedAsset)
transferPreApproval <- T.queryContractId c.requestedAssetsTxPreApprovalCid
if(isSome offeredAsset) then
T.dedupExerciseByKey @AssetHoldingAccount (offeredAsset.asset.assetType, p) Preapprove_Transfer_In with
asset = offeredAsset.asset
else
debug "NOPE"
debug $ "TRIGGERED",
heartbeat = None
}
offeredAsset has the type
offeredAsset
: Optional (Optional AssetInSwap) -> Optional AssetInSwap
In my test scripts, I’m able to do
optOfferedAsset <- queryContractId alice trade.offeredAssetCid
let offeredAsset = (fromSome optOfferedAsset).asset
It turns the optional optOfferedAsset optOfferedAsset : Optional AssetInSwap
to
type offeredAsset : Asset
But I can’t do that in the trigger. Hence I’m trying the isSome