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 ee0a4e30dd..4a0e060bc0 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 @@ -2806,12 +2806,73 @@ object DarResources { "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", ), ) + val amulet_0_1_23 = DarResource( + "splice-amulet-0.1.23.dar", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", + PackageMetadata( + PackageName.assertFromString("splice-amulet"), + PackageVersion.assertFromString("0.1.23"), + None, + ), + Set( + "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", + "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", + "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", + "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", + "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", + "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", + "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", + "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", + "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", + "7804375fe5e4c6d5afe067bd314c42fe0b7d005a1300019c73154dd939da4dda", + "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", + "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", + "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", + "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", + "5c1097a9bad0af4bcfe6d3fb0fe55112d3d11f18eae57ddfb14c20836fee226c", + "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", + "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "6fe848530b2404017c4a12874c956ad7d5c8a419ee9b040f96b5c13172d2e193", + "b5be6316177384677c024316c0bfaf7d3d494e7c3ad6c540d2032e6112b004bc", + "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", + "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", + "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", + "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", + "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", + "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", + "19f0df5fdaf5a96e137b6ea885fdb378f37bd3166bd9a47ee11518e33fa09a20", + "a1fa18133ae48cbb616c4c148e78e661666778c3087d099067c7fe1868cbb3a1", + "4b7ecfc366d79ccc5ed07c80f26fe489cf2dfd43ce2856c06a78e6a048db7032", + "86d888f34152dae8729900966b44abcb466b9c111699678de58032de601d2b04", + "6da1f43a10a179524e840e7288b47bda213339b0552d92e87ae811e52f59fc0e", + "051a3b0563a6fa4df4cb34448081e48b061e555aa1a265abf6ae8f3f4cafe439", + "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", + "22ffcbab726e64e179deebd895307fad94efbae3f72b07677e24038d0fbf4467", + "3cde94fe9be5c700fc1d9a8ad2277e2c1214609f8c52a5b4db77e466875b8cb7", + "9d1a644e686435cf934f2f3f049138a424863b2a800130046dadc0c994ea5df3", + "bfda48f9aa2c89c895cde538ec4b4946c7085959e031ad61bde616b9849155d7", + "ee33fb70918e7aaa3d3fc44d64a399fb2bf5bcefc54201b1690ecd448551ba88", + "275064aacfe99cea72ee0c80563936129563776f67415ef9f13e4297eecbc520", + "9a8f41a2b1456d357dee5677565c21b9a5aa45b80f0ed6be469694445dd4f6e1", + "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", + "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", + "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", + "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", + "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", + "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", + ), + ) val amulet_current = DarResource( "splice-amulet-current.dar", - "fb10433a48c24f30076a7aee03a3e314b7ab02fe9a22e2069e3af92d2b6ac88a", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", PackageMetadata( PackageName.assertFromString("splice-amulet"), - PackageVersion.assertFromString("0.1.22"), + PackageVersion.assertFromString("0.1.23"), None, ), Set( @@ -2894,6 +2955,7 @@ object DarResources { amulet_0_1_20, amulet_0_1_21, amulet_0_1_22, + amulet_0_1_23, ), ) val dsoGovernance_0_1_0 = DarResource( @@ -4303,25 +4365,88 @@ object DarResources { "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", ), ) + val dsoGovernance_0_1_29 = DarResource( + "splice-dso-governance-0.1.29.dar", + "db4060b37d8ba591d786f7961a4d7fb65583c195e9f848c1ca26e875f8dfce29", + PackageMetadata( + PackageName.assertFromString("splice-dso-governance"), + PackageVersion.assertFromString("0.1.29"), + None, + ), + Set( + "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", + "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", + "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", + "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", + "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", + "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", + "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", + "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", + "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", + "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", + "7804375fe5e4c6d5afe067bd314c42fe0b7d005a1300019c73154dd939da4dda", + "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", + "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", + "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", + "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", + "5c1097a9bad0af4bcfe6d3fb0fe55112d3d11f18eae57ddfb14c20836fee226c", + "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", + "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "6fe848530b2404017c4a12874c956ad7d5c8a419ee9b040f96b5c13172d2e193", + "b5be6316177384677c024316c0bfaf7d3d494e7c3ad6c540d2032e6112b004bc", + "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", + "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", + "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", + "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", + "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", + "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", + "19f0df5fdaf5a96e137b6ea885fdb378f37bd3166bd9a47ee11518e33fa09a20", + "a1fa18133ae48cbb616c4c148e78e661666778c3087d099067c7fe1868cbb3a1", + "4b7ecfc366d79ccc5ed07c80f26fe489cf2dfd43ce2856c06a78e6a048db7032", + "86d888f34152dae8729900966b44abcb466b9c111699678de58032de601d2b04", + "6da1f43a10a179524e840e7288b47bda213339b0552d92e87ae811e52f59fc0e", + "051a3b0563a6fa4df4cb34448081e48b061e555aa1a265abf6ae8f3f4cafe439", + "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", + "22ffcbab726e64e179deebd895307fad94efbae3f72b07677e24038d0fbf4467", + "3cde94fe9be5c700fc1d9a8ad2277e2c1214609f8c52a5b4db77e466875b8cb7", + "9d1a644e686435cf934f2f3f049138a424863b2a800130046dadc0c994ea5df3", + "bfda48f9aa2c89c895cde538ec4b4946c7085959e031ad61bde616b9849155d7", + "ee33fb70918e7aaa3d3fc44d64a399fb2bf5bcefc54201b1690ecd448551ba88", + "275064aacfe99cea72ee0c80563936129563776f67415ef9f13e4297eecbc520", + "9a8f41a2b1456d357dee5677565c21b9a5aa45b80f0ed6be469694445dd4f6e1", + "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", + "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", + "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", + "88dd94a321aa36cb0d8fd2514e822f803da7a5d9341c3c1ae577e43e90731f09", + "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", + "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", + "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", + "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", + ), + ) val dsoGovernance_current = DarResource( "splice-dso-governance-current.dar", - "eeb461e9e430d8aaaa232f23058a28c9858d559abd083c391d7ab7e73efb4e13", + "db4060b37d8ba591d786f7961a4d7fb65583c195e9f848c1ca26e875f8dfce29", PackageMetadata( PackageName.assertFromString("splice-dso-governance"), - PackageVersion.assertFromString("0.1.28"), + PackageVersion.assertFromString("0.1.29"), None, ), Set( - "9cffe65feb664c9550937433067e9f969e3795c6fb38715e06a5e04fc1ae1f83", - "866ea53bea2afc099c560ad4c386a1736859841b17c422836f133d605ee51616", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", - "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", @@ -4360,8 +4485,9 @@ object DarResources { "9a8f41a2b1456d357dee5677565c21b9a5aa45b80f0ed6be469694445dd4f6e1", "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", + "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", + "88dd94a321aa36cb0d8fd2514e822f803da7a5d9341c3c1ae577e43e90731f09", "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", - "fb10433a48c24f30076a7aee03a3e314b7ab02fe9a22e2069e3af92d2b6ac88a", "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", @@ -4400,6 +4526,7 @@ object DarResources { dsoGovernance_0_1_26, dsoGovernance_0_1_27, dsoGovernance_0_1_28, + dsoGovernance_0_1_29, ), ) val utilBatchedMarkers_1_0_0 = DarResource( @@ -5781,22 +5908,86 @@ object DarResources { "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", ), ) + val wallet_0_1_24 = DarResource( + "splice-wallet-0.1.24.dar", + "6949761b7b6c0c7477495e9da3e5b0cf66375812c42825139951703d74d5d2ee", + PackageMetadata( + PackageName.assertFromString("splice-wallet"), + PackageVersion.assertFromString("0.1.24"), + None, + ), + Set( + "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", + "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", + "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", + "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", + "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", + "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", + "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", + "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", + "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", + "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", + "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", + "7804375fe5e4c6d5afe067bd314c42fe0b7d005a1300019c73154dd939da4dda", + "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", + "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", + "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", + "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", + "5c1097a9bad0af4bcfe6d3fb0fe55112d3d11f18eae57ddfb14c20836fee226c", + "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", + "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "6fe848530b2404017c4a12874c956ad7d5c8a419ee9b040f96b5c13172d2e193", + "b5be6316177384677c024316c0bfaf7d3d494e7c3ad6c540d2032e6112b004bc", + "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", + "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", + "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", + "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", + "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", + "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", + "19f0df5fdaf5a96e137b6ea885fdb378f37bd3166bd9a47ee11518e33fa09a20", + "a1fa18133ae48cbb616c4c148e78e661666778c3087d099067c7fe1868cbb3a1", + "4b7ecfc366d79ccc5ed07c80f26fe489cf2dfd43ce2856c06a78e6a048db7032", + "86d888f34152dae8729900966b44abcb466b9c111699678de58032de601d2b04", + "6da1f43a10a179524e840e7288b47bda213339b0552d92e87ae811e52f59fc0e", + "051a3b0563a6fa4df4cb34448081e48b061e555aa1a265abf6ae8f3f4cafe439", + "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", + "22ffcbab726e64e179deebd895307fad94efbae3f72b07677e24038d0fbf4467", + "3cde94fe9be5c700fc1d9a8ad2277e2c1214609f8c52a5b4db77e466875b8cb7", + "9d1a644e686435cf934f2f3f049138a424863b2a800130046dadc0c994ea5df3", + "bfda48f9aa2c89c895cde538ec4b4946c7085959e031ad61bde616b9849155d7", + "ee33fb70918e7aaa3d3fc44d64a399fb2bf5bcefc54201b1690ecd448551ba88", + "275064aacfe99cea72ee0c80563936129563776f67415ef9f13e4297eecbc520", + "9a8f41a2b1456d357dee5677565c21b9a5aa45b80f0ed6be469694445dd4f6e1", + "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", + "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", + "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", + "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", + "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", + "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", + ), + ) val wallet_current = DarResource( "splice-wallet-current.dar", - "727c0fb9711d59b506fbb3cff2342e55eb583bb88682a946220525c304feca4a", + "6949761b7b6c0c7477495e9da3e5b0cf66375812c42825139951703d74d5d2ee", PackageMetadata( PackageName.assertFromString("splice-wallet"), - PackageVersion.assertFromString("0.1.23"), + PackageVersion.assertFromString("0.1.24"), None, ), Set( - "866ea53bea2afc099c560ad4c386a1736859841b17c422836f133d605ee51616", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", @@ -5838,7 +6029,6 @@ object DarResources { "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", - "fb10433a48c24f30076a7aee03a3e314b7ab02fe9a22e2069e3af92d2b6ac88a", "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", @@ -5872,6 +6062,7 @@ object DarResources { wallet_0_1_21, wallet_0_1_22, wallet_0_1_23, + wallet_0_1_24, ), ) val amuletNameService_0_1_0 = DarResource( @@ -7028,22 +7219,86 @@ object DarResources { "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", ), ) + val amuletNameService_0_1_24 = DarResource( + "splice-amulet-name-service-0.1.24.dar", + "88dd94a321aa36cb0d8fd2514e822f803da7a5d9341c3c1ae577e43e90731f09", + PackageMetadata( + PackageName.assertFromString("splice-amulet-name-service"), + PackageVersion.assertFromString("0.1.24"), + None, + ), + Set( + "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", + "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", + "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", + "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", + "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", + "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", + "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", + "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", + "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", + "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", + "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", + "7804375fe5e4c6d5afe067bd314c42fe0b7d005a1300019c73154dd939da4dda", + "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", + "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", + "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", + "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", + "5c1097a9bad0af4bcfe6d3fb0fe55112d3d11f18eae57ddfb14c20836fee226c", + "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", + "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "6fe848530b2404017c4a12874c956ad7d5c8a419ee9b040f96b5c13172d2e193", + "b5be6316177384677c024316c0bfaf7d3d494e7c3ad6c540d2032e6112b004bc", + "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", + "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", + "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", + "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", + "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", + "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", + "19f0df5fdaf5a96e137b6ea885fdb378f37bd3166bd9a47ee11518e33fa09a20", + "a1fa18133ae48cbb616c4c148e78e661666778c3087d099067c7fe1868cbb3a1", + "4b7ecfc366d79ccc5ed07c80f26fe489cf2dfd43ce2856c06a78e6a048db7032", + "86d888f34152dae8729900966b44abcb466b9c111699678de58032de601d2b04", + "6da1f43a10a179524e840e7288b47bda213339b0552d92e87ae811e52f59fc0e", + "051a3b0563a6fa4df4cb34448081e48b061e555aa1a265abf6ae8f3f4cafe439", + "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", + "22ffcbab726e64e179deebd895307fad94efbae3f72b07677e24038d0fbf4467", + "3cde94fe9be5c700fc1d9a8ad2277e2c1214609f8c52a5b4db77e466875b8cb7", + "9d1a644e686435cf934f2f3f049138a424863b2a800130046dadc0c994ea5df3", + "bfda48f9aa2c89c895cde538ec4b4946c7085959e031ad61bde616b9849155d7", + "ee33fb70918e7aaa3d3fc44d64a399fb2bf5bcefc54201b1690ecd448551ba88", + "275064aacfe99cea72ee0c80563936129563776f67415ef9f13e4297eecbc520", + "9a8f41a2b1456d357dee5677565c21b9a5aa45b80f0ed6be469694445dd4f6e1", + "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", + "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", + "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", + "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", + "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", + "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", + ), + ) val amuletNameService_current = DarResource( "splice-amulet-name-service-current.dar", - "9cffe65feb664c9550937433067e9f969e3795c6fb38715e06a5e04fc1ae1f83", + "88dd94a321aa36cb0d8fd2514e822f803da7a5d9341c3c1ae577e43e90731f09", PackageMetadata( PackageName.assertFromString("splice-amulet-name-service"), - PackageVersion.assertFromString("0.1.23"), + PackageVersion.assertFromString("0.1.24"), None, ), Set( - "866ea53bea2afc099c560ad4c386a1736859841b17c422836f133d605ee51616", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", @@ -7085,7 +7340,6 @@ object DarResources { "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", - "fb10433a48c24f30076a7aee03a3e314b7ab02fe9a22e2069e3af92d2b6ac88a", "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", @@ -7119,6 +7373,7 @@ object DarResources { amuletNameService_0_1_21, amuletNameService_0_1_22, amuletNameService_0_1_23, + amuletNameService_0_1_24, ), ) val walletPayments_0_1_0 = DarResource( @@ -8203,18 +8458,81 @@ object DarResources { "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", ), ) + val walletPayments_0_1_23 = DarResource( + "splice-wallet-payments-0.1.23.dar", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", + PackageMetadata( + PackageName.assertFromString("splice-wallet-payments"), + PackageVersion.assertFromString("0.1.23"), + None, + ), + Set( + "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", + "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", + "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", + "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", + "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", + "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", + "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", + "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", + "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", + "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", + "7804375fe5e4c6d5afe067bd314c42fe0b7d005a1300019c73154dd939da4dda", + "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", + "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", + "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", + "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", + "5c1097a9bad0af4bcfe6d3fb0fe55112d3d11f18eae57ddfb14c20836fee226c", + "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", + "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "6fe848530b2404017c4a12874c956ad7d5c8a419ee9b040f96b5c13172d2e193", + "b5be6316177384677c024316c0bfaf7d3d494e7c3ad6c540d2032e6112b004bc", + "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", + "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", + "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", + "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", + "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", + "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", + "19f0df5fdaf5a96e137b6ea885fdb378f37bd3166bd9a47ee11518e33fa09a20", + "a1fa18133ae48cbb616c4c148e78e661666778c3087d099067c7fe1868cbb3a1", + "4b7ecfc366d79ccc5ed07c80f26fe489cf2dfd43ce2856c06a78e6a048db7032", + "86d888f34152dae8729900966b44abcb466b9c111699678de58032de601d2b04", + "6da1f43a10a179524e840e7288b47bda213339b0552d92e87ae811e52f59fc0e", + "051a3b0563a6fa4df4cb34448081e48b061e555aa1a265abf6ae8f3f4cafe439", + "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", + "22ffcbab726e64e179deebd895307fad94efbae3f72b07677e24038d0fbf4467", + "3cde94fe9be5c700fc1d9a8ad2277e2c1214609f8c52a5b4db77e466875b8cb7", + "9d1a644e686435cf934f2f3f049138a424863b2a800130046dadc0c994ea5df3", + "bfda48f9aa2c89c895cde538ec4b4946c7085959e031ad61bde616b9849155d7", + "ee33fb70918e7aaa3d3fc44d64a399fb2bf5bcefc54201b1690ecd448551ba88", + "275064aacfe99cea72ee0c80563936129563776f67415ef9f13e4297eecbc520", + "9a8f41a2b1456d357dee5677565c21b9a5aa45b80f0ed6be469694445dd4f6e1", + "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", + "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", + "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", + "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", + "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", + "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", + ), + ) val walletPayments_current = DarResource( "splice-wallet-payments-current.dar", - "866ea53bea2afc099c560ad4c386a1736859841b17c422836f133d605ee51616", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", PackageMetadata( PackageName.assertFromString("splice-wallet-payments"), - PackageVersion.assertFromString("0.1.22"), + PackageVersion.assertFromString("0.1.23"), None, ), Set( "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", @@ -8259,7 +8577,6 @@ object DarResources { "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", - "fb10433a48c24f30076a7aee03a3e314b7ab02fe9a22e2069e3af92d2b6ac88a", "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", @@ -8292,6 +8609,7 @@ object DarResources { walletPayments_0_1_20, walletPayments_0_1_21, walletPayments_0_1_22, + walletPayments_0_1_23, ), ) val splitwell_0_1_0 = DarResource( @@ -9448,22 +9766,86 @@ object DarResources { "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", ), ) + val splitwell_0_1_24 = DarResource( + "splitwell-0.1.24.dar", + "083b7568b93eaa9e1d6664c2e1484de110d74a23477fb2c0710d49a6c9c66330", + PackageMetadata( + PackageName.assertFromString("splitwell"), + PackageVersion.assertFromString("0.1.24"), + None, + ), + Set( + "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", + "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", + "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", + "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", + "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", + "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", + "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", + "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", + "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", + "c3bb0c5d04799b3f11bad7c3c102963e115cf53da3e4afcbcfd9f06ebd82b4ff", + "0e4a572ab1fb94744abb02243a6bbed6c78fc6e3c8d3f60c655f057692a62816", + "ab068e2f920d0e06347975c2a342b71f8b8e3b4be0f02ead9442caac51aa8877", + "e7e0adfa881e7dbbb07da065ae54444da7c4bccebcb8872ab0cb5dcf9f3761ce", + "7804375fe5e4c6d5afe067bd314c42fe0b7d005a1300019c73154dd939da4dda", + "b70db8369e1c461d5c70f1c86f526a29e9776c655e6ffc2560f95b05ccb8b946", + "93c942ae2b4c2ba674fb152fe38473c507bda4e82b4e4c5da55a552a9d8cce1d", + "3b25c9b08ac6d895417c604fc0ee4b7e47ef974ff8fa43f139daa43bb431fefc", + "718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b", + "5c1097a9bad0af4bcfe6d3fb0fe55112d3d11f18eae57ddfb14c20836fee226c", + "52854220dc199884704958df38befd5492d78384a032fd7558c38f00e3d778a2", + "d095a2ccf6dd36b2415adc4fa676f9191ba63cd39828dc5207b36892ec350cbc", + "6fe848530b2404017c4a12874c956ad7d5c8a419ee9b040f96b5c13172d2e193", + "b5be6316177384677c024316c0bfaf7d3d494e7c3ad6c540d2032e6112b004bc", + "54f85ebfc7dfae18f7d70370015dcc6c6792f60135ab369c44ae52c6fc17c274", + "f181cd661f7af3a60bdaae4b0285a2a67beb55d6910fc8431dbae21a5825ec0f", + "60c61c542207080e97e378ab447cc355ecc47534b3a3ebbff307c4fb8339bc4d", + "6f7b72361bc2039369651b4195315a2a5849babafec67b3c96e66ea6e560ec35", + "fcee8dfc1b81c449b421410edd5041c16ab59c45bbea85bcb094d1b17c3e9df7", + "6f8e6085f5769861ae7a40dccd618d6f747297d59b37cab89b93e2fa80b0c024", + "fa79192fe1cce03d7d8db36471dde4cf6c96e6d0f07e1c391dd49e355af9b38c", + "19f0df5fdaf5a96e137b6ea885fdb378f37bd3166bd9a47ee11518e33fa09a20", + "a1fa18133ae48cbb616c4c148e78e661666778c3087d099067c7fe1868cbb3a1", + "4b7ecfc366d79ccc5ed07c80f26fe489cf2dfd43ce2856c06a78e6a048db7032", + "86d888f34152dae8729900966b44abcb466b9c111699678de58032de601d2b04", + "6da1f43a10a179524e840e7288b47bda213339b0552d92e87ae811e52f59fc0e", + "051a3b0563a6fa4df4cb34448081e48b061e555aa1a265abf6ae8f3f4cafe439", + "c280cc3ef501d237efa7b1120ca3ad2d196e089ad596b666bed59a85f3c9a074", + "22ffcbab726e64e179deebd895307fad94efbae3f72b07677e24038d0fbf4467", + "3cde94fe9be5c700fc1d9a8ad2277e2c1214609f8c52a5b4db77e466875b8cb7", + "9d1a644e686435cf934f2f3f049138a424863b2a800130046dadc0c994ea5df3", + "bfda48f9aa2c89c895cde538ec4b4946c7085959e031ad61bde616b9849155d7", + "ee33fb70918e7aaa3d3fc44d64a399fb2bf5bcefc54201b1690ecd448551ba88", + "275064aacfe99cea72ee0c80563936129563776f67415ef9f13e4297eecbc520", + "9a8f41a2b1456d357dee5677565c21b9a5aa45b80f0ed6be469694445dd4f6e1", + "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", + "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", + "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", + "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", + "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", + "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", + ), + ) val splitwell_current = DarResource( "splitwell-current.dar", - "68d3911f72347dc787c336f73af3c036004c982f591cb55e7b4f2fb45f5e50e6", + "083b7568b93eaa9e1d6664c2e1484de110d74a23477fb2c0710d49a6c9c66330", PackageMetadata( PackageName.assertFromString("splitwell"), - PackageVersion.assertFromString("0.1.23"), + PackageVersion.assertFromString("0.1.24"), None, ), Set( - "866ea53bea2afc099c560ad4c386a1736859841b17c422836f133d605ee51616", "9e70a8b3510d617f8a136213f33d6a903a10ca0eeec76bb06ba55d1ed9680f69", "7adc4c2d07fa3a51173c843cba36e610c1168b2dbbf53076e20c0092eae8763d", "4ded6b668cb3b64f7a88a30874cd41c75829f5e064b3fbbadf41ec7e8363354f", + "640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08", "29317e3b7b165d2bbf16721bcca0ec4869e53eddb2738bddf790d61af28e0099", "4039f60273388c5701e27950ab3e8c3044433b0876535a3b48fb042cc77bf02a", "7cff38e34bd192d498d5a7606aa3b893e35b0f632d582b273f66dab90f2f14ef", + "9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f", "bde4bd30749e99603e5afa354706608601029e225d4983324d617825b634253a", "adc16315a8943a8433886694720a2a000ae84c2315c4414bd6d0db4d1660de9c", "dd22e3e168a8c7fd0313171922dabf1f7a3b131bd9bfc9ff98e606f8c57707ea", @@ -9505,7 +9887,6 @@ object DarResources { "e5411f3d75f072b944bd88e652112a14a3d409c491fd9a51f5f6eede6d3a3348", "5aee9b21b8e9a4c4975b5f4c4198e6e6e8469df49e2010820e792f393db870f4", "55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281", - "fb10433a48c24f30076a7aee03a3e314b7ab02fe9a22e2069e3af92d2b6ac88a", "cae345b5500ef6f84645c816f88b9f7a85a9f3c71697984abdf6849f81e80324", "9818a0b5b827109de03a04c8f6151cde9d1e7fe5123dbb2dfeb0e52d7271287c", "91e167fa7a256f21f990c526a0a0df840e99aeef0e67dc1f5415b0309486de74", @@ -9539,6 +9920,7 @@ object DarResources { splitwell_0_1_21, splitwell_0_1_22, splitwell_0_1_23, + splitwell_0_1_24, ), ) val validatorLifecycle_0_1_0 = DarResource( diff --git a/apps/package-lock.json b/apps/package-lock.json index 0493fa7e55..714be7f1b7 100644 --- a/apps/package-lock.json +++ b/apps/package-lock.json @@ -26,13 +26,13 @@ "wallet/external-openapi-ts-client" ], "dependencies": { - "@daml.js/ans": "file:common/frontend/daml.js/splice-amulet-name-service-0.1.23", - "@daml.js/splice-amulet": "file:common/frontend/daml.js/splice-amulet-0.1.22", - "@daml.js/splice-dso-governance": "file:common/frontend/daml.js/splice-dso-governance-0.1.28", + "@daml.js/ans": "file:common/frontend/daml.js/splice-amulet-name-service-0.1.24", + "@daml.js/splice-amulet": "file:common/frontend/daml.js/splice-amulet-0.1.23", + "@daml.js/splice-dso-governance": "file:common/frontend/daml.js/splice-dso-governance-0.1.29", "@daml.js/splice-validator-lifecycle": "file:common/frontend/daml.js/splice-validator-lifecycle-0.1.8", - "@daml.js/splice-wallet": "file:common/frontend/daml.js/splice-wallet-0.1.23", - "@daml.js/splice-wallet-payments": "file:common/frontend/daml.js/splice-wallet-payments-0.1.22", - "@daml.js/splitwell": "file:common/frontend/daml.js/splitwell-0.1.23", + "@daml.js/splice-wallet": "file:common/frontend/daml.js/splice-wallet-0.1.24", + "@daml.js/splice-wallet-payments": "file:common/frontend/daml.js/splice-wallet-payments-0.1.23", + "@daml.js/splitwell": "file:common/frontend/daml.js/splitwell-0.1.24", "@daml/types": "^3.5.2", "@dmsnell/diff-match-patch": "^1.1.0", "dompurify": "^3.4.2", @@ -647,6 +647,32 @@ "common/frontend/daml.js/splice-amulet-0.1.22": { "name": "@daml.js/splice-amulet-0.1.22", "version": "3.5.2", + "extraneous": true, + "license": "UNLICENSED", + "dependencies": { + "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", + "@daml.js/daml-stdlib-DA-Set-Types-1.0.0": "file:../daml-stdlib-DA-Set-Types-1.0.0", + "@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-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-instruction-v2-1.0.0": "file:../splice-api-token-allocation-instruction-v2-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-allocation-v2-1.0.0": "file:../splice-api-token-allocation-v2-1.0.0", + "@daml.js/splice-api-token-holding-v1-1.0.0": "file:../splice-api-token-holding-v1-1.0.0", + "@daml.js/splice-api-token-holding-v2-1.0.0": "file:../splice-api-token-holding-v2-1.0.0", + "@daml.js/splice-api-token-metadata-v1-1.0.0": "file:../splice-api-token-metadata-v1-1.0.0", + "@daml.js/splice-api-token-transfer-events-v2-1.0.0": "file:../splice-api-token-transfer-events-v2-1.0.0", + "@daml.js/splice-api-token-transfer-instruction-v1-1.0.0": "file:../splice-api-token-transfer-instruction-v1-1.0.0", + "@daml.js/splice-api-token-transfer-instruction-v2-1.0.0": "file:../splice-api-token-transfer-instruction-v2-1.0.0", + "@mojotech/json-type-validation": "^3.1.0" + } + }, + "common/frontend/daml.js/splice-amulet-0.1.23": { + "name": "@daml.js/splice-amulet-0.1.23", + "version": "3.5.2", "license": "UNLICENSED", "dependencies": { "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", @@ -868,6 +894,7 @@ "common/frontend/daml.js/splice-amulet-name-service-0.1.23": { "name": "@daml.js/splice-amulet-name-service-0.1.23", "version": "3.5.2", + "extraneous": true, "license": "UNLICENSED", "dependencies": { "@daml.js/daml-stdlib-DA-Time-Types-1.0.0": "file:../daml-stdlib-DA-Time-Types-1.0.0", @@ -878,6 +905,19 @@ "@mojotech/json-type-validation": "^3.1.0" } }, + "common/frontend/daml.js/splice-amulet-name-service-0.1.24": { + "name": "@daml.js/splice-amulet-name-service-0.1.24", + "version": "3.5.2", + "license": "UNLICENSED", + "dependencies": { + "@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.23": "file:../splice-amulet-0.1.23", + "@daml.js/splice-api-featured-app-v1-1.0.0": "file:../splice-api-featured-app-v1-1.0.0", + "@daml.js/splice-wallet-payments-0.1.23": "file:../splice-wallet-payments-0.1.23", + "@mojotech/json-type-validation": "^3.1.0" + } + }, "common/frontend/daml.js/splice-amulet-name-service-0.1.9": { "name": "@daml.js/splice-amulet-name-service-0.1.9", "version": "0.0.0", @@ -1216,6 +1256,7 @@ "common/frontend/daml.js/splice-dso-governance-0.1.28": { "name": "@daml.js/splice-dso-governance-0.1.28", "version": "3.5.2", + "extraneous": true, "license": "UNLICENSED", "dependencies": { "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", @@ -1228,6 +1269,21 @@ "@mojotech/json-type-validation": "^3.1.0" } }, + "common/frontend/daml.js/splice-dso-governance-0.1.29": { + "name": "@daml.js/splice-dso-governance-0.1.29", + "version": "3.5.2", + "license": "UNLICENSED", + "dependencies": { + "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", + "@daml.js/daml-stdlib-DA-Set-Types-1.0.0": "file:../daml-stdlib-DA-Set-Types-1.0.0", + "@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.23": "file:../splice-amulet-0.1.23", + "@daml.js/splice-amulet-name-service-0.1.24": "file:../splice-amulet-name-service-0.1.24", + "@daml.js/splice-wallet-payments-0.1.23": "file:../splice-wallet-payments-0.1.23", + "@mojotech/json-type-validation": "^3.1.0" + } + }, "common/frontend/daml.js/splice-validator-lifecycle-0.1.3": { "name": "@daml.js/splice-validator-lifecycle-0.1.3", "version": "0.0.0", @@ -1522,6 +1578,7 @@ "common/frontend/daml.js/splice-wallet-0.1.23": { "name": "@daml.js/splice-wallet-0.1.23", "version": "3.5.2", + "extraneous": true, "license": "UNLICENSED", "dependencies": { "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", @@ -1540,6 +1597,27 @@ "@mojotech/json-type-validation": "^3.1.0" } }, + "common/frontend/daml.js/splice-wallet-0.1.24": { + "name": "@daml.js/splice-wallet-0.1.24", + "version": "3.5.2", + "license": "UNLICENSED", + "dependencies": { + "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", + "@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.23": "file:../splice-amulet-0.1.23", + "@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-instruction-v2-1.0.0": "file:../splice-api-token-allocation-instruction-v2-1.0.0", + "@daml.js/splice-api-token-allocation-request-v2-1.0.0": "file:../splice-api-token-allocation-request-v2-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-allocation-v2-1.0.0": "file:../splice-api-token-allocation-v2-1.0.0", + "@daml.js/splice-api-token-transfer-instruction-v1-1.0.0": "file:../splice-api-token-transfer-instruction-v1-1.0.0", + "@daml.js/splice-api-token-transfer-instruction-v2-1.0.0": "file:../splice-api-token-transfer-instruction-v2-1.0.0", + "@daml.js/splice-wallet-payments-0.1.23": "file:../splice-wallet-payments-0.1.23", + "@mojotech/json-type-validation": "^3.1.0" + } + }, "common/frontend/daml.js/splice-wallet-0.1.9": { "name": "@daml.js/splice-wallet-0.1.9", "version": "0.0.0", @@ -1716,6 +1794,7 @@ "common/frontend/daml.js/splice-wallet-payments-0.1.22": { "name": "@daml.js/splice-wallet-payments-0.1.22", "version": "3.5.2", + "extraneous": true, "license": "UNLICENSED", "dependencies": { "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", @@ -1725,6 +1804,18 @@ "@mojotech/json-type-validation": "^3.1.0" } }, + "common/frontend/daml.js/splice-wallet-payments-0.1.23": { + "name": "@daml.js/splice-wallet-payments-0.1.23", + "version": "3.5.2", + "license": "UNLICENSED", + "dependencies": { + "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", + "@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.23": "file:../splice-amulet-0.1.23", + "@mojotech/json-type-validation": "^3.1.0" + } + }, "common/frontend/daml.js/splice-wallet-payments-0.1.9": { "name": "@daml.js/splice-wallet-payments-0.1.9", "version": "0.0.0", @@ -1923,6 +2014,7 @@ "common/frontend/daml.js/splitwell-0.1.23": { "name": "@daml.js/splitwell-0.1.23", "version": "3.5.2", + "extraneous": true, "license": "UNLICENSED", "dependencies": { "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", @@ -1933,6 +2025,19 @@ "@mojotech/json-type-validation": "^3.1.0" } }, + "common/frontend/daml.js/splitwell-0.1.24": { + "name": "@daml.js/splitwell-0.1.24", + "version": "3.5.2", + "license": "UNLICENSED", + "dependencies": { + "@daml.js/daml-prim-DA-Types-1.0.0": "file:../daml-prim-DA-Types-1.0.0", + "@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.23": "file:../splice-amulet-0.1.23", + "@daml.js/splice-wallet-payments-0.1.23": "file:../splice-wallet-payments-0.1.23", + "@mojotech/json-type-validation": "^3.1.0" + } + }, "common/frontend/daml.js/splitwell-0.1.9": { "name": "@daml.js/splitwell-0.1.9", "version": "0.0.0", @@ -2426,7 +2531,7 @@ } }, "node_modules/@daml.js/ans": { - "resolved": "common/frontend/daml.js/splice-amulet-name-service-0.1.23", + "resolved": "common/frontend/daml.js/splice-amulet-name-service-0.1.24", "link": true }, "node_modules/@daml.js/daml-prim-DA-Types-1.0.0": { @@ -2446,15 +2551,15 @@ "link": true }, "node_modules/@daml.js/splice-amulet": { - "resolved": "common/frontend/daml.js/splice-amulet-0.1.22", + "resolved": "common/frontend/daml.js/splice-amulet-0.1.23", "link": true }, - "node_modules/@daml.js/splice-amulet-0.1.22": { - "resolved": "common/frontend/daml.js/splice-amulet-0.1.22", + "node_modules/@daml.js/splice-amulet-0.1.23": { + "resolved": "common/frontend/daml.js/splice-amulet-0.1.23", "link": true }, - "node_modules/@daml.js/splice-amulet-name-service-0.1.23": { - "resolved": "common/frontend/daml.js/splice-amulet-name-service-0.1.23", + "node_modules/@daml.js/splice-amulet-name-service-0.1.24": { + "resolved": "common/frontend/daml.js/splice-amulet-name-service-0.1.24", "link": true }, "node_modules/@daml.js/splice-api-featured-app-v1-1.0.0": { @@ -2534,7 +2639,7 @@ "link": true }, "node_modules/@daml.js/splice-dso-governance": { - "resolved": "common/frontend/daml.js/splice-dso-governance-0.1.28", + "resolved": "common/frontend/daml.js/splice-dso-governance-0.1.29", "link": true }, "node_modules/@daml.js/splice-validator-lifecycle": { @@ -2542,19 +2647,19 @@ "link": true }, "node_modules/@daml.js/splice-wallet": { - "resolved": "common/frontend/daml.js/splice-wallet-0.1.23", + "resolved": "common/frontend/daml.js/splice-wallet-0.1.24", "link": true }, "node_modules/@daml.js/splice-wallet-payments": { - "resolved": "common/frontend/daml.js/splice-wallet-payments-0.1.22", + "resolved": "common/frontend/daml.js/splice-wallet-payments-0.1.23", "link": true }, - "node_modules/@daml.js/splice-wallet-payments-0.1.22": { - "resolved": "common/frontend/daml.js/splice-wallet-payments-0.1.22", + "node_modules/@daml.js/splice-wallet-payments-0.1.23": { + "resolved": "common/frontend/daml.js/splice-wallet-payments-0.1.23", "link": true }, "node_modules/@daml.js/splitwell": { - "resolved": "common/frontend/daml.js/splitwell-0.1.23", + "resolved": "common/frontend/daml.js/splitwell-0.1.24", "link": true }, "node_modules/@daml/types": { diff --git a/apps/package.json b/apps/package.json index e5bb49b600..24abb039d1 100644 --- a/apps/package.json +++ b/apps/package.json @@ -21,13 +21,13 @@ "wallet/external-openapi-ts-client" ], "dependencies": { - "@daml.js/ans": "file:common/frontend/daml.js/splice-amulet-name-service-0.1.23", - "@daml.js/splice-amulet": "file:common/frontend/daml.js/splice-amulet-0.1.22", - "@daml.js/splice-dso-governance": "file:common/frontend/daml.js/splice-dso-governance-0.1.28", + "@daml.js/ans": "file:common/frontend/daml.js/splice-amulet-name-service-0.1.24", + "@daml.js/splice-amulet": "file:common/frontend/daml.js/splice-amulet-0.1.23", + "@daml.js/splice-dso-governance": "file:common/frontend/daml.js/splice-dso-governance-0.1.29", "@daml.js/splice-validator-lifecycle": "file:common/frontend/daml.js/splice-validator-lifecycle-0.1.8", - "@daml.js/splice-wallet": "file:common/frontend/daml.js/splice-wallet-0.1.23", - "@daml.js/splice-wallet-payments": "file:common/frontend/daml.js/splice-wallet-payments-0.1.22", - "@daml.js/splitwell": "file:common/frontend/daml.js/splitwell-0.1.23", + "@daml.js/splice-wallet": "file:common/frontend/daml.js/splice-wallet-0.1.24", + "@daml.js/splice-wallet-payments": "file:common/frontend/daml.js/splice-wallet-payments-0.1.23", + "@daml.js/splitwell": "file:common/frontend/daml.js/splitwell-0.1.24", "@daml/types": "^3.5.2", "@dmsnell/diff-match-patch": "^1.1.0", "dompurify": "^3.4.2", diff --git a/apps/scan/src/test/scala/org/lfdecentralizedtrust/splice/store/db/DbScanRewardsReferenceStoreTest.scala b/apps/scan/src/test/scala/org/lfdecentralizedtrust/splice/store/db/DbScanRewardsReferenceStoreTest.scala index 0e2ad85086..0a1dbc433a 100644 --- a/apps/scan/src/test/scala/org/lfdecentralizedtrust/splice/store/db/DbScanRewardsReferenceStoreTest.scala +++ b/apps/scan/src/test/scala/org/lfdecentralizedtrust/splice/store/db/DbScanRewardsReferenceStoreTest.scala @@ -545,6 +545,7 @@ class DbScanRewardsReferenceStoreTest ), Collections.emptyMap(), true, + Optional.empty(), ) contract( identifier = templateId, diff --git a/apps/scan/src/test/scala/org/lfdecentralizedtrust/splice/store/db/ScanStoreTest.scala b/apps/scan/src/test/scala/org/lfdecentralizedtrust/splice/store/db/ScanStoreTest.scala index 3d2271e786..314af1baf0 100644 --- a/apps/scan/src/test/scala/org/lfdecentralizedtrust/splice/store/db/ScanStoreTest.scala +++ b/apps/scan/src/test/scala/org/lfdecentralizedtrust/splice/store/db/ScanStoreTest.scala @@ -1609,6 +1609,7 @@ trait AmuletTransferUtil { self: StoreTestBase => ), Collections.emptyMap(), true, + Optional.empty(), ) contract( identifier = templateId, diff --git a/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/onboarding/sv1/SV1Initializer.scala b/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/onboarding/sv1/SV1Initializer.scala index 8cc1f727d7..743b331a39 100644 --- a/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/onboarding/sv1/SV1Initializer.scala +++ b/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/onboarding/sv1/SV1Initializer.scala @@ -36,14 +36,8 @@ import com.digitalasset.canton.topology.store.{ StoredTopologyTransaction, StoredTopologyTransactions, } -import com.digitalasset.canton.topology.transaction.{ - DecentralizedNamespaceDefinition, - ParticipantPermission, - SignedTopologyTransaction, - TopologyChangeOp, - TopologyMapping, -} import com.digitalasset.canton.topology.transaction.TopologyMapping.Code +import com.digitalasset.canton.topology.transaction.* import com.digitalasset.canton.tracing.TraceContext import com.digitalasset.canton.util.MonadUtil import com.digitalasset.canton.util.ShowUtil.* @@ -61,30 +55,25 @@ import org.lfdecentralizedtrust.splice.config.{ } import org.lfdecentralizedtrust.splice.environment.* import org.lfdecentralizedtrust.splice.http.HttpClient -import org.lfdecentralizedtrust.splice.store.{AppStoreWithIngestion, DomainTimeSynchronization} import org.lfdecentralizedtrust.splice.store.AppStoreWithIngestion.SpliceLedgerConnectionPriority import org.lfdecentralizedtrust.splice.store.MultiDomainAcsStore.* +import org.lfdecentralizedtrust.splice.store.{AppStoreWithIngestion, DomainTimeSynchronization} import org.lfdecentralizedtrust.splice.sv.LocalSynchronizerNode +import org.lfdecentralizedtrust.splice.sv.automation.singlesv.SvPackageVettingTrigger import org.lfdecentralizedtrust.splice.sv.automation.{SvDsoAutomationService, SvSvAutomationService} import org.lfdecentralizedtrust.splice.sv.config.{ SvAppBackendConfig, SvCantonIdentifierConfig, SvOnboardingConfig, } -import org.lfdecentralizedtrust.splice.sv.onboarding.{ - DsoPartyHosting, - NodeInitializerUtil, - SetupUtil, - SynchronizerNodeInitializer, - SynchronizerNodeReconciler, -} import org.lfdecentralizedtrust.splice.sv.onboarding.SynchronizerNodeReconciler.SynchronizerNodeState -import org.lfdecentralizedtrust.splice.sv.automation.singlesv.SvPackageVettingTrigger +import org.lfdecentralizedtrust.splice.sv.onboarding.* import org.lfdecentralizedtrust.splice.sv.store.{SvDsoStore, SvStore, SvSvStore} import org.lfdecentralizedtrust.splice.sv.util.SvUtil -import org.lfdecentralizedtrust.splice.util.{ContractWithState, PackageVetting, TemplateJsonDecoder} import org.lfdecentralizedtrust.splice.util.SpliceUtil.{defaultAmuletConfig, defaultAnsConfig} +import org.lfdecentralizedtrust.splice.util.{ContractWithState, PackageVetting, TemplateJsonDecoder} +import java.util.Optional import java.util.concurrent.TimeUnit import scala.concurrent.{ExecutionContextExecutor, Future} import scala.jdk.CollectionConverters.* @@ -733,6 +722,8 @@ class SV1Initializer( .asJava, sv1Config.isDevNet, java.util.Optional.of(initialRound), + // TODO(tech-debt): determine bootstrap use of on-chain weights + Optional.empty(), ).createAnd.exerciseDsoBootstrap_Bootstrap, ) .withDedup( diff --git a/apps/sv/src/test/scala/org/lfdecentralizedtrust/splice/store/db/SvDsoStoreTest.scala b/apps/sv/src/test/scala/org/lfdecentralizedtrust/splice/store/db/SvDsoStoreTest.scala index aeb5808050..a6e482a32a 100644 --- a/apps/sv/src/test/scala/org/lfdecentralizedtrust/splice/store/db/SvDsoStoreTest.scala +++ b/apps/sv/src/test/scala/org/lfdecentralizedtrust/splice/store/db/SvDsoStoreTest.scala @@ -2167,6 +2167,7 @@ abstract class SvDsoStoreTest extends StoreTestBase with HasExecutionContext { ), Collections.emptyMap(), true, + Optional.empty(), ) contract( diff --git a/daml/dars.lock b/daml/dars.lock index a0d5d651ab..f4a495dc3b 100644 --- a/daml/dars.lock +++ b/daml/dars.lock @@ -14,6 +14,7 @@ splice-amulet 0.1.2 1446ffdf23326cef2de97923df96618eb615792bea36cf1431f03639448f splice-amulet 0.1.20 23f47481dab6b1ec01339d6e14494d85bb2844c25f45b26fc5c9ef4cd4942d1f splice-amulet 0.1.21 73e9ffdb6b0bc19a5f67372b118103926da11547ab9109eccae47e4e4cc35d6f splice-amulet 0.1.22 fb10433a48c24f30076a7aee03a3e314b7ab02fe9a22e2069e3af92d2b6ac88a +splice-amulet 0.1.23 640c093d59fcda30f3a4b2faea3adf7c8e30ca48ac5ab112bf6cfbb839871c08 splice-amulet 0.1.3 0d89016d5a90eb8bced48bbac99e81c57781b3a36094b8d48b8e4389851e19af splice-amulet 0.1.4 a36ef8888fb44caae13d96341ce1fabd84fc9e2e7b209bbc3caabb48b6be1668 splice-amulet 0.1.5 b4867a47abbfa2d15482f22c9c50516f0af14036287f299342f5d336391e4997 @@ -38,6 +39,7 @@ splice-amulet-name-service 0.1.20 0b6748de2e613f5bc9a108b2496b85d2d661b7344c6c55 splice-amulet-name-service 0.1.21 b342bbbd425902283c20eb5011eeab90cc9f69b4c534b8b757fd51b8ca7be589 splice-amulet-name-service 0.1.22 3921e7bd20670dce7530a84ad04b5f83860c21660bf1553908f76e95767c1950 splice-amulet-name-service 0.1.23 9cffe65feb664c9550937433067e9f969e3795c6fb38715e06a5e04fc1ae1f83 +splice-amulet-name-service 0.1.24 88dd94a321aa36cb0d8fd2514e822f803da7a5d9341c3c1ae577e43e90731f09 splice-amulet-name-service 0.1.3 beb4b85f3f0cf36dfb93fc917d3ac218ee5d41b6e70604720cb228d85e168ee0 splice-amulet-name-service 0.1.4 053c7f4c2a77312e7d465a4fa7dc8cb298754ad12c0c987a7c401bd724e65efc splice-amulet-name-service 0.1.5 6188c8b5f612278f988fc95c11e9742993ad3ac6ad0809f9af06ee9d366dc4a8 @@ -45,8 +47,8 @@ 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.27 a1cda452d49452295766414515d04d4bc411eb39961db15cf41339bedec7bf63 -splice-amulet-test 0.1.26 4badc6beb226a7a0e4216f5d58489d4a41db0bd3b53a3349dd62025268f4cbd5 +splice-amulet-name-service-test 0.1.28 6375cb1fa0f41878db7abba3f87b36d99eba8462fb169fd75cf5999535ccb5ee +splice-amulet-test 0.1.27 6f3b7eefafa090a6f2c41d0a8102ea13f792f35c9f3a266cd274e8549539dd12 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 @@ -87,6 +89,7 @@ splice-dso-governance 0.1.25 dfe102514acd41f79945b8363ca84d8243be97b2b235522ce77 splice-dso-governance 0.1.26 45099e955ce443f7895125097a62c509b9ad297091c91d6377ffe94f183c0e3e splice-dso-governance 0.1.27 014473d35514cb36583bdeca269386e46ae4e2283fe9b04beb2f53cdb408e1a2 splice-dso-governance 0.1.28 eeb461e9e430d8aaaa232f23058a28c9858d559abd083c391d7ab7e73efb4e13 +splice-dso-governance 0.1.29 db4060b37d8ba591d786f7961a4d7fb65583c195e9f848c1ca26e875f8dfce29 splice-dso-governance 0.1.3 b0ae3cc03e418790305a3c15f761fe495572de5827f8d322fb8b96996b783c13 splice-dso-governance 0.1.4 dc24fd18b4d151cd1e0ff6bfb7438bafb2f50fe076d0f16f50565e60b153a0be splice-dso-governance 0.1.5 9e3ca1d22ad495dfabf3d61acae3dc1a7718f527f02092280b58cf69edfdc84c @@ -94,15 +97,15 @@ 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.34 e94fbac6918872a6afb2535cbdd2029cba83365dc7edd81b331820ff6c5a8048 +splice-dso-governance-test 0.1.35 5aeaf0d9d6fd163f910655778558b64d87b40149ab420805a8bbe75b51c21af8 splice-test-token-v1 1.0.0 aaa0b576b5a3db49b3a4f7a4710fe6f8ae462aabbde4da89f639eb87fd62e90c -splice-test-token-v1-test 1.0.1 4eafb4e9b05999f4bcb28454fd4e691515a37ffe4b79cb118d5872aa1b82ab58 +splice-test-token-v1-test 1.0.2 6d98651845b29da33f75e9f0c8e76a36a1e46d8351e58d86d6ba4ba915566427 splice-test-token-v2 1.0.0 a38a96b6f46c14c599b2763bc4fc68911a9cada90f89c599a1401e8e3df685e1 -splice-test-token-v2-test 1.0.1 b9cb700920834987855b037d2f03a9351c81039421f3c9c1e58624f3a7ee6604 +splice-test-token-v2-test 1.0.2 fb2bcbe7bde5e94f031c09efd4a047bcb4ada662fdaf6fefa2340193c570231d splice-token-standard-utils 2.0.0 9a8f41a2b1456d357dee5677565c21b9a5aa45b80f0ed6be469694445dd4f6e1 -splice-token-standard-utils-test 1.0.1 a781fc41338d98cfba49e3f2d4413d3cc4ecf6c2fcd23a5e7ba979abcbe02be4 -splice-token-standard-v1-test 1.0.16 2f112eaf6c6b6696fd7ba5cb932f79bf5e01177b19e28b3df9be5c6b16f75126 -splice-token-standard-v2-test 1.0.1 178b13ee29b21d3889971304eefa2f87d482c73779169f72efd722b8efe6d18d +splice-token-standard-utils-test 1.0.2 3acc9ecbaec8a1e32a9b63d67fe7c5d0c3a2c7a3b66fa8719141486e1baf8608 +splice-token-standard-v1-test 1.0.17 a6895bae7bd72274c261b0ac17b8982d979cfcb1c721509442baaabcb45b2de3 +splice-token-standard-v2-test 1.0.2 d1014ce50bccca6be7d5bb7785be1400b68414c47de51760c8de851ff0e33051 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 @@ -123,7 +126,7 @@ splice-util-batched-markers 1.0.0 727c5e97457d3ff841680816eb70d55834827ef756bac8 splice-util-batched-markers 1.0.1 4d91a9b044e0e996e91ee9aac3442591ffc78f16da4ff5c6f55218ba667f6192 splice-util-batched-markers 1.0.2 ec84eb67802403d91892aad61aee2e4eb34fb4e05e9158b3f677537569bcbc09 splice-util-batched-markers 1.0.3 74ee4c91b80c80b6860005ce627bdaed8f7fe6bdf3e60c9dbf3f48402d55126a -splice-util-batched-markers-test 1.0.9 bbb2e18ad1b75f075f7edf70def9faf69f1cc18d707e65ab9b5f14283fc77aa5 +splice-util-batched-markers-test 1.0.10 6d21723020ff07d7f4f12a8bb940c9e3f56a536f4af034582561abeece87c8b6 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 @@ -131,11 +134,11 @@ splice-util-featured-app-proxies 1.2.1 06bab917848ef275317c2539b75c23b94e03ceb55 splice-util-featured-app-proxies 1.2.2 2889c094cf9678b2b666221934ea56ab169a31b257450845bd53217a8cdfe44f splice-util-featured-app-proxies 1.2.3 677ed3473e7d412c06520843790ff27e21aaa7c292208909579592351c8eb55d splice-util-featured-app-proxies 1.2.4 88bcea6e9990bb2edb5301c042caa25c0594742665866f049f7bd67342d0865d -splice-util-featured-app-proxies-test 1.0.15 97e71bda26ffd878a4cac2a237b931ef59da3b3b60d82e1fe6cb248492fc290e +splice-util-featured-app-proxies-test 1.0.16 36a31a60dc48d36e36036d29cceff8005da4451e6a82f5f766148e052d11783c splice-util-token-standard-wallet 1.0.0 1da198cb7968fa478cfa12aba9fdf128a63a8af6ab284ea6be238cf92a3733ac splice-util-token-standard-wallet 1.0.1 182892381e4245c39d3126082ec0b41a089edb61e63af518f61eae1f5c9e135a splice-util-token-standard-wallet 1.1.0 1215d3ee8f3cb428d062d8708c2deca33c91ff99f5edefa70616646e57f93012 -splice-util-token-standard-wallet-test 1.0.10 873afaaee4cf3358d23c328e134474e19df11fffcc3fd1a4b837b64a7ed0bb6b +splice-util-token-standard-wallet-test 1.0.11 9ab9434889d9f076d3428d6aca8cf56e7d503ed18faaaeddc094fb7de58cee39 splice-validator-lifecycle 0.1.0 cef96fac957362f1fc097120bd13686cac7f84fbc8053afa994a1f9214d9570c splice-validator-lifecycle 0.1.1 1ddf05c96002914593c929848b786f34c753fb0be07717d1786be177a564aada splice-validator-lifecycle 0.1.2 57e2f15f9755db1f00e51c52c319294264a21ad71c6bc1e7cd70db4b164c0aaa @@ -163,6 +166,7 @@ splice-wallet 0.1.20 e485c2eb59cca556e0e2ecfaaef45346dd0ba64f9976a3957938d814f84 splice-wallet 0.1.21 f799a58fa53dfe48bae52bd5dbcc2b578a7d4dfee3ae3f4eb7635fe9a8cc67d3 splice-wallet 0.1.22 a78daeeb1a4a2405828b29f8c04814725dbd97ee5a60bd02e839f32518640afa splice-wallet 0.1.23 727c0fb9711d59b506fbb3cff2342e55eb583bb88682a946220525c304feca4a +splice-wallet 0.1.24 6949761b7b6c0c7477495e9da3e5b0cf66375812c42825139951703d74d5d2ee splice-wallet 0.1.3 2c35bb4f5084ea66db59717d21750bfd64c43147ef5fd5166615092d592a6917 splice-wallet 0.1.4 141dad2d33b6410b8e1c35a0c4f8f76cb691e4d9a4410ce89f33f373855317e1 splice-wallet 0.1.5 614b525a50c624062d851ce7df5bdb90ddfa0d6871c486cb6e2c7b694bfbce59 @@ -186,6 +190,7 @@ splice-wallet-payments 0.1.2 775f5eb9c0249509adda5eb3ea4ee31bb953601168c18880df6 splice-wallet-payments 0.1.20 340afccb702179069fc81044890c435c5c8565df061b2efbfccf618c33a04e37 splice-wallet-payments 0.1.21 dc1a2f4ff4774e00c388f1bfce48a23c3539b8ea0d0ebf99b8df840a058ef873 splice-wallet-payments 0.1.22 866ea53bea2afc099c560ad4c386a1736859841b17c422836f133d605ee51616 +splice-wallet-payments 0.1.23 9d37abda212ef5947bb27ea7ff9201158774c3b4e9db7e77231bd4467fed6c7f splice-wallet-payments 0.1.3 b953b3729c81a55e598a364be7d0c0574750df3de12a7a1b53a300f217cb5c5c splice-wallet-payments 0.1.4 12177f54873c1094ea169874ad0d7838383fd137f302d16356e93f28dfbc0fcc splice-wallet-payments 0.1.5 2177b7a579fe6d3d510c7bcda99d39ece104ae24cfd1b78ac5616990d2d6c675 @@ -193,7 +198,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.27 b697558851c8f11e345945c67c1f8385f879bc3ece4ed840c8c386fd3e4f7b55 +splice-wallet-test 0.1.28 911fd4ab8cadd3a355546c0d034cd5f55fb91e8312b82731dd7a3e52479ab65f splitwell 0.1.0 075c76de553ab88383a7c69de134afa82aacfdf8ea8fcfe8852c4b199c3b2669 splitwell 0.1.1 ccb1a0215053062202052e1a052f9214da3fdae5253a6d43e2e155ff4f57fe75 splitwell 0.1.10 d42676a366f7ca7a2409974dd3054aa4d83ab29baa3b2086ad021407b0a1a295 @@ -211,6 +216,7 @@ splitwell 0.1.20 af686139dda12540ab05a292987f5fa2edd0c05af62d9651384d005e9a91043 splitwell 0.1.21 f646cf275b4c5139711469c92fbe702c498614edf200d8085305b2e43e28936a splitwell 0.1.22 b97352bf1b70f6be481d7cd2b4ce22396008bbf611b488243a694f30437ed3a9 splitwell 0.1.23 68d3911f72347dc787c336f73af3c036004c982f591cb55e7b4f2fb45f5e50e6 +splitwell 0.1.24 083b7568b93eaa9e1d6664c2e1484de110d74a23477fb2c0710d49a6c9c66330 splitwell 0.1.3 7cde068cde689584f86a2499689d5cb165264d96496721e24ac6fb909f770a58 splitwell 0.1.4 85557b86cd4f330f093915db1ea26eac5092de6b5ddae0690146f6059c89419b splitwell 0.1.5 a68e78774a7be655f5744c8ae0ac8b46d55ef6d1e7661bc27b9296154d56ac74 @@ -218,4 +224,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.27 b606a7cc393caae66e79ea10f40611d8629013c955118b54c0c85e11f2d87c6a \ No newline at end of file +splitwell-test 0.1.28 7994825c4caa08a721fa139b14d1445204f9c3552e15eb10791a7566e6477eb4 \ No newline at end of file diff --git a/daml/dars/splice-amulet-0.1.23.dar b/daml/dars/splice-amulet-0.1.23.dar new file mode 100644 index 0000000000..9fb6ea247b Binary files /dev/null and b/daml/dars/splice-amulet-0.1.23.dar differ diff --git a/daml/dars/splice-amulet-name-service-0.1.24.dar b/daml/dars/splice-amulet-name-service-0.1.24.dar new file mode 100644 index 0000000000..4c0f0326dd Binary files /dev/null and b/daml/dars/splice-amulet-name-service-0.1.24.dar differ diff --git a/daml/dars/splice-dso-governance-0.1.29.dar b/daml/dars/splice-dso-governance-0.1.29.dar new file mode 100644 index 0000000000..b45035e898 Binary files /dev/null and b/daml/dars/splice-dso-governance-0.1.29.dar differ diff --git a/daml/dars/splice-wallet-0.1.24.dar b/daml/dars/splice-wallet-0.1.24.dar new file mode 100644 index 0000000000..559c7bf58a Binary files /dev/null and b/daml/dars/splice-wallet-0.1.24.dar differ diff --git a/daml/dars/splice-wallet-payments-0.1.23.dar b/daml/dars/splice-wallet-payments-0.1.23.dar new file mode 100644 index 0000000000..ade2d2c29e Binary files /dev/null and b/daml/dars/splice-wallet-payments-0.1.23.dar differ diff --git a/daml/dars/splitwell-0.1.24.dar b/daml/dars/splitwell-0.1.24.dar new file mode 100644 index 0000000000..3d615d75ac Binary files /dev/null and b/daml/dars/splitwell-0.1.24.dar differ diff --git a/daml/splice-amulet-name-service-test/daml.yaml b/daml/splice-amulet-name-service-test/daml.yaml index b92a89321d..769dc1acb7 100644 --- a/daml/splice-amulet-name-service-test/daml.yaml +++ b/daml/splice-amulet-name-service-test/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-amulet-name-service-test source: daml -version: 0.1.27 +version: 0.1.28 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-amulet-name-service/daml.yaml b/daml/splice-amulet-name-service/daml.yaml index 469fb44457..db2dab79aa 100644 --- a/daml/splice-amulet-name-service/daml.yaml +++ b/daml/splice-amulet-name-service/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-amulet-name-service source: daml -version: 0.1.23 +version: 0.1.24 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-amulet-test/daml.yaml b/daml/splice-amulet-test/daml.yaml index 60b847b047..73dcada18b 100644 --- a/daml/splice-amulet-test/daml.yaml +++ b/daml/splice-amulet-test/daml.yaml @@ -6,7 +6,7 @@ sdk-version: 3.5.2 name: splice-amulet-test source: daml -version: 0.1.26 +version: 0.1.27 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-amulet/daml.yaml b/daml/splice-amulet/daml.yaml index 1fa48a1ad1..daac00a7e3 100644 --- a/daml/splice-amulet/daml.yaml +++ b/daml/splice-amulet/daml.yaml @@ -6,7 +6,7 @@ sdk-version: 3.5.2 name: splice-amulet source: daml -version: 0.1.22 +version: 0.1.23 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-amulet/daml/Splice/Amulet/SvRightOwner.daml b/daml/splice-amulet/daml/Splice/Amulet/SvRightOwner.daml new file mode 100644 index 0000000000..2e0bc083e5 --- /dev/null +++ b/daml/splice-amulet/daml/Splice/Amulet/SvRightOwner.daml @@ -0,0 +1,81 @@ +-- Copyright (c) 2024 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +-- SPDX-License-Identifier: Apache-2.0 + +module Splice.Amulet.SvRightOwner where + +import Prelude hiding (all, sum) + +import DA.Foldable (all, sum) +import DA.Map (Map) +import qualified DA.Map as Map +import Splice.Types (ForDso(..)) +import Splice.Util (HasCheckedFetch(..), Patchable(..), patchScalar) + +-- | An SV right owner, i.e., an entity that owns SV rights and thereby earns SV rewards. +-- +-- SV right owners are hosted by an SV node operator, which mints their rewards on their +-- behalf. Multiple SV right owners can be hosted by the same SV node operator, and an SV +-- node operator is not required to be an SV right owner itself. +template SvRightOwner + with + dso : Party + name : Text -- ^ Human-readable name; unique among all SV right owners. + info : SvRightOwnerInfo + where + signatory dso + ensure validSvRightOwnerInfo info + +instance HasCheckedFetch SvRightOwner ForDso where + contractGroupId SvRightOwner{dso} = ForDso with dso + +-- | Information about a super validator right owner. +data SvRightOwnerInfo = SvRightOwnerInfo + with + rightOwnerParty : Party + rewardWeight : Int + -- ^ The weight of an SV Right Owner for reward minting + rewardNodeOperatorName : Text + -- ^ Name of the SV node operator through which rewards are minted. + beneficiaries : Map Party BeneficiaryInfo + -- ^ List of beneficiaries and their percentages for reward distribution. Must not include the right owner's party. Remainder goes to right owner. + -- At most 20 beneficiaries are allowed to bound the number of coupons minted per round. + deriving (Eq, Show) + +instance Patchable SvRightOwnerInfo where + patch new base current = SvRightOwnerInfo + with + rightOwnerParty = patch new.rightOwnerParty base.rightOwnerParty current.rightOwnerParty + rewardWeight = patch new.rewardWeight base.rewardWeight current.rewardWeight + rewardNodeOperatorName = patch new.rewardNodeOperatorName base.rewardNodeOperatorName current.rewardNodeOperatorName + beneficiaries = patch new.beneficiaries base.beneficiaries current.beneficiaries + +-- | Information about a beneficiary. +data BeneficiaryInfo = BeneficiaryInfo + with + rewardRatio : Decimal + -- ^ The proportion of rewards of the SV Right Owner that are shared with this beneficiary. It should be >0.0 and <=1.0 + deriving (Eq, Show) + +instance Patchable BeneficiaryInfo where + patch new base current = BeneficiaryInfo + with + rewardRatio = patchScalar new.rewardRatio base.rewardRatio current.rewardRatio + +validSvRightOwnerInfo : SvRightOwnerInfo -> Bool +validSvRightOwnerInfo SvRightOwnerInfo{..} = and + [ rewardWeight >= 0 + , all ((> 0.0) . rewardRatio) beneficiaries + , sum (fmap (.rewardRatio) beneficiaries) <= 1.0 + , not $ Map.member rightOwnerParty beneficiaries + , Map.size beneficiaries <= 20 + ] + +-- | The absolute reward weight for each party that receives rewards in the context of this SV Right Owner. +svRewardCouponWeights : SvRightOwnerInfo -> Map Party Int +svRewardCouponWeights SvRightOwnerInfo{..} = + if remainingWeight > 0 + then Map.insert rightOwnerParty remainingWeight beneficiaryWeights + else beneficiaryWeights + where + remainingWeight = rewardWeight - sum beneficiaryWeights + beneficiaryWeights = fmap (\BeneficiaryInfo{rewardRatio} -> floor (intToDecimal rewardWeight * rewardRatio)) beneficiaries diff --git a/daml/splice-dso-governance-test/daml.yaml b/daml/splice-dso-governance-test/daml.yaml index f36097b907..697fef3ab8 100644 --- a/daml/splice-dso-governance-test/daml.yaml +++ b/daml/splice-dso-governance-test/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-dso-governance-test source: daml -version: 0.1.34 +version: 0.1.35 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-dso-governance-test/daml/Splice/Scripts/DsoTestUtils.daml b/daml/splice-dso-governance-test/daml/Splice/Scripts/DsoTestUtils.daml index fefc74eef1..0ddb03f191 100644 --- a/daml/splice-dso-governance-test/daml/Splice/Scripts/DsoTestUtils.daml +++ b/daml/splice-dso-governance-test/daml/Splice/Scripts/DsoTestUtils.daml @@ -12,6 +12,7 @@ import qualified DA.Map as Map import DA.Optional (fromOptional) import qualified DA.Set as Set import qualified DA.Text as T +import qualified DA.TextMap as TextMap import Daml.Script import DA.Time @@ -25,7 +26,7 @@ import Splice.ValidatorLicense import Splice.Scripts.Util import Splice.Testing.Registries.AmuletRegistry.Parameters -import Splice.Testing.Registries.AmuletRegistry (advanceToNextRoundChange) +import Splice.Testing.Registries.AmuletRegistry (advanceToNextRoundChange, getActiveOpenRoundsSorted) import Splice.CometBft import Splice.DsoRules @@ -40,27 +41,30 @@ import Splice.Util bpsMultiplier : Int bpsMultiplier = 10000 +-- TODO(tech-debt): default `onLedgerSvRightOwners` to True in the init helpers below. initMainNet : Script (AmuletApp, Party, (Party, Party, Party, Party)) -initMainNet = initDecentralizedSynchronizer False None +initMainNet = initDecentralizedSynchronizer False None False initMainNetWithAmuletPrice : Decimal -> Script (AmuletApp, Party, (Party, Party, Party, Party)) -initMainNetWithAmuletPrice amuletPrice = initDecentralizedSynchronizerWithAmuletPrice False 0 amuletPrice None +initMainNetWithAmuletPrice amuletPrice = initDecentralizedSynchronizerWithAmuletPrice False 0 amuletPrice None False initDevNet : Script (AmuletApp, Party, (Party, Party, Party, Party)) -initDevNet = initDecentralizedSynchronizer True None +initDevNet = initDecentralizedSynchronizer True None False initDevNetWithAmuletConfig : AmuletConfig USD -> Script (AmuletApp, Party, (Party, Party, Party, Party)) -initDevNetWithAmuletConfig amuletConfig = initDecentralizedSynchronizer True (Some amuletConfig) +initDevNetWithAmuletConfig amuletConfig = initDecentralizedSynchronizer True (Some amuletConfig) False -initDecentralizedSynchronizer : Bool -> Optional (AmuletConfig USD) -> Script (AmuletApp, Party, (Party, Party, Party, Party)) -initDecentralizedSynchronizer isDevNet optAmuletConfig = initDecentralizedSynchronizerWithAmuletPrice isDevNet 0 1.0 optAmuletConfig +initDecentralizedSynchronizer : Bool -> Optional (AmuletConfig USD) -> Bool -> Script (AmuletApp, Party, (Party, Party, Party, Party)) +initDecentralizedSynchronizer isDevNet optAmuletConfig onLedgerSvRightOwners = + initDecentralizedSynchronizerWithAmuletPrice isDevNet 0 1.0 optAmuletConfig onLedgerSvRightOwners -initDecentralizedSynchronizerWithNonZeroRound : Bool -> Int -> Script (AmuletApp, Party, (Party, Party, Party, Party)) -initDecentralizedSynchronizerWithNonZeroRound isDevNet initialRound = initDecentralizedSynchronizerWithAmuletPrice isDevNet initialRound 1.0 None +initDecentralizedSynchronizerWithNonZeroRound : Bool -> Int -> Bool -> Script (AmuletApp, Party, (Party, Party, Party, Party)) +initDecentralizedSynchronizerWithNonZeroRound isDevNet initialRound onLedgerSvRightOwners = + initDecentralizedSynchronizerWithAmuletPrice isDevNet initialRound 1.0 None onLedgerSvRightOwners -initDecentralizedSynchronizerWithAmuletPrice : Bool -> Int -> Decimal -> Optional (AmuletConfig USD) -> Script (AmuletApp, Party, (Party, Party, Party, Party)) -initDecentralizedSynchronizerWithAmuletPrice isDevNet initialRound amuletPrice optAmuletConfig = do +initDecentralizedSynchronizerWithAmuletPrice : Bool -> Int -> Decimal -> Optional (AmuletConfig USD) -> Bool -> Script (AmuletApp, Party, (Party, Party, Party, Party)) +initDecentralizedSynchronizerWithAmuletPrice isDevNet initialRound amuletPrice optAmuletConfig onLedgerSvRightOwners = do [sv1, sv2, sv3, sv4] <- forA ["sv1", "sv2", "sv3", "sv4"] allocateParty dso <- allocateParty "dso-party" @@ -129,6 +133,7 @@ initDecentralizedSynchronizerWithAmuletPrice isDevNet initialRound amuletPrice o initialTrafficState = Map.empty isDevNet initialRound = Some initialRound + sv1RightOwnerName = if onLedgerSvRightOwners then Some "sv1" else None DsoBootstrap_Bootstrap dsoUserId <- validateUserId "dso-user" @@ -156,6 +161,25 @@ initDecentralizedSynchronizerWithAmuletPrice isDevNet initialRound amuletPrice o pure (app, dso, (sv1, sv2, sv3, sv4)) +-- | The reward state of the SV node operator with the given name. +getSvRewardStateCid : AmuletApp -> Text -> Script (ContractId SvRewardState) +getSvRewardStateCid app svName = do + [(rewardStateCid, _)] <- queryFilter @SvRewardState app.dso (\state -> state.svName == svName) + pure rewardStateCid + +-- | The reward states of all SV node operators, keyed by the operator's name. +getSvOperatorRewardStateCids : AmuletApp -> Script (TextMap.TextMap (ContractId SvRewardState)) +getSvOperatorRewardStateCids app = do + [(_, rules)] <- query @DsoRules app.dso + fmap TextMap.fromList $ forA (Map.values rules.svs) $ \info -> do + rewardStateCid <- getSvRewardStateCid app info.name + pure (info.name, rewardStateCid) + +getOpenMiningRoundTriple : AmuletApp -> Script OpenMiningRoundTriple +getOpenMiningRoundTriple app = do + [(round0Cid, _), (round1Cid, _), (round2Cid, _)] <- getActiveOpenRoundsSorted app.dso + pure OpenMiningRoundTriple with round0Cid; round1Cid; round2Cid + getSvInfoByParty : AmuletApp -> Party -> Script SvInfo getSvInfoByParty app sv = do [(_, rules)] <- query @DsoRules app.dso diff --git a/daml/splice-dso-governance-test/daml/Splice/Scripts/TestOnboarding.daml b/daml/splice-dso-governance-test/daml/Splice/Scripts/TestOnboarding.daml index 9f95c56446..f6bc686218 100644 --- a/daml/splice-dso-governance-test/daml/Splice/Scripts/TestOnboarding.daml +++ b/daml/splice-dso-governance-test/daml/Splice/Scripts/TestOnboarding.daml @@ -87,7 +87,7 @@ testOnboardValidator = do now <- getTime -- after advancing time we can report active again, report active also ensures sponsor = validator - validatorLicenseCid <- submit dso $ + validatorLicenseCid <- submit dso $ archiveCmd validatorLicenseCid *> createCmd validatorLicense with @@ -548,7 +548,7 @@ test_MergeValidatorLicense = do testBootstrapDevNetWithNonZeroRound : Script () testBootstrapDevNetWithNonZeroRound = do - (app, _, _) <- initDecentralizedSynchronizerWithNonZeroRound True 34 + (app, _, _) <- initDecentralizedSynchronizerWithNonZeroRound True 34 False [(_, earliestRound), (_, middleRound), (_, latestRound)] <- getActiveOpenRoundsSorted app.dso earliestRound.round === Round 34 middleRound.round === Round 35 @@ -557,7 +557,7 @@ testBootstrapDevNetWithNonZeroRound = do testBootstrapMainNetWithNonZeroRound : Script () testBootstrapMainNetWithNonZeroRound = do - (app, _, _) <- initDecentralizedSynchronizerWithNonZeroRound False 34 + (app, _, _) <- initDecentralizedSynchronizerWithNonZeroRound False 34 False [(_, earliestRound), (_, middleRound), (_, latestRound)] <- getActiveOpenRoundsSorted app.dso earliestRound.round === Round 34 middleRound.round === Round 35 diff --git a/daml/splice-dso-governance-test/daml/Splice/Scripts/TestSvRewards.daml b/daml/splice-dso-governance-test/daml/Splice/Scripts/TestSvRewards.daml index 602fbb0eee..a77c9b47e1 100644 --- a/daml/splice-dso-governance-test/daml/Splice/Scripts/TestSvRewards.daml +++ b/daml/splice-dso-governance-test/daml/Splice/Scripts/TestSvRewards.daml @@ -27,7 +27,7 @@ test_SvRewards_With_InitialRound_In_FirstIssuanceCurve = do let initialRound = 0 let expectedIssuancePerSvRewardCoupon = 4.6832923545 - (app, dso, (sv1, sv2, sv3, sv4)) <- initDecentralizedSynchronizerWithNonZeroRound False initialRound + (app, dso, (sv1, sv2, sv3, sv4)) <- initDecentralizedSynchronizerWithNonZeroRound False initialRound False -- extra party to represent beneficiary extraBeneficiary <- allocateParty "beneficiary" @@ -172,7 +172,7 @@ test_SvRewards_With_InitialRound_In_SecondIssuanceCurve = do let initialRound = 50000 let expectedIssuancePerSvRewardCoupon = 1.4049877064 - (app, dso, (sv1, sv2, sv3, sv4)) <- initDecentralizedSynchronizerWithNonZeroRound False initialRound + (app, dso, (sv1, sv2, sv3, sv4)) <- initDecentralizedSynchronizerWithNonZeroRound False initialRound False -- extra party to represent beneficiary extraBeneficiary <- allocateParty "beneficiary" diff --git a/daml/splice-dso-governance-test/daml/Splice/Scripts/TestSvRightOwners.daml b/daml/splice-dso-governance-test/daml/Splice/Scripts/TestSvRightOwners.daml new file mode 100644 index 0000000000..014df7a251 --- /dev/null +++ b/daml/splice-dso-governance-test/daml/Splice/Scripts/TestSvRightOwners.daml @@ -0,0 +1,90 @@ +-- Copyright (c) 2024 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. +-- SPDX-License-Identifier: Apache-2.0 + +module Splice.Scripts.TestSvRightOwners where + +import DA.Assert +import qualified DA.Map as Map +import qualified DA.Set as Set +import qualified DA.TextMap as TextMap +import DA.Time + +import Daml.Script + +import Splice.Amulet.SvRightOwner +import Splice.DsoRules +import Splice.Scripts.DsoTestUtils +import Splice.Scripts.Util + +-- | Migrate the SV node operators of the test network to SV right owners of the same name. +test_MigrateToOnLedgerSvRightOwners : Script () +test_MigrateToOnLedgerSvRightOwners = do + (app, dso, (sv1, sv2, sv3, sv4)) <- initMainNet + svRightOwners <- svRightOwnerInfosFromOperators app + + initiateAndAcceptVote app [sv1, sv2, sv3, sv4] $ ARC_DsoRules with + dsoAction = SRARC_MigrateToOnLedgerSvRightOwners DsoRules_MigrateToOnLedgerSvRightOwners with + svRightOwners + + [(instructionCid, _)] <- query @MigrateToOnLedgerSvRightOwnersInstruction dso + openMiningRoundTriple <- getOpenMiningRoundTriple app + svOperatorRewardStateCids <- getSvOperatorRewardStateCids app + svSubmits app sv1 $ \dsoRulesCid -> + exerciseCmd dsoRulesCid DsoRules_ExecuteMigrateToOnLedgerSvRightOwnersInstruction with + instructionCid + openMiningRoundTriple + svOperatorRewardStateCids + svOperator = sv1 + + [(_, dsoRules)] <- query @DsoRules dso + [info.svRewardWeight | info <- Map.values dsoRules.svs] === [0, 0, 0, 0] + dsoRules.svRightOwners === Some (Set.fromList ["sv1", "sv2", "sv3", "sv4"]) + + owners <- query @SvRightOwner dso + TextMap.fromList [(owner.name, owner.info) | (_, owner) <- owners] === svRightOwners + +test_ExpireMigrateToOnLedgerSvRightOwnersInstruction : Script () +test_ExpireMigrateToOnLedgerSvRightOwnersInstruction = do + (app, dso, (sv1, sv2, sv3, sv4)) <- initMainNet + svRightOwners <- svRightOwnerInfosFromOperators app + + initiateAndAcceptVote app [sv1, sv2, sv3, sv4] $ ARC_DsoRules with + dsoAction = SRARC_MigrateToOnLedgerSvRightOwners DsoRules_MigrateToOnLedgerSvRightOwners with + svRightOwners + + [(instructionCid, _)] <- query @MigrateToOnLedgerSvRightOwnersInstruction dso + passTime (hours 2) + + openMiningRoundTriple <- getOpenMiningRoundTriple app + svOperatorRewardStateCids <- getSvOperatorRewardStateCids app + [(dsoRulesCid, _)] <- query @DsoRules dso + submitMustFail (actAs sv1 <> readAs dso) $ + exerciseCmd dsoRulesCid DsoRules_ExecuteMigrateToOnLedgerSvRightOwnersInstruction with + instructionCid + openMiningRoundTriple + svOperatorRewardStateCids + svOperator = sv1 + + svSubmits app sv1 $ \dsoRulesCid -> + exerciseCmd dsoRulesCid DsoRules_ExpireMigrateToOnLedgerSvRightOwnersInstruction with + instructionCid + svOperator = sv1 + + [] <- query @MigrateToOnLedgerSvRightOwnersInstruction dso + pure () + +mkSvRightOwnerInfo : Party -> Int -> Text -> SvRightOwnerInfo +mkSvRightOwnerInfo rightOwner weight operatorName = SvRightOwnerInfo with + rightOwnerParty = rightOwner + rewardWeight = weight + rewardNodeOperatorName = operatorName + beneficiaries = Map.empty + +-- | The SV node operators as SV right owners of their own name, preserving the total weight. +svRightOwnerInfosFromOperators : AmuletApp -> Script (TextMap.TextMap SvRightOwnerInfo) +svRightOwnerInfosFromOperators app = do + [(_, dsoRules)] <- query @DsoRules app.dso + pure $ TextMap.fromList + [ (info.name, mkSvRightOwnerInfo party info.svRewardWeight info.name) + | (party, info) <- Map.toList dsoRules.svs + ] diff --git a/daml/splice-dso-governance/daml.yaml b/daml/splice-dso-governance/daml.yaml index 753e6942c7..6faa2a9a22 100644 --- a/daml/splice-dso-governance/daml.yaml +++ b/daml/splice-dso-governance/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-dso-governance source: daml -version: 0.1.28 +version: 0.1.29 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-dso-governance/daml/Splice/DSO/SvState.daml b/daml/splice-dso-governance/daml/Splice/DSO/SvState.daml index 72239fd1f3..660c995578 100644 --- a/daml/splice-dso-governance/daml/Splice/DSO/SvState.daml +++ b/daml/splice-dso-governance/daml/Splice/DSO/SvState.daml @@ -6,6 +6,7 @@ module Splice.DSO.SvState where import Splice.Types +import Splice.Amulet.SvRightOwner import Splice.DSO.DecentralizedSynchronizer import Splice.Util @@ -18,6 +19,9 @@ data ForSv = ForSv with svName : Text deriving (Eq, Show) +instance HasCheckedFetch SvRightOwner ForSv where + contractGroupId SvRightOwner{..} = ForSv with dso; svName = name + data ForSvNode = ForSvNode with dso : Party sv : Party @@ -44,6 +48,8 @@ data RewardState = RewardState with template SvRewardState with dso : Party svName : Text + -- ^ Name of the SV right owner collecting the rewards; the name of the SV node operator + -- before the migration to on-ledger SV right owners. state : RewardState where signatory dso diff --git a/daml/splice-dso-governance/daml/Splice/DsoBootstrap.daml b/daml/splice-dso-governance/daml/Splice/DsoBootstrap.daml index c3dedfbc78..2457c78208 100644 --- a/daml/splice-dso-governance/daml/Splice/DsoBootstrap.daml +++ b/daml/splice-dso-governance/daml/Splice/DsoBootstrap.daml @@ -4,9 +4,11 @@ module Splice.DsoBootstrap where import qualified DA.Map as Map +import DA.Optional (fromOptional, isSome) +import qualified DA.Set as Set import DA.Time -import DA.Optional (fromOptional) +import Splice.Amulet.SvRightOwner import Splice.AmuletConfig import Splice.AmuletRules import Splice.ExternalPartyAmuletRules @@ -35,6 +37,7 @@ template DsoBootstrap with initialTrafficState: Map.Map Text TrafficState isDevNet : Bool initialRound : Optional Int + sv1RightOwnerName : Optional Text where signatory dso observer sv1Party @@ -60,12 +63,14 @@ template DsoBootstrap with amuletPrice initialRound -- create the DSO rules with the SV1 as the sole sv - let sv1SvInfo = SvInfo with + let + joinedAsOfRound = fromOptional (Round 0) result.initialRound + sv1SvInfo = SvInfo with name = sv1Name joinedAsOfRound = fromOptional (Round 0) result.initialRound - svRewardWeight = sv1RewardWeight + svRewardWeight = if isSome sv1RightOwnerName then 0 else sv1RewardWeight participantId = sv1ParticipantId - let dsoRules = DsoRules with + dsoRules = DsoRules with dso epoch = 0 svs = Map.fromList [(sv1Party, sv1SvInfo)] @@ -74,14 +79,19 @@ template DsoBootstrap with config initialTrafficState isDevNet + svRightOwners = Set.singleton <$> sv1RightOwnerName create dsoRules -- create initial per-sv and per-operator contracts for sv1 - let addSvChoiceArgs = DsoRules_AddSv with - newSvParty = sv1Party - newSvName = sv1Name - newSvParticipantId = sv1ParticipantId - joinedAsOfRound = fromOptional (Round 0) result.initialRound - newSvRewardWeight = sv1RewardWeight - createPerSvContracts dsoRules addSvChoiceArgs + case sv1RightOwnerName of + Some rightOwnerName -> do + let info = SvRightOwnerInfo with + rightOwnerParty = sv1Party + rewardWeight = sv1RewardWeight + rewardNodeOperatorName = sv1Name + beneficiaries = Map.empty + create SvRightOwner with dso; name = rightOwnerName; info + createSvRewardState dso rightOwnerName joinedAsOfRound + None -> + createSvRewardState dso sv1Name joinedAsOfRound createPerSvPartyContracts dso sv1Party sv1Name sv1SynchronizerNodes (Some amuletPrice) (getVoteCooldownTime config) return DsoBootstrap_BootstrapResult diff --git a/daml/splice-dso-governance/daml/Splice/DsoRules.daml b/daml/splice-dso-governance/daml/Splice/DsoRules.daml index ff4829a8cd..89de0d1346 100644 --- a/daml/splice-dso-governance/daml/Splice/DsoRules.daml +++ b/daml/splice-dso-governance/daml/Splice/DsoRules.daml @@ -4,20 +4,25 @@ {-# LANGUAGE MultiWayIf #-} module Splice.DsoRules where -import Prelude hiding (all) +import Prelude hiding (all, sum) import DA.Action (void, unless) import DA.Assert import DA.Either (partitionEithers) -import DA.Foldable (forA_, all) +import DA.Foldable (forA_, all, sum) import DA.List as List hiding (all) -import DA.Optional (isNone, fromSome, fromOptional, isSome) +import DA.Map (Map) import qualified DA.Map as Map +import DA.Optional (isNone, fromSome, fromOptional, isSome) +import DA.Set (Set) import qualified DA.Set as Set import qualified DA.Text as T +import DA.TextMap (TextMap) +import qualified DA.TextMap as TextMap import DA.Time import Splice.Amulet import Splice.Amulet.RewardAccountingV2 qualified as RewardAccountingV2 +import Splice.Amulet.SvRightOwner import Splice.AmuletRules import Splice.ExternalPartyAmuletRules import Splice.TokenStandard.Utils qualified as TSU @@ -110,7 +115,7 @@ data DsoRules_ActionRequiringConfirmation | SRARC_SetConfig DsoRules_SetConfig -- ^ Voted action to change the `DsoRulesConfig`. Not idempotent. | SRARC_UpdateSvRewardWeight DsoRules_UpdateSvRewardWeight - -- ^ Voted action to update the reward weight of an SV. + -- ^ Voted action to update the reward weight of an SV node operator. | SRARC_CreateExternalPartyAmuletRules DsoRules_CreateExternalPartyAmuletRules -- ^ Create ExternalPartyAmuletRules contract if it has not been created as part of network bootstrapping. | SRARC_CreateTransferCommandCounter DsoRules_CreateTransferCommandCounter @@ -121,6 +126,15 @@ data DsoRules_ActionRequiringConfirmation -- ^ Create BootstrapExternalPartyConfigStateInstruction | SRARC_UpdateFeaturedAppRight DsoRules_UpdateFeaturedAppRight -- ^ Update a specific featured app right. + | SRARC_MigrateToOnLedgerSvRightOwners DsoRules_MigrateToOnLedgerSvRightOwners + -- ^ One-time voted action to move the SV right owners from the off-ledger configuration + -- of the SV node operators onto the ledger. + | SRARC_AddSvRightOwner DsoRules_AddSvRightOwner + -- ^ Voted action to add an SV right owner. + | SRARC_RemoveSvRightOwner DsoRules_RemoveSvRightOwner + -- ^ Voted action to remove an SV right owner. + | SRARC_UpdateSvRightOwnerInfo DsoRules_UpdateSvRightOwnerInfo + -- ^ Voted action to update the info of an SV right owner. deriving (Eq, Show) data AnsEntryContext_ActionRequiringConfirmation @@ -134,7 +148,11 @@ data AnsEntryContext_ActionRequiringConfirmation data SvInfo = SvInfo with name : Text -- ^ Human-readable name; must be unique. joinedAsOfRound : Round -- ^ Round in which the SV joined - svRewardWeight : Int -- ^ Weight of the SV in the SV reward distribution. + svRewardWeight : Int + -- ^ Weight of the SV in the SV reward distribution. + -- Deprecated in favor of `SvRightOwnerInfo.rewardWeight`: this is required to be zero + -- once SV right owners are tracked on-ledger, as SV node operators do not earn rewards + -- in their own right. participantId : Text -- ^ Participant ID of the SV, stored here as PartyToParticipant mappings are tracked via state on the DsoRules + SvOnboardingConfirmed contracts. deriving (Eq, Show) @@ -214,6 +232,44 @@ data DsoRules_RevokeFeaturedAppRightResult = DsoRules_RevokeFeaturedAppRightResu data DsoRules_UpdateFeaturedAppRightResult = DsoRules_UpdateFeaturedAppRightResult with result : FeaturedAppRight_UpdateResult +data DsoRules_MigrateToOnLedgerSvRightOwnersResult = DsoRules_MigrateToOnLedgerSvRightOwnersResult with + instruction : ContractId MigrateToOnLedgerSvRightOwnersInstruction + +data DsoRules_ExecuteMigrateToOnLedgerSvRightOwnersInstructionResult = DsoRules_ExecuteMigrateToOnLedgerSvRightOwnersInstructionResult with + newDsoRules : ContractId DsoRules + svRightOwners : TextMap (ContractId SvRightOwner, ContractId SvRewardState) + +data DsoRules_ExpireMigrateToOnLedgerSvRightOwnersInstructionResult = DsoRules_ExpireMigrateToOnLedgerSvRightOwnersInstructionResult with + +data DsoRules_AddSvRightOwnerResult = DsoRules_AddSvRightOwnerResult with + instruction : ContractId AddSvRightOwnerInstruction + +data DsoRules_ExecuteAddSvRightOwnerInstructionResult = DsoRules_ExecuteAddSvRightOwnerInstructionResult with + newDsoRules : ContractId DsoRules + svRightOwner : ContractId SvRightOwner + svRewardState : ContractId SvRewardState + +data DsoRules_ExpireAddSvRightOwnerInstructionResult = DsoRules_ExpireAddSvRightOwnerInstructionResult with + +data DsoRules_RemoveSvRightOwnerResult = DsoRules_RemoveSvRightOwnerResult with + instruction : ContractId RemoveSvRightOwnerInstruction + +data DsoRules_ExecuteRemoveSvRightOwnerInstructionResult = DsoRules_ExecuteRemoveSvRightOwnerInstructionResult with + newDsoRules : ContractId DsoRules + +data DsoRules_ExpireRemoveSvRightOwnerInstructionResult = DsoRules_ExpireRemoveSvRightOwnerInstructionResult with + +data DsoRules_UpdateSvRightOwnerInfoResult = DsoRules_UpdateSvRightOwnerInfoResult with + instruction : ContractId UpdateSvRightOwnerInfoInstruction + +data DsoRules_ExecuteUpdateSvRightOwnerInfoInstructionResult = DsoRules_ExecuteUpdateSvRightOwnerInfoInstructionResult with + svRightOwner : ContractId SvRightOwner + +data DsoRules_ExpireUpdateSvRightOwnerInfoInstructionResult = DsoRules_ExpireUpdateSvRightOwnerInfoInstructionResult with + +data DsoRules_UpdateSvRightOwnerBeneficiariesResult = DsoRules_UpdateSvRightOwnerBeneficiariesResult with + svRightOwner : ContractId SvRightOwner + data DsoRules_OnboardValidatorResult = DsoRules_OnboardValidatorResult with validatorLicense : ContractId ValidatorLicense @@ -273,6 +329,10 @@ data DsoRules_ReceiveSvRewardCouponResult = DsoRules_ReceiveSvRewardCouponResult svRewardState : ContractId SvRewardState svRewardCoupons : [ContractId SvRewardCoupon] +data DsoRules_ReceiveSvRewardCouponV2Result = DsoRules_ReceiveSvRewardCouponV2Result with + svRewardStates : TextMap (ContractId SvRewardState) + svRewardCoupons : TextMap (Map Party (ContractId SvRewardCoupon)) + data DsoRules_ClaimExpiredRewardsResult = DsoRules_ClaimExpiredRewardsResult with unclaimedReward: Optional (ContractId UnclaimedReward) @@ -521,16 +581,21 @@ data TrafficState = TrafficState with template DsoRules with dso : Party epoch : Int - svs : Map.Map Party SvInfo + svs : Map.Map Party SvInfo -- ^ The SV node operators offboardedSvs : Map.Map Party OffboardedSvInfo dsoDelegate : Party -- ^ __Deprecated__ in favor of delegateless automation. config : DsoRulesConfig initialTrafficState: Map.Map Text TrafficState -- ^ Map from participant/mediator ID to its traffic state at the time of synchronizer bootstrapping. Used for testing, empty in prod. isDevNet : Bool + svRightOwners : Optional (Set Text) where - ensure - config.numUnclaimedRewardsThreshold > 0 + ensure and + [ config.numUnclaimedRewardsThreshold > 0 + -- There must be at least one SV right owner if we are using on-ledger SV right owners. + , optional True ((>= 1) . Set.size) svRightOwners + , not (onLedgerSvRightOwners this) || all ((== 0) . (.svRewardWeight)) svs + ] -- NOTE: the svs are not direct signatories as that would not give us the right fault-tolerance wrt -- validating choices on this contract. Instead, the svs are indirect signatories by being @@ -582,6 +647,7 @@ template DsoRules with config initialTrafficState isDevNet + svRightOwners return DsoRules_OffboardSvResult with .. @@ -997,6 +1063,7 @@ template DsoRules with newRewardWeight : Int controller dso do + requireNoOnLedgerSvRightOwners this require "New reward weight is positive" (newRewardWeight >= 0) case Map.lookup svParty svs of None -> fail "SV party is not registered" @@ -1358,6 +1425,7 @@ template DsoRules with beneficiaries : [(Party, Int)] controller sv do + requireNoOnLedgerSvRightOwners this case Map.lookup sv svs of None -> fail "SV is not an SV" Some info -> do @@ -1398,6 +1466,56 @@ template DsoRules with svRewardState = newRewardStateCid svRewardCoupons = couponCids + nonconsuming choice DsoRules_ReceiveSvRewardCouponV2 : DsoRules_ReceiveSvRewardCouponV2Result + with + svOperator : Party + openRoundCid : ContractId OpenMiningRound + svRightOwnerRewardInputs : TextMap (ContractId SvRightOwner, ContractId SvRewardState) + -- ^ The SV right owners to mint rewards for, keyed by their name. They must all be + -- hosted by `svOperator`. + controller svOperator + do + requireOnLedgerSvRightOwners this + svOperatorInfo <- getSvInfo svOperator this + now <- getTime + openRound <- fetchReferenceData (ForDso with dso) openRoundCid + require "OpenRound is open" (openRound.opensAt <= now) + + outputs <- forA (TextMap.toList svRightOwnerRewardInputs) $ \(name, (svRightOwnerCid, rewardStateCid)) -> do + let forSv = ForSv with dso; svName = name + svRightOwner <- fetchChecked forSv svRightOwnerCid + rewardState <- fetchAndArchive forSv rewardStateCid + let info = svRightOwner.info + state = rewardState.state + require "SV Right Owner mints through this SV Node Operator" $ + info.rewardNodeOperatorName == svOperatorInfo.name + require + ("Round " <> show openRound.round <> " is greater than the last round a reward has been received for " <> show state.lastRoundCollected) + (state.lastRoundCollected < openRound.round) + + let couponWeights = svRewardCouponWeights info + newRewardStateCid <- create rewardState with + state = RewardState with + lastRoundCollected = openRound.round + numRoundsCollected = state.numRoundsCollected + 1 + numRoundsMissed = + state.numRoundsMissed + (openRound.round.number - state.lastRoundCollected.number - 1) + numCouponsIssued = state.numCouponsIssued + Map.size couponWeights + + couponCids <- forA (Map.toList couponWeights) $ \(beneficiary, weight) -> do + couponCid <- create SvRewardCoupon with + dso + sv = info.rightOwnerParty + beneficiary + weight + round = openRound.round + pure (beneficiary, couponCid) + + pure (name, newRewardStateCid, Map.fromList couponCids) + + return DsoRules_ReceiveSvRewardCouponV2Result with + svRewardStates = TextMap.fromList [(name, stateCid) | (name, stateCid, _) <- outputs] + svRewardCoupons = TextMap.fromList [(name, coupons) | (name, _, coupons) <- outputs] -- Batch expiry of unclaimed rewards for a specific claimed round ----------------------------------------------------------------- @@ -1755,6 +1873,344 @@ template DsoRules with expectedDso = dso pure DsoRules_BootstrapExternalPartyConfigStateResult + nonconsuming choice DsoRules_MigrateToOnLedgerSvRightOwners : DsoRules_MigrateToOnLedgerSvRightOwnersResult + with + svRightOwners : TextMap SvRightOwnerInfo + -- ^ The complete set of SV right owners, keyed by their name. + controller dso + do + requireMigratableToOnLedgerSvRightOwners this svRightOwners + now <- getTime + instruction <- create MigrateToOnLedgerSvRightOwnersInstruction with + dso + svRightOwners + expiresAt = now `addRelTime` hours 1 + pure DsoRules_MigrateToOnLedgerSvRightOwnersResult with instruction + + choice DsoRules_ExecuteMigrateToOnLedgerSvRightOwnersInstruction : DsoRules_ExecuteMigrateToOnLedgerSvRightOwnersInstructionResult + with + instructionCid : ContractId MigrateToOnLedgerSvRightOwnersInstruction + openMiningRoundTriple : OpenMiningRoundTriple + -- ^ Determines the latest usable round. SV right owners without an SV node operator of the same name start collecting in the round thereafter, as that operator may already have minted for it. + svOperatorRewardStateCids : TextMap (ContractId SvRewardState) + -- ^ The `SvRewardState` contracts of the SV node operators, keyed by the operator's name. + svOperator : Party + controller svOperator + do + _ <- getAndValidateSvParty this (Some svOperator) + instruction <- fetchAndArchive (ForDso with dso) instructionCid + assertWithinDeadline "migrateToOnLedgerSvRightOwnersInstruction.expiresAt" instruction.expiresAt + requireMigratableToOnLedgerSvRightOwners this instruction.svRightOwners + require "Reward states are provided for exactly the SV node operators" $ + Set.fromList (map fst $ TextMap.toList svOperatorRewardStateCids) == getSvOperatorNames this + validatedRounds <- validateOpenMiningRoundTriple dso openMiningRoundTriple + -- Archive only the reward states of SV node operators that do not continue as an SV right owner of the same name. + forA_ (TextMap.toList svOperatorRewardStateCids) $ \(svName, rewardStateCid) -> + unless (svName `TextMap.member` instruction.svRightOwners) $ + void $ fetchAndArchive (ForSv with dso; svName) rewardStateCid + svRightOwners <- forA (TextMap.toList instruction.svRightOwners) $ \(name, info) -> do + svRightOwner <- create SvRightOwner with dso; name; info + -- Reuse the reward state of the SV node operator of the same name to preserve the round it last minted for. + svRewardState <- case TextMap.lookup name svOperatorRewardStateCids of + Some rewardStateCid -> do + void $ fetchChecked (ForSv with dso; svName = name) rewardStateCid + pure rewardStateCid + None -> createSvRewardState dso name (Round $ validatedRounds.latestUsableRound.round.number + 1) + pure (name, (svRightOwner, svRewardState)) + newDsoRules <- create this with + svs = fmap (\info -> info with svRewardWeight = 0) svs + svRightOwners = Some $ Set.fromList $ map fst svRightOwners + pure DsoRules_ExecuteMigrateToOnLedgerSvRightOwnersInstructionResult with + newDsoRules + svRightOwners = TextMap.fromList svRightOwners + + nonconsuming choice DsoRules_ExpireMigrateToOnLedgerSvRightOwnersInstruction : DsoRules_ExpireMigrateToOnLedgerSvRightOwnersInstructionResult + with + instructionCid : ContractId MigrateToOnLedgerSvRightOwnersInstruction + svOperator : Party + controller svOperator + do + _ <- getAndValidateSvParty this (Some svOperator) + instruction <- fetchAndArchive (ForDso with dso) instructionCid + assertDeadlineExceeded "migrateToOnLedgerSvRightOwnersInstruction.expiresAt" instruction.expiresAt + pure DsoRules_ExpireMigrateToOnLedgerSvRightOwnersInstructionResult with + + nonconsuming choice DsoRules_AddSvRightOwner : DsoRules_AddSvRightOwnerResult + with + name : Text -- ^ The name of the SV right owner to add; must not be in use. + info : SvRightOwnerInfo + controller dso + do + requireOnLedgerSvRightOwners this + requireSvRightOwnerDoesNotExist this name + requireRewardNodeOperatorExists this info + now <- getTime + instruction <- create AddSvRightOwnerInstruction with + dso + name + info + expiresAt = now `addRelTime` hours 1 + return DsoRules_AddSvRightOwnerResult with instruction + + choice DsoRules_ExecuteAddSvRightOwnerInstruction : DsoRules_ExecuteAddSvRightOwnerInstructionResult + with + instructionCid : ContractId AddSvRightOwnerInstruction + openMiningRoundTriple : OpenMiningRoundTriple + -- ^ Determines the latest usable round, in which the new SV right owner starts collecting rewards. + svOperator : Party + controller svOperator + do + requireOnLedgerSvRightOwners this + _ <- getAndValidateSvParty this (Some svOperator) + instruction <- fetchAndArchive (ForDso with dso) instructionCid + requireSvRightOwnerDoesNotExist this instruction.name + requireRewardNodeOperatorExists this instruction.info + assertWithinDeadline "addSvRightOwnerInstruction.expiresAt" instruction.expiresAt + validatedRounds <- validateOpenMiningRoundTriple dso openMiningRoundTriple + svRightOwner <- create SvRightOwner with dso; name = instruction.name; info = instruction.info + svRewardState <- createSvRewardState dso instruction.name validatedRounds.latestUsableRound.round + newDsoRules <- create this with + svRightOwners = Set.insert instruction.name <$> svRightOwners + return DsoRules_ExecuteAddSvRightOwnerInstructionResult with .. + + nonconsuming choice DsoRules_ExpireAddSvRightOwnerInstruction : DsoRules_ExpireAddSvRightOwnerInstructionResult + with + instructionCid : ContractId AddSvRightOwnerInstruction + sv : Optional Party + controller sv + do + _ <- getAndValidateSvParty this sv + instruction <- fetchAndArchive (ForDso with dso) instructionCid + assertDeadlineExceeded "addSvRightOwnerInstruction.expiresAt" instruction.expiresAt + return DsoRules_ExpireAddSvRightOwnerInstructionResult + + nonconsuming choice DsoRules_RemoveSvRightOwner : DsoRules_RemoveSvRightOwnerResult + with + name : Text -- ^ The name of the SV right owner to remove; must be in use. + controller dso + do + requireOnLedgerSvRightOwners this + requireRemovableSvRightOwner this name + now <- getTime + instruction <- create RemoveSvRightOwnerInstruction with + dso + name + expiresAt = now `addRelTime` hours 1 + return DsoRules_RemoveSvRightOwnerResult with instruction + + choice DsoRules_ExecuteRemoveSvRightOwnerInstruction : DsoRules_ExecuteRemoveSvRightOwnerInstructionResult + with + instructionCid : ContractId RemoveSvRightOwnerInstruction + svRightOwnerCid : ContractId SvRightOwner + svRewardStateCid : ContractId SvRewardState + svOperator : Party + controller svOperator + do + requireOnLedgerSvRightOwners this + _ <- getAndValidateSvParty this (Some svOperator) + instruction <- fetchAndArchive (ForDso with dso) instructionCid + requireRemovableSvRightOwner this instruction.name + assertWithinDeadline "removeSvRightOwnerInstruction.expiresAt" instruction.expiresAt + let forSv = ForSv with dso; svName = instruction.name + _ <- fetchAndArchive forSv svRightOwnerCid + -- We archive the reward state together with the SV right owner to avoid having to track + -- removed SV right owners just to prevent them from minting the same round twice. + -- Re-adding a right owner under the same name could thus mint its rewards twice for the + -- round in which it is re-added, which we accept as doing so that quickly is unrealistic. + _ <- fetchAndArchive forSv svRewardStateCid + newDsoRules <- create this with + svRightOwners = Set.delete instruction.name <$> svRightOwners + return DsoRules_ExecuteRemoveSvRightOwnerInstructionResult with .. + + nonconsuming choice DsoRules_ExpireRemoveSvRightOwnerInstruction : DsoRules_ExpireRemoveSvRightOwnerInstructionResult + with + instructionCid : ContractId RemoveSvRightOwnerInstruction + svOperator : Party + controller svOperator + do + requireOnLedgerSvRightOwners this + _ <- getAndValidateSvParty this (Some svOperator) + instruction <- fetchAndArchive (ForDso with dso) instructionCid + assertDeadlineExceeded "removeSvRightOwnerInstruction.expiresAt" instruction.expiresAt + return DsoRules_ExpireRemoveSvRightOwnerInstructionResult + + nonconsuming choice DsoRules_UpdateSvRightOwnerInfo : DsoRules_UpdateSvRightOwnerInfoResult + with + name : Text -- ^ The name of the SV right owner to update; must be in use. + baseInfo : SvRightOwnerInfo + -- ^ The info that this vote was created against. Only the fields that differ between + -- `baseInfo` and `newInfo` are updated, so that concurrent changes to the other + -- fields are preserved. + newInfo : SvRightOwnerInfo -- ^ The target info. + controller dso + do + requireOnLedgerSvRightOwners this + requireSvRightOwnerExists this name + requireRewardNodeOperatorExists this newInfo + requireValidSvRightOwnerInfo newInfo + now <- getTime + instruction <- create UpdateSvRightOwnerInfoInstruction with + dso + name + baseInfo + newInfo + expiresAt = now `addRelTime` hours 1 + return DsoRules_UpdateSvRightOwnerInfoResult with instruction + + nonconsuming choice DsoRules_ExecuteUpdateSvRightOwnerInfoInstruction : DsoRules_ExecuteUpdateSvRightOwnerInfoInstructionResult + with + instructionCid : ContractId UpdateSvRightOwnerInfoInstruction + svRightOwnerCid : ContractId SvRightOwner + svOperator : Party + controller svOperator + do + requireOnLedgerSvRightOwners this + _ <- getAndValidateSvParty this (Some svOperator) + instruction <- fetchAndArchive (ForDso with dso) instructionCid + requireSvRightOwnerExists this instruction.name + assertWithinDeadline "updateSvRightOwnerInfoInstruction.expiresAt" instruction.expiresAt + currentSvRightOwner <- fetchAndArchive (ForSv with dso; svName = instruction.name) svRightOwnerCid + let info = patch instruction.newInfo instruction.baseInfo currentSvRightOwner.info + requireRewardNodeOperatorExists this info + requireValidSvRightOwnerInfo info + svRightOwner <- create currentSvRightOwner with info + return DsoRules_ExecuteUpdateSvRightOwnerInfoInstructionResult with svRightOwner + + nonconsuming choice DsoRules_ExpireUpdateSvRightOwnerInfoInstruction : DsoRules_ExpireUpdateSvRightOwnerInfoInstructionResult + with + instructionCid : ContractId UpdateSvRightOwnerInfoInstruction + svOperator : Party + controller svOperator + do + requireOnLedgerSvRightOwners this + _ <- getAndValidateSvParty this (Some svOperator) + instruction <- fetchAndArchive (ForDso with dso) instructionCid + assertDeadlineExceeded "updateSvRightOwnerInfoInstruction.expiresAt" instruction.expiresAt + return DsoRules_ExpireUpdateSvRightOwnerInfoInstructionResult + + nonconsuming choice DsoRules_UpdateSvRightOwnerBeneficiaries : DsoRules_UpdateSvRightOwnerBeneficiariesResult + -- ^ Set the beneficiaries with which an SV right owner shares its rewards. + -- + -- In contrast to `DsoRules_UpdateSvRightOwnerInfo`, this does not require a vote, as + -- right owners are free to share their own rewards as they see fit. + -- TODO(tech-debt): add a matching `DsoRules_UpdateSvRightOwnerParty` choice controlled by the + -- current right owner party, so that the party can be rotated without losing the right. + with + name : Text -- ^ The name of the SV right owner whose beneficiaries are set. + svRightOwnerCid : ContractId SvRightOwner + beneficiaries : Map.Map Party BeneficiaryInfo + -- ^ The complete new set of beneficiaries, replacing the existing ones. + rightOwner : Party -- ^ The party of the SV right owner; must own `svRightOwnerCid`. + controller rightOwner + do + requireOnLedgerSvRightOwners this + requireSvRightOwnerExists this name + currentSvRightOwner <- fetchAndArchive (ForSv with dso; svName = name) svRightOwnerCid + require "Beneficiaries are set by the SV right owner itself" $ + currentSvRightOwner.info.rightOwnerParty == rightOwner + let info = currentSvRightOwner.info with beneficiaries + requireValidSvRightOwnerInfo info + svRightOwner <- create currentSvRightOwner with info + return DsoRules_UpdateSvRightOwnerBeneficiariesResult with svRightOwner + + +getSvOperatorNames : DsoRules -> Set Text +getSvOperatorNames DsoRules{..} = Set.fromList $ map (.name) $ Map.values svs + +getSvRightOwners : DsoRules -> Set Text +getSvRightOwners DsoRules{..} = fromOptional Set.empty svRightOwners + +onLedgerSvRightOwners : DsoRules -> Bool +onLedgerSvRightOwners = isSome . (.svRightOwners) + +requireOnLedgerSvRightOwners : DsoRules -> Update () +requireOnLedgerSvRightOwners this = + require "svRightOwners are tracked on-ledger" (onLedgerSvRightOwners this) + +requireNoOnLedgerSvRightOwners : DsoRules -> Update () +requireNoOnLedgerSvRightOwners this = + require "svRightOwners are not tracked on-ledger" (not $ onLedgerSvRightOwners this) + +requireSvRightOwnerExists : DsoRules -> Text -> Update () +requireSvRightOwnerExists this name = + require ("SV right owner " <> show name <> " exists") $ + name `Set.member` getSvRightOwners this + +requireSvRightOwnerDoesNotExist : DsoRules -> Text -> Update () +requireSvRightOwnerDoesNotExist this name = + require ("SV right owner " <> show name <> " does not exist") $ + name `Set.notMember` getSvRightOwners this + +-- | Check that the SV right owner with the given name can be removed, i.e., it exists and +-- it is not the last remaining SV right owner. +requireRemovableSvRightOwner : DsoRules -> Text -> Update () +requireRemovableSvRightOwner this name = do + requireSvRightOwnerExists this name + require "There is more than one SV right owner" $ + Set.size (getSvRightOwners this) > 1 + +requireValidSvRightOwnerInfo : SvRightOwnerInfo -> Update () +requireValidSvRightOwnerInfo info = + require "Valid SvRightOwnerInfo" $ validSvRightOwnerInfo info + +requireRewardNodeOperatorExists : DsoRules -> SvRightOwnerInfo -> Update () +requireRewardNodeOperatorExists this info = + require "SV right owner's node operator must exist" $ + isSome $ lookupSvInfoByName info.rewardNodeOperatorName this + +requireMigratableToOnLedgerSvRightOwners : DsoRules -> TextMap SvRightOwnerInfo -> Update () +requireMigratableToOnLedgerSvRightOwners this svRightOwners = do + requireNoOnLedgerSvRightOwners this + require "There is at least one SV right owner" (not $ TextMap.null svRightOwners) + forA_ svRightOwners requireValidSvRightOwnerInfo + require "The total SV reward weight is preserved" $ + sum (fmap (.svRewardWeight) this.svs) == sum (fmap (.rewardWeight) svRightOwners) + forA_ svRightOwners $ requireRewardNodeOperatorExists this + +template MigrateToOnLedgerSvRightOwnersInstruction with + dso : Party + svRightOwners : TextMap SvRightOwnerInfo + -- ^ The complete set of SV right owners, keyed by their name. + expiresAt : Time + -- ^ When this contract can be archived. + where + signatory dso + +instance HasCheckedFetch MigrateToOnLedgerSvRightOwnersInstruction ForDso where + contractGroupId instr = ForDso instr.dso + +template AddSvRightOwnerInstruction with + dso : Party + name : Text -- ^ The name of the SV right owner to add. + info : SvRightOwnerInfo -- ^ The information of the SV right owner to add. + expiresAt : Time -- ^ When this contract can be archived. + where + signatory dso + +instance HasCheckedFetch AddSvRightOwnerInstruction ForDso where + contractGroupId instr = ForDso instr.dso + +template RemoveSvRightOwnerInstruction with + dso : Party + name : Text -- ^ The name of the SV right owner to remove. + expiresAt : Time -- ^ When this contract can be archived. + where + signatory dso + +instance HasCheckedFetch RemoveSvRightOwnerInstruction ForDso where + contractGroupId instr = ForDso instr.dso + +template UpdateSvRightOwnerInfoInstruction with + dso : Party + name : Text -- ^ The name of the SV right owner to update. + baseInfo : SvRightOwnerInfo -- ^ The info that the vote was created against. + newInfo : SvRightOwnerInfo -- ^ The target info; only fields that differ from `baseInfo` are updated. + expiresAt : Time -- ^ When this contract can be archived. + where + signatory dso + +instance HasCheckedFetch UpdateSvRightOwnerInfoInstruction ForDso where + contractGroupId instr = ForDso instr.dso pruneAtLeastOne : Ord t => t -> Schedule t a -> Optional (Schedule t a) pruneAtLeastOne now schedule = @@ -1817,6 +2273,10 @@ executeActionRequiringConfirmation dso dsoRulesCid amuletRulesCid act = case act SRARC_CreateTransferCommandCounter choiceArg -> void $ exercise dsoRulesCid choiceArg SRARC_CreateUnallocatedUnclaimedActivityRecord choiceArg -> void $ exercise dsoRulesCid choiceArg SRARC_CreateBootstrapExternalPartyConfigStateInstruction choiceArg -> void $ exercise dsoRulesCid choiceArg + SRARC_MigrateToOnLedgerSvRightOwners choiceArg -> void $ exercise dsoRulesCid choiceArg + SRARC_AddSvRightOwner choiceArg -> void $ exercise dsoRulesCid choiceArg + SRARC_RemoveSvRightOwner choiceArg -> void $ exercise dsoRulesCid choiceArg + SRARC_UpdateSvRightOwnerInfo choiceArg -> void $ exercise dsoRulesCid choiceArg ARC_AnsEntryContext with .. -> do void $ fetchChecked (ForDso with dso) ansEntryContextCid case ansEntryContextAction of @@ -1901,7 +2361,7 @@ ensureNeverOperatedNode newSvParty this = do -- factored out from the choice to avoid mistakes from having the fields of DsoRules{..} in scope dsoRules_addSv : DsoRules -> DsoRules_AddSv -> Update (ContractId DsoRules) -dsoRules_addSv this0 arg@DsoRules_AddSv{..} = do +dsoRules_addSv this0 DsoRules_AddSv{..} = do ensureNeverOperatedNode newSvParty this0 -- in DevNet we allow changing the operator of an existing sv, which we implement as a removal and re-addition this@DsoRules{..} <- @@ -1921,9 +2381,14 @@ dsoRules_addSv this0 arg@DsoRules_AddSv{..} = do require "SV is not currently onboarded" (isNone $ lookupSvInfoByName newSvName this0) pure this0 - -- create per-sv contracts if they have never been onboarded - unless (svHasBeenOnboardedBefore newSvName this) $ - createPerSvContracts this arg + if onLedgerSvRightOwners this + then + require "SV reward weight is zero when SV right owners are on-ledger" $ + newSvRewardWeight == 0 + else -- create per-sv contracts if they have never been onboarded + unless (svHasBeenOnboardedBefore newSvName this) $ + void $ createSvRewardState dso newSvName joinedAsOfRound + -- create per SV party contracts let initialAmuletPriceVote = None createPerSvPartyContracts dso newSvParty newSvName noSynchronizerNodes initialAmuletPriceVote (getVoteCooldownTime config) @@ -1936,11 +2401,11 @@ dsoRules_addSv this0 arg@DsoRules_AddSv{..} = do create this with svs = Map.insert newSvParty svInfo svs -createPerSvContracts : DsoRules -> DsoRules_AddSv -> Update () -createPerSvContracts DsoRules{..} DsoRules_AddSv{..} = do - void $ create SvRewardState with +createSvRewardState : Party -> Text -> Round -> Update (ContractId SvRewardState) +createSvRewardState dso svName joinedAsOfRound = + create SvRewardState with dso - svName = newSvName + svName state = RewardState with lastRoundCollected = Round (joinedAsOfRound.number - 1) numRoundsMissed = 0 diff --git a/daml/splice-util-batched-markers-test/daml.yaml b/daml/splice-util-batched-markers-test/daml.yaml index c6b791be93..b440651760 100644 --- a/daml/splice-util-batched-markers-test/daml.yaml +++ b/daml/splice-util-batched-markers-test/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-util-batched-markers-test source: daml -version: 1.0.9 +version: 1.0.10 dependencies: - daml-prim - daml-script diff --git a/daml/splice-util-featured-app-proxies-test/daml.yaml b/daml/splice-util-featured-app-proxies-test/daml.yaml index c6baf26282..7e7b76068d 100644 --- a/daml/splice-util-featured-app-proxies-test/daml.yaml +++ b/daml/splice-util-featured-app-proxies-test/daml.yaml @@ -11,7 +11,7 @@ description: | are normal .dar files and can be shared by copying the .dars. (TODO(#594): remove this limitation) source: daml -version: 1.0.15 +version: 1.0.16 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-util-token-standard-wallet-test/daml.yaml b/daml/splice-util-token-standard-wallet-test/daml.yaml index 192259cf3d..fea01fd0c9 100644 --- a/daml/splice-util-token-standard-wallet-test/daml.yaml +++ b/daml/splice-util-token-standard-wallet-test/daml.yaml @@ -4,7 +4,7 @@ sdk-version: 3.5.2 name: splice-util-token-standard-wallet-test source: daml -version: 1.0.10 +version: 1.0.11 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-wallet-payments/daml.yaml b/daml/splice-wallet-payments/daml.yaml index 9308e42c32..a32b382481 100644 --- a/daml/splice-wallet-payments/daml.yaml +++ b/daml/splice-wallet-payments/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-wallet-payments source: daml -version: 0.1.22 +version: 0.1.23 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-wallet-test/daml.yaml b/daml/splice-wallet-test/daml.yaml index 16dc4ca424..efe144d465 100644 --- a/daml/splice-wallet-test/daml.yaml +++ b/daml/splice-wallet-test/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-wallet-test source: daml -version: 0.1.27 +version: 0.1.28 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splice-wallet/daml.yaml b/daml/splice-wallet/daml.yaml index cc61e20a5c..1cb766a304 100644 --- a/daml/splice-wallet/daml.yaml +++ b/daml/splice-wallet/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-wallet source: daml -version: 0.1.23 +version: 0.1.24 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splitwell-test/daml.yaml b/daml/splitwell-test/daml.yaml index 1294cd854a..d5bd19b680 100644 --- a/daml/splitwell-test/daml.yaml +++ b/daml/splitwell-test/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splitwell-test source: daml -version: 0.1.27 +version: 0.1.28 dependencies: - daml-prim - daml-stdlib diff --git a/daml/splitwell/daml.yaml b/daml/splitwell/daml.yaml index c356123d96..0934bdf454 100644 --- a/daml/splitwell/daml.yaml +++ b/daml/splitwell/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splitwell source: daml -version: 0.1.23 +version: 0.1.24 dependencies: - daml-prim - daml-stdlib diff --git a/token-standard/examples/splice-test-token-v1-test/daml.yaml b/token-standard/examples/splice-test-token-v1-test/daml.yaml index 59b620cd0e..98a568b129 100644 --- a/token-standard/examples/splice-test-token-v1-test/daml.yaml +++ b/token-standard/examples/splice-test-token-v1-test/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-test-token-v1-test source: daml -version: 1.0.1 +version: 1.0.2 dependencies: - daml-prim - daml-stdlib diff --git a/token-standard/examples/splice-test-token-v2-test/daml.yaml b/token-standard/examples/splice-test-token-v2-test/daml.yaml index c7a9b6fdf1..a9fe1ca48a 100644 --- a/token-standard/examples/splice-test-token-v2-test/daml.yaml +++ b/token-standard/examples/splice-test-token-v2-test/daml.yaml @@ -1,7 +1,7 @@ sdk-version: 3.5.2 name: splice-test-token-v2-test source: daml -version: 1.0.1 +version: 1.0.2 dependencies: - daml-prim - daml-stdlib diff --git a/token-standard/splice-token-standard-utils-test/daml.yaml b/token-standard/splice-token-standard-utils-test/daml.yaml index 9216159429..eb6e958105 100644 --- a/token-standard/splice-token-standard-utils-test/daml.yaml +++ b/token-standard/splice-token-standard-utils-test/daml.yaml @@ -5,7 +5,7 @@ sdk-version: 3.5.2 name: splice-token-standard-utils-test description: | Tests of the token-standard-utils library. -version: 1.0.1 +version: 1.0.2 source: daml dependencies: - daml-prim diff --git a/token-standard/splice-token-standard-v1-test/daml.yaml b/token-standard/splice-token-standard-v1-test/daml.yaml index 1849c50567..5a0fd29a15 100644 --- a/token-standard/splice-token-standard-v1-test/daml.yaml +++ b/token-standard/splice-token-standard-v1-test/daml.yaml @@ -16,7 +16,7 @@ description: | as Daml script code can currently not be shared via .dars across SDKs. The dependencies are normal .dar files and can be shared by copying the .dars. (TODO(#594): remove this limitation) -version: 1.0.16 +version: 1.0.17 source: daml dependencies: - daml-prim diff --git a/token-standard/splice-token-standard-v2-test/daml.yaml b/token-standard/splice-token-standard-v2-test/daml.yaml index 2892e51e06..eced12ab6e 100644 --- a/token-standard/splice-token-standard-v2-test/daml.yaml +++ b/token-standard/splice-token-standard-v2-test/daml.yaml @@ -15,7 +15,7 @@ description: | Must be consumed by copying the source-code into the downstream project, as Daml script code can currently not be shared via .dars across SDKs. (TODO(#594): remove this limitation) -version: 1.0.1 +version: 1.0.2 source: daml dependencies: - daml-prim