diff --git a/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/DarResources.scala b/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/DarResources.scala index 8bff6e0af0..3952c680a9 100644 --- a/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/DarResources.scala +++ b/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/DarResources.scala @@ -1530,7 +1530,7 @@ object DarResources { ) val amulet_0_1_19 = DarResource( "splice-amulet-0.1.19.dar", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", PackageMetadata( PackageName.assertFromString("splice-amulet"), PackageVersion.assertFromString("0.1.19"), @@ -1559,6 +1559,7 @@ object DarResources { "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -1580,7 +1581,7 @@ object DarResources { ) val amulet_current = DarResource( "splice-amulet-current.dar", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", PackageMetadata( PackageName.assertFromString("splice-amulet"), PackageVersion.assertFromString("0.1.19"), @@ -1609,6 +1610,7 @@ object DarResources { "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -2827,38 +2829,39 @@ object DarResources { ) val dsoGovernance_0_1_25 = DarResource( "splice-dso-governance-0.1.25.dar", - "d4eacbad7785fdd5f42e3b48a66af9dfe9909cf6a91acf9d425d229b7d4944d3", + "dfe102514acd41f79945b8363ca84d8243be97b2b235522ce77c754a36bb8479", PackageMetadata( PackageName.assertFromString("splice-dso-governance"), PackageVersion.assertFromString("0.1.25"), None, ), Set( + "0b6748de2e613f5bc9a108b2496b85d2d661b7344c6c55eada9c0a0bf8efe0a5", + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", "62a6fc80fc8ca84dd5f6b33c71f53dd35a02bc01784b8cbc7cbd283eb23863c0", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", - "acc98b8b005b0d39031077646c40ae3592c90817088ab1929a385905bfd0a0de", "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", "7804375fe5e4c6d5afe067bd314c42fe0b7d005a1300019c73154dd939da4dda", "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", - "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -2880,38 +2883,39 @@ object DarResources { ) val dsoGovernance_current = DarResource( "splice-dso-governance-current.dar", - "d4eacbad7785fdd5f42e3b48a66af9dfe9909cf6a91acf9d425d229b7d4944d3", + "dfe102514acd41f79945b8363ca84d8243be97b2b235522ce77c754a36bb8479", PackageMetadata( PackageName.assertFromString("splice-dso-governance"), PackageVersion.assertFromString("0.1.25"), None, ), Set( + "0b6748de2e613f5bc9a108b2496b85d2d661b7344c6c55eada9c0a0bf8efe0a5", + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", "62a6fc80fc8ca84dd5f6b33c71f53dd35a02bc01784b8cbc7cbd283eb23863c0", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", - "acc98b8b005b0d39031077646c40ae3592c90817088ab1929a385905bfd0a0de", "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", "7804375fe5e4c6d5afe067bd314c42fe0b7d005a1300019c73154dd939da4dda", "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", - "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -4063,25 +4067,27 @@ object DarResources { ) val wallet_0_1_20 = DarResource( "splice-wallet-0.1.20.dar", - "acae701514f37c574e62d1179859cda3dd2907a78fa3d6b34dc5cac3185e5f90", + "e485c2eb59cca556e0e2ecfaaef45346dd0ba64f9976a3957938d814f846c78c", PackageMetadata( PackageName.assertFromString("splice-wallet"), PackageVersion.assertFromString("0.1.20"), None, ), Set( + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", "62a6fc80fc8ca84dd5f6b33c71f53dd35a02bc01784b8cbc7cbd283eb23863c0", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", @@ -4090,10 +4096,9 @@ object DarResources { "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", - "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -4115,25 +4120,27 @@ object DarResources { ) val wallet_current = DarResource( "splice-wallet-current.dar", - "acae701514f37c574e62d1179859cda3dd2907a78fa3d6b34dc5cac3185e5f90", + "e485c2eb59cca556e0e2ecfaaef45346dd0ba64f9976a3957938d814f846c78c", PackageMetadata( PackageName.assertFromString("splice-wallet"), PackageVersion.assertFromString("0.1.20"), None, ), Set( + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", "62a6fc80fc8ca84dd5f6b33c71f53dd35a02bc01784b8cbc7cbd283eb23863c0", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", @@ -4142,10 +4149,9 @@ object DarResources { "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", - "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -5116,25 +5122,27 @@ object DarResources { ) val amuletNameService_0_1_20 = DarResource( "splice-amulet-name-service-0.1.20.dar", - "acc98b8b005b0d39031077646c40ae3592c90817088ab1929a385905bfd0a0de", + "0b6748de2e613f5bc9a108b2496b85d2d661b7344c6c55eada9c0a0bf8efe0a5", PackageMetadata( PackageName.assertFromString("splice-amulet-name-service"), PackageVersion.assertFromString("0.1.20"), None, ), Set( + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", "62a6fc80fc8ca84dd5f6b33c71f53dd35a02bc01784b8cbc7cbd283eb23863c0", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", @@ -5143,10 +5151,9 @@ object DarResources { "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", - "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -5168,25 +5175,27 @@ object DarResources { ) val amuletNameService_current = DarResource( "splice-amulet-name-service-current.dar", - "acc98b8b005b0d39031077646c40ae3592c90817088ab1929a385905bfd0a0de", + "0b6748de2e613f5bc9a108b2496b85d2d661b7344c6c55eada9c0a0bf8efe0a5", PackageMetadata( PackageName.assertFromString("splice-amulet-name-service"), PackageVersion.assertFromString("0.1.20"), None, ), Set( + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", "62a6fc80fc8ca84dd5f6b33c71f53dd35a02bc01784b8cbc7cbd283eb23863c0", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", @@ -5195,10 +5204,9 @@ object DarResources { "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", - "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -6101,13 +6109,14 @@ object DarResources { ) val walletPayments_0_1_19 = DarResource( "splice-wallet-payments-0.1.19.dar", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", PackageMetadata( PackageName.assertFromString("splice-wallet-payments"), PackageVersion.assertFromString("0.1.19"), None, ), Set( + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", @@ -6118,7 +6127,6 @@ object DarResources { "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", @@ -6131,6 +6139,7 @@ object DarResources { "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -6152,13 +6161,14 @@ object DarResources { ) val walletPayments_current = DarResource( "splice-wallet-payments-current.dar", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", PackageMetadata( PackageName.assertFromString("splice-wallet-payments"), PackageVersion.assertFromString("0.1.19"), None, ), Set( + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", @@ -6169,7 +6179,6 @@ object DarResources { "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", @@ -6182,6 +6191,7 @@ object DarResources { "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -7151,25 +7161,27 @@ object DarResources { ) val splitwell_0_1_20 = DarResource( "splitwell-0.1.20.dar", - "0b4ab37ab9cab8c41d8a1a9868f6302f21eaef0bdf1d795c5ab99c0050a75db5", + "af686139dda12540ab05a292987f5fa2edd0c05af62d9651384d005e9a91043e", PackageMetadata( PackageName.assertFromString("splitwell"), PackageVersion.assertFromString("0.1.20"), None, ), Set( + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", "62a6fc80fc8ca84dd5f6b33c71f53dd35a02bc01784b8cbc7cbd283eb23863c0", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", @@ -7178,10 +7190,9 @@ object DarResources { "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", - "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -7203,25 +7214,27 @@ object DarResources { ) val splitwell_current = DarResource( "splitwell-current.dar", - "0b4ab37ab9cab8c41d8a1a9868f6302f21eaef0bdf1d795c5ab99c0050a75db5", + "af686139dda12540ab05a292987f5fa2edd0c05af62d9651384d005e9a91043e", PackageMetadata( PackageName.assertFromString("splitwell"), PackageVersion.assertFromString("0.1.20"), None, ), Set( + "90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b", "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", "62a6fc80fc8ca84dd5f6b33c71f53dd35a02bc01784b8cbc7cbd283eb23863c0", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", - "b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", @@ -7230,10 +7243,9 @@ object DarResources { "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", - "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", - "dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020", "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", @@ -7660,10 +7672,102 @@ object DarResources { validatorLifecycle_0_1_7, ), ) + val apiRewardAssignmentV1_1_0_0 = DarResource( + "splice-api-reward-assignment-v1-1.0.0.dar", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", + PackageMetadata( + PackageName.assertFromString("splice-api-reward-assignment-v1"), + PackageVersion.assertFromString("1.0.0"), + None, + ), + Set( + "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", + "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", + "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", + "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", + "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", + "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", + "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", + "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", + "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", + "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", + "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", + "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", + "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", + "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", + "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", + "19f0df5fdaf5a96e137b6ea885fdb378f37bd3166bd9a47ee11518e33fa09a20", + "a1fa18133ae48cbb616c4c148e78e661666778c3087d099067c7fe1868cbb3a1", + "86d888f34152dae8729900966b44abcb466b9c111699678de58032de601d2b04", + "6da1f43a10a179524e840e7288b47bda213339b0552d92e87ae811e52f59fc0e", + "3cde94fe9be5c700fc1d9a8ad2277e2c1214609f8c52a5b4db77e466875b8cb7", + "9d1a644e686435cf934f2f3f049138a424863b2a800130046dadc0c994ea5df3", + "bfda48f9aa2c89c895cde538ec4b4946c7085959e031ad61bde616b9849155d7", + "ee33fb70918e7aaa3d3fc44d64a399fb2bf5bcefc54201b1690ecd448551ba88", + "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", + "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", + "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", + "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", + ), + ) + val apiRewardAssignmentV1_current = DarResource( + "splice-api-reward-assignment-v1-current.dar", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", + PackageMetadata( + PackageName.assertFromString("splice-api-reward-assignment-v1"), + PackageVersion.assertFromString("1.0.0"), + None, + ), + Set( + "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", + "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", + "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", + "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", + "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", + "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", + "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", + "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", + "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", + "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", + "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", + "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", + "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", + "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", + "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", + "19f0df5fdaf5a96e137b6ea885fdb378f37bd3166bd9a47ee11518e33fa09a20", + "a1fa18133ae48cbb616c4c148e78e661666778c3087d099067c7fe1868cbb3a1", + "86d888f34152dae8729900966b44abcb466b9c111699678de58032de601d2b04", + "6da1f43a10a179524e840e7288b47bda213339b0552d92e87ae811e52f59fc0e", + "3cde94fe9be5c700fc1d9a8ad2277e2c1214609f8c52a5b4db77e466875b8cb7", + "9d1a644e686435cf934f2f3f049138a424863b2a800130046dadc0c994ea5df3", + "bfda48f9aa2c89c895cde538ec4b4946c7085959e031ad61bde616b9849155d7", + "ee33fb70918e7aaa3d3fc44d64a399fb2bf5bcefc54201b1690ecd448551ba88", + "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", + "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", + "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", + "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", + ), + ) + val apiRewardAssignmentV1 = PackageResource( + apiRewardAssignmentV1_current, + apiRewardAssignmentV1_1_0_0, + Seq(apiRewardAssignmentV1_1_0_0), + ) lazy val packageResources: Seq[PackageResource] = TokenStandard.allPackageResources ++ Seq( DarResources.amulet, DarResources.amuletNameService, + DarResources.apiRewardAssignmentV1, DarResources.dsoGovernance, DarResources.utilBatchedMarkers, DarResources.validatorLifecycle, diff --git a/apps/dar-resources-generator/src/main/scala/org/lfdecentralizedtrust/splice/darutils/DarResourcesGenerator.scala b/apps/dar-resources-generator/src/main/scala/org/lfdecentralizedtrust/splice/darutils/DarResourcesGenerator.scala index 8ad4a1df6b..d3820cf5ad 100644 --- a/apps/dar-resources-generator/src/main/scala/org/lfdecentralizedtrust/splice/darutils/DarResourcesGenerator.scala +++ b/apps/dar-resources-generator/src/main/scala/org/lfdecentralizedtrust/splice/darutils/DarResourcesGenerator.scala @@ -33,6 +33,7 @@ object DarResourcesGenerator { "splice-api-token-allocation-request-v1" -> "1.0.0", "splice-api-token-allocation-instruction-v1" -> "1.0.0", "splice-token-test-trading-app" -> "1.0.0", + "splice-api-reward-assignment-v1" -> "1.0.0", ) // fix the order to reduce the diff to the existing status quo @@ -46,6 +47,7 @@ object DarResourcesGenerator { "splice-wallet-payments", "splitwell", "splice-validator-lifecycle", + "splice-api-reward-assignment-v1", ) private val tokenStandardProductionPackageOrder: Seq[String] = Seq( "splice-api-token-metadata-v1", diff --git a/apps/package-lock.json b/apps/package-lock.json index 69a0e675d8..ebbff24ca2 100644 --- a/apps/package-lock.json +++ b/apps/package-lock.json @@ -584,6 +584,7 @@ "@daml.js/ghc-stdlib-DA-Internal-Template-1.0.0": "file:../ghc-stdlib-DA-Internal-Template-1.0.0", "@daml.js/splice-api-featured-app-v1-1.0.0": "file:../splice-api-featured-app-v1-1.0.0", "@daml.js/splice-api-featured-app-v2-1.0.0": "file:../splice-api-featured-app-v2-1.0.0", + "@daml.js/splice-api-reward-assignment-v1-1.0.0": "file:../splice-api-reward-assignment-v1-1.0.0", "@daml.js/splice-api-token-allocation-instruction-v1-1.0.0": "file:../splice-api-token-allocation-instruction-v1-1.0.0", "@daml.js/splice-api-token-allocation-v1-1.0.0": "file:../splice-api-token-allocation-v1-1.0.0", "@daml.js/splice-api-token-holding-v1-1.0.0": "file:../splice-api-token-holding-v1-1.0.0", @@ -790,6 +791,17 @@ "@mojotech/json-type-validation": "^3.1.0" } }, + "common/frontend/daml.js/splice-api-reward-assignment-v1-1.0.0": { + "name": "@daml.js/splice-api-reward-assignment-v1-1.0.0", + "version": "0.0.0", + "license": "UNLICENSED", + "dependencies": { + "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", + "@daml.js/ghc-stdlib-DA-Internal-Template-1.0.0": "file:../ghc-stdlib-DA-Internal-Template-1.0.0", + "@daml.js/splice-api-token-metadata-v1-1.0.0": "file:../splice-api-token-metadata-v1-1.0.0", + "@mojotech/json-type-validation": "^3.1.0" + } + }, "common/frontend/daml.js/splice-api-token-allocation-instruction-v1-1.0.0": { "name": "@daml.js/splice-api-token-allocation-instruction-v1-1.0.0", "version": "0.0.0", @@ -1211,6 +1223,7 @@ "@daml.js/daml-stdlib-DA-Time-Types-1.0.0": "file:../daml-stdlib-DA-Time-Types-1.0.0", "@daml.js/ghc-stdlib-DA-Internal-Template-1.0.0": "file:../ghc-stdlib-DA-Internal-Template-1.0.0", "@daml.js/splice-amulet-0.1.19": "file:../splice-amulet-0.1.19", + "@daml.js/splice-api-reward-assignment-v1-1.0.0": "file:../splice-api-reward-assignment-v1-1.0.0", "@daml.js/splice-api-token-allocation-instruction-v1-1.0.0": "file:../splice-api-token-allocation-instruction-v1-1.0.0", "@daml.js/splice-api-token-allocation-v1-1.0.0": "file:../splice-api-token-allocation-v1-1.0.0", "@daml.js/splice-api-token-transfer-instruction-v1-1.0.0": "file:../splice-api-token-transfer-instruction-v1-1.0.0", @@ -1978,6 +1991,10 @@ "resolved": "common/frontend/daml.js/splice-api-featured-app-v2-1.0.0", "link": true }, + "node_modules/@daml.js/splice-api-reward-assignment-v1-1.0.0": { + "resolved": "common/frontend/daml.js/splice-api-reward-assignment-v1-1.0.0", + "link": true + }, "node_modules/@daml.js/splice-api-token-allocation": { "resolved": "common/frontend/daml.js/splice-api-token-allocation-v1-1.0.0", "link": true diff --git a/build.sbt b/build.sbt index 244903faf6..bafcb0d674 100644 --- a/build.sbt +++ b/build.sbt @@ -111,6 +111,7 @@ lazy val root: Project = (project in file(".")) `splice-dso-governance-test-daml`, `splice-validator-lifecycle-daml`, `splice-validator-lifecycle-test-daml`, + `splice-api-reward-assignment-v1-daml`, `splice-api-token-metadata-v1-daml`, `splice-api-token-holding-v1-daml`, `splice-api-token-transfer-instruction-v1-daml`, @@ -688,6 +689,14 @@ lazy val `splice-featured-app-api-v2-daml` = ), ) +lazy val `splice-api-reward-assignment-v1-daml` = + project + .in(file("daml/splice-api-reward-assignment-v1")) + .enablePlugins(DamlPlugin) + .settings( + BuildCommon.damlSettings + ) + lazy val `splice-amulet-daml` = project .in(file("daml/splice-amulet")) @@ -703,7 +712,8 @@ lazy val `splice-amulet-daml` = (`splice-api-token-allocation-request-v1-daml` / Compile / damlBuild).value ++ (`splice-api-token-allocation-instruction-v1-daml` / Compile / damlBuild).value ++ (`splice-featured-app-api-v1-daml` / Compile / damlBuild).value ++ - (`splice-featured-app-api-v2-daml` / Compile / damlBuild).value, + (`splice-featured-app-api-v2-daml` / Compile / damlBuild).value ++ + (`splice-api-reward-assignment-v1-daml` / Compile / damlBuild).value, ) lazy val `splice-amulet-test-daml` = @@ -948,6 +958,7 @@ lazy val `apps-common` = `splice-token-test-trading-app-daml`, `splice-featured-app-api-v1-daml`, `splice-featured-app-api-v2-daml`, + `splice-api-reward-assignment-v1-daml`, `splice-util-batched-markers-daml`, ) .enablePlugins(BuildInfoPlugin) @@ -2026,6 +2037,7 @@ lazy val `apps-dar-resources-generator` = `splice-token-test-trading-app-daml`, `splice-featured-app-api-v1-daml`, `splice-featured-app-api-v2-daml`, + `splice-api-reward-assignment-v1-daml`, `splice-util-batched-markers-daml`, ) .settings( diff --git a/daml/dars.lock b/daml/dars.lock index a87aaffff1..858f5dba75 100644 --- a/daml/dars.lock +++ b/daml/dars.lock @@ -9,7 +9,7 @@ splice-amulet 0.1.15 67fac2f853bce8dbf0b9817bb5ba7c59f10e8120b7c808696f7010e5f0c splice-amulet 0.1.16 c208d7ead1e4e9b610fc2054d0bf00716144ad444011bce0b02dcd6cd0cb8a23 splice-amulet 0.1.17 6c5802f86709a0ad4784af81f0bab40f3070b2f58128d8843da1e1784c147802 splice-amulet 0.1.18 a31be0483f3175647053f28965a4e6d97e3dbc433ea2338be303fae69bbcff6a -splice-amulet 0.1.19 b94eee5dd35578c2252bccc6ee37891e23dc2c75b6bba96b674663bef6ba0c50 +splice-amulet 0.1.19 90987abecbcb1d004b063ddfe3b4b5d46cf3814ce89114a86c8cd75ff3cb8a4b splice-amulet 0.1.2 1446ffdf23326cef2de97923df96618eb615792bea36cf1431f03639448f1645 splice-amulet 0.1.3 0d89016d5a90eb8bced48bbac99e81c57781b3a36094b8d48b8e4389851e19af splice-amulet 0.1.4 a36ef8888fb44caae13d96341ce1fabd84fc9e2e7b209bbc3caabb48b6be1668 @@ -31,7 +31,7 @@ splice-amulet-name-service 0.1.17 bcc80dce253c7b89efd9b263be5260a9609f8cb1fb5ea6 splice-amulet-name-service 0.1.18 64232089d6dc6ae1eabcebcbe5e8b1aa8f413e9c57e8986d2bca883cc306fde2 splice-amulet-name-service 0.1.19 7b784f7f03d3e035ea5d828ab64a476e7e0cbfffaec393619598f13e54d18013 splice-amulet-name-service 0.1.2 711a2974d65e6ebd149704da75f3f71234798687ab895b92f066c865dbdeeabb -splice-amulet-name-service 0.1.20 acc98b8b005b0d39031077646c40ae3592c90817088ab1929a385905bfd0a0de +splice-amulet-name-service 0.1.20 0b6748de2e613f5bc9a108b2496b85d2d661b7344c6c55eada9c0a0bf8efe0a5 splice-amulet-name-service 0.1.3 beb4b85f3f0cf36dfb93fc917d3ac218ee5d41b6e70604720cb228d85e168ee0 splice-amulet-name-service 0.1.4 053c7f4c2a77312e7d465a4fa7dc8cb298754ad12c0c987a7c401bd724e65efc splice-amulet-name-service 0.1.5 6188c8b5f612278f988fc95c11e9742993ad3ac6ad0809f9af06ee9d366dc4a8 @@ -39,10 +39,11 @@ splice-amulet-name-service 0.1.6 a208aab2c4a248ab2eff352bd382f8b3bbadc92464123db splice-amulet-name-service 0.1.7 ba7806d9b2d593eac74a050161c54ae1325d170bf175cb66a9c1e5e5ffb88c3d splice-amulet-name-service 0.1.8 efeb3f9b2b92e55fac4ec2d6164f95407a01477240c7465e576df4e310f54bd3 splice-amulet-name-service 0.1.9 f1b5915ad45ded616f43f83c735b7ee158b5eb58abe758a721e50eee19b3e531 -splice-amulet-name-service-test 0.1.24 cc2b70a8bcd4b145190550d1edfb3c49ffbf89b74a96798e7d46eb6cdce52079 -splice-amulet-test 0.1.23 0cd1b783c068c5571c754072f49f01b82e06a6e92cb649c65f18f5112c3c180f +splice-amulet-name-service-test 0.1.24 c6babbcf1e7e99f1a4ec53a0c207474adc30a377b92cb49a07993c894c546efc +splice-amulet-test 0.1.23 7faffb9d014cca6f22bc36022b87e0faf5464bc3717ffe6441395591d1c403e6 splice-api-featured-app-v1 1.0.0 7804375fe5e4c6d5afe067bd314c42fe0b7d005a1300019c73154dd939da4dda splice-api-featured-app-v2 1.0.0 dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea +splice-api-reward-assignment-v1 1.0.0 6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35 splice-api-token-allocation-instruction-v1 1.0.0 275064aacfe99cea72ee0c80563936129563776f67415ef9f13e4297eecbc520 splice-api-token-allocation-request-v1 1.0.0 6fe848530b2404017c4a12874c956ad7d5c8a419ee9b040f96b5c13172d2e193 splice-api-token-allocation-v1 1.0.0 93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d @@ -70,7 +71,7 @@ splice-dso-governance 0.1.21 2d306cfe8cdb3daf2d21f84dfecc3e2f26a41504e58fe25cb7f splice-dso-governance 0.1.22 5c28530209b9ab37c5f187132cd826709bb18b0efe28411488ab750870414738 splice-dso-governance 0.1.23 0c94a036ac5168a1dee26b435838e062f0d2f47d6eac49303978228ae559edb9 splice-dso-governance 0.1.24 4974c654485d4ecaa6b5caf8ef3c2679efa8195c4b50d4965a8fff1b72e8efa4 -splice-dso-governance 0.1.25 d4eacbad7785fdd5f42e3b48a66af9dfe9909cf6a91acf9d425d229b7d4944d3 +splice-dso-governance 0.1.25 dfe102514acd41f79945b8363ca84d8243be97b2b235522ce77c754a36bb8479 splice-dso-governance 0.1.3 b0ae3cc03e418790305a3c15f761fe495572de5827f8d322fb8b96996b783c13 splice-dso-governance 0.1.4 dc24fd18b4d151cd1e0ff6bfb7438bafb2f50fe076d0f16f50565e60b153a0be splice-dso-governance 0.1.5 9e3ca1d22ad495dfabf3d61acae3dc1a7718f527f02092280b58cf69edfdc84c @@ -78,8 +79,8 @@ splice-dso-governance 0.1.6 4e7653cfbf7ca249de4507aca9cd3b91060e5489042a522c589d splice-dso-governance 0.1.7 d406eba1132d464605f4dae3edf8cf5ecbbb34bd8edef0e047e7e526d328718c splice-dso-governance 0.1.8 1790a114f83d5f290261fae1e7e46fba75a861a3dd603c6b4ef6b67b49053948 splice-dso-governance 0.1.9 9ee83bfd872f91e659b8a8439c5b4eaf240bcf6f19698f884d7d7993ab48c401 -splice-dso-governance-test 0.1.31 6ea3403fc84f1a59c7e80432e6740a8f935119bed797a21a95793d42f4729f7b -splice-token-standard-test 1.0.14 603d12242dfc926a4bc6096a919400d29ddbf05f14f4307b98c8f39fb285f582 +splice-dso-governance-test 0.1.31 696c3230818cf1476c5c21b9af1985d03e532eaca235f15ef918818d4d4cab96 +splice-token-standard-test 1.0.14 011052026e20a03d52b51fb90126806979a67dff60709553b0fd423f20ad1220 splice-token-test-dummy-holding 0.0.1 1cd171c6c42ab46dc9cf12d80c6111369e00cea5cdf054924b4f26ce94b1ef5b splice-token-test-dummy-holding 0.0.2 4f40fb033ef3db89623642c1b494e846097fa32af138b3864a63aa15937a323d splice-token-test-dummy-holding 0.0.3 26c72abb5a4b485e58f201021de6f9e525c85863fa115536f768d6ee138ef13e @@ -95,17 +96,17 @@ splice-util 0.1.6 62a6fc80fc8ca84dd5f6b33c71f53dd35a02bc01784b8cbc7cbd283eb23863 splice-util-batched-markers 1.0.0 727c5e97457d3ff841680816eb70d55834827ef756bac8551cace5b961c9c1d2 splice-util-batched-markers 1.0.1 4d91a9b044e0e996e91ee9aac3442591ffc78f16da4ff5c6f55218ba667f6192 splice-util-batched-markers 1.0.2 ec84eb67802403d91892aad61aee2e4eb34fb4e05e9158b3f677537569bcbc09 -splice-util-batched-markers-test 1.0.6 b3e3b359e5c434efe7eefc09e836ffae72a478fc8e6663264089b9e1dc0cba06 +splice-util-batched-markers-test 1.0.6 66e39bb9ff2ef98a36ade41e37e0a3dccd47af837d78d0c81d0380e7a57d7938 splice-util-featured-app-proxies 1.0.0 48e0c4fe4ea05e3b740404ebe37004ddd741efbdcd665c1c3199a5d6d9d944d7 splice-util-featured-app-proxies 1.1.0 81dd5a9e5c02d0de03208522a895fb85eeb12fbea4aca7c4ad0ad106f3b0bfce splice-util-featured-app-proxies 1.2.0 653c48879064332d34af5008bdfd8e349493460e67e62b85e8e7e3392831c842 splice-util-featured-app-proxies 1.2.1 06bab917848ef275317c2539b75c23b94e03ceb55b4a1346936f7832084cd7a6 splice-util-featured-app-proxies 1.2.2 2889c094cf9678b2b666221934ea56ab169a31b257450845bd53217a8cdfe44f splice-util-featured-app-proxies 1.2.3 677ed3473e7d412c06520843790ff27e21aaa7c292208909579592351c8eb55d -splice-util-featured-app-proxies-test 1.0.12 f063399d31fa79eeb54315de1b28738a391f2ee7d9ab268162edc056e2f45fae +splice-util-featured-app-proxies-test 1.0.12 5bc101960fde2d6b8170d9490149b46abf80329c5e66b819b8710ba0a801a59d splice-util-token-standard-wallet 1.0.0 1da198cb7968fa478cfa12aba9fdf128a63a8af6ab284ea6be238cf92a3733ac splice-util-token-standard-wallet 1.0.1 182892381e4245c39d3126082ec0b41a089edb61e63af518f61eae1f5c9e135a -splice-util-token-standard-wallet-test 1.0.7 effe35b05411e8e7fd776ddcaafe1b32975ae8f8ef2adee21fe553325ee468aa +splice-util-token-standard-wallet-test 1.0.7 e45211ca92a65d83bd1eb8749e7f22914c3606aa656c3c6322fa33f9b498286c splice-validator-lifecycle 0.1.0 cef96fac957362f1fc097120bd13686cac7f84fbc8053afa994a1f9214d9570c splice-validator-lifecycle 0.1.1 1ddf05c96002914593c929848b786f34c753fb0be07717d1786be177a564aada splice-validator-lifecycle 0.1.2 57e2f15f9755db1f00e51c52c319294264a21ad71c6bc1e7cd70db4b164c0aaa @@ -128,7 +129,7 @@ splice-wallet 0.1.17 176c2924cd7aa12bc81ffd1a8d6cfaf46e70378f653eb5f19f2d6b9599c splice-wallet 0.1.18 94d88246f69d8a4b69333d1f993e3280deaca19b70511ea7687f01e4328a34a4 splice-wallet 0.1.19 1d8317b1e476c03ea2a85bed8435e5c182abe501db58350009187fa839ab2cca splice-wallet 0.1.2 c162e08a4ec0428bfa870b6d9040989e575c74199c3a80558c62e03196dd5146 -splice-wallet 0.1.20 acae701514f37c574e62d1179859cda3dd2907a78fa3d6b34dc5cac3185e5f90 +splice-wallet 0.1.20 e485c2eb59cca556e0e2ecfaaef45346dd0ba64f9976a3957938d814f846c78c splice-wallet 0.1.3 2c35bb4f5084ea66db59717d21750bfd64c43147ef5fd5166615092d592a6917 splice-wallet 0.1.4 141dad2d33b6410b8e1c35a0c4f8f76cb691e4d9a4410ce89f33f373855317e1 splice-wallet 0.1.5 614b525a50c624062d851ce7df5bdb90ddfa0d6871c486cb6e2c7b694bfbce59 @@ -147,7 +148,7 @@ splice-wallet-payments 0.1.15 f80fae7a9de9431854372a66c3ca78675f77b2f54ede65abdc splice-wallet-payments 0.1.16 45e7ac4601186747e2c4d2fd7e54a15e5752eee56d6cf767eb62141b7a10c0a8 splice-wallet-payments 0.1.17 94bba10a5b3fef448ccd28669359af3b09442a1d1bd6cdbb52c401d7d10075bc splice-wallet-payments 0.1.18 06afd4996294b3763b10fc7ed3b2b216dc3ff2196264cf7d62d0572dd3b737b8 -splice-wallet-payments 0.1.19 dde4099fa72be1043091486606e836df2d00ffc0e2f044167915e33dfb874020 +splice-wallet-payments 0.1.19 eae5715f0ddd5ff4b8000cff13191b76d34e5d80d05465de92ace96fcc97edaf splice-wallet-payments 0.1.2 775f5eb9c0249509adda5eb3ea4ee31bb953601168c18880df6f2ff09ec4298a splice-wallet-payments 0.1.3 b953b3729c81a55e598a364be7d0c0574750df3de12a7a1b53a300f217cb5c5c splice-wallet-payments 0.1.4 12177f54873c1094ea169874ad0d7838383fd137f302d16356e93f28dfbc0fcc @@ -156,7 +157,7 @@ splice-wallet-payments 0.1.6 6124379528eeb6fa17ecdab15577c29abb33d0c0d34dc5f2680 splice-wallet-payments 0.1.7 4e3e0d9cdadf80f4bf8f3cd3660d5287c084c9a29f23c901aabce597d72fd467 splice-wallet-payments 0.1.8 e48ea337ee3335c8bb3206a2501ce947ac1a7bdb1825cee8f28bad64f5a7bc4b splice-wallet-payments 0.1.9 7f4e081ad96f2ccded0c053b0cf5ddddae1139dfc3bb89cefcf77ea70f2cecb7 -splice-wallet-test 0.1.24 8edb3f61c61f4083e18eaf9af5eb9c80e3b06094aa3ccfa646d7bbdef0ad9ec9 +splice-wallet-test 0.1.24 0de0dd2a70626221486198840fdd7b1fe8dcf3e41d817eb8f1983dae9b135cef splitwell 0.1.0 075c76de553ab88383a7c69de134afa82aacfdf8ea8fcfe8852c4b199c3b2669 splitwell 0.1.1 ccb1a0215053062202052e1a052f9214da3fdae5253a6d43e2e155ff4f57fe75 splitwell 0.1.10 d42676a366f7ca7a2409974dd3054aa4d83ab29baa3b2086ad021407b0a1a295 @@ -170,7 +171,7 @@ splitwell 0.1.17 a631654e66ef31017bf3c9cb4ab2429157d5e5f948f1b6b15a38f0ec7c0cd36 splitwell 0.1.18 4694a5545800c7b98cdd7e7349c98f037931bb91574a76715d52da9c647c4081 splitwell 0.1.19 b526511ebe2db308b63969ee3c04aa9a48be53e04130709eb29ba6aa313e3cc4 splitwell 0.1.2 778edd2c228c6b68198d4d033885b2d0dae7daaee55d7df3edd9dfdf1f10fbd0 -splitwell 0.1.20 0b4ab37ab9cab8c41d8a1a9868f6302f21eaef0bdf1d795c5ab99c0050a75db5 +splitwell 0.1.20 af686139dda12540ab05a292987f5fa2edd0c05af62d9651384d005e9a91043e splitwell 0.1.3 7cde068cde689584f86a2499689d5cb165264d96496721e24ac6fb909f770a58 splitwell 0.1.4 85557b86cd4f330f093915db1ea26eac5092de6b5ddae0690146f6059c89419b splitwell 0.1.5 a68e78774a7be655f5744c8ae0ac8b46d55ef6d1e7661bc27b9296154d56ac74 @@ -178,4 +179,4 @@ splitwell 0.1.6 872da0dd7986fd768930f85d6a7310a94a0ef924e7fbb7bb7a4e149f2b5feb74 splitwell 0.1.7 841d1c9c86b5c8f3a39059459ecd8febedf7703e18f117300bb0ebf4423db096 splitwell 0.1.8 63b8153a08ceb4bf40d807acc5712372c3eac548c266be4d5e92470b4f655515 splitwell 0.1.9 b6267905698d2798b9ef171e27d49fb88e052ec0ec0e0675a3a1b275c7d037d4 -splitwell-test 0.1.24 5f4ce96c71588e649b92ca74614da13227591d7adbd0152efb4fd14873c9235c \ No newline at end of file +splitwell-test 0.1.24 44e29323a3cb94b84f38e985bf420c0d2a10aa80662b860930628f106df44672 \ No newline at end of file diff --git a/daml/dars/splice-amulet-0.1.19.dar b/daml/dars/splice-amulet-0.1.19.dar index d4e131d65e..d1f653c109 100644 Binary files a/daml/dars/splice-amulet-0.1.19.dar and b/daml/dars/splice-amulet-0.1.19.dar differ diff --git a/daml/dars/splice-amulet-name-service-0.1.20.dar b/daml/dars/splice-amulet-name-service-0.1.20.dar index 601a87feaf..4d9d84c37c 100644 Binary files a/daml/dars/splice-amulet-name-service-0.1.20.dar and b/daml/dars/splice-amulet-name-service-0.1.20.dar differ diff --git a/daml/dars/splice-api-reward-assignment-v1-1.0.0.dar b/daml/dars/splice-api-reward-assignment-v1-1.0.0.dar new file mode 100644 index 0000000000..76ac370552 Binary files /dev/null and b/daml/dars/splice-api-reward-assignment-v1-1.0.0.dar differ diff --git a/daml/dars/splice-dso-governance-0.1.25.dar b/daml/dars/splice-dso-governance-0.1.25.dar index 86d9610ea1..849d90a168 100644 Binary files a/daml/dars/splice-dso-governance-0.1.25.dar and b/daml/dars/splice-dso-governance-0.1.25.dar differ diff --git a/daml/dars/splice-wallet-0.1.20.dar b/daml/dars/splice-wallet-0.1.20.dar index f9f8a4d3fd..63d8cff779 100644 Binary files a/daml/dars/splice-wallet-0.1.20.dar and b/daml/dars/splice-wallet-0.1.20.dar differ diff --git a/daml/dars/splice-wallet-payments-0.1.19.dar b/daml/dars/splice-wallet-payments-0.1.19.dar index d60d13fbee..945448d4b8 100644 Binary files a/daml/dars/splice-wallet-payments-0.1.19.dar and b/daml/dars/splice-wallet-payments-0.1.19.dar differ diff --git a/daml/dars/splitwell-0.1.20.dar b/daml/dars/splitwell-0.1.20.dar index 21c127bbfb..5827b7976b 100644 Binary files a/daml/dars/splitwell-0.1.20.dar and b/daml/dars/splitwell-0.1.20.dar differ diff --git a/daml/splice-amulet-test/daml.yaml b/daml/splice-amulet-test/daml.yaml index 4196f6fe42..92457ce4e3 100644 --- a/daml/splice-amulet-test/daml.yaml +++ b/daml/splice-amulet-test/daml.yaml @@ -15,6 +15,7 @@ data-dependencies: - ../splice-util/.daml/dist/splice-util-current.dar - ../splice-amulet/.daml/dist/splice-amulet-current.dar - ../dars/splice-api-featured-app-v1-1.0.0.dar + - ../splice-api-reward-assignment-v1/.daml/dist/splice-api-reward-assignment-v1-current.dar - ../dars/splice-api-token-metadata-v1-1.0.0.dar - ../dars/splice-api-token-holding-v1-1.0.0.dar - ../dars/splice-api-token-transfer-instruction-v1-1.0.0.dar diff --git a/daml/splice-amulet-test/daml/Splice/Scripts/TestRewardAccountingV2.daml b/daml/splice-amulet-test/daml/Splice/Scripts/TestRewardAccountingV2.daml index b293b88d3e..5014a73d7d 100644 --- a/daml/splice-amulet-test/daml/Splice/Scripts/TestRewardAccountingV2.daml +++ b/daml/splice-amulet-test/daml/Splice/Scripts/TestRewardAccountingV2.daml @@ -14,6 +14,8 @@ import DA.Time import Daml.Script +import Splice.Api.RewardAssignmentV1 qualified as Api.RewardAssignmentV1 + import Splice.Amulet import Splice.Amulet.RewardAccountingV2 import Splice.Amulet.CryptoHash qualified as CryptoHash @@ -27,6 +29,7 @@ import Splice.Scripts.Util import Splice.Testing.Registries.AmuletRegistry.Parameters (defaultAmuletConfig) import Splice.Testing.TokenStandard.WalletClient as WalletClient +import Splice.Testing.Utils -- Reward accounting tests @@ -128,6 +131,7 @@ test_reward_accounting_v2 = do round = Round 0 expiresAt = couponExpiryTime providerIsObserver = provider `notElem` [bob, dora] + beneficiary = None actualCoupons0 <- query @RewardCouponV2 app.dso let actualCoupons = sortOn (.provider) $ fmap snd actualCoupons0 @@ -256,6 +260,7 @@ setupAliceWithCoupon' config = do round = Round 0 expiresAt = demoTime `addRelTime` hours 36 providerIsObserver = not config.hideCoupon + beneficiary = None submit app.dso $ createCmd coupon pure (app, alice, aliceUser) @@ -297,6 +302,80 @@ test_mint_of_hidden_coupon = do WalletClient.checkBalance alice app.registry.instrumentId 1000.0 +-- Coupon assignment +-------------------- + +test_coupon_assignment : Script () +test_coupon_assignment = testCouponAssignment False + +test_hidden_coupon_assignment : Script () +test_hidden_coupon_assignment = testCouponAssignment True + +testCouponAssignment : Bool -> Script () +testCouponAssignment hideCoupon = do + (app, alice, _) <- setupAliceWithCoupon hideCoupon + bob <- allocateParty "Bob" + charlie <- allocateParty "Charlie" + + -- get the original coupon before creating the extra one + let queryParty = if hideCoupon then app.dso else alice + [(couponCid, _)] <- queryInterface @Api.RewardAssignmentV1.RewardCoupon queryParty + + -- create a second coupon with a different amount and round + extraCouponCid <- submit app.dso $ createCmd RewardCouponV2 with + dso = app.dso + provider = alice + amount = 500.0 + round = Round 1 + expiresAt = demoTime `addRelTime` hours 36 `addRelTime` minutes 10 + providerIsObserver = not hideCoupon + beneficiary = None + + -- assign both coupons to bob, alice, and charlie + let percentages = [(bob, 0.3), (alice, 0.5), (charlie, 0.2)] + Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiariesResult{..} <- + submit (actAs alice <> readAs app.dso) $ exerciseCmd couponCid Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiaries with + additionalCoupons = [toInterfaceContractId extraCouponCid] + newBeneficiaries = map (uncurry Api.RewardAssignmentV1.RewardBeneficiary) percentages + extraArgs = emptyExtraArgs + + -- original coupons are archived after assignment + None <- queryContractId alice (fromInterfaceContractId @RewardCouponV2 couponCid) + None <- queryContractId alice extraCouponCid + + -- both coupons are split by the same percentages, preserving their original round and expiresAt + let round0Expiry = demoTime `addRelTime` hours 36 + round1Expiry = demoTime `addRelTime` hours 36 `addRelTime` minutes 10 + couponSpecs = [(Round 0, 1000.0, round0Expiry), (Round 1, 500.0, round1Expiry)] + let mkExpected beneficiary round expiresAt amount = RewardCouponV2 with + dso = app.dso + provider = alice + amount + round + expiresAt + providerIsObserver = True + beneficiary = Some beneficiary + forA_ newBeneficiariesCouponCids $ \(beneficiary, cids) -> do + let Some (_, percentage) = find (\(p, _) -> p == beneficiary) percentages + -- each beneficiary gets one coupon per original coupon + length cids === 2 + forA_ (zip cids couponSpecs) $ \(cid, (round, couponAmount, expiresAt)) -> do + Some coupon <- queryContractId beneficiary (fromInterfaceContractId @RewardCouponV2 cid) + coupon === mkExpected beneficiary round expiresAt (couponAmount * percentage) + + -- verify assigned coupons cannot be further assigned by provider + let Some (_, bobCouponCid :: _) = find (\(p, _) -> p == bob) newBeneficiariesCouponCids + submitMustFail alice $ exerciseCmd bobCouponCid Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiaries with + additionalCoupons = [] + newBeneficiaries = [Api.RewardAssignmentV1.RewardBeneficiary charlie 1.0] + extraArgs = emptyExtraArgs + -- nor by the beneficiary + submitMustFail bob $ exerciseCmd bobCouponCid Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiaries with + additionalCoupons = [] + newBeneficiaries = [Api.RewardAssignmentV1.RewardBeneficiary charlie 1.0] + extraArgs = emptyExtraArgs + + -- Claiming expired reward coupons ---------------------------------- @@ -309,11 +388,12 @@ test_claim_expired_coupons = do -- create an extra coupon let extraCoupon = RewardCouponV2 with dso = app.dso - provider = bob + provider = alice amount = 500.0 round = Round 0 expiresAt = demoTime `addRelTime` hours 48 providerIsObserver = False + beneficiary = Some bob submit app.dso $ createCmd extraCoupon -- show that expiry doesn't work before expiry time diff --git a/daml/splice-amulet-test/daml/Splice/Scripts/Util.daml b/daml/splice-amulet-test/daml/Splice/Scripts/Util.daml index d5e544ea93..f6350c4e92 100644 --- a/daml/splice-amulet-test/daml/Splice/Scripts/Util.daml +++ b/daml/splice-amulet-test/daml/Splice/Scripts/Util.daml @@ -445,7 +445,7 @@ runAmuletDepositBots app = do c.round `elem` issuingRoundNumbers && c.beneficiary == user rewardCouponV2s <- queryFilter @RewardCouponV2 app.dso $ \c -> - c.provider == user + fromOptional c.provider c.beneficiary == user -- get all amulets of this user amulets <- getAmuletInputs user diff --git a/daml/splice-amulet/daml.yaml b/daml/splice-amulet/daml.yaml index 1b91302176..9bf3ba1a02 100644 --- a/daml/splice-amulet/daml.yaml +++ b/daml/splice-amulet/daml.yaml @@ -19,6 +19,7 @@ data-dependencies: - ../splice-util/.daml/dist/splice-util-current.dar - ../dars/splice-api-featured-app-v1-1.0.0.dar - ../dars/splice-api-featured-app-v2-1.0.0.dar + - ../splice-api-reward-assignment-v1/.daml/dist/splice-api-reward-assignment-v1-current.dar build-options: - --ghc-option=-Wunused-binds - --ghc-option=-Wunused-matches diff --git a/daml/splice-amulet/daml/Splice/Amulet.daml b/daml/splice-amulet/daml/Splice/Amulet.daml index 3b75424cbd..16b918ba83 100644 --- a/daml/splice-amulet/daml/Splice/Amulet.daml +++ b/daml/splice-amulet/daml/Splice/Amulet.daml @@ -7,12 +7,14 @@ module Splice.Amulet where import Prelude import DA.Action (void) import DA.Assert +import DA.List (unique) import DA.Map as Map import DA.TextMap as TextMap -import DA.Optional (fromOptional) +import DA.Optional (fromOptional, isNone, optionalToList) import Splice.Api.Token.MetadataV1 qualified as Api.Token.MetadataV1 import Splice.Api.Token.HoldingV1 qualified as Api.Token.HoldingV1 +import Splice.Api.RewardAssignmentV1 qualified as Api.RewardAssignmentV1 import Splice.Amulet.TokenApiUtils import Splice.Expiry @@ -389,11 +391,26 @@ template RewardCouponV2 -- their vetting state at the time of coupon creation does not allow it. -- DSO automation will then attempt to make the provider an observer when they -- change their vetting state unless the coupon expired in the meantime. + beneficiary : Optional Party + -- ^ The party that can mint the reward for the activity by the provider. + -- If not set, this is the provider. where signatory dso - observer if providerIsObserver then [provider] else [] + observer if providerIsObserver then [provider] ++ optionalToList beneficiary else [] ensure amount > 0.0 + interface instance Api.RewardAssignmentV1.RewardCoupon for RewardCouponV2 where + view = Api.RewardAssignmentV1.RewardCouponView with + dso + provider + beneficiary + amount + expiresAt + meta = Api.Token.MetadataV1.emptyMetadata + maxNumNewBeneficiaries = maxNumNewCouponV2Beneficiaries + + rewardCoupon_assignBeneficiariesImpl self arg = rewardCouponV2_assignBeneficiariesImpl this self arg + -- | A coupon for receiving validator rewards proportional to the usage fee paid by a user -- hosted by a validator operator. @@ -571,6 +588,49 @@ requireAmuletExpiredForAllRounds externalPartyConfigState0Cid externalPartyConfi require "Amulet is expired" (isAmuletExpired round amulet.amount) +-- | Maximum number of new beneficiaries that can be assigned to a RewardCouponV2. +-- Set to the same limit as the one for featured-app-marker beneficiaries to minimize migration effort +-- for app providers. +maxNumNewCouponV2Beneficiaries : Int +maxNumNewCouponV2Beneficiaries = 20 + +-- | Implementation of the 'RewardCoupon_AssignBeneficiaries' choice for 'RewardCouponV2'. +rewardCouponV2_assignBeneficiariesImpl + : RewardCouponV2 + -> ContractId Api.RewardAssignmentV1.RewardCoupon + -> Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiaries + -> Update Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiariesResult +rewardCouponV2_assignBeneficiariesImpl coupon _self arg = do + let newBeneficiaries = arg.newBeneficiaries + require "Beneficiary has not been assigned yet" (isNone coupon.beneficiary) + require "Beneficaries are unique" (unique (map (.beneficiary) newBeneficiaries)) + require "Beneficiary percentages are between 0.0 and 1.0" + (all (\b -> 0.0 < b.percentage && b.percentage <= 1.0) newBeneficiaries) + require "Beneficiary percentages add up to 1.0" (sum (map (.percentage) newBeneficiaries) == 1.0) + require ("No more than " <> show maxNumNewCouponV2Beneficiaries <> " beneficiaries assigned") + (length newBeneficiaries <= maxNumNewCouponV2Beneficiaries) + + additionalCoupons <- forA arg.additionalCoupons $ \cid -> do + c <- fetchAndArchive (ForOwner with dso = coupon.dso; owner = coupon.provider) (fromInterfaceContractId @RewardCouponV2 cid) + require "Additional coupon has not been assigned yet" (isNone c.beneficiary) + require "Additional coupon has same provider" (c.provider == coupon.provider) + pure c + + let allCoupons = coupon :: additionalCoupons + + -- create coupons for new beneficiaries for each coupon + perBeneficiaryCids <- forA newBeneficiaries $ \newBeneficiary -> do + cids <- forA allCoupons $ \c -> + toInterfaceContractId <$> create c with + amount = c.amount * newBeneficiary.percentage + beneficiary = Some newBeneficiary.beneficiary + providerIsObserver = True + pure (newBeneficiary.beneficiary, cids) + + return Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiariesResult with + newBeneficiariesCouponCids = perBeneficiaryCids + + -- instances ------------ @@ -584,7 +644,7 @@ instance HasCheckedFetch AppRewardCoupon ForOwner where contractGroupId AppRewardCoupon{..} = ForOwner with dso; owner = fromOptional provider beneficiary instance HasCheckedFetch RewardCouponV2 ForOwner where - contractGroupId RewardCouponV2{..} = ForOwner with dso; owner = provider + contractGroupId RewardCouponV2{..} = ForOwner with dso; owner = fromOptional provider beneficiary instance HasCheckedFetch RewardCouponV2 ForDso where contractGroupId RewardCouponV2{..} = ForDso with dso diff --git a/daml/splice-amulet/daml/Splice/Amulet/RewardAccountingV2.daml b/daml/splice-amulet/daml/Splice/Amulet/RewardAccountingV2.daml index 11f582c661..00448eb0e3 100644 --- a/daml/splice-amulet/daml/Splice/Amulet/RewardAccountingV2.daml +++ b/daml/splice-amulet/daml/Splice/Amulet/RewardAccountingV2.daml @@ -108,6 +108,7 @@ template ProcessRewardsV2 with expiresAt providerIsObserver = not $ Set.member provider providersWithWrongVettingState + beneficiary = None -- intentionally not returning any information here to save computational overhead return ProcessRewardsV2_ProcessBatchResult {} diff --git a/daml/splice-amulet/daml/Splice/AmuletRules.daml b/daml/splice-amulet/daml/Splice/AmuletRules.daml index 255fa88aa4..063ef34878 100644 --- a/daml/splice-amulet/daml/Splice/AmuletRules.daml +++ b/daml/splice-amulet/daml/Splice/AmuletRules.daml @@ -679,7 +679,7 @@ template AmuletRules coupon <- fetchAndArchive (ForDso with dso) cid assertDeadlineExceeded "coupon.expiresAt" coupon.expiresAt return coupon - let actualExpiryObservers = [ coupon.provider | coupon <- coupons, coupon.providerIsObserver ] + let actualExpiryObservers = concat [ coupon.provider :: optionalToList coupon.beneficiary | coupon <- coupons, coupon.providerIsObserver ] require "expiryObservers match coupons" (sort expiryObservers == dedupSort actualExpiryObservers) -- create unclaimed reward for the total diff --git a/daml/splice-api-reward-assignment-v1/daml.yaml b/daml/splice-api-reward-assignment-v1/daml.yaml new file mode 100644 index 0000000000..ce840643b1 --- /dev/null +++ b/daml/splice-api-reward-assignment-v1/daml.yaml @@ -0,0 +1,19 @@ +# Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +sdk-version: 3.4.11 +name: splice-api-reward-assignment-v1 +source: daml +version: 1.0.0 +dependencies: + - daml-prim + - daml-stdlib +data-dependencies: + - ../dars/splice-api-token-metadata-v1-1.0.0.dar +build-options: + - --target=2.1 +codegen: + java: + package-prefix: org.lfdecentralizedtrust.splice.codegen.java + decoderClass: org.lfdecentralizedtrust.splice.codegen.java.DecoderSpliceApiRewardAssignmentV1 + output-directory: target/daml-codegen-java diff --git a/daml/splice-api-reward-assignment-v1/daml/Splice/Api/RewardAssignmentV1.daml b/daml/splice-api-reward-assignment-v1/daml/Splice/Api/RewardAssignmentV1.daml new file mode 100644 index 0000000000..aeb34fefb4 --- /dev/null +++ b/daml/splice-api-reward-assignment-v1/daml/Splice/Api/RewardAssignmentV1.daml @@ -0,0 +1,76 @@ +-- Copyright (c) 2024 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +-- SPDX-License-Identifier: Apache-2.0 + +-- | An API for app providers and other service providers to assign reward +-- coupons for their activity to their beneficiaries. +module Splice.Api.RewardAssignmentV1 where + +import Splice.Api.Token.MetadataV1 + +-- | View on a coupon representing the right to mint a certain amount of rewards. +data RewardCouponView = RewardCouponView + with + dso : Party + -- ^ The DSO party. + provider : Party + -- ^ The party that provided the service for whose activity the minting right was granted. + beneficiary : Optional Party + -- ^ The beneficiary that can mint the amount specified in the coupon. + -- If not set assignment via this interface is possible by the provider. + amount : Decimal + -- ^ Amulet amount that can be minted with this coupon. + expiresAt : Time + -- ^ Expiration time of the coupon. The minting right granted by the coupon can only be exercised before this time. + maxNumNewBeneficiaries : Int + -- ^ The maximum number of new beneficiaries that can be assigned to the coupon in a single assignment. + meta : Metadata + -- ^ Metadata associated with this coupon. Provided for extensibility. + deriving (Show, Eq) + +-- | Specification of a beneficiary of rewards. +data RewardBeneficiary = RewardBeneficiary + with + beneficiary : Party + -- ^ The party that is granted the right to mint amulet for this activity. + percentage : Decimal + -- ^ Percentage (specified as a number between 0.0 and 1.0) of the reward minting allowance to assign to this beneficiary . + deriving (Show, Eq, Ord) + +-- | A coupon representing the right to mint a certain amount of rewards. +interface RewardCoupon where + viewtype RewardCouponView + + rewardCoupon_assignBeneficiariesImpl + : ContractId RewardCoupon -> RewardCoupon_AssignBeneficiaries -> Update RewardCoupon_AssignBeneficiariesResult + + choice RewardCoupon_AssignBeneficiaries : RewardCoupon_AssignBeneficiariesResult + -- ^ Assign ultimate beneficiaries to the coupon. Useful for apps + -- where the party that earns the minting right (the provider) is just an + -- operational party and the actual beneficiaries are different parties. + -- + -- The coupon MUST NOT already have an assigned beneficiary. + with + additionalCoupons : [ContractId RewardCoupon] + -- ^ Additional coupons of the provider to share in the same transaction. + -- + -- These MUST NOT already have any assigned beneficiary. + newBeneficiaries : [RewardBeneficiary] + -- ^ The new beneficiaries to whom to assign part of the minting amount of the + -- coupon. The percentages MUST be between 0.0 and 1.0, add up to 1.0, + -- and there MUST NOT be duplicate beneficiaries. + -- + -- There MUST be at most `(view this).maxNumNewBeneficiaries` new beneficiaries in the list. + -- The purpose of this limit is to ensure that traffic cost of + -- creating coupons guards the overhead of tracking the created coupons + -- for the DSO party. + extraArgs : ExtraArgs + -- ^ Extra arguments for extensibility. Set to empty, unless needed for specific implementations. + observer map (.beneficiary) newBeneficiaries + controller (view this).provider + do rewardCoupon_assignBeneficiariesImpl this self arg + + +data RewardCoupon_AssignBeneficiariesResult = RewardCoupon_AssignBeneficiariesResult with + newBeneficiariesCouponCids : [(Party, [ContractId RewardCoupon])] + -- ^ The coupons created for the newly assigned beneficiaries. + deriving (Eq, Show) diff --git a/daml/splice-dso-governance-test/daml/Splice/Scripts/DsoTestRewardAccountingV2.daml b/daml/splice-dso-governance-test/daml/Splice/Scripts/DsoTestRewardAccountingV2.daml index 02b735ed45..6a384648da 100644 --- a/daml/splice-dso-governance-test/daml/Splice/Scripts/DsoTestRewardAccountingV2.daml +++ b/daml/splice-dso-governance-test/daml/Splice/Scripts/DsoTestRewardAccountingV2.daml @@ -116,6 +116,7 @@ test_reward_accounting_v2 = do round = Round 0 expiresAt = couponExpiryTime providerIsObserver = provider `notElem` [bob, dora] + beneficiary = None actualCoupons0 <- query @RewardCouponV2 app.dso let actualCoupons = sortOn (.provider) $ fmap snd actualCoupons0 @@ -151,7 +152,7 @@ test_ClaimExpiredRewardsV2 = do -- create coupons - forA_ [ (alice, 100.0), (bob, 500.0) ] $ \(provider, amount) -> do + forA_ [ (alice, Some alice, 100.0), (alice, Some bob, 500.0) ] $ \(provider, beneficiary, amount) -> do submit app.dso $ createCmd RewardCouponV2 with dso = app.dso provider @@ -159,6 +160,7 @@ test_ClaimExpiredRewardsV2 = do round = Round 0 expiresAt = demoTime `addRelTime` hours 48 providerIsObserver = False + beneficiary -- expiry works setTime $ demoTime `addRelTime` hours 48 diff --git a/daml/splice-wallet-test/daml.yaml b/daml/splice-wallet-test/daml.yaml index 177633b776..d81c8a6cab 100644 --- a/daml/splice-wallet-test/daml.yaml +++ b/daml/splice-wallet-test/daml.yaml @@ -7,6 +7,7 @@ dependencies: - daml-stdlib - daml-script data-dependencies: +- ../splice-api-reward-assignment-v1/.daml/dist/splice-api-reward-assignment-v1-current.dar - ../splice-amulet/.daml/dist/splice-amulet-current.dar - ../splice-amulet-test/.daml/dist/splice-amulet-test-current.dar - ../splice-util/.daml/dist/splice-util-current.dar diff --git a/daml/splice-wallet-test/daml/Splice/Scripts/Wallet/TestMintingDelegation.daml b/daml/splice-wallet-test/daml/Splice/Scripts/Wallet/TestMintingDelegation.daml index f67bf854d5..d2a53d3f27 100644 --- a/daml/splice-wallet-test/daml/Splice/Scripts/Wallet/TestMintingDelegation.daml +++ b/daml/splice-wallet-test/daml/Splice/Scripts/Wallet/TestMintingDelegation.daml @@ -7,9 +7,12 @@ import DA.Time import Daml.Script import qualified DA.Map as Map +import DA.List (sort) import DA.List.Total (head) import Splice.Amulet import Splice.AmuletRules +import Splice.Api.RewardAssignmentV1 qualified as Api.RewardAssignmentV1 +import Splice.Testing.Utils (emptyExtraArgs) import Splice.Round import Splice.Util import Splice.Wallet.MintingDelegation @@ -86,11 +89,12 @@ testMintingDelegation = do let rewardCouponV2Amount = 42.0 rewardCouponV2Cid <- submit app.dso $ createCmd RewardCouponV2 with dso = app.dso - provider = beneficiary + provider = provider2.primaryParty amount = rewardCouponV2Amount expiresAt = now `addRelTime` days 60 round = openRound.round providerIsObserver = False + beneficiary = Some beneficiary -- Wait for rounds to advance so coupons can be minted runNextIssuance app @@ -266,3 +270,110 @@ testMintingDelegation_AcceptWithExistingDelegationArchival = do existingDelegationCid = Some mintingDelegationCid2 pure () + +testMintingDelegation_AssignAndMint : Script () +testMintingDelegation_AssignAndMint = do + DefaultAppWithUsers{..} <- setupDefaultAppWithUsers + + beneficiary <- allocateParty "beneficiary" + rewardCouponExtraBeneficiary <- allocateParty "rewardCouponExtraBeneficiary" + let delegate = aliceValidator.primaryParty + + -- Create a MintingDelegation + now <- getTime + proposalCid <- submit beneficiary $ createCmd MintingDelegationProposal with + delegation = MintingDelegation with + dso = app.dso + beneficiary + delegate + expiresAt = now `addRelTime` days 30 + amuletMergeLimit = 10 + + MintingDelegationProposal_AcceptResult mintingDelegationCid <- submit delegate $ exerciseCmd proposalCid MintingDelegationProposal_Accept with + existingDelegationCid = None + + -- Create a ValidatorRight for beneficiary (needed for liveness record) + validatorRightCid <- submit beneficiary $ createCmd ValidatorRight with + dso = app.dso + user = beneficiary + validator = beneficiary + + (_, openRound) <- getLatestOpenRound app + + -- Create a liveness record as an additional transfer input + livenessActivityRecordCid <- submit app.dso $ createCmd ValidatorLivenessActivityRecord with + dso = app.dso + validator = beneficiary + round = openRound.round + + -- Create two RewardCouponV2 with provider = beneficiary, beneficiary = None (unassigned) + let coupon1Amount = 1000.0 + coupon1Cid <- submit app.dso $ createCmd RewardCouponV2 with + dso = app.dso + provider = beneficiary + amount = coupon1Amount + expiresAt = now `addRelTime` hours 36 + round = openRound.round + providerIsObserver = True + beneficiary = None + + let coupon2Amount = 500.0 + coupon2Cid <- submit app.dso $ createCmd RewardCouponV2 with + dso = app.dso + provider = beneficiary + amount = coupon2Amount + expiresAt = now `addRelTime` hours 36 + round = openRound.round + providerIsObserver = True + beneficiary = None + + -- Advance rounds so coupons can be minted + runNextIssuance app + runNextIssuance app + runNextIssuance app + + balanceBefore <- getNormalizedBalance beneficiary + (openMiningRoundCid, _) <- getLatestOpenRound app + now2 <- getTime + issuingRounds <- query @IssuingMiningRound app.dso + let context = TransferContext with + openMiningRound = openMiningRoundCid + issuingMiningRounds = Map.fromList + [ (round.round, roundCid) | (roundCid, round) <- issuingRounds, round.opensAt <= now2 ] + validatorRights = Map.fromList [(beneficiary, validatorRightCid)] + featuredAppRight = None + (amuletRulesCid, _) <- getAmuletRules app + + -- Assign reward coupons to beneficiary and the rewardCouponExtraBeneficiary, and mint beneficiary's share + let weights = [(beneficiary, 0.6), (rewardCouponExtraBeneficiary, 0.4)] + submit (actAs delegate <> readAs beneficiary <> readAs rewardCouponExtraBeneficiary <> readAs app.dso) $ exerciseCmd mintingDelegationCid MintingDelegation_AssignAndMint with + couponCid = toInterfaceContractId coupon1Cid + assignBeneficiaries = Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiaries with + additionalCoupons = [toInterfaceContractId coupon2Cid] + newBeneficiaries = map (uncurry Api.RewardAssignmentV1.RewardBeneficiary) weights + extraArgs = emptyExtraArgs + inputs = [InputValidatorLivenessActivityRecord livenessActivityRecordCid] + context = PaymentTransferContext with + context + amuletRules = amuletRulesCid + + balanceAfter <- getNormalizedBalance beneficiary + let reward = balanceAfter - balanceBefore + + let Some (_, issuingRound) = head issuingRounds + + -- Expected: beneficiary gets 60% of coupon amounts + validator faucet reward + let expectedValidatorFaucetAmount = getIssuingMiningRoundIssuancePerValidatorFaucetCoupon issuingRound + let expectedRewardCouponAmount = (coupon1Amount + coupon2Amount) * 0.6 + let expectedTotal = expectedValidatorFaucetAmount + expectedRewardCouponAmount + + require ("Combined reward should match expected " <> show expectedTotal <> ", got: " <> show reward) + (reward >= expectedTotal - 1.0 && reward <= expectedTotal + 1.0) + + -- Verify rewardCouponExtraBeneficiary's coupons amounts + rewardCouponExtraBeneficiaryCoupons <- query @RewardCouponV2 rewardCouponExtraBeneficiary + let rewardCouponExtraBeneficiaryAmounts = map (\(_, c) -> c.amount) rewardCouponExtraBeneficiaryCoupons + require "rewardCouponExtraBeneficiary coupon amounts should be 40% of originals" + (sort rewardCouponExtraBeneficiaryAmounts == sort [coupon1Amount * 0.4, coupon2Amount * 0.4]) + + pure () diff --git a/daml/splice-wallet/daml.yaml b/daml/splice-wallet/daml.yaml index 7a9e056ce7..2a1982c4aa 100644 --- a/daml/splice-wallet/daml.yaml +++ b/daml/splice-wallet/daml.yaml @@ -11,6 +11,7 @@ data-dependencies: - ../dars/splice-api-token-transfer-instruction-v1-1.0.0.dar - ../dars/splice-api-token-allocation-instruction-v1-1.0.0.dar - ../dars/splice-api-token-allocation-v1-1.0.0.dar +- ../splice-api-reward-assignment-v1/.daml/dist/splice-api-reward-assignment-v1-current.dar - ../splice-amulet/.daml/dist/splice-amulet-current.dar - ../splice-util/.daml/dist/splice-util-current.dar - ../splice-wallet-payments/.daml/dist/splice-wallet-payments-current.dar diff --git a/daml/splice-wallet/daml/Splice/Wallet/MintingDelegation.daml b/daml/splice-wallet/daml/Splice/Wallet/MintingDelegation.daml index e5970564a4..ce662ebf40 100644 --- a/daml/splice-wallet/daml/Splice/Wallet/MintingDelegation.daml +++ b/daml/splice-wallet/daml/Splice/Wallet/MintingDelegation.daml @@ -4,7 +4,9 @@ module Splice.Wallet.MintingDelegation where import DA.Assert +import Splice.Amulet (RewardCouponV2(..)) import Splice.AmuletRules +import Splice.Api.RewardAssignmentV1 qualified as Api.RewardAssignmentV1 import Splice.Types (ForOwner(..)) import Splice.Util @@ -76,6 +78,45 @@ template MintingDelegation expectedDso = Some dso pure MintingDelegation_MintResult with transferResult + nonconsuming choice MintingDelegation_AssignAndMint : MintingDelegation_AssignAndMintResult + with + couponCid : ContractId Api.RewardAssignmentV1.RewardCoupon + -- ^ Primary coupon to exercise assign on. + assignBeneficiaries : Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiaries + -- ^ Assignment parameters: additionalCoupons, newBeneficiaries, extraArgs. + inputs : [TransferInput] + -- ^ Additional inputs to the transfer. + context : PaymentTransferContext + -- ^ Transfer context including amulet rules. + controller delegate + do + assertWithinDeadline "expiresAt" expiresAt + + -- Assign reward coupons to new beneficiaries + assignResult <- exercise couponCid assignBeneficiaries + + -- Find reward coupons assigned to the delegation's beneficiary and mint along with other inputs + let myRewardInputs = + [ InputRewardCouponV2 (fromInterfaceContractId @RewardCouponV2 cid) + | (party, cids) <- assignResult.newBeneficiariesCouponCids + , party == beneficiary + , cid <- cids + ] + + transferResult <- exercise context.amuletRules AmuletRules_Transfer with + transfer = Transfer with + sender = beneficiary + provider = delegate + inputs = inputs ++ myRewardInputs + outputs = [] + beneficiaries = None + context = context.context with featuredAppRight = None + expectedDso = Some dso + + pure MintingDelegation_AssignAndMintResult with + assignResult + transferResult + choice MintingDelegation_Reject : MintingDelegation_RejectResult controller delegate do pure MintingDelegation_RejectResult {} @@ -106,6 +147,12 @@ data MintingDelegation_MintResult = MintingDelegation_MintResult transferResult : TransferResult deriving (Show, Eq) +data MintingDelegation_AssignAndMintResult = MintingDelegation_AssignAndMintResult + with + assignResult : Api.RewardAssignmentV1.RewardCoupon_AssignBeneficiariesResult + transferResult : TransferResult + deriving (Show, Eq) + instance HasCheckedFetch MintingDelegation ForOwner where contractGroupId MintingDelegation{beneficiary, dso} = ForOwner with owner = beneficiary; dso diff --git a/docs/api-templates/splice-api-reward-assignment-v1-index-template.rst b/docs/api-templates/splice-api-reward-assignment-v1-index-template.rst new file mode 100644 index 0000000000..73ee4dc429 --- /dev/null +++ b/docs/api-templates/splice-api-reward-assignment-v1-index-template.rst @@ -0,0 +1,13 @@ +.. + Copyright (c) 2024 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +.. + SPDX-License-Identifier: Apache-2.0 + +splice-api-reward-assignment-v1 docs +==================================== + +.. toctree:: + :maxdepth: 3 + :titlesonly: + +{{{body}}} diff --git a/docs/src/app_dev/daml_api/index.rst b/docs/src/app_dev/daml_api/index.rst index e3111843dd..311e404b21 100644 --- a/docs/src/app_dev/daml_api/index.rst +++ b/docs/src/app_dev/daml_api/index.rst @@ -23,6 +23,31 @@ Canton Network Token Standard APIs (CIP-0056) Refer to the :ref:`Token Standard documentation section `. +.. _reward_assignment_api: + +Reward Assignment API (CIP-0104) +-------------------------------- + +As part of implementing `CIP-0104 `__ +the following Daml API was introduced: + + .. toctree:: + :maxdepth: 1 + + ../api/splice-api-reward-assignment-v1/index + +The API is meant for apps whose ultimate beneficiaries of rewards are different from +the app provider party (e.g., decentralized apps). +The API allows them to assign the rewards they receive for their app to their ultimate beneficiaries. + +The API is based on a Daml interface, so that apps can use it from their Daml +code without incurring a static dependency on ``splice-amulet`` and the +corresponding upgrading challenges. The reward assignment choice can also +be called directly from the Ledger API for apps that don't use custom Daml code. + +Note that the coupons always specify the original app provider party for whose activity +the reward coupon was created. +Thereby allowing consistent attribution of rewards collected to the app provider party. .. _featured_app_activity_markers_api: diff --git a/docs/src/release_notes_upcoming.rst b/docs/src/release_notes_upcoming.rst index fff67bed28..be92c86309 100644 --- a/docs/src/release_notes_upcoming.rst +++ b/docs/src/release_notes_upcoming.rst @@ -38,6 +38,10 @@ an transfer input. These calls can be made directly against the Ledger API, or indirectly via custom Daml code deployed to the validator node. + - Add a new interface package ``splice-api-reward-assignment-v1``. + Apps whose ultimate beneficiaries are different from the app provider party (e.g., decentralized apps) can use the + this package to assign the rewards to their ultimate beneficiaries. + - Add a new field ``rewardConfig`` to the ``AmuletConfig`` for configuring whether rounds should use traffic-based app rewards or on-ledger reward accounting, and whether traffic-based app reward coupon creation should be simulated in a dry-run mode. See the