TCO2 contracts

TCO2 tokens represents tokenized carbon credits

A separate TCO2 contract is created for each different vintage issuance. Each token contract has the same standard functions, extends ERC20, and is upgradeable.

retire

To retire a given amount of CO2 tons. The credits are permanently removed from circulation — this achieves the offset. This also emits a Retired event.

function retire(uint256 amount) public virtual returns (uint256 retirementEventId);

Params

NameTypeDescription

amount

uint256

Amount of TCO2 tokens to retire

Return values

NameTypeDescription

retirementEventId

uint256

The ID of the event emitted upon retirement. Can be used later to mint RetirementCertificates

retireFrom

Achieves similar functionality as retire(), but instead of retiring from the caller's address, it does so from the provided address. This allow for pools or third party contracts to retire for the user.

This function requires the user to approve the third party from the TCO2 contract.

function retireFrom(address account, uint256 amount) external virtual returns (uint256 retirementEventId);

Params

NameTypeDescription

account

address

Address from which to retire

amount

uint256

Amount of TCO2 tokens to retire

Return values

NameTypeDescription

retirementEventId

uint256

The ID of the event emitted upon retirement. Can be used later to mint RetirementCertificates

retireAndMintCertificate

Retires an amount of TCO2 tokensand mints a certificate, passing the retirementEventId. The information provided is set in the RetirementCertificate NFT.

Note: This information is publicly written to the blockchain in plaintext.

function retireAndMintCertificate(
    string calldata retiringEntityString,
    address beneficiary,
    string calldata beneficiaryString,
    string calldata retirementMessage,
    uint256 amount
) external virtual;

Params

NameTypeDescription

retiringEntityString

string

An identifiable string for the retiring entity, e.g. their name

beneficiary

address

The address of the beneficiary

beneficiaryString

string

An identifiable string for the beneficiary, e.g. their name

retirementMessage

string

A retirement message

amount

uint256

Amount of TCO2 tokens to retire

mintCertificateLegacy

This function mints a RetirementCertificate NFT based on the legacy retirement functionality. This function is used only for backwards-compatibility reasons. (In case you retired before the RetirementCertificates NFT was introduced, but still want the NFT.)

Some context: before the RetirementCertificates NFT was introduced, retirements didn't emit the Retired event. How much an address/entity had retired was stored solely in a mapping (mapping(address => uint256) public retiredAmount;).

  • This is relevant for retirements performed before Block 27360444 on Polygon

  • All retirements on Celo are compatible with RetirementCertificates

Going forward users should mint NFT either directly in the RetirementCertificates contract or using the retireAndMintCertificate() function above.

function mintCertificateLegacy(
    string calldata retiringEntityString,
    address beneficiary,
    string calldata beneficiaryString,
    string calldata retirementMessage,
    uint256 amount
) external;

Params

NameTypeDescription

retiringEntityString

string

An identifiable string for the retiring entity, eg. their name.

beneficiary

address

The address of the beneficiary to set in the NFT.

beneficiaryString

string

An identifiable string for the beneficiary to set in the NFT, eg. their name

retirementMessage

string

A retirement message to be set in the NFT

amount

uint256

Amount of TCO2 to retire and issue a RetirementCertificates NFT for.

getAttributes

Function to get corresponding attributes from the carbon project vintage that is represented by this TCO2 contract.

function getAttributes() public view virtual returns (ProjectData memory, VintageData memory);

The return values are tuples — below you can find the definitions of the ProjectData & VintageData structs.

struct ProjectData {
    string projectId;
    string standard;
    string methodology;
    string region;
    string storageMethod;
    string method;
    string emissionType;
    string category;
    string uri;
    address beneficiary;
}

struct VintageData {
    /// @dev A human-readable string which differentiates this from other vintages in
    /// the same project, and helps build the corresponding TCO2 name and symbol.
    string name; // the vintage year
    uint64 startTime; // UNIX timestamp
    uint64 endTime; // UNIX timestamp
    uint256 projectTokenId;
    uint64 totalVintageQuantity;
    bool isCorsiaCompliant;
    bool isCCPcompliant;
    string coBenefits;
    string correspAdjustment;
    string additionalCertification;
    string uri;
}

Last updated