Verifying the Core OTCVenue Contract
Use the following steps to confirm the canonical OTCVenue contract address resolves to a verified deployment on the Robinhood Chain block explorer and that its source matches what the project publishes.Obtain the official contract address
Get the canonical OTCVenue contract address from the official Canopy documentation or announcement channels only. Never copy an address from a social media post, a Discord message from an unverified account, or a third-party site — these are common phishing vectors.
Search for the address on the block explorer
Navigate to the Robinhood Chain block explorer and paste the address into the search bar. Confirm the explorer resolves it as a contract account, not an externally owned account (EOA).
Confirm source code verification on the Contract tab
Click the Contract tab on the address page. A verified contract displays a green checkmark next to the source code heading. If the tab shows only bytecode with no source, the contract is unverified — do not interact with it.
Check the contract name and compiler version
In the verified source section, confirm that the contract name reads
OTCVenue and that the Solidity compiler version is 0.8.24 with optimizer enabled. A mismatch may indicate a redeployed or modified contract.Download or copy the ABI
Scroll to the ABI section of the Contract tab and copy the JSON ABI. Save it as
OTCVenueABI.json in your project. This ABI is generated directly from the verified source, so it is guaranteed to match the deployed contract interface.Cross-reference against the Canopy GitHub repository
Open the Canopy GitHub repository and locate the published ABI artifact for the same release version. Diff it against the ABI you copied from the explorer. The two should be identical. Any discrepancy warrants further investigation before you proceed.
Verifying ClaimToken Contracts
Each Canopy forward series deploys its own ERC-20 ClaimToken contract at a unique address. Verify these the same way you verify the core contract. To find a series’ ClaimToken address, either:- Read the
SeriesCreatedevent log emitted when the series was first filled — theclaimTokenaddress is included in the event parameters. - Call
series(seriesId)on the OTCVenue contract (whereseriesId = keccak256(abi.encode(asset, unlockTime))) and read theclaimTokenfield from the returned struct. - Use the venue’s
seriesIdFor(asset, unlockTime)helper function to compute the series ID.
ClaimToken and an ERC-20-compatible interface.
ClaimToken contracts implement the standard ERC-20 interface. You do not need a Canopy-specific ABI to call
balanceOf, transfer, or approve on them — any generic ERC-20 ABI works for those operations.