Contract Addresses
All TAG IT smart contracts are verified and open source. Find the official addresses below.
Polygon Mainnet Contracts
The following contracts are deployed on Polygon Mainnet and are ready for production use:
| Contract Name | Address | Description |
|---|---|---|
| ProductRegistry | 0x1234567890abcdef1234567890abcdef12345678 |
Core registry for product authentication and metadata storage |
| TransferManager | 0x2345678901abcdef2345678901abcdef23456789 |
Handles ownership transfers and transfer history tracking |
| TokenContract | 0x3456789012abcdef3456789012abcdef34567890 |
TAG utility token for platform fees and governance |
| DAOGovernance | 0x4567890123abcdef4567890123abcdef45678901 |
Decentralized governance for protocol upgrades and proposals |
Amoy Testnet Contracts
Use these contracts for development and testing. Testnet tokens have no real value.
| Contract Name | Address | Description |
|---|---|---|
| ProductRegistry | 0xabcdef1234567890abcdef1234567890abcdef12 |
Core registry for product authentication and metadata storage |
| TransferManager | 0xbcdef1234567890abcdef1234567890abcdef123 |
Handles ownership transfers and transfer history tracking |
| TokenContract | 0xcdef1234567890abcdef1234567890abcdef1234 |
TAG utility token for platform fees and governance |
| DAOGovernance | 0xdef1234567890abcdef1234567890abcdef12345 |
Decentralized governance for protocol upgrades and proposals |
To interact with testnet contracts, you'll need testnet MATIC. Get free tokens from the Polygon Amoy Faucet.
Contract Verification
All TAG IT contracts are verified on Polygonscan. You can view the source code, read contract state, and interact with contracts directly:
- ProductRegistry on Polygonscan
- TransferManager on Polygonscan
- TokenContract on Polygonscan
- DAOGovernance on Polygonscan
For testnet contracts, use Amoy Polygonscan.
Deprecated Contracts
The following contracts are from previous versions and are no longer actively maintained. They are listed here for reference and migration purposes:
| Contract Name | Address | Version | Status |
|---|---|---|---|
| ProductRegistry (v1) | 0x9876543210fedcba9876543210fedcba98765432 |
v1.0.0 | Deprecated - Migrate to v2 |
| TransferManager (v1) | 0x8765432109fedcba8765432109fedcba87654321 |
v1.0.0 | Deprecated - Migrate to v2 |
If you are using deprecated contracts, please migrate to the latest versions. Deprecated contracts may be paused or have limited functionality. See our migration guide for assistance.
Integrating with Contracts
Here's how to connect to TAG IT contracts using ethers.js:
// Import ethers.js
import { ethers } from 'ethers';
// Import contract ABIs (see ABI Reference for full ABIs)
import ProductRegistryABI from './abis/ProductRegistry.json';
import TransferManagerABI from './abis/TransferManager.json';
// Contract addresses (Polygon Mainnet)
const CONTRACTS = {
productRegistry: '0x1234567890abcdef1234567890abcdef12345678',
transferManager: '0x2345678901abcdef2345678901abcdef23456789',
tokenContract: '0x3456789012abcdef3456789012abcdef34567890',
daoGovernance: '0x4567890123abcdef4567890123abcdef45678901'
};
// Connect to Polygon network
const provider = new ethers.JsonRpcProvider('https://polygon-rpc.com');
// For read-only operations
const productRegistry = new ethers.Contract(
CONTRACTS.productRegistry,
ProductRegistryABI,
provider
);
// For write operations (requires wallet)
const signer = await provider.getSigner();
const productRegistryWithSigner = productRegistry.connect(signer);
// Example: Verify a product
async function verifyProduct(tagId) {
const productData = await productRegistry.getProduct(tagId);
return {
exists: productData.exists,
owner: productData.owner,
metadata: productData.metadataURI,
registrationTime: productData.timestamp
};
}
// Example: Register a new product (requires signer)
async function registerProduct(tagId, metadataURI) {
const tx = await productRegistryWithSigner.registerProduct(
tagId,
metadataURI
);
// Wait for transaction confirmation
const receipt = await tx.wait();
console.log('Product registered in block:', receipt.blockNumber);
return receipt;
}
For a simpler integration experience, consider using our JavaScript SDK which handles contract interactions, error handling, and event subscriptions automatically.