### PoC
Deploy the SoulboundProfileNFT contract.
As two different users (e.g., 0x123 and 0x456), mint profiles with identical data:
```solidity
soulboundNFT.mintProfile("John Doe", 30, "ipfs://profile1");
soulboundNFT.mintProfile("John Doe", 30, "ipfs://profile1");
```
Verify that both users can successfully mint profiles with the same data.
Add this to the test file
PoC Code:
```solidity
function testMultipleUsersSameProfile() public {
address user1 = address(0x123);
address user2 = address(0x456);
vm.deal(user1, 1 ether);
vm.deal(user2, 1 ether);
vm.prank(user1);
soulboundNFT.mintProfile("John Doe", 30, "ipfs://profile1");
vm.prank(user2);
soulboundNFT.mintProfile("John Doe", 30, "ipfs://profile1");
// Check if both users have minted profiles with the same data
uint256 tokenIdUser1 = soulboundNFT.profileToToken(user1);
uint256 tokenIdUser2 = soulboundNFT.profileToToken(user2);
assertNotEq(tokenIdUser1, 0, "User1 should have minted profile");
assertNotEq(tokenIdUser2, 0, "User2 should have minted profile");
}
```
The Result
```solidity
[⠊] Compiling...
No files changed, compilation skipped
Ran 1 test for test/testSoulboundProfileNFT.t.sol:SoulboundProfileNFTTest
[PASS] testMultipleUsersSameProfile() (gas: 327211)
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.60ms (1.35ms CPU time)
```
Explanation:
This PoC shows that the contract allows multiple users to create profiles with identical data, which could be exploited for impersonation or to confuse other users.
Without unique constraints on profile data, the system cannot distinguish between legitimate users and those using the same profile maliciously or mistakenly, potentially leading to identity confusion or fraud within the platform.