From 43fc73bbff9799e39ff9008bf5719422a898dfa1 Mon Sep 17 00:00:00 2001 From: philbow61 Date: Mon, 23 Feb 2026 13:58:48 +0100 Subject: [PATCH 1/3] fix: make metadata mento specific --- contracts/src/NFTMetadata/MetadataNFT.sol | 4 ++-- contracts/src/NFTMetadata/utils/bauhaus.sol | 11 ++--------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/contracts/src/NFTMetadata/MetadataNFT.sol b/contracts/src/NFTMetadata/MetadataNFT.sol index 6f0673e03..fdfcf6c48 100644 --- a/contracts/src/NFTMetadata/MetadataNFT.sol +++ b/contracts/src/NFTMetadata/MetadataNFT.sol @@ -36,11 +36,11 @@ contract MetadataNFT is IMetadataNFT { function uri(TroveData memory _troveData) public view returns (string memory) { string memory attr = attributes(_troveData); return json.formattedMetadata( - string.concat("Liquity V2 - ", IERC20Metadata(_troveData._collToken).name()), + string.concat("Liquity V2 - Mento V3 ", IERC20Metadata(_troveData._collToken).name()), string.concat( "Liquity V2 is a collateralized debt platform. Users can lock up ", IERC20Metadata(_troveData._collToken).symbol(), - " to issue stablecoin tokens (BOLD) to their own Ethereum address. The individual collateralized debt positions are called Troves, and are represented as NFTs." + " to issue stablecoin token", IERC20Metadata(_troveData._boldToken).symbol(), " to their own address. The individual collateralized debt positions are called Troves, and are represented as NFTs." ), renderSVGImage(_troveData), attr diff --git a/contracts/src/NFTMetadata/utils/bauhaus.sol b/contracts/src/NFTMetadata/utils/bauhaus.sol index 437203e03..e63d3232f 100644 --- a/contracts/src/NFTMetadata/utils/bauhaus.sol +++ b/contracts/src/NFTMetadata/utils/bauhaus.sol @@ -25,15 +25,8 @@ library bauhaus { function _bauhaus(string memory _collName, uint256 _troveId) internal pure returns (string memory) { bytes32 collSig = keccak256(bytes(_collName)); uint256 variant = _troveId % 4; - - if (collSig == keccak256("WETH")) { - return _img1(variant); - } else if (collSig == keccak256("wstETH")) { - return _img2(variant); - } else { - // assume rETH - return _img3(variant); - } + // Always use _img1 because in MentoV3 we only have one collateral token + return _img1(variant); } function _colorCode2Hex(colorCode _color) private pure returns (string memory) { From f0053b9bb7220fc1330a5f03101ce347a0c8e07b Mon Sep 17 00:00:00 2001 From: philbow61 Date: Tue, 24 Feb 2026 15:48:34 +0100 Subject: [PATCH 2/3] chore: update NFT metadata --- contracts/src/NFTMetadata/MetadataNFT.sol | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/contracts/src/NFTMetadata/MetadataNFT.sol b/contracts/src/NFTMetadata/MetadataNFT.sol index fdfcf6c48..d65b19222 100644 --- a/contracts/src/NFTMetadata/MetadataNFT.sol +++ b/contracts/src/NFTMetadata/MetadataNFT.sol @@ -36,11 +36,13 @@ contract MetadataNFT is IMetadataNFT { function uri(TroveData memory _troveData) public view returns (string memory) { string memory attr = attributes(_troveData); return json.formattedMetadata( - string.concat("Liquity V2 - Mento V3 ", IERC20Metadata(_troveData._collToken).name()), + string.concat("Mento Liquity V2 -", IERC20Metadata(_troveData._collToken).name()), string.concat( - "Liquity V2 is a collateralized debt platform. Users can lock up ", + "Mento Liquity V2 is a collateralized debt platform. Users can lock up ", IERC20Metadata(_troveData._collToken).symbol(), - " to issue stablecoin token", IERC20Metadata(_troveData._boldToken).symbol(), " to their own address. The individual collateralized debt positions are called Troves, and are represented as NFTs." + " to issue ", + IERC20Metadata(_troveData._boldToken).symbol(), + " to their own address. The individual collateralized debt positions are called Troves, and are represented as NFTs." ), renderSVGImage(_troveData), attr From ee89eab4dace8d8079a788918f614c0a2859ee19 Mon Sep 17 00:00:00 2001 From: philbow61 Date: Tue, 24 Feb 2026 16:00:19 +0100 Subject: [PATCH 3/3] fix: NFT metadata test --- contracts/src/NFTMetadata/MetadataNFT.sol | 2 +- contracts/test/troveNFT.t.sol | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/src/NFTMetadata/MetadataNFT.sol b/contracts/src/NFTMetadata/MetadataNFT.sol index d65b19222..91fdceb79 100644 --- a/contracts/src/NFTMetadata/MetadataNFT.sol +++ b/contracts/src/NFTMetadata/MetadataNFT.sol @@ -36,7 +36,7 @@ contract MetadataNFT is IMetadataNFT { function uri(TroveData memory _troveData) public view returns (string memory) { string memory attr = attributes(_troveData); return json.formattedMetadata( - string.concat("Mento Liquity V2 -", IERC20Metadata(_troveData._collToken).name()), + string.concat("Mento Liquity V2 - ", IERC20Metadata(_troveData._collToken).name()), string.concat( "Mento Liquity V2 is a collateralized debt platform. Users can lock up ", IERC20Metadata(_troveData._collToken).symbol(), diff --git a/contracts/test/troveNFT.t.sol b/contracts/test/troveNFT.t.sol index 03ef11ee0..d42dfbd07 100644 --- a/contracts/test/troveNFT.t.sol +++ b/contracts/test/troveNFT.t.sol @@ -201,11 +201,11 @@ contract troveNFTTest is DevTestSetup { string memory decodedUri = string(Base64.decode(uriSplit)); // Check for expected attributes - assertTrue(LibString.contains(decodedUri, '"name": "Liquity V2 - '), "NFT Name attribute missing"); + assertTrue(LibString.contains(decodedUri, '"name": "Mento Liquity V2 - '), "NFT Name attribute missing"); assertTrue( LibString.contains( - decodedUri, '"description": "Liquity V2 is a collateralized debt platform. Users can lock up' + decodedUri, '"description": "Mento Liquity V2 is a collateralized debt platform. Users can lock up' ), "NFT description attribute missing" );