Why build here
Low, predictable fees
SIN is a pure gas utility token with no pre-mine. Complex contracts stay affordable for the people who use them.
Nothing new to learn
Same Solidity, same bytecode, same wallets. Your existing toolchain works by adding one network entry.
Users who care about impact
The ecosystem is built around social and environmental applications — not speculation.
Decentralization by default
Avoid privileged owner functions where you can. When setup requires them, call renounceOwnership afterwards.
Network configuration
The same values for every tool and wallet.
The contract
Save this as ImpactRegistry.sol. Anyone can publish a claim; the full list stays readable on-chain.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
/// @notice Minimal registry: anyone can publish an impact claim on-chain.
contract ImpactRegistry {
struct Claim {
address author;
string uri;
uint256 timestamp;
}
Claim[] public claims;
event ClaimPublished(uint256 indexed id, address indexed author, string uri);
function publish(string calldata uri) external returns (uint256 id) {
id = claims.length;
claims.push(Claim(msg.sender, uri, block.timestamp));
emit ClaimPublished(id, msg.sender, uri);
}
function total() external view returns (uint256) {
return claims.length;
}
}Deploy the sample contract
A minimal impact registry. Pick your tool and follow the steps.
- 1
Add the network
Add a sintrop entry to your Hardhat config. Keep the deployer key in an environment variable, never in the file.
hardhat.config.ts// hardhat.config.ts import type { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; const config: HardhatUserConfig = { solidity: "0.8.24", networks: { sintrop: { url: "https://rpc.sintrop.com", chainId: 250225, accounts: [process.env.PRIVATE_KEY ?? ""], }, }, }; export default config; - 2
Deploy
Run your deploy script against the network. Hardhat prints the deployed address.
bashnpx hardhat run scripts/deploy.ts --network sintrop
After deploying
- 1Open the transaction on the explorer to confirm the contract address and code.
- 2Interact from a script, a frontend, or the explorer's read/write tabs.
- 3If your contract is Ownable and setup is done, send renounceOwnership() to keep it trustless.
