CityCoins
Search
K

Activation

CityCoin contract functions related to activation and registration.

Overview

The launch of a CityCoin happens in a three-step process:
  1. 1.
    The contract for a CityCoin is deployed mainnet on the Stacks blockchain
  2. 2.
    The auth contract is initialized (a one-time function to set everything up)
  3. 3.
    20 unique wallets send a transaction to the contract signaling activation
Once the threshold is met, a 150 block (~24hr) countdown begins after which anyone is eligible to try and mine the CityCoins within a given Stacks block.
There are no CityCoins issued or distributed prior to the start of mining.

Details

Registration happens by calling the register-user function in the CityCoin contract, which can be done with the Stacks Web Wallet through an interface like minecitycoins.com.
An example of the code used in the CityCoins UI can be found in the RegisterUser component on GitHub.
A nominal transaction fee is required in order to send this transaction, paid in STX, and you can optionally include a memo of up to 50 characters that will be recorded on-chain.
Once the threshold is reached, the register-user function will:
  • calculate the activation block height + the activation delay
  • set the core as active in the core contract map in auth
  • set the token as active and set the coinbase amounts and coinbase thresholds
    (based on the activation block height)
  • set the coinbase amounts and thresholds in core to match that of token

Functions

get-activation-block

Type: Read-only Function
Success: (ok (var-get activationBlock)) returned as a uint
Error: ERR_CONTRACT_NOT_ACTIVATED u1005
Returns the Stacks block height at which the city was activated, or an error if not.

get-activation-delay

Type: Read-only Function
Returns: (var-get activation-delay) as a uint
Returns the activation delay for mining and stacking to become available.

get-activation-status

Type: Read-only Function
Returns: (var-get activationReached) as a boolean
Returns the activation status of the contract.
get-activation-target
Type: Read-only Function
Returns: (var-get activationTarget) as a uint
Returns the activation target of the contract, which is the block mining and stacking will become available.

get-activation-threshold

Type: Read-only Function
Returns: (var-get activationThreshold) as uint
Returns the number of users required to register for activation of the contract.

get-registered-users-nonce

Type: Read-only Function
Returns: (var-get usersNonce) as uint
Returns the total number of registered users in the contract, including those registered after activation occurs.

get-user-id

Type: Read-only Function
Input: user as principal
Returns: (some uint) OR (none)
Returns the user ID of a given principal.

get-user

Type: Read-only Function
Input: userId as uint
Returns: (some principal) OR (none)
Returns the principal of a given user ID.

register-user

Type: Public Function
Inputs: optional memo as string-utf8, length 50
Success: (ok true)
Errors:
  • ERR_USER_ALREADY_REGISTERED u1001
  • ERR_ACTIVATION_THRESHOLD_REACHED u1004
Registration occurs through calling the register-user function in the contract, which optionally accepts up to 50 characters as a memo to record on-chain.