Core Contracts & API

This page provides contract addresses for key components of GoodDollar protocol.

Contracts & API

GoodDollar Protocol is deployed on both the Ethereum mainnet and on the Fuse sidechain. Contracts like the GoodReserve are only on Mainnet, and other contracts like the UBIScheme are only on the Fuse sidechain. Certain contracts, such as the DAO and G$ Token contracts, are deployed on both networks.

Core Contracts

Core Contracts

GoodDollar G$ ERC-20

GoodDollar G$ ERC-20

The GoodDollar G$ token follows the ERC-20 token standard and also supports ERC-677.

GoodStaking

GoodStaking

Supporters / stakers can stake crypto which is then sent to permissionless protocols which earn interest. The FundManager has permissions to collect interest-earned from this contract.

GoodReserve

GoodReserve

The GoodReserve mints G$ based on the interest transferred from the FundManager. Only the FundManager can trigger minting. The GoodReserve also acts as the GoodDollar liquidity pool and AMM (Automatic Market Maker) and enables methods to buy and sell G$s.

GoodFundManager

GoodFundManager

Has permissions to collect interest from the GoodStaking contract and permissions to tell GoodReserve to mint. Anyone can trigger the collection and minting process

UBIScheme

UBIScheme

Holds all the G$s that were transferred via bridge from the FundManager. The pool of G$s is divided equally by the amount of current active users, and distributed every day. Each active user can then "claim" his quota. If a user fails to claim his quota it becomes part of the next day's pool of G$ to be distributed as basic income.

Identity

Identity

The identity contract controls addresses that are whitelisted to "Claim" UBI.

  • Face Verification GoodDollar currently whitelists users based on a user proving "uniqueness" by signing up with a live and unique face. All image data and details are anonymized in order to allow the user to create a new account in case he is unable to recover his wallet. Facial details are deleted after authenticationPeriod and users are required to perform face verification again every authenticationPeriod days.

  • Social Profile Each blockchain address is linked to the user's public profile as created in the wallet. The DID is the node id in the public p2p GunDB database. Mappings from wallet address to DID are held in addrTODID

OneTimePayments

OneTimePayments

Payments on the GoodDollar wallet are done via payment links. G$s are held in escrow and the recipient can retrieve the funds if he has the key. While the money is in escrow the sender can choose to cancel the payment and retrieve the funds. Based on Celo's payments contract.

DonationsStaking

DonationsStaking

Any ETH/DAI sent to this contract address is donated to the GoodDollar DAO and will generate interest to fund UBI. The funds are periodically staked in the GoodStaking contract by calling the stakeDonationsmethod.

GoodMarketMaker

GoodMarketMaker

Helper contract for the GoodReserve.

ContributionCalculation

ContributionCalculation

Helper contract for calculating the exit contribution (ie when selling G$ back to the reserve)

FirstClaimPool

FirstClaimPool

Helper contract for UBIScheme. Manually funded by the Foundation to give 1G$ for "inactive" users when they claim. Since a new user (inactive) becomes active and eligible to claim UBI only in the next UBI epoch. So for new users not go empty handed on their first claim we give out a 1G$.

AdminWallet

AdminWallet

Helper contract for our backend servers to whitelist users and to fill their Fuse network gas.

Token Bridge Contracts

Token Bridge Contracts

Bridge contracts were developed by Fuse.

Note: for regular users it is recommended to use FuseSwap Bridge in order to avoid losing your tokens (help). FuseSwap Bridge: Mainnet -> Fuse | Fuse -> Mainnet.

Note: for regular users it is recommended to use FuseSwap Bridge in order to avoid losing your tokens (help). FuseSwap Bridge: Mainnet -> Fuse | Fuse -> Mainnet.

DAO Contracts

DAO Contracts

DAO contracts were developed by DAOStack

Last updated

Was this helpful?