Watermark Upkeep
Node Processing and Upkeep
The upkeep contract enables anyone to verify watermarked asset validity and retrieve watermark information without relying on a centralized database.
Process Flow
Nodes store Merkle nodes in IPFS
Nodes submit Merkle root and IPFS URI to the Upkeep contract through
performUpkeep
:
function performUpkeep(
uint256 _chainId,
uint256 _partitionId,
bytes32 _merkleRoot,
string calldata merkleTreeURI
)
Verification
Watermark batches in a partition can be verified using the verifyMerkleProof
method:
function verifyMerkleProof(
uint256 _chainId,
uint256 _partitionId,
bytes32[] calldata _proof,
bytes32 _leaf
) external view returns (bool) {
bytes32 merkleRoot = merkleProofs[_chainId][_partitionId].merkleRoot;
if (merkleRoot == bytes32(0)) {
revert InvalidPartitionId();
}
return MerkleProof.verify(_proof, merkleRoot, _leaf);
}
Parameters for verification are available in the PerformUpkeep event:
event PerformUpkeep(
uint256 indexed chainId,
uint256 indexed partitionId,
bytes32 indexed watermarkTreeRoot,
string merkleTreeURI
);
The event's merkleTreeURI contains watermark hashes and IPFS links to media assets.
Protocol Benefits
Multiple watermarks can be registered in a single transaction, reducing gas costs
Users pay appropriate fees for watermark processing
Creators can defer watermark fees to buyers through lazy minting
Last updated