diff --git a/bindings/generated/latest/ccip/burnminttokenpool/burnminttokenpool.go b/bindings/generated/latest/ccip/burnminttokenpool/burnminttokenpool.go index 5044ce2a2..48a7b0503 100644 --- a/bindings/generated/latest/ccip/burnminttokenpool/burnminttokenpool.go +++ b/bindings/generated/latest/ccip/burnminttokenpool/burnminttokenpool.go @@ -29,7 +29,7 @@ var ( const ( PackageName = "ccip-burn-mint-token-pool" - PackageID = "d1c200384a96e3cdc157ab8177d866c6ce9b13e1744954dcbc25f0b1b75aad31" + PackageID = "c7a3f9556e4be9150d3f1a90c70e8b25f05a03e8d5eafaa5b7bf2989222b4103" SDKVersion = "3.4.11" ) diff --git a/bindings/generated/latest/ccip/ccipruntime/ccipruntime.go b/bindings/generated/latest/ccip/ccipruntime/ccipruntime.go index 895aeab45..8eafbdca5 100644 --- a/bindings/generated/latest/ccip/ccipruntime/ccipruntime.go +++ b/bindings/generated/latest/ccip/ccipruntime/ccipruntime.go @@ -29,7 +29,7 @@ var ( const ( PackageName = "ccip-runtime" - PackageID = "e72c7b81e9cc09ed2d35ba3333f561851d5f8a5f81527d05249060ad1edd1eb5" + PackageID = "a7e313ec968c8d4987e62fbd87c45c118ddc167da53d09d6bdc654ff9821ab62" SDKVersion = "3.4.11" ) diff --git a/bindings/generated/latest/ccip/committeeverifier/committeeverifier.go b/bindings/generated/latest/ccip/committeeverifier/committeeverifier.go index 36a66a8e9..983998cac 100644 --- a/bindings/generated/latest/ccip/committeeverifier/committeeverifier.go +++ b/bindings/generated/latest/ccip/committeeverifier/committeeverifier.go @@ -27,7 +27,7 @@ var ( const ( PackageName = "ccip-committee-verifier" - PackageID = "5ae7d01fcbf94b3a26bb9b5b8c8d1431eeebb652a951d3f6cbdf4d8991e62499" + PackageID = "6205e5225b69dd35d89a85aa180864fd9aadc3605aa8579aadb08d66830317b5" SDKVersion = "3.4.11" ) diff --git a/bindings/generated/latest/ccip/executor/executor.go b/bindings/generated/latest/ccip/executor/executor.go index c03cb289b..d62a9c1bd 100644 --- a/bindings/generated/latest/ccip/executor/executor.go +++ b/bindings/generated/latest/ccip/executor/executor.go @@ -28,7 +28,7 @@ var ( const ( PackageName = "ccip-executor" - PackageID = "df2d8d8f288b160402feee5f8d056e7c776b5c9a99eab50afc1e6e5f8d6d428a" + PackageID = "c09e06c9b67775f6283705703378185d11c4f7a82d9109bbc3f5bd45ee8af048" SDKVersion = "3.4.11" ) diff --git a/bindings/generated/latest/ccip/extensionapi/extensionapi.go b/bindings/generated/latest/ccip/extensionapi/extensionapi.go index dd6903965..9bb6c04be 100644 --- a/bindings/generated/latest/ccip/extensionapi/extensionapi.go +++ b/bindings/generated/latest/ccip/extensionapi/extensionapi.go @@ -6,7 +6,6 @@ import ( "math/big" "strings" - core "github.com/smartcontractkit/chainlink-canton/bindings/generated/latest/ccip/core" chainlinkapi "github.com/smartcontractkit/chainlink-canton/bindings/generated/latest/chainlink/chainlinkapi" splice_api_token_holding_v1 "github.com/smartcontractkit/chainlink-canton/bindings/generated/latest/splice/splice_api_token_holding_v1" splice_api_token_metadata_v1 "github.com/smartcontractkit/chainlink-canton/bindings/generated/latest/splice/splice_api_token_metadata_v1" @@ -27,7 +26,7 @@ var ( const ( PackageName = "ccip-extension-api" - PackageID = "ee0ce484b84662844791067b50f89f98959b9259841bb00b7a70d60a768ff351" + PackageID = "abf82ef630cd2f176e69385616004d4a5012a1d1ed2a4d5552560acc2351d21b" SDKVersion = "3.4.11" ) @@ -1008,12 +1007,12 @@ func (t *TokenPoolGetFee) UnmarshalHex(data string) error { // TokenPoolGetRequiredCCVs is a Record type type TokenPoolGetRequiredCCVs struct { - RemoteChainSelector types.NUMERIC `json:"remoteChainSelector"` - SourceAmount types.TEXT `json:"sourceAmount"` - Finality core.FinalityConfig `json:"finality"` - ExtraData types.TEXT `json:"extraData"` - Direction TransferDirection `json:"direction"` - Caller types.PARTY `json:"caller"` + RemoteChainSelector types.NUMERIC `json:"remoteChainSelector"` + SourceAmount types.TEXT `json:"sourceAmount"` + Finality types.TEXT `json:"finality"` + ExtraData types.TEXT `json:"extraData"` + Direction TransferDirection `json:"direction"` + Caller types.PARTY `json:"caller"` } // ToMap converts TokenPoolGetRequiredCCVs to a map for DAML arguments @@ -1024,7 +1023,7 @@ func (t TokenPoolGetRequiredCCVs) ToMap() map[string]any { m["sourceAmount"] = string(t.SourceAmount) - m["finality"] = model.NestedToDAMLValue(t.Finality) + m["finality"] = string(t.Finality) m["extraData"] = string(t.ExtraData) diff --git a/bindings/generated/latest/ccip/factory/factory.go b/bindings/generated/latest/ccip/factory/factory.go index 12595d657..73973da76 100644 --- a/bindings/generated/latest/ccip/factory/factory.go +++ b/bindings/generated/latest/ccip/factory/factory.go @@ -34,7 +34,7 @@ var ( const ( PackageName = "ccip-factory" - PackageID = "9fe505c991e91a2e1b1cdaf3bb666a4354415bdd72e906b2fce2cfd4e8bd6edd" + PackageID = "d241b4c7086dd7d483c5041de8727cd97e2861be53189743bd57d5d76e96b2d1" SDKVersion = "3.4.11" ) diff --git a/bindings/generated/latest/ccip/lockreleasetokenpool/lockreleasetokenpool.go b/bindings/generated/latest/ccip/lockreleasetokenpool/lockreleasetokenpool.go index 641481abf..7d43c1ba9 100644 --- a/bindings/generated/latest/ccip/lockreleasetokenpool/lockreleasetokenpool.go +++ b/bindings/generated/latest/ccip/lockreleasetokenpool/lockreleasetokenpool.go @@ -29,7 +29,7 @@ var ( const ( PackageName = "ccip-lock-release-token-pool" - PackageID = "91d0fb5eebbd1eab9139f8d95db42b3c0ea9bb3669cb34f48f1f2d597d65b119" + PackageID = "a6d5c22cdceafd1317f7e166deff08a2260acfceeeea8989c351dabef9a4b746" SDKVersion = "3.4.11" ) diff --git a/bindings/generated/latest/ccip/receiver/receiver.go b/bindings/generated/latest/ccip/receiver/receiver.go index f783a2d21..4dd707837 100644 --- a/bindings/generated/latest/ccip/receiver/receiver.go +++ b/bindings/generated/latest/ccip/receiver/receiver.go @@ -27,7 +27,7 @@ var ( const ( PackageName = "ccip-receiver" - PackageID = "3e02facd4c5b02dad1b4dd07f43339e2437bcce8b5e669660b3c8d72c9355d95" + PackageID = "db3f7ad813445e5c655cb330228edd7dace4d174e308434bca8dd08357550839" SDKVersion = "3.4.11" ) diff --git a/bindings/generated/latest/ccip/sender/sender.go b/bindings/generated/latest/ccip/sender/sender.go index d08a55612..a34b00865 100644 --- a/bindings/generated/latest/ccip/sender/sender.go +++ b/bindings/generated/latest/ccip/sender/sender.go @@ -26,7 +26,7 @@ var ( const ( PackageName = "ccip-sender" - PackageID = "5783dfc7c23e899cdc6446dfdf113815bb2e029dffba0055139757253068350b" + PackageID = "9f0782086a02677b800b5644f977fec883971df06df4fd8d6399a2b164c46a75" SDKVersion = "3.4.11" ) diff --git a/contracts/ccip/committee-verifier/daml/CCIP/CommitteeVerifier.daml b/contracts/ccip/committee-verifier/daml/CCIP/CommitteeVerifier.daml index 2aefcb366..f7b9c12c1 100644 --- a/contracts/ccip/committee-verifier/daml/CCIP/CommitteeVerifier.daml +++ b/contracts/ccip/committee-verifier/daml/CCIP/CommitteeVerifier.daml @@ -112,18 +112,18 @@ template CommitteeVerifier storageLocations = storageLocations crossChainVerifier_verifyMessageImpl self arg = do - exercise (fromInterfaceContractId @CommitteeVerifier self) VerifyMessage + coerceContractId <$> exercise (fromInterfaceContractId @CommitteeVerifier self) VerifyMessage with - rmnRemoteCid = arg.rmnRemoteCid + rmnRemoteCid = coerceContractId arg.rmnRemoteCid extraContext = arg.extraContext - executingMessageCid = arg.executingMessageCid + executingMessageCid = coerceContractId arg.executingMessageCid verifierResults = arg.verifierResults caller = arg.caller crossChainVerifier_calculateFeeImpl self arg = do - exercise (fromInterfaceContractId @CommitteeVerifier self) CalculateFee + coerceContractId <$> exercise (fromInterfaceContractId @CommitteeVerifier self) CalculateFee with - sendingMessageCid = arg.sendingMessageCid + sendingMessageCid = coerceContractId arg.sendingMessageCid extraContext = arg.extraContext caller = arg.caller @@ -134,11 +134,11 @@ template CommitteeVerifier caller = arg.caller crossChainVerifier_forwardToVerifierImpl self arg = do - exercise (fromInterfaceContractId @CommitteeVerifier self) ForwardToVerifier + coerceContractId <$> exercise (fromInterfaceContractId @CommitteeVerifier self) ForwardToVerifier with - rmnRemoteCid = arg.rmnRemoteCid + rmnRemoteCid = coerceContractId arg.rmnRemoteCid extraContext = arg.extraContext - sendingMessageCid = arg.sendingMessageCid + sendingMessageCid = coerceContractId arg.sendingMessageCid verifierArgs = arg.verifierArgs caller = arg.caller diff --git a/contracts/ccip/executor/daml/CCIP/Executor.daml b/contracts/ccip/executor/daml/CCIP/Executor.daml index 7ad054037..37cf9d269 100644 --- a/contracts/ccip/executor/daml/CCIP/Executor.daml +++ b/contracts/ccip/executor/daml/CCIP/Executor.daml @@ -41,9 +41,9 @@ template Executor owner = owner executor_calculateFeeImpl self arg = do - exercise (fromInterfaceContractId @Executor self) CalculateFee with + coerceContractId <$> exercise (fromInterfaceContractId @Executor self) CalculateFee with expectedExecutor = arg.expectedExecutor - sendingMessageCid = arg.sendingMessageCid + sendingMessageCid = coerceContractId arg.sendingMessageCid executorArgs = arg.executorArgs extraContext = arg.extraContext caller = arg.caller diff --git a/contracts/ccip/extension-api/daml.yaml b/contracts/ccip/extension-api/daml.yaml index 23bf6d039..969dce0ea 100644 --- a/contracts/ccip/extension-api/daml.yaml +++ b/contracts/ccip/extension-api/daml.yaml @@ -8,11 +8,8 @@ build-options: data-dependencies: - ../../dependencies/splice/splice-api-token-metadata-v1-1.0.0.dar - ../../dependencies/splice/splice-api-token-holding-v1-1.0.0.dar - - ../../dependencies/splice/splice-api-token-burn-mint-v1-1.0.0.dar - ../../dependencies/splice/splice-api-token-transfer-instruction-v1-1.0.0.dar dependencies: - daml-prim - daml-stdlib - ../../chainlink/api/.daml/dist/chainlink-api-2.0.0.dar - - ../../mcms/api/.daml/dist/mcms-api-1.0.0.dar - - ../core/.daml/dist/ccip-core-2.0.0.dar diff --git a/contracts/ccip/extension-api/daml/CCIP/Interfaces/CrossChainVerifier.daml b/contracts/ccip/extension-api/daml/CCIP/Interfaces/CrossChainVerifier.daml index 20869cd10..f3ff612d9 100644 --- a/contracts/ccip/extension-api/daml/CCIP/Interfaces/CrossChainVerifier.daml +++ b/contracts/ccip/extension-api/daml/CCIP/Interfaces/CrossChainVerifier.daml @@ -4,27 +4,20 @@ import DA.Crypto.Text (BytesHex) import Splice.Api.Token.MetadataV1 (ChoiceContext) -import qualified CCIP.ExecutingMessageV1 -import qualified CCIP.Internal -import qualified CCIP.RMNRemote -import qualified CCIP.SendingMessageV1 - -useDefaultCCVs = CCIP.Internal.useDefaultCCVs - interface ICrossChainVerifier where viewtype CrossChainVerifierView - crossChainVerifier_verifyMessageImpl : ContractId ICrossChainVerifier -> CrossChainVerifier_VerifyMessage -> Update (ContractId CCIP.ExecutingMessageV1.ExecutingMessageV1) - crossChainVerifier_calculateFeeImpl : ContractId ICrossChainVerifier -> CrossChainVerifier_CalculateFee -> Update (ContractId CCIP.SendingMessageV1.SendingMessageV1) + crossChainVerifier_verifyMessageImpl : ContractId ICrossChainVerifier -> CrossChainVerifier_VerifyMessage -> Update (ContractId ()) + crossChainVerifier_calculateFeeImpl : ContractId ICrossChainVerifier -> CrossChainVerifier_CalculateFee -> Update (ContractId ()) crossChainVerifier_getFeeImpl : ContractId ICrossChainVerifier -> CrossChainVerifier_GetFee -> Update CrossChainVerifierFeeQuote - crossChainVerifier_forwardToVerifierImpl : ContractId ICrossChainVerifier -> CrossChainVerifier_ForwardToVerifier -> Update (ContractId CCIP.SendingMessageV1.SendingMessageV1) + crossChainVerifier_forwardToVerifierImpl : ContractId ICrossChainVerifier -> CrossChainVerifier_ForwardToVerifier -> Update (ContractId ()) -- Verify an inbound message and append a CCV verification to ExecutingMessageV1. - nonconsuming choice CrossChainVerifier_VerifyMessage : ContractId CCIP.ExecutingMessageV1.ExecutingMessageV1 + nonconsuming choice CrossChainVerifier_VerifyMessage : ContractId () with - rmnRemoteCid : ContractId CCIP.RMNRemote.RMNRemote + rmnRemoteCid : ContractId () extraContext : ChoiceContext - executingMessageCid : ContractId CCIP.ExecutingMessageV1.ExecutingMessageV1 + executingMessageCid : ContractId () verifierResults : BytesHex caller : Party controller caller @@ -32,9 +25,9 @@ interface ICrossChainVerifier where -- Calculate fee for outbound message (USD cents only). nonconsuming choice CrossChainVerifier_CalculateFee - : ContractId CCIP.SendingMessageV1.SendingMessageV1 + : ContractId () with - sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 + sendingMessageCid : ContractId () extraContext : ChoiceContext caller : Party controller caller @@ -51,11 +44,11 @@ interface ICrossChainVerifier where -- Forward message for verification and append verifier data to -- SendingMessageV1. nonconsuming choice CrossChainVerifier_ForwardToVerifier - : ContractId CCIP.SendingMessageV1.SendingMessageV1 + : ContractId () with - rmnRemoteCid : ContractId CCIP.RMNRemote.RMNRemote + rmnRemoteCid : ContractId () extraContext : ChoiceContext - sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 + sendingMessageCid : ContractId () verifierArgs : BytesHex caller : Party controller caller diff --git a/contracts/ccip/extension-api/daml/CCIP/Interfaces/Executor.daml b/contracts/ccip/extension-api/daml/CCIP/Interfaces/Executor.daml index 2c5e24be1..9b5ed9eb8 100644 --- a/contracts/ccip/extension-api/daml/CCIP/Interfaces/Executor.daml +++ b/contracts/ccip/extension-api/daml/CCIP/Interfaces/Executor.daml @@ -4,7 +4,6 @@ import DA.Crypto.Text (BytesHex) import Splice.Api.Token.MetadataV1 (ChoiceContext) -import qualified CCIP.SendingMessageV1 import Chainlink.InstanceAddress (RawInstanceAddress) import Chainlink.InstanceAddress qualified as RawInstanceAddress @@ -14,16 +13,16 @@ interface IExecutor where executor_calculateFeeImpl : ContractId IExecutor -> Executor_CalculateFee -> - Update (ContractId CCIP.SendingMessageV1.SendingMessageV1) + Update (ContractId ()) executor_getFeeImpl : ContractId IExecutor -> Executor_GetFee -> Update ExecutorFeeQuote - nonconsuming choice Executor_CalculateFee : ContractId CCIP.SendingMessageV1.SendingMessageV1 + nonconsuming choice Executor_CalculateFee : ContractId () with expectedExecutor : RawInstanceAddress - sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 + sendingMessageCid : ContractId () executorArgs : BytesHex extraContext : ChoiceContext caller : Party diff --git a/contracts/ccip/extension-api/daml/CCIP/Interfaces/TokenPool.daml b/contracts/ccip/extension-api/daml/CCIP/Interfaces/TokenPool.daml index ea918965b..afc12ba5a 100644 --- a/contracts/ccip/extension-api/daml/CCIP/Interfaces/TokenPool.daml +++ b/contracts/ccip/extension-api/daml/CCIP/Interfaces/TokenPool.daml @@ -6,15 +6,7 @@ import qualified Splice.Api.Token.HoldingV1 import qualified Splice.Api.Token.MetadataV1 import qualified Splice.Api.Token.TransferInstructionV1 -import qualified CCIP.ExecutingMessageV1 -import qualified CCIP.FeeQuoter -import qualified CCIP.FinalityConfig import Chainlink.InstanceAddress (RawInstanceAddress) -import qualified CCIP.RMNRemote -import qualified CCIP.SendingMessageV1 -import qualified CCIP.Tickets -import qualified CCIP.Events -import qualified CCIP.TokenAdminRegistry -- | Direction of token transfer for CCV requirement lookup. data TransferDirection = Outbound | Inbound @@ -24,11 +16,11 @@ interface ITokenPool where viewtype TokenPoolView tokenPool_getRequiredCCVsImpl : ContractId ITokenPool -> TokenPool_GetRequiredCCVs -> Update [RawInstanceAddress] - tokenPool_verifyInboundMessageImpl : ContractId ITokenPool -> TokenPool_VerifyInboundMessage -> Update (ContractId CCIP.ExecutingMessageV1.ExecutingMessageV1) - tokenPool_verifyOutboundCCVsImpl : ContractId ITokenPool -> TokenPool_VerifyOutboundCCVs -> Update (ContractId CCIP.SendingMessageV1.SendingMessageV1) + tokenPool_verifyInboundMessageImpl : ContractId ITokenPool -> TokenPool_VerifyInboundMessage -> Update (ContractId ()) + tokenPool_verifyOutboundCCVsImpl : ContractId ITokenPool -> TokenPool_VerifyOutboundCCVs -> Update (ContractId ()) tokenPool_releaseFromTicketImpl : ContractId ITokenPool -> TokenPool_ReleaseFromTicket -> Update ReleaseOrMintResult tokenPool_lockOrBurnImpl : ContractId ITokenPool -> TokenPool_LockOrBurn -> Update LockOrBurnResult - tokenPool_calculateFeeImpl : ContractId ITokenPool -> TokenPool_CalculateFee -> Update (ContractId CCIP.SendingMessageV1.SendingMessageV1) + tokenPool_calculateFeeImpl : ContractId ITokenPool -> TokenPool_CalculateFee -> Update (ContractId ()) tokenPool_getFeeImpl : ContractId ITokenPool -> TokenPool_GetFee -> Update TokenPoolFeeQuote -- Get required CCV raw instance addresses for a transfer based on direction, amount, finality, etc. @@ -36,7 +28,7 @@ interface ITokenPool where with remoteChainSelector : Numeric 0 sourceAmount : BytesHex - finality : CCIP.FinalityConfig.FinalityConfig + finality : BytesHex extraData : BytesHex direction : TransferDirection caller : Party @@ -45,23 +37,23 @@ interface ITokenPool where -- Validate inbound token transfer message and record pool CCV requirements on ExecutingMessageV1 via TAR. -- Validates source pool address against allowed remote pools and records inbound CCVs. - nonconsuming choice TokenPool_VerifyInboundMessage : ContractId CCIP.ExecutingMessageV1.ExecutingMessageV1 + nonconsuming choice TokenPool_VerifyInboundMessage : ContractId () with - tokenAdminRegistryCid : ContractId CCIP.TokenAdminRegistry.TokenAdminRegistry - tokenConfigCid : ContractId CCIP.TokenAdminRegistry.TokenConfig + tokenAdminRegistryCid : ContractId () + tokenConfigCid : ContractId () extraContext : Splice.Api.Token.MetadataV1.ChoiceContext - executingMessageCid : ContractId CCIP.ExecutingMessageV1.ExecutingMessageV1 + executingMessageCid : ContractId () caller : Party controller caller do tokenPool_verifyInboundMessageImpl this self arg -- Verify outbound CCVs and record pool-required CCVs on SendingMessageV1 via TAR. - nonconsuming choice TokenPool_VerifyOutboundCCVs : ContractId CCIP.SendingMessageV1.SendingMessageV1 + nonconsuming choice TokenPool_VerifyOutboundCCVs : ContractId () with - tokenAdminRegistryCid : ContractId CCIP.TokenAdminRegistry.TokenAdminRegistry - tokenConfigCid : ContractId CCIP.TokenAdminRegistry.TokenConfig + tokenAdminRegistryCid : ContractId () + tokenConfigCid : ContractId () extraContext : Splice.Api.Token.MetadataV1.ChoiceContext - sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 + sendingMessageCid : ContractId () amount : Decimal caller : Party controller caller @@ -71,11 +63,11 @@ interface ITokenPool where -- The pool should consume the ticket via ConsumeReceiveTicket. nonconsuming choice TokenPool_ReleaseFromTicket : ReleaseOrMintResult with - tokenAdminRegistryCid : ContractId CCIP.TokenAdminRegistry.TokenAdminRegistry - tokenConfigCid : ContractId CCIP.TokenAdminRegistry.TokenConfig - rmnRemoteCid : ContractId CCIP.RMNRemote.RMNRemote + tokenAdminRegistryCid : ContractId () + tokenConfigCid : ContractId () + rmnRemoteCid : ContractId () extraContext : Splice.Api.Token.MetadataV1.ChoiceContext - tokenReceiveTicketCid : ContractId CCIP.Tickets.TokenReceiveTicket + tokenReceiveTicketCid : ContractId () caller : Party controller caller do tokenPool_releaseFromTicketImpl this self arg @@ -85,11 +77,11 @@ interface ITokenPool where -- through TAR after pool-registration validation. nonconsuming choice TokenPool_LockOrBurn : LockOrBurnResult with - tokenAdminRegistryCid : ContractId CCIP.TokenAdminRegistry.TokenAdminRegistry - tokenConfigCid : ContractId CCIP.TokenAdminRegistry.TokenConfig - rmnRemoteCid : ContractId CCIP.RMNRemote.RMNRemote + tokenAdminRegistryCid : ContractId () + tokenConfigCid : ContractId () + rmnRemoteCid : ContractId () extraContext : Splice.Api.Token.MetadataV1.ChoiceContext - sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 + sendingMessageCid : ContractId () senderInputCids : [ContractId Splice.Api.Token.HoldingV1.Holding] amount : Decimal caller : Party @@ -98,14 +90,13 @@ interface ITokenPool where -- Calculate fee for outbound token transfer, which it records on -- SendingMessageV1 through TAR after pool-registration validation. - nonconsuming choice TokenPool_CalculateFee - : ContractId CCIP.SendingMessageV1.SendingMessageV1 + nonconsuming choice TokenPool_CalculateFee : ContractId () with - tokenAdminRegistryCid : ContractId CCIP.TokenAdminRegistry.TokenAdminRegistry - tokenConfigCid : ContractId CCIP.TokenAdminRegistry.TokenConfig + tokenAdminRegistryCid : ContractId () + tokenConfigCid : ContractId () extraContext : Splice.Api.Token.MetadataV1.ChoiceContext - sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 - feeQuoterCid : ContractId CCIP.FeeQuoter.FeeQuoter + sendingMessageCid : ContractId () + feeQuoterCid : ContractId () tokenInstrumentId : Splice.Api.Token.HoldingV1.InstrumentId caller : Party controller caller @@ -114,7 +105,7 @@ interface ITokenPool where -- Quote-only fee path for outbound token transfers. nonconsuming choice TokenPool_GetFee : TokenPoolFeeQuote with - feeQuoterCid : ContractId CCIP.FeeQuoter.FeeQuoter + feeQuoterCid : ContractId () destChainSelector : Numeric 0 tokenInstrumentId : Splice.Api.Token.HoldingV1.InstrumentId caller : Party @@ -133,7 +124,7 @@ data ReleaseOrMintResult = ReleaseOrMintResult with output : ReleaseOrMintResult_Output poolChangeCids : [ContractId Splice.Api.Token.HoldingV1.Holding] - claimedEventCid : ContractId CCIP.Events.TokenReceiveTicketClaimed + claimedEventCid : ContractId () deriving (Eq, Show) data ReleaseOrMintResult_Output @@ -147,7 +138,7 @@ data LockOrBurnResult = LockOrBurnResult with poolChangeCids : [ContractId Splice.Api.Token.HoldingV1.Holding] senderChangeCids : [ContractId Splice.Api.Token.HoldingV1.Holding] - sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 + sendingMessageCid : ContractId () deriving (Eq, Show) data TokenPoolFeeQuote = TokenPoolFeeQuote diff --git a/contracts/ccip/pools/burn-mint-token-pool/daml/CCIP/BurnMintTokenPool.daml b/contracts/ccip/pools/burn-mint-token-pool/daml/CCIP/BurnMintTokenPool.daml index 751ff81f8..58f88aee1 100644 --- a/contracts/ccip/pools/burn-mint-token-pool/daml/CCIP/BurnMintTokenPool.daml +++ b/contracts/ccip/pools/burn-mint-token-pool/daml/CCIP/BurnMintTokenPool.daml @@ -325,71 +325,72 @@ template BurnMintTokenPool instrumentId = instrumentId tokenPool_getRequiredCCVsImpl self arg = do + let finality = fromSomeNote "Invalid finality" (CCIP.FinalityConfig.decodeRequestedFinality arg.finality) exercise (fromInterfaceContractId @BurnMintTokenPool self) GetRequiredCCVs with remoteChainSelector = arg.remoteChainSelector sourceAmount = arg.sourceAmount - finality = arg.finality + finality = finality.requested extraData = arg.extraData direction = arg.direction caller = arg.caller tokenPool_verifyInboundMessageImpl self arg = do - exercise (fromInterfaceContractId @BurnMintTokenPool self) VerifyInboundMessage + coerceContractId <$>exercise (fromInterfaceContractId @BurnMintTokenPool self) VerifyInboundMessage with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid extraContext = arg.extraContext - executingMessageCid = arg.executingMessageCid + executingMessageCid = coerceContractId arg.executingMessageCid caller = arg.caller tokenPool_verifyOutboundCCVsImpl self arg = do - exercise (fromInterfaceContractId @BurnMintTokenPool self) VerifyOutboundCCVs + coerceContractId <$> exercise (fromInterfaceContractId @BurnMintTokenPool self) VerifyOutboundCCVs with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid extraContext = arg.extraContext - sendingMessageCid = arg.sendingMessageCid + sendingMessageCid = coerceContractId arg.sendingMessageCid amount = arg.amount caller = arg.caller tokenPool_releaseFromTicketImpl self arg = do exercise (fromInterfaceContractId @BurnMintTokenPool self) ReleaseFromTicket with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid - rmnRemoteCid = arg.rmnRemoteCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid + rmnRemoteCid = coerceContractId arg.rmnRemoteCid extraContext = arg.extraContext - tokenReceiveTicketCid = arg.tokenReceiveTicketCid + tokenReceiveTicketCid = coerceContractId arg.tokenReceiveTicketCid caller = arg.caller tokenPool_lockOrBurnImpl self arg = do exercise (fromInterfaceContractId @BurnMintTokenPool self) LockOrBurn with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid - rmnRemoteCid = arg.rmnRemoteCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid + rmnRemoteCid = coerceContractId arg.rmnRemoteCid extraContext = arg.extraContext - sendingMessageCid = arg.sendingMessageCid + sendingMessageCid = coerceContractId arg.sendingMessageCid senderInputCids = arg.senderInputCids amount = arg.amount caller = arg.caller tokenPool_calculateFeeImpl self arg = do - exercise (fromInterfaceContractId @BurnMintTokenPool self) CalculateFee + coerceContractId <$> exercise (fromInterfaceContractId @BurnMintTokenPool self) CalculateFee with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid extraContext = arg.extraContext - sendingMessageCid = arg.sendingMessageCid - feeQuoterCid = arg.feeQuoterCid + sendingMessageCid = coerceContractId arg.sendingMessageCid + feeQuoterCid = coerceContractId arg.feeQuoterCid tokenInstrumentId = arg.tokenInstrumentId caller = arg.caller tokenPool_getFeeImpl self arg = do exercise (fromInterfaceContractId @BurnMintTokenPool self) GetFee with - feeQuoterCid = arg.feeQuoterCid + feeQuoterCid = coerceContractId arg.feeQuoterCid destChainSelector = arg.destChainSelector tokenInstrumentId = arg.tokenInstrumentId caller = arg.caller @@ -892,7 +893,7 @@ template BurnMintTokenPool pure CCIP.Interfaces.TokenPool.ReleaseOrMintResult with output poolChangeCids = [] - claimedEventCid + claimedEventCid = coerceContractId claimedEventCid -- Calculate fee for outbound token transfer (USD cents only). -- Reads destChainSelector from SendingMessageV1, looks up per-chain @@ -1130,7 +1131,7 @@ template BurnMintTokenPool pure CCIP.Interfaces.TokenPool.LockOrBurnResult with poolChangeCids = poolChangeCids senderChangeCids = senderChangeCids - sendingMessageCid = newSendingMessageCid + sendingMessageCid = coerceContractId newSendingMessageCid interface instance MCMSReceiver for BurnMintTokenPool where view = MCMSReceiverView with diff --git a/contracts/ccip/pools/lock-release-token-pool/daml/CCIP/LockReleaseTokenPool.daml b/contracts/ccip/pools/lock-release-token-pool/daml/CCIP/LockReleaseTokenPool.daml index e2f9ce35d..48503aa0f 100644 --- a/contracts/ccip/pools/lock-release-token-pool/daml/CCIP/LockReleaseTokenPool.daml +++ b/contracts/ccip/pools/lock-release-token-pool/daml/CCIP/LockReleaseTokenPool.daml @@ -300,71 +300,72 @@ template LockReleaseTokenPool instrumentId = instrumentId tokenPool_getRequiredCCVsImpl self arg = do + let finality = fromSomeNote "Invalid finality" (CCIP.FinalityConfig.decodeRequestedFinality arg.finality) exercise (fromInterfaceContractId @LockReleaseTokenPool self) GetRequiredCCVs with remoteChainSelector = arg.remoteChainSelector sourceAmount = arg.sourceAmount - finality = arg.finality + finality = finality.requested extraData = arg.extraData direction = arg.direction caller = arg.caller tokenPool_verifyInboundMessageImpl self arg = do - exercise (fromInterfaceContractId @LockReleaseTokenPool self) VerifyInboundMessage + coerceContractId <$> exercise (fromInterfaceContractId @LockReleaseTokenPool self) VerifyInboundMessage with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid extraContext = arg.extraContext - executingMessageCid = arg.executingMessageCid + executingMessageCid = coerceContractId arg.executingMessageCid caller = arg.caller tokenPool_verifyOutboundCCVsImpl self arg = do - exercise (fromInterfaceContractId @LockReleaseTokenPool self) VerifyOutboundCCVs + coerceContractId <$> exercise (fromInterfaceContractId @LockReleaseTokenPool self) VerifyOutboundCCVs with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid extraContext = arg.extraContext - sendingMessageCid = arg.sendingMessageCid + sendingMessageCid = coerceContractId arg.sendingMessageCid amount = arg.amount caller = arg.caller tokenPool_releaseFromTicketImpl self arg = do exercise (fromInterfaceContractId @LockReleaseTokenPool self) ReleaseFromTicket with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid - rmnRemoteCid = arg.rmnRemoteCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid + rmnRemoteCid = coerceContractId arg.rmnRemoteCid extraContext = arg.extraContext - tokenReceiveTicketCid = arg.tokenReceiveTicketCid + tokenReceiveTicketCid = coerceContractId arg.tokenReceiveTicketCid caller = arg.caller tokenPool_lockOrBurnImpl self arg = do exercise (fromInterfaceContractId @LockReleaseTokenPool self) LockOrBurn with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid - rmnRemoteCid = arg.rmnRemoteCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid + rmnRemoteCid = coerceContractId arg.rmnRemoteCid extraContext = arg.extraContext - sendingMessageCid = arg.sendingMessageCid + sendingMessageCid = coerceContractId arg.sendingMessageCid senderInputCids = arg.senderInputCids amount = arg.amount caller = arg.caller tokenPool_calculateFeeImpl self arg = do - exercise (fromInterfaceContractId @LockReleaseTokenPool self) CalculateFee + coerceContractId <$> exercise (fromInterfaceContractId @LockReleaseTokenPool self) CalculateFee with - tokenAdminRegistryCid = arg.tokenAdminRegistryCid - tokenConfigCid = arg.tokenConfigCid + tokenAdminRegistryCid = coerceContractId arg.tokenAdminRegistryCid + tokenConfigCid = coerceContractId arg.tokenConfigCid extraContext = arg.extraContext - sendingMessageCid = arg.sendingMessageCid - feeQuoterCid = arg.feeQuoterCid + sendingMessageCid = coerceContractId arg.sendingMessageCid + feeQuoterCid = coerceContractId arg.feeQuoterCid tokenInstrumentId = arg.tokenInstrumentId caller = arg.caller tokenPool_getFeeImpl self arg = do exercise (fromInterfaceContractId @LockReleaseTokenPool self) GetFee with - feeQuoterCid = arg.feeQuoterCid + feeQuoterCid = coerceContractId arg.feeQuoterCid destChainSelector = arg.destChainSelector tokenInstrumentId = arg.tokenInstrumentId caller = arg.caller @@ -885,7 +886,7 @@ template LockReleaseTokenPool pure CCIP.Interfaces.TokenPool.ReleaseOrMintResult with output poolChangeCids = transferResult.senderChangeCids - claimedEventCid + claimedEventCid = coerceContractId claimedEventCid Splice.Api.Token.TransferInstructionV1.TransferInstructionResult_Pending instrCid -> do assertTransferInstructionMatches "ReleaseFromTicket" @@ -920,7 +921,7 @@ template LockReleaseTokenPool pure CCIP.Interfaces.TokenPool.ReleaseOrMintResult with output poolChangeCids = transferResult.senderChangeCids - claimedEventCid + claimedEventCid = coerceContractId claimedEventCid _ -> abort "ReleaseFromTicket: unexpected failed transfer" -- Calculate fee for outbound token transfer (USD cents only). @@ -1165,7 +1166,7 @@ template LockReleaseTokenPool pure CCIP.Interfaces.TokenPool.LockOrBurnResult with poolChangeCids = receiverCids ++ tokenPoolHoldings senderChangeCids = transferResult.senderChangeCids - sendingMessageCid = newSendingMessageCid + sendingMessageCid = coerceContractId newSendingMessageCid interface instance MCMSReceiver for LockReleaseTokenPool where view = MCMSReceiverView with diff --git a/contracts/ccip/receiver/daml/CCIP/CCIPReceiver.daml b/contracts/ccip/receiver/daml/CCIP/CCIPReceiver.daml index 4cd53ccfa..0f9c2c53b 100644 --- a/contracts/ccip/receiver/daml/CCIP/CCIPReceiver.daml +++ b/contracts/ccip/receiver/daml/CCIP/CCIPReceiver.daml @@ -87,7 +87,7 @@ template CCIPReceiver CCIP.Interfaces.TokenPool.TokenPool_GetRequiredCCVs with remoteChainSelector = message.sourceChainSelector sourceAmount = tt.amount - finality = message.finality.requested + finality = message.finality.raw extraData = tokenExtraData direction = CCIP.Interfaces.TokenPool.Inbound caller = owner @@ -135,7 +135,7 @@ template CCIPReceiver tokenAdminRegistryCid <- CCIP.TokenAdminRegistry.lookupTokenAdminRegistryCid context -- PrepareExecute: decode, validate, create ExecutingMessageV1 - emCid <- exercise routerCid CCIP.PerPartyRouter.PrepareExecute with + emCid <- coerceContractId <$> exercise routerCid CCIP.PerPartyRouter.PrepareExecute with context = context encodedMessage = encodedMessage receiverParty = owner @@ -151,21 +151,21 @@ template CCIPReceiver None -> pure emCid Some tt -> do tokenConfigCid <- CCIP.TokenAdminRegistry.lookupTokenConfigCid context - exercise tt.tokenPoolCid + coerceContractId <$> exercise tt.tokenPoolCid CCIP.Interfaces.TokenPool.TokenPool_VerifyInboundMessage with - tokenAdminRegistryCid = tokenAdminRegistryCid - tokenConfigCid = tokenConfigCid + tokenAdminRegistryCid = coerceContractId tokenAdminRegistryCid + tokenConfigCid = coerceContractId tokenConfigCid extraContext = tt.poolExtraContext - executingMessageCid = emCid + executingMessageCid = coerceContractId emCid caller = owner -- CCV verification: thread executingMessageCid through each CCV emCid <- foldlA (\cid input -> - exercise input.ccvCid + coerceContractId <$> exercise input.ccvCid CCIP.Interfaces.CrossChainVerifier.CrossChainVerifier_VerifyMessage with - rmnRemoteCid = rmnRemoteCid + rmnRemoteCid = coerceContractId rmnRemoteCid extraContext = input.ccvExtraContext - executingMessageCid = cid + executingMessageCid = coerceContractId cid verifierResults = input.verifierResults caller = owner ) emCid ccvInputs @@ -176,13 +176,13 @@ template CCIPReceiver executingMessageCid = emCid -- Token release - tokenReleaseResult <- case (tokenTransfer, result.tokenReceiveTicket) of + tokenReleaseResult <- case (tokenTransfer, coerceContractId <$> result.tokenReceiveTicket) of (Some tt, Some ticketCid) -> do tokenConfigCid <- CCIP.TokenAdminRegistry.lookupTokenConfigCid context releaseResult <- exercise tt.tokenPoolCid CCIP.Interfaces.TokenPool.TokenPool_ReleaseFromTicket with - tokenAdminRegistryCid = tokenAdminRegistryCid - tokenConfigCid = tokenConfigCid - rmnRemoteCid = rmnRemoteCid + tokenAdminRegistryCid = coerceContractId tokenAdminRegistryCid + tokenConfigCid = coerceContractId tokenConfigCid + rmnRemoteCid = coerceContractId rmnRemoteCid extraContext = tt.poolExtraContext tokenReceiveTicketCid = ticketCid caller = owner diff --git a/contracts/ccip/sender/daml/CCIP/CCIPSender.daml b/contracts/ccip/sender/daml/CCIP/CCIPSender.daml index 4213f150a..a9d905aca 100644 --- a/contracts/ccip/sender/daml/CCIP/CCIPSender.daml +++ b/contracts/ccip/sender/daml/CCIP/CCIPSender.daml @@ -22,6 +22,7 @@ import CCIP.Interfaces.CrossChainVerifier qualified as ICCV import qualified CCIP.Interfaces.Executor import qualified CCIP.Interfaces.TokenPool import qualified CCIP.PerPartyRouter +import qualified CCIP.SendingMessageV1 import qualified CCIP.TokenAdminRegistry import qualified CCIP.Uint256 @@ -135,7 +136,7 @@ template CCIPSender CCIP.Interfaces.TokenPool.TokenPool_GetRequiredCCVs with remoteChainSelector = destinationChainSelector sourceAmount = sourceAmount - finality = CCIP.FinalityConfig.WaitForFinality + finality = CCIP.FinalityConfig.waitForFinalityFlag extraData = extraArgs.tokenArgs direction = CCIP.Interfaces.TokenPool.Outbound caller = owner @@ -196,7 +197,7 @@ template CCIPSender abort "sender: tokenTransferInput required for token transfer" (Some tt, Some tokenTransferInput) -> do q <- exercise tokenTransferInput.tokenPoolCid CCIP.Interfaces.TokenPool.TokenPool_GetFee with - feeQuoterCid = feeQuoterCid + feeQuoterCid = coerceContractId feeQuoterCid destChainSelector = destinationChainSelector tokenInstrumentId = tt.token caller = owner @@ -282,10 +283,11 @@ template CCIPSender None -> abort "sender: unknown destination chain" Some cfg -> pure cfg - smCid <- exercise routerCid CCIP.PerPartyRouter.PrepareSend with - destinationChainSelector = destinationChainSelector - message = message - context + smCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 <- + exercise routerCid CCIP.PerPartyRouter.PrepareSend with + destinationChainSelector = destinationChainSelector + message = message + context smCid <- case message.tokenTransfer of None -> do @@ -296,20 +298,22 @@ template CCIPSender None -> abort "sender: tokenTransferInput required for token transfer" Some tokenTransferInput -> do tokenConfigCid <- CCIP.TokenAdminRegistry.lookupTokenConfigCid context - exercise tokenTransferInput.tokenPoolCid CCIP.Interfaces.TokenPool.TokenPool_VerifyOutboundCCVs with - tokenAdminRegistryCid = tokenAdminRegistryCid - tokenConfigCid = tokenConfigCid + newCid <- exercise tokenTransferInput.tokenPoolCid CCIP.Interfaces.TokenPool.TokenPool_VerifyOutboundCCVs with + tokenAdminRegistryCid = coerceContractId tokenAdminRegistryCid + tokenConfigCid = coerceContractId tokenConfigCid extraContext = tokenTransferInput.poolExtraContext - sendingMessageCid = smCid + sendingMessageCid = coerceContractId smCid amount = tt.amount caller = owner + pure (coerceContractId newCid: ContractId CCIP.SendingMessageV1.SendingMessageV1) - smCid <- foldlA (\cid input -> - exercise input.ccvCid + smCid <- foldlA (\cid input -> do + newCid <- exercise input.ccvCid ICCV.CrossChainVerifier_CalculateFee with - sendingMessageCid = cid + sendingMessageCid = coerceContractId cid extraContext = input.ccvExtraContext caller = owner + pure (coerceContractId newCid : ContractId CCIP.SendingMessageV1.SendingMessageV1) ) smCid ccvSendInputs smCid <- case (message.tokenTransfer, tokenTransferInput) of @@ -320,14 +324,15 @@ template CCIPSender abort "sender: tokenTransferInput required for token transfer" (Some tt, Some tokenTransferInput) -> do tokenConfigCid <- CCIP.TokenAdminRegistry.lookupTokenConfigCid context - exercise tokenTransferInput.tokenPoolCid CCIP.Interfaces.TokenPool.TokenPool_CalculateFee with - tokenAdminRegistryCid = tokenAdminRegistryCid - tokenConfigCid = tokenConfigCid + newCid <- exercise tokenTransferInput.tokenPoolCid CCIP.Interfaces.TokenPool.TokenPool_CalculateFee with + tokenAdminRegistryCid = coerceContractId tokenAdminRegistryCid + tokenConfigCid = coerceContractId tokenConfigCid extraContext = tokenTransferInput.poolExtraContext - sendingMessageCid = smCid - feeQuoterCid = feeQuoterCid + sendingMessageCid = coerceContractId smCid + feeQuoterCid = coerceContractId feeQuoterCid tokenInstrumentId = tt.token caller = owner + pure (coerceContractId newCid : ContractId CCIP.SendingMessageV1.SendingMessageV1) smCid <- case extraArgs.executor of CCIP.Client.Executor_NoExecutor -> do @@ -343,29 +348,31 @@ template CCIPSender Some expectedExecutor -> case executorInput of None -> abort "sender: executorInput required for default executor mode" - Some executorInput -> - exercise executorInput.executorCid + Some executorInput -> do + newCid <- exercise executorInput.executorCid CCIP.Interfaces.Executor.Executor_CalculateFee with expectedExecutor = expectedExecutor - sendingMessageCid = smCid + sendingMessageCid = coerceContractId smCid executorArgs = executorArgs extraContext = executorInput.executorExtraContext caller = owner + pure (coerceContractId newCid : ContractId CCIP.SendingMessageV1.SendingMessageV1) CCIP.Client.Executor_WithAddress expectedExecutor executorArgs -> case executorInput of None -> abort "sender: executorInput required for explicit executor mode" - Some executorInput -> - exercise executorInput.executorCid + Some executorInput -> do + newCid <- exercise executorInput.executorCid CCIP.Interfaces.Executor.Executor_CalculateFee with expectedExecutor = expectedExecutor - sendingMessageCid = smCid + sendingMessageCid = coerceContractId smCid executorArgs = executorArgs extraContext = executorInput.executorExtraContext caller = owner + pure (coerceContractId newCid : ContractId CCIP.SendingMessageV1.SendingMessageV1) - smCid <- exercise routerCid CCIP.PerPartyRouter.FinalizeFee with + smCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 <- coerceContractId <$> exercise routerCid CCIP.PerPartyRouter.FinalizeFee with context - sendingMessageCid = smCid + sendingMessageCid = coerceContractId smCid smCid <- case (message.tokenTransfer, tokenTransferInput) of (None, None) -> pure smCid @@ -376,30 +383,31 @@ template CCIPSender (Some tt, Some tokenTransferInput) -> do tokenConfigCid <- CCIP.TokenAdminRegistry.lookupTokenConfigCid context lockResult <- exercise tokenTransferInput.tokenPoolCid CCIP.Interfaces.TokenPool.TokenPool_LockOrBurn with - tokenAdminRegistryCid = tokenAdminRegistryCid - tokenConfigCid = tokenConfigCid - rmnRemoteCid = rmnRemoteCid + tokenAdminRegistryCid = coerceContractId tokenAdminRegistryCid + tokenConfigCid = coerceContractId tokenConfigCid + rmnRemoteCid = coerceContractId rmnRemoteCid extraContext = tokenTransferInput.poolExtraContext - sendingMessageCid = smCid + sendingMessageCid = coerceContractId smCid senderInputCids = tokenTransferInput.senderInputCids amount = tt.amount caller = owner - pure lockResult.sendingMessageCid - - smCid <- foldlA (\cid input -> do - verifierArgs <- lookupVerifierArgs extraArgs.ccvs input.ccvAddress - exercise input.ccvCid - ICCV.CrossChainVerifier_ForwardToVerifier with - rmnRemoteCid = rmnRemoteCid - extraContext = input.ccvExtraContext - sendingMessageCid = cid - verifierArgs = verifierArgs - caller = owner - ) smCid ccvSendInputs + pure (coerceContractId lockResult.sendingMessageCid) + + smCid : ContractId CCIP.SendingMessageV1.SendingMessageV1 <- foldlA (\cid input -> do + verifierArgs <- lookupVerifierArgs extraArgs.ccvs input.ccvAddress + newCid <- exercise input.ccvCid + ICCV.CrossChainVerifier_ForwardToVerifier with + rmnRemoteCid = coerceContractId rmnRemoteCid + extraContext = input.ccvExtraContext + sendingMessageCid = coerceContractId cid + verifierArgs = verifierArgs + caller = owner + pure (coerceContractId newCid) + ) (smCid) ccvSendInputs exercise routerCid CCIP.PerPartyRouter.CCIPSend with context - sendingMessageCid = smCid + sendingMessageCid = coerceContractId smCid feeTokenHoldingCids = feeTokenInput.senderInputCids feeTokenConfigCid = feeTokenInput.feeTokenConfigCid feeTokenTransferFactory = feeTokenInput.feeTokenTransferFactory diff --git a/contracts/ccip/test/daml/BurnMintTokenPoolTest.daml b/contracts/ccip/test/daml/BurnMintTokenPoolTest.daml index f95f376cf..fc6c572d3 100644 --- a/contracts/ccip/test/daml/BurnMintTokenPoolTest.daml +++ b/contracts/ccip/test/daml/BurnMintTokenPoolTest.daml @@ -8,6 +8,7 @@ import DA.Optional (fromSome, fromSomeNote, isSome) import DA.TextMap qualified as TextMap import qualified CCIP.Context +import qualified CCIP.Events import CCIP.BurnMintTokenPool qualified as BurnMintTokenPool import CCIP.ExecutingMessageV1 qualified as ExecutingMessageV1 import CCIP.FinalityConfig qualified as FinalityConfig @@ -346,11 +347,11 @@ testBurnMintPoolLockOrBurnBurnsAndMintsOutputs = script do result <- submit (actAs sender <> actAs poolOwner <> disclose disclosedPool <> disclose disclosedTar <> disclose disclosedRmn <> disclose disclosedRateLimiter <> disclose disclosedRegistry) do exerciseCmd tokenPoolCid BurnMintTokenPool.LockOrBurn with - tokenAdminRegistryCid = tokenAdminRegistryCid - tokenConfigCid = tokenConfigCid - rmnRemoteCid = rmnRemoteCid + tokenAdminRegistryCid = coerceContractId tokenAdminRegistryCid + tokenConfigCid = coerceContractId tokenConfigCid + rmnRemoteCid = coerceContractId rmnRemoteCid extraContext = mkPoolContext outboundRateLimiterCid (toInterfaceContractId registryCid) - sendingMessageCid = sendingMessageCid + sendingMessageCid = coerceContractId sendingMessageCid senderInputCids = [senderHoldingCid] amount = 7.0 caller = sender @@ -361,7 +362,7 @@ testBurnMintPoolLockOrBurnBurnsAndMintsOutputs = script do Some senderChangeHolding <- queryContractId sender (fromInterfaceContractId @Link.LinkHolding senderChangeCid) Some poolFeeHolding <- queryContractId poolOwner (fromInterfaceContractId @Link.LinkHolding poolFeeCid) None <- queryContractId sender (fromInterfaceContractId @Link.LinkHolding senderHoldingCid) - Some updatedSendingMessage <- queryContractId ccipOwner result.sendingMessageCid + Some updatedSendingMessage <- queryContractId ccipOwner (coerceContractId result.sendingMessageCid : ContractId SendingMessageV1.SendingMessageV1) senderChangeHolding.holdingAmount === 3.0 poolFeeHolding.holdingAmount === 0.35 @@ -883,7 +884,7 @@ testBurnMintPoolReleaseFromTicketRawUint256AmountAboveNumeric0Downscales = scrip receiverHolding.holdingAmount === 1.0 _ -> abort "expected completed release result" - Some claimedEvent <- queryContractId receiver result.claimedEventCid + Some claimedEvent <- queryContractId receiver (coerceContractId result.claimedEventCid : ContractId CCIP.Events.TokenReceiveTicketClaimed) claimedEvent.event.sourceAmount === sourceAmount claimedEvent.event.localAmount === 10000000000.0 diff --git a/contracts/ccip/test/daml/CommitteeVerifier/DummyCommitteeVerifier.daml b/contracts/ccip/test/daml/CommitteeVerifier/DummyCommitteeVerifier.daml index 48db3cfda..5668f742b 100644 --- a/contracts/ccip/test/daml/CommitteeVerifier/DummyCommitteeVerifier.daml +++ b/contracts/ccip/test/daml/CommitteeVerifier/DummyCommitteeVerifier.daml @@ -36,13 +36,13 @@ template DummyCommitteeVerifier "01" -> error "DummyCommitteeVerifier: Simulated verification failure" _ -> do debug "DummyCommitteeVerifier: Simulated successful verification" - exercise arg.executingMessageCid CCIP.ExecutingMessageV1.AddCCVVerification with + coerceContractId <$> exercise (coerceContractId arg.executingMessageCid : ContractId CCIP.ExecutingMessageV1.ExecutingMessageV1) CCIP.ExecutingMessageV1.AddCCVVerification with ccvInstanceId = instanceId versionTag = versionTag caller = owner crossChainVerifier_calculateFeeImpl _self arg = do - exercise arg.sendingMessageCid CCIP.SendingMessageV1.AddCCVFee with + coerceContractId <$>exercise (coerceContractId arg.sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1) CCIP.SendingMessageV1.AddCCVFee with ccvInstanceId = instanceId feeUSDCents = feeUSDCents destGasLimit = destGasLimit @@ -58,9 +58,9 @@ template DummyCommitteeVerifier payloadSizeBytes = destBytesOverhead crossChainVerifier_forwardToVerifierImpl self arg = do - exercise (fromInterfaceContractId @DummyCommitteeVerifier self) + coerceContractId <$> exercise (fromInterfaceContractId @DummyCommitteeVerifier self) ForwardToVerifier with - sendingMessageCid = arg.sendingMessageCid + sendingMessageCid = coerceContractId arg.sendingMessageCid caller = arg.caller nonconsuming choice ForwardToVerifier diff --git a/contracts/ccip/test/daml/LockReleaseTokenPoolTest.daml b/contracts/ccip/test/daml/LockReleaseTokenPoolTest.daml index 632b1bb4f..3b9895315 100644 --- a/contracts/ccip/test/daml/LockReleaseTokenPoolTest.daml +++ b/contracts/ccip/test/daml/LockReleaseTokenPoolTest.daml @@ -451,7 +451,7 @@ testLockOrBurn = script do senderC.amount === 5.0 senderC.owner === sender - Some updatedSendingMessage <- queryContractId ccipOwner result.sendingMessageCid + Some updatedSendingMessage <- queryContractId ccipOwner (coerceContractId result.sendingMessageCid : ContractId SendingMessageV1.SendingMessageV1) let tokenSendData = fromSome updatedSendingMessage.tokenSendData tokenSendData.amount === fromSome (MessageCodecV1.encodeUint256 50000000000.0) @@ -648,7 +648,7 @@ testLockOrBurnValidatesExistingPoolHoldingsAndPreservesThem = script do let existingPoolH = fromSome existingPoolHoldingFetched existingPoolH.amount === 3.0 - Some updatedSendingMessage <- queryContractId ccipOwner result.sendingMessageCid + Some updatedSendingMessage <- queryContractId ccipOwner (coerceContractId result.sendingMessageCid : ContractId SendingMessageV1.SendingMessageV1) let tokenSendData = fromSome updatedSendingMessage.tokenSendData tokenSendData.amount === fromSome (MessageCodecV1.encodeUint256 50000000000.0) @@ -825,7 +825,7 @@ testLockOrBurnDeductsFeeBps = script do extraContext = mkPoolContext outboundRateLimiter (toInterfaceContractId transferFactory) [] [(poolOwner, poolPreapproval)] caller = sender - Some sm <- queryContractId ccipOwner result.sendingMessageCid + Some sm <- queryContractId ccipOwner (coerceContractId result.sendingMessageCid : ContractId SendingMessageV1.SendingMessageV1) let tokenSendData = fromSome sm.tokenSendData -- 5% feeBps deducted from bridged amount. tokenSendData.amount === fromSome (MessageCodecV1.encodeUint256 47500000000.0) @@ -974,7 +974,7 @@ testReleaseFromTicket = script do receiverH.owner === receiver _ -> abort "Expected completed result" - claimedEvent <- queryContractId receiver result.claimedEventCid + claimedEvent <- queryContractId receiver (coerceContractId result.claimedEventCid : ContractId Events.TokenReceiveTicketClaimed) assertMsg "Claimed event should exist" (isSome claimedEvent) let claimed = fromSome claimedEvent claimed.tokenReceiveTicketCid === tokenReceiveTicket @@ -1631,7 +1631,7 @@ testReleaseFromTicketDecimalConversion = script do receiverH.amount === 1.2345678901 _ -> abort "Expected completed result" - claimedEvent <- queryContractId receiver result.claimedEventCid + claimedEvent <- queryContractId receiver (coerceContractId result.claimedEventCid : ContractId Events.TokenReceiveTicketClaimed) let claimed = fromSome claimedEvent claimed.event.messageId === "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" case claimed.event.output of @@ -1775,7 +1775,7 @@ testReleaseFromTicketRawUint256AmountAboveNumeric0Downscales = script do receiverH.amount === 1.0 _ -> abort "Expected completed result" - claimedEvent <- queryContractId receiver result.claimedEventCid + claimedEvent <- queryContractId receiver (coerceContractId result.claimedEventCid : ContractId Events.TokenReceiveTicketClaimed) let claimed = fromSome claimedEvent claimed.event.sourceAmount === sourceAmount claimed.event.localAmount === 10000000000.0 @@ -3484,15 +3484,15 @@ testCalculateFeeFallsBackToFeeQuoter = script do sendingMessageCid <- submit (actAs sender <> disclose disclosedPool <> disclose disclosedTar <> disclose disclosedTokenConfig <> disclose disclosedFq) do exerciseCmd (toInterfaceContractId @ITokenPool.ITokenPool tokenPool) ITokenPool.TokenPool_CalculateFee with - tokenAdminRegistryCid = tokenAdminRegistry - tokenConfigCid = tokenConfigCid + tokenAdminRegistryCid = coerceContractId tokenAdminRegistry + tokenConfigCid = coerceContractId tokenConfigCid extraContext = MetadataV1.emptyChoiceContext - sendingMessageCid = sendingMessageCid - feeQuoterCid = feeQuoter + sendingMessageCid = coerceContractId sendingMessageCid + feeQuoterCid = coerceContractId feeQuoter tokenInstrumentId = testInstrumentId caller = sender - Some sm <- queryContractId ccipOwner sendingMessageCid + Some sm <- queryContractId ccipOwner (coerceContractId sendingMessageCid : ContractId SendingMessageV1.SendingMessageV1) let tokenSendFee = fromSome sm.tokenSendFee tokenSendFee.feeUSDCents === usdToCents 3.0 tokenSendFee.destGasOverhead === 70000 @@ -3638,15 +3638,15 @@ testCalculateFeePrefersPoolOverride = script do sendingMessageCid <- submit (actAs sender <> disclose disclosedPool <> disclose disclosedTar <> disclose disclosedTokenConfig <> disclose disclosedFq <> disclose disclosedSm) do exerciseCmd (toInterfaceContractId @ITokenPool.ITokenPool tokenPool) ITokenPool.TokenPool_CalculateFee with - tokenAdminRegistryCid = tokenAdminRegistry - tokenConfigCid = tokenConfigCid + tokenAdminRegistryCid = coerceContractId tokenAdminRegistry + tokenConfigCid = coerceContractId tokenConfigCid extraContext = MetadataV1.emptyChoiceContext - sendingMessageCid = sendingMessageCid - feeQuoterCid = feeQuoter + sendingMessageCid = coerceContractId sendingMessageCid + feeQuoterCid = coerceContractId feeQuoter tokenInstrumentId = testInstrumentId caller = sender - Some sm <- queryContractId ccipOwner sendingMessageCid + Some sm <- queryContractId ccipOwner (coerceContractId sendingMessageCid : ContractId SendingMessageV1.SendingMessageV1) let tokenSendFee = fromSome sm.tokenSendFee tokenSendFee.feeUSDCents === cents 2.0 tokenSendFee.destGasOverhead === 50000 @@ -3791,15 +3791,15 @@ testCalculateFeeFallsBackWhenPoolFeeDisabled = script do sendingMessageCid <- submit (actAs sender <> disclose disclosedPool <> disclose disclosedTar <> disclose disclosedTokenConfig <> disclose disclosedFq <> disclose disclosedSm) do exerciseCmd (toInterfaceContractId @ITokenPool.ITokenPool tokenPool) ITokenPool.TokenPool_CalculateFee with - tokenAdminRegistryCid = tokenAdminRegistry - tokenConfigCid = tokenConfigCid + tokenAdminRegistryCid = coerceContractId tokenAdminRegistry + tokenConfigCid = coerceContractId tokenConfigCid extraContext = MetadataV1.emptyChoiceContext - sendingMessageCid = sendingMessageCid - feeQuoterCid = feeQuoter + sendingMessageCid = coerceContractId sendingMessageCid + feeQuoterCid = coerceContractId feeQuoter tokenInstrumentId = testInstrumentId caller = sender - Some sm <- queryContractId ccipOwner sendingMessageCid + Some sm <- queryContractId ccipOwner (coerceContractId sendingMessageCid : ContractId SendingMessageV1.SendingMessageV1) let tokenSendFee = fromSome sm.tokenSendFee tokenSendFee.feeUSDCents === usdToCents 4.0 tokenSendFee.destGasOverhead === 71000 diff --git a/contracts/ccip/test/daml/OffRampExecute.daml b/contracts/ccip/test/daml/OffRampExecute.daml index baee4e33c..9a3f50170 100644 --- a/contracts/ccip/test/daml/OffRampExecute.daml +++ b/contracts/ccip/test/daml/OffRampExecute.daml @@ -836,7 +836,7 @@ testExecuteWithDefaultCCVs_SentinelUseDefaultCCVs = script do encodedMessage = encodedMessage receiverParty = receiver tokenReceiverParty = None - receiverRequiredCCVs = [ccv1RawAddress, CrossChainVerifier.useDefaultCCVs, ccv3RawAddress] + receiverRequiredCCVs = [ccv1RawAddress, Internal.useDefaultCCVs, ccv3RawAddress] receiverOptionalCCVs = [] receiverOptionalThreshold = 0 receiverFinalityConfig = finalityConfig 2000 diff --git a/contracts/ccip/test/daml/PerPartyRouter.daml b/contracts/ccip/test/daml/PerPartyRouter.daml index 713ce161c..4e676f4a3 100644 --- a/contracts/ccip/test/daml/PerPartyRouter.daml +++ b/contracts/ccip/test/daml/PerPartyRouter.daml @@ -387,7 +387,7 @@ testCCIPSendAllFeePayouts = script do -- ccvOwner is not yet a stakeholder; use disclosure from ccipOwner (signatory). disclosedSm <- fromSome <$> queryDisclosure ccipOwner sendingMessageCid sendingMessageCid <- submit (actAs ccvOwner <> disclose disclosedSm) do - exerciseCmd sendingMessageCid CCIP.SendingMessageV1.AddCCVFee with + coerceContractId <$> exerciseCmd sendingMessageCid CCIP.SendingMessageV1.AddCCVFee with ccvInstanceId = ccvInstanceId feeUSDCents = cents 100.0 destGasLimit = 0 @@ -395,11 +395,11 @@ testCCIPSendAllFeePayouts = script do caller = ccvOwner -- AddCCVFee made ccvOwner a signatory; refresh disclosure for the updated SM. - disclosedSm <- fromSome <$> queryDisclosure ccipOwner sendingMessageCid + disclosedSm <- fromSome <$> queryDisclosure ccipOwner (coerceContractId sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1) -- caller must be a stakeholder of SendingMessageV1 (ccipOwner is signatory). -- executorOwner stays in actAs so the nested AddExecutorFee (controller = executorOwner) succeeds. sendingMessageCid <- submit (actAs ccipOwner <> actAs executorOwner <> disclose disclosedSm) do - exerciseCmd (toInterfaceContractId @CCIP.Interfaces.Executor.IExecutor executor) + coerceContractId <$> exerciseCmd (toInterfaceContractId @CCIP.Interfaces.Executor.IExecutor executor) CCIP.Interfaces.Executor.Executor_CalculateFee with expectedExecutor = executorInstanceAddress sendingMessageCid = sendingMessageCid @@ -686,7 +686,7 @@ testCCIPSend = script do -- PrepareSend: create SendingMessageV1 (message deferred to executor) sendingMessageCid <- submit (actAs user <> actAs ccipOwner <> disclose disclosedOnRamp <> disclose disclosedGlobalConfig <> disclose disclosedTokenAdminRegistry <> disclose disclosedFeeQuoter <> disclose disclosedRmnRemote) do - exerciseCmd router CCIP.PerPartyRouter.PrepareSend with + coerceContractId <$> exerciseCmd router CCIP.PerPartyRouter.PrepareSend with context = Splice.Api.Token.MetadataV1.ChoiceContext with values = TextMap.fromList [(CCIP.Context.rmnRemoteKey, Splice.Api.Token.MetadataV1.AV_ContractId $ coerceContractId rmnRemote), (CCIP.TokenAdminRegistry.tokenAdminRegistryKey, Splice.Api.Token.MetadataV1.AV_ContractId $ coerceContractId tokenAdminRegistry), @@ -705,9 +705,9 @@ testCCIPSend = script do "" -- Executor fee calculation (must happen before FinalizeFee) - disclosedSm <- fromSome <$> queryDisclosure ccipOwner sendingMessageCid + disclosedSm <- fromSome <$> queryDisclosure ccipOwner (coerceContractId sendingMessageCid : ContractId CCIP.SendingMessageV1.SendingMessageV1) sendingMessageCid <- submit (actAs ccipOwner <> disclose disclosedSm) do - exerciseCmd (toInterfaceContractId @CCIP.Interfaces.Executor.IExecutor executor) + coerceContractId <$> exerciseCmd (toInterfaceContractId @CCIP.Interfaces.Executor.IExecutor executor) CCIP.Interfaces.Executor.Executor_CalculateFee with expectedExecutor = executorInstanceAddress sendingMessageCid = sendingMessageCid @@ -756,7 +756,7 @@ testCCIPSend = script do -- Send another message, sequence number should be 2 sendingMessageCid2 <- submit (actAs user <> actAs ccipOwner <> disclose disclosedOnRamp <> disclose disclosedGlobalConfig <> disclose disclosedTokenAdminRegistry <> disclose disclosedFeeQuoter <> disclose disclosedRmnRemote) do - exerciseCmd newRouter CCIP.PerPartyRouter.PrepareSend with + coerceContractId <$> exerciseCmd newRouter CCIP.PerPartyRouter.PrepareSend with context = Splice.Api.Token.MetadataV1.ChoiceContext with values = TextMap.fromList [(CCIP.Context.rmnRemoteKey, Splice.Api.Token.MetadataV1.AV_ContractId $ coerceContractId rmnRemote), (CCIP.TokenAdminRegistry.tokenAdminRegistryKey, Splice.Api.Token.MetadataV1.AV_ContractId $ coerceContractId tokenAdminRegistry), @@ -775,9 +775,9 @@ testCCIPSend = script do "" -- Executor fee for second message (must happen before FinalizeFee) - disclosedSm2 <- fromSome <$> queryDisclosure ccipOwner sendingMessageCid2 + disclosedSm2 <- fromSome <$> queryDisclosure ccipOwner (coerceContractId sendingMessageCid2 : ContractId CCIP.SendingMessageV1.SendingMessageV1) sendingMessageCid2 <- submit (actAs ccipOwner <> disclose disclosedSm2) do - exerciseCmd (toInterfaceContractId @CCIP.Interfaces.Executor.IExecutor executor) + coerceContractId <$> exerciseCmd (toInterfaceContractId @CCIP.Interfaces.Executor.IExecutor executor) CCIP.Interfaces.Executor.Executor_CalculateFee with expectedExecutor = executorInstanceAddress sendingMessageCid = sendingMessageCid2 diff --git a/contracts/dars/current/ccip-burn-mint-token-pool-current.dar b/contracts/dars/current/ccip-burn-mint-token-pool-current.dar index e5b672d4a..2aa6ee214 100644 Binary files a/contracts/dars/current/ccip-burn-mint-token-pool-current.dar and b/contracts/dars/current/ccip-burn-mint-token-pool-current.dar differ diff --git a/contracts/dars/current/ccip-committee-verifier-current.dar b/contracts/dars/current/ccip-committee-verifier-current.dar index 3c71b364f..ab2a2443a 100644 Binary files a/contracts/dars/current/ccip-committee-verifier-current.dar and b/contracts/dars/current/ccip-committee-verifier-current.dar differ diff --git a/contracts/dars/current/ccip-executor-current.dar b/contracts/dars/current/ccip-executor-current.dar index 8b18f776c..ad38ff084 100644 Binary files a/contracts/dars/current/ccip-executor-current.dar and b/contracts/dars/current/ccip-executor-current.dar differ diff --git a/contracts/dars/current/ccip-extension-api-current.dar b/contracts/dars/current/ccip-extension-api-current.dar index fb6c55d03..6b30cca8b 100644 Binary files a/contracts/dars/current/ccip-extension-api-current.dar and b/contracts/dars/current/ccip-extension-api-current.dar differ diff --git a/contracts/dars/current/ccip-factory-current.dar b/contracts/dars/current/ccip-factory-current.dar index b7108985f..e3b22793a 100644 Binary files a/contracts/dars/current/ccip-factory-current.dar and b/contracts/dars/current/ccip-factory-current.dar differ diff --git a/contracts/dars/current/ccip-lock-release-token-pool-current.dar b/contracts/dars/current/ccip-lock-release-token-pool-current.dar index 0086c1dee..5dde23bc6 100644 Binary files a/contracts/dars/current/ccip-lock-release-token-pool-current.dar and b/contracts/dars/current/ccip-lock-release-token-pool-current.dar differ diff --git a/contracts/dars/current/ccip-receiver-current.dar b/contracts/dars/current/ccip-receiver-current.dar index 806e7ddea..cc158a1a8 100644 Binary files a/contracts/dars/current/ccip-receiver-current.dar and b/contracts/dars/current/ccip-receiver-current.dar differ diff --git a/contracts/dars/current/ccip-runtime-current.dar b/contracts/dars/current/ccip-runtime-current.dar index c77204a09..7727472bd 100644 Binary files a/contracts/dars/current/ccip-runtime-current.dar and b/contracts/dars/current/ccip-runtime-current.dar differ diff --git a/contracts/dars/current/ccip-sender-current.dar b/contracts/dars/current/ccip-sender-current.dar index 8ad004359..d0b84b48a 100644 Binary files a/contracts/dars/current/ccip-sender-current.dar and b/contracts/dars/current/ccip-sender-current.dar differ diff --git a/contracts/dars/current/ccip-test-current.dar b/contracts/dars/current/ccip-test-current.dar index 3c46ac418..0bebee7d6 100644 Binary files a/contracts/dars/current/ccip-test-current.dar and b/contracts/dars/current/ccip-test-current.dar differ