Repository: centrifuge/protocol-v3
Pull request #252: Fix deployment
Author: login: hieronx
Created: 2025-04-14T09:14:47Z | Merged: 2025-04-14T09:43:19Z



Diff:
diff --git a/deployments/testnet/sepolia.json b/deployments/testnet/sepolia.json
index 46a700e7b..4d1f129f3 100644
--- a/deployments/testnet/sepolia.json
+++ b/deployments/testnet/sepolia.json
@@ -1,28 +1,29 @@
 {
   "contracts": {
-    "root": "0xd0c02f63149f841050c17a08405c27ed77e5aeb3",
-    "adminSafe": "0x423420ae467df6e90291fd0252c0a8a637c1e03f",
-    "guardian": "0x3e2cabe1da415feab62b9a0c0c1cb88a48c63f78",
-    "gasService": "0x7fd598e800a68320f96865d1ac89e6e7644d4d7e",
-    "gateway": "0x5b918ada9c7e4af4318f5e925f3f914bfaba5934",
-    "messageProcessor": "0x0e2105f3f6bdd351ce8688ecc9f8fa04b475a936",
-    "messageDispatcher": "0xaff2dbc087bdc6ceb4e766ce9852d1d1c0524072",
-    "poolRegistry": "0x07f5069ceae9923bb776b920e743b6057a84c175",
-    "assetRegistry": "0x171b393c4fb77efd0cef445315481718929c44e7",
-    "accounting": "0x6547626120d2a58f15432ca3e372b76677e0ca45",
-    "holdings": "0x87386453cc08fe881d70e98a3b0257c3ab5a9105",
-    "multiShareClass": "0xffb7e12467e3294ff51b542a0ecf31531f901640",
-    "poolRouter": "0x848036cf64870ca9d7b513a014cbec8f3697bf0e",
-    "transientValuation": "0xdc1f030c6ccb51ee01c7c92f3093f35d691fcfce",
-    "identityValuation": "0x53c0339e6bc04625df0c74d6ee788368d42fa775",
-    "escrow": "0xb0c24e1a4ad9b7b790eda20fb33e78236c065fe1",
-    "routerEscrow": "0xe0ef81b6fc1bed10ec9da7195157dc5c0ae71847",
-    "restrictionManager": "0x82130de2594a80180351ec50f1a51387f0afdd33",
-    "restrictedRedemptions": "0x8070cf136267c667121570c78c78d5df7446ba21",
-    "tokenFactory": "0x7cb25681109569af3d59fe845c68779b82ab9659",
-    "investmentManager": "0x734bcf674c5c8aef6bdc0f30ddbd269ebc41f0a0",
-    "vaultFactory": "0x7191bc9347b52d2a0e42fb8cca901c67f0840249",
-    "poolManager": "0x761b0b580722623d8b5a1f827af193d1714139a9",
-    "vaultRouter": "0xfd7e9de3327efb6ea556f689b99060da0aabfdc2"
+    "root": "0x0xAEB0B9253fbB32ED05D442A3185eAB36DFCb65dF",
+    "adminSafe": "0x0x423420Ae467df6e90291fd0252c0A8a637C1e03f",
+    "guardian": "0x0xC2033C918F144B265f09B5df51970dbbE5e48586",
+    "gasService": "0x0x901eb3C1bb122C3E44C87597b8A73385e2b0986a",
+    "gateway": "0x0x51A64b58146EA16D018d5A0e1ab50ebbD26F96Df",
+    "messageProcessor": "0x0x7efC916c8846d737B41ff0c79f3F8363Ee259d83",
+    "messageDispatcher": "0x0x184Eab90E834498eDC6eb9A36252d34dd0c6E78b",
+    "hubRegistry": "0x0xd1cA2b37035a4a7B6a9E368DE8CBceF397B2286F",
+    "accounting": "0x0xeF81165C24d8B13D4f5fdF71477004E55ade4a89",
+    "holdings": "0x0x03Ba7E47DC513c0400CBD0B409C10ce15C52d14E",
+    "shareClassManager": "0x0x3e46A1b97BFDf9Fae01A5648aA343aE21C1b6eA5",
+    "hub": "0x0x49aB14c8bb5870F892a21acd298174dB1415da17",
+    "transientValuation": "0x0x621dB2787d37E99c68B58592099122D658b063c3",
+    "identityValuation": "0x0x41322ec0ce3Dd1ec9Cd4775a48019b0005787289",
+    "escrow": "0x0x1AeCd1eAb4a56D1Ee0b39c5B356E6981d50d63c0",
+    "routerEscrow": "0x0x71E57350808448959bCc15B17d47d95946B9FDDB",
+    "restrictedTransfers": "0x0x422bC96eBAac761Af8c546ba9bA9620a166b2b42",
+    "freelyTransferable": "0x0x5e75A6F5E3d332239e86fb6728320161EB7E3fA1",
+    "tokenFactory": "0x0x4056e5D9F767b8F4ce350787A777122c940bfa64",
+    "asyncRequests": "0x0x7ef3F52b8079230cCf2003e7F268261ed15CB38e",
+    "syncRequests": "0x0xa44A36F313eB14D4AbF48Cdf85d0b1d9cA93005B",
+    "asyncVaultFactory": "0x0x5816342Bb6306DC4b92b55A8ec82A2CA66E5615A",
+    "syncDepositVaultFactory": "0x0x3A01e497647CcFe920eC405C3d52170a603873d3",
+    "poolManager": "0x0x163215d4A8e4BBad9a25c647B38F913635fE1BF6",
+    "vaultRouter": "0x0x7035875A7BDfEA7a735f7F1379E5897E316CE7De"
   }
 }
diff --git a/script/CommonDeployer.s.sol b/script/CommonDeployer.s.sol
index b40bb17b3..f119f0d77 100644
--- a/script/CommonDeployer.s.sol
+++ b/script/CommonDeployer.s.sol
@@ -43,11 +43,13 @@ abstract contract CommonDeployer is Script, JsonRegistry {
         );
     }
 
-    function deployCommon(uint16 centrifugeId, ISafe adminSafe_, address deployer) public {
+    function deployCommon(uint16 centrifugeId, ISafe adminSafe_, address deployer, bool isTests) public {
         if (address(root) != address(0)) {
             return; // Already deployed. Make this method idempotent.
         }
 
+        startDeploymentOutput(isTests);
+
         uint64 messageGasLimit = uint64(vm.envOr(MESSAGE_COST_ENV, FALLBACK_MSG_COST));
         uint64 proofGasLimit = uint64(vm.envOr(PROOF_COST_ENV, FALLBACK_MSG_COST));
 
@@ -72,8 +74,6 @@ abstract contract CommonDeployer is Script, JsonRegistry {
     }
 
     function _commonRegister() private {
-        startDeploymentOutput();
-
         register("root", address(root));
         register("adminSafe", address(adminSafe));
         register("guardian", address(guardian));
diff --git a/script/FullDeployer.s.sol b/script/FullDeployer.s.sol
index 3fdaa6ccc..d66130eac 100644
--- a/script/FullDeployer.s.sol
+++ b/script/FullDeployer.s.sol
@@ -8,9 +8,9 @@ import {HubDeployer} from "script/HubDeployer.s.sol";
 import {VaultsDeployer} from "script/VaultsDeployer.s.sol";
 
 contract FullDeployer is HubDeployer, VaultsDeployer {
-    function deployFull(uint16 centrifugeId, ISafe adminSafe_, address deployer) public {
-        deployHub(centrifugeId, adminSafe_, deployer);
-        deployVaults(centrifugeId, adminSafe_, deployer);
+    function deployFull(uint16 centrifugeId, ISafe adminSafe_, address deployer, bool isTests) public {
+        deployHub(centrifugeId, adminSafe_, deployer, isTests);
+        deployVaults(centrifugeId, adminSafe_, deployer, isTests);
     }
 
     function removeFullDeployerAccess(address deployer) public {
diff --git a/script/HubDeployer.s.sol b/script/HubDeployer.s.sol
index 792feba26..003765cf3 100644
--- a/script/HubDeployer.s.sol
+++ b/script/HubDeployer.s.sol
@@ -37,8 +37,8 @@ contract HubDeployer is CommonDeployer {
     // Data
     AssetId public immutable USD = newAssetId(840);
 
-    function deployHub(uint16 centrifugeId, ISafe adminSafe_, address deployer) public {
-        deployCommon(centrifugeId, adminSafe_, deployer);
+    function deployHub(uint16 centrifugeId, ISafe adminSafe_, address deployer, bool isTests) public {
+        deployCommon(centrifugeId, adminSafe_, deployer, isTests);
 
         hubRegistry = new HubRegistry(deployer);
         transientValuation = new TransientValuation(hubRegistry, deployer);
diff --git a/script/VaultsDeployer.s.sol b/script/VaultsDeployer.s.sol
index d7a4ed198..44163531f 100644
--- a/script/VaultsDeployer.s.sol
+++ b/script/VaultsDeployer.s.sol
@@ -38,8 +38,8 @@ contract VaultsDeployer is CommonDeployer {
     address public restrictedTransfers;
     address public freelyTransferable;
 
-    function deployVaults(uint16 centrifugeId, ISafe adminSafe_, address deployer) public {
-        deployCommon(centrifugeId, adminSafe_, deployer);
+    function deployVaults(uint16 centrifugeId, ISafe adminSafe_, address deployer, bool isTests) public {
+        deployCommon(centrifugeId, adminSafe_, deployer, isTests);
 
         escrow = new Escrow{salt: SALT}(deployer);
         routerEscrow = new Escrow{salt: keccak256(abi.encodePacked(SALT, "escrow2"))}(deployer);
diff --git a/script/adapters/Axelar.s.sol b/script/adapters/Axelar.s.sol
index 5b452dc03..1808f0b82 100644
--- a/script/adapters/Axelar.s.sol
+++ b/script/adapters/Axelar.s.sol
@@ -16,7 +16,7 @@ contract AxelarDeployer is FullDeployer {
 
         vm.startBroadcast();
 
-        deployFull(localCentrifugeId, ISafe(vm.envAddress("ADMIN")), msg.sender);
+        deployFull(localCentrifugeId, ISafe(vm.envAddress("ADMIN")), msg.sender, false);
 
         AxelarAdapter adapter = new AxelarAdapter(gateway, axelarGateway, axelarGasService, msg.sender);
         wire(remoteCentrifugeId, adapter, msg.sender);
diff --git a/script/adapters/Localhost.s.sol b/script/adapters/Localhost.s.sol
index 33dacffb6..dfa003fe5 100644
--- a/script/adapters/Localhost.s.sol
+++ b/script/adapters/Localhost.s.sol
@@ -17,22 +17,25 @@ import {IAsyncVault} from "src/vaults/interfaces/IERC7540.sol";
 
 import {FullDeployer, HubDeployer, VaultsDeployer} from "script/FullDeployer.s.sol";
 
-// Script to deploy CP and CP with an Localhost Adapter.
+// Script to deploy Hub and Vaults with a Localhost Adapter.
 contract LocalhostDeployer is FullDeployer {
     using MessageLib for *;
 
+    uint256 defaultGas;
+
     function run() public {
         uint16 centrifugeId = uint16(vm.envUint("CENTRIFUGE_ID"));
 
         vm.startBroadcast();
 
-        deployFull(centrifugeId, ISafe(vm.envAddress("ADMIN")), msg.sender);
+        deployFull(centrifugeId, ISafe(vm.envAddress("ADMIN")), msg.sender, false);
 
         // Since `wire()` is not called, separately adding the safe here
         guardian.file("safe", address(adminSafe));
 
         saveDeploymentOutput();
 
+        (, defaultGas) = gateway.estimate(centrifugeId, MessageLib.NotifyPool(1).serialize());
         _configureTestData(centrifugeId);
 
         vm.stopBroadcast();
@@ -45,23 +48,24 @@ contract LocalhostDeployer is FullDeployer {
         token.file("symbol", "USDC");
         token.mint(msg.sender, 10_000_000e6);
 
-        vaultRouter.registerAsset{value: 0.001 ether}(centrifugeId, address(token), 0);
+        vaultRouter.registerAsset{value: defaultGas}(centrifugeId, address(token), 0);
         AssetId assetId = newAssetId(centrifugeId, 1);
 
         _deployAsyncVault(centrifugeId, token, assetId);
-        _deploySyncVault(centrifugeId, token, assetId);
+        _deploySyncDepositVault(centrifugeId, token, assetId);
     }
 
     function _deployAsyncVault(uint16 centrifugeId, ERC20 token, AssetId assetId) internal {
         PoolId poolId = hub.createPool(msg.sender, USD);
+        hub.allowPoolAdmin(poolId, vm.envAddress("ADMIN"), true);
         ShareClassId scId = shareClassManager.previewNextShareClassId(poolId);
 
         D18 navPerShare = d18(1, 1);
 
         hub.setPoolMetadata(poolId, bytes("Testing pool"));
         hub.addShareClass(poolId, "Tokenized MMF", "MMF", bytes32(bytes("1")), bytes(""));
-        hub.notifyPool{value: 0.001 ether}(poolId, centrifugeId);
-        hub.notifyShareClass{value: 0.001 ether}(poolId, centrifugeId, scId, bytes32(bytes20(freelyTransferable)));
+        hub.notifyPool{value: defaultGas}(poolId, centrifugeId);
+        hub.notifyShareClass{value: defaultGas}(poolId, centrifugeId, scId, bytes32(bytes20(freelyTransferable)));
         hub.createHolding(poolId, scId, assetId, identityValuation, false, 0x01);
 
         hub.updateContract(
@@ -94,22 +98,23 @@ contract LocalhostDeployer is FullDeployer {
         hub.approveDeposits(poolId, scId, assetId, investAmount, valuation);
         hub.issueShares(poolId, scId, assetId, navPerShare);
 
-        hub.claimDeposit{value: 0.001 ether}(poolId, scId, assetId, bytes32(bytes20(msg.sender)));
+        hub.claimDeposit{value: defaultGas}(poolId, scId, assetId, bytes32(bytes20(msg.sender)));
 
         // Claim deposit request
         vault.mint(investAmount, msg.sender);
     }
 
-    function _deploySyncVault(uint16 centrifugeId, ERC20 token, AssetId assetId) internal {
+    function _deploySyncDepositVault(uint16 centrifugeId, ERC20 token, AssetId assetId) internal {
         PoolId poolId = hub.createPool(msg.sender, USD);
+        hub.allowPoolAdmin(poolId, vm.envAddress("ADMIN"), true);
         ShareClassId scId = shareClassManager.previewNextShareClassId(poolId);
 
         D18 navPerShare = d18(1, 1);
 
         hub.setPoolMetadata(poolId, bytes("Testing pool"));
         hub.addShareClass(poolId, "RWA Portfolio", "RWA", bytes32(bytes("2")), bytes(""));
-        hub.notifyPool{value: 0.001 ether}(poolId, centrifugeId);
-        hub.notifyShareClass{value: 0.001 ether}(poolId, centrifugeId, scId, bytes32(bytes20(freelyTransferable)));
+        hub.notifyPool{value: defaultGas}(poolId, centrifugeId);
+        hub.notifyShareClass{value: defaultGas}(poolId, centrifugeId, scId, bytes32(bytes20(freelyTransferable)));
         hub.createHolding(poolId, scId, assetId, identityValuation, false, 0x01);
 
         hub.updateContract(
diff --git a/script/adapters/Wormhole.s.sol b/script/adapters/Wormhole.s.sol
index 57bff6216..a2ec21031 100644
--- a/script/adapters/Wormhole.s.sol
+++ b/script/adapters/Wormhole.s.sol
@@ -16,7 +16,7 @@ contract WormholeDeployer is FullDeployer {
 
         vm.startBroadcast();
 
-        deployFull(localCentrifugeId, ISafe(vm.envAddress("ADMIN")), msg.sender);
+        deployFull(localCentrifugeId, ISafe(vm.envAddress("ADMIN")), msg.sender, false);
 
         WormholeAdapter adapter = new WormholeAdapter(gateway, relayer, localWormholeId, msg.sender);
         wire(remoteCentrifugeId, adapter, msg.sender);
diff --git a/script/utils/JsonRegistry.s.sol b/script/utils/JsonRegistry.s.sol
index bef90c15c..0d4bf36c0 100644
--- a/script/utils/JsonRegistry.s.sol
+++ b/script/utils/JsonRegistry.s.sol
@@ -2,11 +2,14 @@
 pragma solidity 0.8.28;
 
 import "forge-std/Script.sol";
+import {console} from "forge-std/console.sol";
 
 contract JsonRegistry is Script {
     string deploymentOutput;
     uint256 registeredContracts = 0;
 
+    uint64 startTime = uint64(block.timestamp);
+
     function register(string memory name, address target) public {
         deploymentOutput = (registeredContracts == 0)
             ? string(abi.encodePacked(deploymentOutput, '    "', name, '": "0x', vm.toString(target), '"'))
@@ -15,15 +18,19 @@ contract JsonRegistry is Script {
         registeredContracts += 1;
     }
 
-    function startDeploymentOutput() public {
+    function startDeploymentOutput(bool isTests) public {
         deploymentOutput = '{\n  "contracts": {\n';
+
+        if (!isTests) {
+            console.log(
+                "\n\n---------\n\nStarting deployment: %s_%s\n\n", vm.toString(block.chainid), vm.toString(startTime)
+            );
+        }
     }
 
     function saveDeploymentOutput() public {
         string memory path = string(
-            abi.encodePacked(
-                "./deployments/latest/", vm.toString(block.chainid), "_", vm.toString(block.timestamp), ".json"
-            )
+            abi.encodePacked("./deployments/latest/", vm.toString(block.chainid), "_", vm.toString(startTime), ".json")
         );
         deploymentOutput = string(abi.encodePacked(deploymentOutput, "\n  }\n}\n"));
         vm.writeFile(path, deploymentOutput);
diff --git a/src/common/libraries/MessageLib.sol b/src/common/libraries/MessageLib.sol
index 28a31fe9a..19372991e 100644
--- a/src/common/libraries/MessageLib.sol
+++ b/src/common/libraries/MessageLib.sol
@@ -1086,7 +1086,7 @@ library MessageLib {
         });
     }
 
-    function serialize(UpdateHoldingAmount memory t) public pure returns (bytes memory) {
+    function serialize(UpdateHoldingAmount memory t) internal pure returns (bytes memory) {
         bytes memory debits = t.debits.toBytes();
         bytes memory credits = t.credits.toBytes();
 
diff --git a/src/misc/libraries/ConversionLib.sol b/src/misc/libraries/ConversionLib.sol
index f5e5478dd..1690b3591 100644
--- a/src/misc/libraries/ConversionLib.sol
+++ b/src/misc/libraries/ConversionLib.sol
@@ -8,7 +8,7 @@ library ConversionLib {
     using MathLib for uint256;
 
     function convertWithPrice(uint256 baseAmount, uint8 baseDecimals, uint8 quoteDecimals, D18 price)
-        external
+        internal
         pure
         returns (uint256 quoteAmount)
     {
diff --git a/src/vaults/BalanceSheet.sol b/src/vaults/BalanceSheet.sol
index 0c12619cd..0693be532 100644
--- a/src/vaults/BalanceSheet.sol
+++ b/src/vaults/BalanceSheet.sol
@@ -265,7 +265,7 @@ contract BalanceSheet is Auth, Recoverable, IBalanceSheet, IBalanceSheetGatewayH
             IERC6909(asset).transferFrom(address(escrow), receiver, tokenId, amount);
         }
 
-        sender.sendUpdateHoldingAmount(poolId, scId, assetId, receiver, amount, pricePoolPerAsset, true, m);
+        sender.sendUpdateHoldingAmount(poolId, scId, assetId, receiver, amount, pricePoolPerAsset, false, m);
 
         emit Withdraw(
             poolId,
@@ -302,7 +302,7 @@ contract BalanceSheet is Auth, Recoverable, IBalanceSheet, IBalanceSheetGatewayH
         }
 
         escrow.deposit(asset, tokenId, poolId.raw(), scId.raw(), amount);
-        sender.sendUpdateHoldingAmount(poolId, scId, assetId, provider, amount, pricePoolPerAsset, false, m);
+        sender.sendUpdateHoldingAmount(poolId, scId, assetId, provider, amount, pricePoolPerAsset, true, m);
 
         emit Deposit(
             poolId,
diff --git a/test/hub/integration/BaseTest.sol b/test/hub/integration/BaseTest.sol
index e916426f4..b1b17e656 100644
--- a/test/hub/integration/BaseTest.sol
+++ b/test/hub/integration/BaseTest.sol
@@ -62,7 +62,7 @@ contract BaseTest is HubDeployer, Test {
         vm.setEnv(PROOF_COST_ENV, vm.toString(GAS));
 
         // Deployment
-        deployHub(CHAIN_CP, ISafe(ADMIN), address(this));
+        deployHub(CHAIN_CP, ISafe(ADMIN), address(this), true);
         _mockStuff();
         removeHubDeployerAccess(address(this));
 
diff --git a/test/integration/EndToEnd.t.sol b/test/integration/EndToEnd.t.sol
index 22fa9ddeb..7c6d117f0 100644
--- a/test/integration/EndToEnd.t.sol
+++ b/test/integration/EndToEnd.t.sol
@@ -55,7 +55,7 @@ contract TestEndToEnd is Test {
         public
         returns (LocalAdapter adapter)
     {
-        deploy.deployFull(localCentrifugeId, safeAdmin, address(deploy));
+        deploy.deployFull(localCentrifugeId, safeAdmin, address(deploy), true);
 
         adapter = new LocalAdapter(localCentrifugeId, deploy.gateway(), address(deploy));
         deploy.wire(remoteCentrifugeId, adapter, address(deploy));
diff --git a/test/vaults/BaseTest.sol b/test/vaults/BaseTest.sol
index 0a65d9fdc..d3e973bb0 100644
--- a/test/vaults/BaseTest.sol
+++ b/test/vaults/BaseTest.sol
@@ -81,7 +81,7 @@ contract BaseTest is VaultsDeployer, Test {
         ISafe adminSafe = new MockSafe(pausers, 1);
 
         // deploy core contracts
-        deployVaults(THIS_CHAIN_ID, adminSafe, address(this));
+        deployVaults(THIS_CHAIN_ID, adminSafe, address(this), true);
         guardian.file("safe", address(adminSafe));
 
         // deploy mock adapters


Reviews:
user: login: hieronx
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T09:20:44Z
user: login: hieronx
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T09:21:14Z
user: login: hieronx
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T09:21:20Z
user: login: lemunozm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T09:36:50Z
user: login: wischli
body: Great catches on the libs and BalanceSheet!
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T09:39:35Z
user: login: lemunozm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-14T09:43:28Z

Review comments:
diff_hunk: @@ -15,15 +18,19 @@ contract JsonRegistry is Script {
         registeredContracts += 1;
     }
 
-    function startDeploymentOutput() public {
+    function startDeploymentOutput(bool isTests) public {
         deploymentOutput = '{\n  "contracts": {\n';
+
+        if (!isTests) {
+            console.log(
path: script/utils/JsonRegistry.s.sol
user: login: hieronx
body: Making it easier to find the latest file
created_at: 2025-04-14T09:20:44Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1086,7 +1086,7 @@ library MessageLib {
         });
     }
 
-    function serialize(UpdateHoldingAmount memory t) public pure returns (bytes memory) {
+    function serialize(UpdateHoldingAmount memory t) internal pure returns (bytes memory) {
path: src/common/libraries/MessageLib.sol
user: login: hieronx
body: This is really important: libraries should only have internal methods. Otherwise they become externally referenced libraries, which are effectively separate contract deployments. These have all sorts of issues and should not be used.
created_at: 2025-04-14T09:21:14Z
author_association: CONTRIBUTOR
diff_hunk: @@ -265,7 +265,7 @@ contract BalanceSheet is Auth, Recoverable, IBalanceSheet, IBalanceSheetGatewayH
             IERC6909(asset).transferFrom(address(escrow), receiver, tokenId, amount);
         }
 
-        sender.sendUpdateHoldingAmount(poolId, scId, assetId, receiver, amount, pricePoolPerAsset, true, m);
+        sender.sendUpdateHoldingAmount(poolId, scId, assetId, receiver, amount, pricePoolPerAsset, false, m);
path: src/vaults/BalanceSheet.sol
user: login: hieronx
body: cc @mustermeiszer 
created_at: 2025-04-14T09:21:20Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1086,7 +1086,7 @@ library MessageLib {
         });
     }
 
-    function serialize(UpdateHoldingAmount memory t) public pure returns (bytes memory) {
+    function serialize(UpdateHoldingAmount memory t) internal pure returns (bytes memory) {
path: src/common/libraries/MessageLib.sol
user: login: lemunozm
body: I think that was me frightening with the annoying deep stack issue that happened when serializing that message. I wanted to force an external call there. Thanks for the eagle eye!
created_at: 2025-04-14T09:36:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -15,15 +18,19 @@ contract JsonRegistry is Script {
         registeredContracts += 1;
     }
 
-    function startDeploymentOutput() public {
+    function startDeploymentOutput(bool isTests) public {
         deploymentOutput = '{\n  "contracts": {\n';
+
+        if (!isTests) {
+            console.log(
path: script/utils/JsonRegistry.s.sol
user: login: lemunozm
body: NIT. Maybe instead of passing `isTests` for all the files, we can just use an environmental variable? So only from tests we do:

```
vm.setEnv("IS_TESTS", 1);
```

That way we leave deployer interface untouched with testing stuff
created_at: 2025-04-14T09:41:51Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-14T09:24:45Z
body: Coverage after merging <b>fix-deployment</b> into <b>main</b> will be<table><tbody><tr><th>91.06%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>src/common</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/AxelarAdapter.sol'>AxelarAdapter.sol</a></td><td><b>90.91%</b></td><td><b>83.33%</b></td><td>100%</td><td><b>92.59%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/AxelarAdapter.sol#L40-L41'>40&ndash;41</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/AxelarAdapter.sol#L47-L48'>47&ndash;48</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/GasService.sol'>GasService.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol'>Gateway.sol</a></td><td><b>94.49%</b></td><td><b>86.89%</b></td><td><b>95.24%</b></td><td><b>97.09%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L146'>146</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L150'>150</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L206'>206</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L208-L209'>208&ndash;209</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L211'>211</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L216'>216</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L246'>246</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L331'>331</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L395-L396'>395&ndash;396</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L67'>67</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Gateway.sol#L79'>79</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol'>Guardian.sol</a></td><td><b>66.67%</b></td><td><b>41.67%</b></td><td><b>73.33%</b></td><td><b>71.79%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L100'>100</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L104'>104</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L119'>119</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L119-L120'>119&ndash;120</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L32'>32</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L32'>32</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L43-L44'>43&ndash;44</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L44-L46'>44&ndash;46</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L78-L79'>78&ndash;79</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L83-L84'>83&ndash;84</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L88'>88</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Guardian.sol#L96'>96</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol'>MessageDispatcher.sol</a></td><td><b>56.56%</b></td><td><b>39.06%</b></td><td><b>76.67%</b></td><td><b>60.63%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L100-L101'>100&ndash;101</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L124-L125'>124&ndash;125</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L141-L142'>141&ndash;142</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L166-L167'>166&ndash;167</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L194-L195'>194&ndash;195</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L214'>214</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L221'>221</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L221'>221</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L221-L222'>221&ndash;222</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L226'>226</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L240'>240</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L247'>247</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L247'>247</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L247-L248'>247&ndash;248</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L252'>252</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L266'>266</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L270'>270</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L270'>270</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L270-L271'>270&ndash;271</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L273'>273</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L288-L289'>288&ndash;289</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L304-L305'>304&ndash;305</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L321-L322'>321&ndash;322</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L337-L338'>337&ndash;338</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L338'>338</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L338-L339'>338&ndash;339</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L341'>341</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L346-L347'>346&ndash;347</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L347'>347</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L347-L348'>347&ndash;348</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L350'>350</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L355'>355</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L363'>363</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L363'>363</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L363-L364'>363&ndash;364</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L368'>368</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L377'>377</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L381'>381</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L381'>381</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L381-L382'>381&ndash;382</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L384'>384</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L397'>397</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L400'>400</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L413-L414'>413&ndash;414</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L428-L429'>428&ndash;429</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L449-L450'>449&ndash;450</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L467-L468'>467&ndash;468</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L480-L481'>480&ndash;481</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L502-L503'>502&ndash;503</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L530-L531'>530&ndash;531</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L555-L556'>555&ndash;556</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L556'>556</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L556-L557'>556&ndash;557</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L559'>559</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L582-L583'>582&ndash;583</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L594-L595'>594&ndash;595</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageDispatcher.sol#L65-L69'>65&ndash;69</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol'>MessageProcessor.sol</a></td><td><b>78.60%</b></td><td><b>76.25%</b></td><td>100%</td><td><b>78.74%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L103-L111'>103&ndash;111</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L128-L130'>128&ndash;130</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L133-L135'>133&ndash;135</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L161-L162'>161&ndash;162</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L164-L165'>164&ndash;165</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L165'>165</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L165-L166'>165&ndash;166</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L176'>176</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L186-L188'>186&ndash;188</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L188'>188</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L188-L189'>188&ndash;189</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L197'>197</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L217-L219'>217&ndash;219</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L247'>247</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L56-L61'>56&ndash;61</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L73-L75'>73&ndash;75</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/MessageProcessor.sol#L82-L84'>82&ndash;84</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Root.sol'>Root.sol</a></td><td><b>98.48%</b></td><td><b>91.67%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/Root.sol#L34'>34</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/TokenRecoverer.sol'>TokenRecoverer.sol</a></td><td><b>84.62%</b></td><td><b>50%</b></td><td>100%</td><td><b>88.89%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/TokenRecoverer.sol#L25-L26'>25&ndash;26</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/WormholeAdapter.sol'>WormholeAdapter.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/common/libraries</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/JournalEntryLib.sol'>JournalEntryLib.sol</a></td><td><b>92.86%</b></td><td><b>50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/JournalEntryLib.sol#L60-L61'>60&ndash;61</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol'>MessageLib.sol</a></td><td><b>89.14%</b></td><td><b>53.76%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1007'>1007</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1036'>1036</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1068'>1068</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1122'>1122</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1153'>1153</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1184'>1184</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1210'>1210</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1235'>1235</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1279'>1279</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L1332'>1332</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L139'>139</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L188'>188</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L211'>211</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L238'>238</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L259'>259</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L276'>276</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L297'>297</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L321'>321</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L338'>338</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L361'>361</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L402'>402</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L432'>432</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L462'>462</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L488'>488</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L508'>508</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L532'>532</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L560'>560</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L582'>582</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L604'>604</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L625'>625</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L656'>656</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L683'>683</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L706'>706</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L728'>728</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L751'>751</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L774'>774</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L796'>796</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L823'>823</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L849'>849</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L874'>874</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L905'>905</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L940'>940</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/common/libraries/MessageLib.sol#L974'>974</a></td></tr><tr><td colspan='6'><b>src/hooks</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol'>FreelyTransferable.sol</a></td><td><b>55.17%</b></td><td><b>30%</b></td><td><b>63.64%</b></td><td><b>62.50%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L103'>103</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L106'>106</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L106'>106</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L106-L109'>106&ndash;109</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L109'>109</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L109-L111'>109&ndash;111</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L113'>113</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L118-L119'>118&ndash;119</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L119'>119</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L119-L120'>119&ndash;120</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L120'>120</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L120'>120</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L122-L123'>122&ndash;123</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L125'>125</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L129-L131'>129&ndash;131</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L133'>133</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L137'>137</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L143-L145'>143&ndash;145</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L51'>51</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L74'>74</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L76'>76</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L80'>80</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/FreelyTransferable.sol#L82'>82</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hooks/RestrictedTransfers.sol'>RestrictedTransfers.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/hub</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Accounting.sol'>Accounting.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Holdings.sol'>Holdings.sol</a></td><td><b>99.08%</b></td><td><b>96.67%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Holdings.sol#L162'>162</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol'>Hub.sol</a></td><td><b>68.89%</b></td><td><b>31.58%</b></td><td><b>79.55%</b></td><td><b>72.96%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L119-L120'>119&ndash;120</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L138-L139'>138&ndash;139</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L201-L202'>201&ndash;202</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L204'>204</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L267'>267</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L271'>271</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L273'>273</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L273'>273</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L273'>273</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L275'>275</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L288'>288</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L339'>339</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L343'>343</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L345'>345</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L349'>349</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L353'>353</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L355'>355</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L366-L367'>366&ndash;367</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L369'>369</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L373-L374'>373&ndash;374</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L376-L378'>376&ndash;378</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L382-L383'>382&ndash;383</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L385-L387'>385&ndash;387</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L425'>425</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L428'>428</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L428-L429'>428&ndash;429</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L437'>437</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L440'>440</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L440-L441'>440&ndash;441</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L476-L477'>476&ndash;477</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L479'>479</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L481-L483'>481&ndash;483</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L485-L486'>485&ndash;486</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L488'>488</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L525'>525</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L558-L559'>558&ndash;559</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L561'>561</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L561'>561</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L561-L562'>561&ndash;562</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L562'>562</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L562-L563'>562&ndash;563</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L566'>566</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L570-L571'>570&ndash;571</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L573'>573</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L573-L574'>573&ndash;574</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L574'>574</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L574-L575'>574&ndash;575</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L579'>579</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L584'>584</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L587'>587</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L68-L69'>68&ndash;69</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L69'>69</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L69-L70'>69&ndash;70</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L70'>70</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L70-L71'>70&ndash;71</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L71'>71</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L71-L72'>71&ndash;72</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L72'>72</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L72-L73'>72&ndash;73</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L73'>73</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/Hub.sol#L73-L74'>73&ndash;74</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/HubRegistry.sol'>HubRegistry.sol</a></td><td><b>94.29%</b></td><td><b>81.82%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/HubRegistry.sol#L29'>29</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/HubRegistry.sol#L44'>44</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/HubRegistry.sol#L93'>93</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/HubRegistry.sol#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/ShareClassManager.sol'>ShareClassManager.sol</a></td><td><b>99.19%</b></td><td><b>98.85%</b></td><td><b>97.06%</b></td><td><b>99.60%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/ShareClassManager.sol#L537'>537</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/hub/ShareClassManager.sol#L554'>554</a></td></tr><tr><td colspan='6'><b>src/misc</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/Auth.sol'>Auth.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/BaseValuation.sol'>BaseValuation.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/ERC20.sol'>ERC20.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/IdentityValuation.sol'>IdentityValuation.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/Multicall.sol'>Multicall.sol</a></td><td><b>83.33%</b></td><td><b>33.33%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/Multicall.sol#L17'>17</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/Multicall.sol#L17'>17</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/Recoverable.sol'>Recoverable.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/ReentrancyProtection.sol'>ReentrancyProtection.sol</a></td><td><b>90%</b></td><td><b>75%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/ReentrancyProtection.sol#L24'>24</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/TransientValuation.sol'>TransientValuation.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/misc/libraries</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/ArrayLib.sol'>ArrayLib.sol</a></td><td><b>95.83%</b></td><td><b>75%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/ArrayLib.sol#L26'>26</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BitmapLib.sol'>BitmapLib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol'>BytesLib.sol</a></td><td><b>88.68%</b></td><td><b>50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L110'>110</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L121'>121</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L132'>132</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L14'>14</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L143'>143</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L154'>154</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L165'>165</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L176'>176</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L72'>72</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L77'>77</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L88'>88</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/BytesLib.sol#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/CastLib.sol'>CastLib.sol</a></td><td><b>93.75%</b></td><td><b>62.50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/CastLib.sol#L10'>10</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/CastLib.sol#L19'>19</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/CastLib.sol#L43'>43</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/ConversionLib.sol'>ConversionLib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/EIP712Lib.sol'>EIP712Lib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol'>MathLib.sol</a></td><td><b>73.74%</b></td><td><b>68.42%</b></td><td>100%</td><td><b>71.83%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L100'>100</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L108'>108</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L111'>111</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L114'>114</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L117'>117</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L121'>121</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L126'>126</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L131-L136'>131&ndash;136</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L142-L143'>142&ndash;143</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L33-L34'>33&ndash;34</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L43'>43</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L45'>45</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L47'>47</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L49'>49</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L51'>51</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L86'>86</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L93'>93</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L96'>96</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/MathLib.sol#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/SafeTransferLib.sol'>SafeTransferLib.sol</a></td><td><b>96.97%</b></td><td><b>92.86%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/SafeTransferLib.sol#L59'>59</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/SignatureLib.sol'>SignatureLib.sol</a></td><td><b>95.24%</b></td><td><b>80%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/SignatureLib.sol#L17'>17</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/StringLib.sol'>StringLib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/TransientStorage.sol'>TransientStorage.sol</a></td><td><b>54.55%</b></td><td>100%</td><td><b>66.67%</b></td><td><b>50%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/TransientStorage.sol#L18'>18</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/TransientStorage.sol#L20'>20</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/TransientStorage.sol#L6'>6</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/misc/libraries/TransientStorage.sol#L8'>8</a></td></tr><tr><td colspan='6'><b>src/vaults</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol'>AsyncRequests.sol</a></td><td><b>95.47%</b></td><td><b>82.61%</b></td><td>100%</td><td><b>99.59%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L118'>118</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L145'>145</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L295'>295</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L326'>326</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L331'>331</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L384'>384</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L430'>430</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L436'>436</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L485'>485</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L489'>489</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L494'>494</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L497'>497</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L512'>512</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L74-L75'>74&ndash;75</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncRequests.sol#L88-L89'>88&ndash;89</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncVault.sol'>AsyncVault.sol</a></td><td><b>93.75%</b></td><td><b>75%</b></td><td><b>94.12%</b></td><td><b>96.36%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncVault.sol#L142'>142</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncVault.sol#L44'>44</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncVault.sol#L48'>48</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/AsyncVault.sol#L51'>51</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol'>BalanceSheet.sol</a></td><td><b>84.62%</b></td><td><b>83.33%</b></td><td><b>80.95%</b></td><td><b>85.71%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L167'>167</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L176'>176</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L178'>178</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L182'>182</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L191-L192'>191&ndash;192</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L196'>196</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L200'>200</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L204'>204</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L208'>208</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L262'>262</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L265'>265</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L298'>298</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L301'>301</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L68'>68</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BalanceSheet.sol#L79'>79</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseInvestmentManager.sol'>BaseInvestmentManager.sol</a></td><td><b>80.56%</b></td><td><b>0%</b></td><td><b>85.71%</b></td><td><b>85.19%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseInvestmentManager.sol#L33-L34'>33&ndash;34</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseInvestmentManager.sol#L34'>34</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseInvestmentManager.sol#L34-L36'>34&ndash;36</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseVaults.sol'>BaseVaults.sol</a></td><td><b>94.97%</b></td><td><b>80.77%</b></td><td><b>97.56%</b></td><td><b>96.97%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseVaults.sol#L127'>127</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseVaults.sol#L140'>140</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseVaults.sol#L219'>219</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseVaults.sol#L227'>227</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseVaults.sol#L227'>227</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/BaseVaults.sol#L368-L371'>368&ndash;371</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/Escrow.sol'>Escrow.sol</a></td><td><b>87.23%</b></td><td><b>78.26%</b></td><td>100%</td><td><b>88.71%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/Escrow.sol#L100'>100</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/Escrow.sol#L104-L105'>104&ndash;105</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/Escrow.sol#L105'>105</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/Escrow.sol#L105'>105</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/Escrow.sol#L56'>56</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/Escrow.sol#L56'>56</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/Escrow.sol#L56-L58'>56&ndash;58</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/Escrow.sol#L60-L61'>60&ndash;61</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol'>PoolManager.sol</a></td><td><b>91.20%</b></td><td><b>83.33%</b></td><td>100%</td><td><b>92.89%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L237'>237</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L288'>288</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L291'>291</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L303'>303</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L305'>305</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L308'>308</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L311'>311</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L311'>311</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L311-L313'>311&ndash;313</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L315-L316'>315&ndash;316</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L316'>316</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L316'>316</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L318-L321'>318&ndash;321</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L321'>321</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L321-L323'>321&ndash;323</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L325'>325</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L327-L328'>327&ndash;328</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L330'>330</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L422'>422</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L459'>459</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/PoolManager.sol#L475'>475</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncDepositVault.sol'>SyncDepositVault.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol'>SyncRequests.sol</a></td><td><b>78.53%</b></td><td><b>62.50%</b></td><td><b>90.91%</b></td><td><b>80.49%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L102-L103'>102&ndash;103</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L127-L128'>127&ndash;128</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L130'>130</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L130'>130</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L130-L131'>130&ndash;131</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L131'>131</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L131'>131</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L133'>133</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L135-L136'>135&ndash;136</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L138-L140'>138&ndash;140</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L142-L143'>142&ndash;143</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L143-L144'>143&ndash;144</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L155'>155</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L157'>157</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L166'>166</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L183'>183</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/761444feff6362d1c18c56eedf0b4adeb1bac9e8/src/vaults/SyncRequests.sol#L226-L227'>226&ndash;22
author_association: NONE