/citycoin

A smart contract implementation of the Proof of Transfer consensus mechanism, allowing for the mining and Stacking of a new fungible token on the Stacks blockchain with a portion of miner rewards going to a custodied account for a city to #pickupthebag.

Primary LanguageTypeScriptGNU General Public License v3.0GPL-3.0

CityCoins on Stacks

Abstract

Support a city by mining, buying, or holding their CityCoin, all while generating yield in STX and BTC.

Coming very soon!

Contributing

For more information on the project, its goals, and technical details, please review the Product Requirements Document.

PRs are welcome! Please see the open issues and comment if interested, or submit a PR for review.

All code submitted should be thoroughly commented and tested where applicable. Configurable options for the smart contract or the web UI should be listed as constants.

Testing

Contracts are tested via clarinet and javascript.

To test the contract using clarinet, first install the tool to make it available on your system.

The following commands are used to run the tests:

  • npm run clarinet:prepare
  • npm run clarinet:test, npm test, npm run test
  • npm run clarinet:check
  • npm run clarinet:console

A bash script is provided to prepare the tests as part of clarinet:prepare, and executes the following steps:

  1. copies all contract files from ./contracts to ./contracts/clarinet
  2. modifies address used in impl-trait by replacing it with a different address. e.g. (impl-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-10-ft-standard.ft-trait) is converted to: (impl-trait 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.sip-10-ft-standard.ft-trait)
  3. appends at the end of file content of test add-on file with the same name, stored in ./contracts/test_addons

Note: clarinet:test, clarinet:check, and clarinet:console automatically execute clarinet:prepare.

Definitions and Resources

Some quick definitions and additional resources related to the technology behind the project.

  • Stacks Blockchain: Stacks makes Bitcoin programmable, enabling decentralized apps and smart contracts that inherit all of Bitcoin’s powers.
  • Proof of Transfer (PoX): The consensus mechanism for the Stacks blockchain, which is modified to implement the citycoins.
  • Clarity Language: A smart contract language developed by Blockstack (now Hiro) and Algorand, designed to be more safe, secure, and predictable.
  • Smart Contract: A computer program or a transaction protocol which is intended to automatically execute, control or document legally relevant events and actions according to the terms of a contract or an agreement.
  • Fungible Token: Digital assets that can be sent, received, combined, and divided.

References