@koinosbox/contracts v3.0.0
Koinos Token Builder (Assembly Script)
This repo contains a set of contracts that may be used to launch your own token.The basic usage of this contract builder is as follows:
- Clone and install this repo.
- Adjust the
.envfile used by the deployer. - Adjust the
\token\assembly\Token.tsfile. - Compile the smart contrac using the builder.
- Upload the smart contract using the built in deployer.
Dependencies
NodeJS (see below for additional information)
Yarn Package Manager
NodeJS is necessary to develop and build the smart contract. Follow the instructions at the NodeJS website for installation guide specific to your machine.
Notes for Installation on Mac M1s:
Newer version of NodeJs may not work properly with this repo. We have tested to ensure that version 16.13.1 works however if you find an error while compiling that appears similar to this output:
npm ERR! command /usr/local/bin/node /usr/local/lib/node_modules/npm/bin/npm-cli.js install --force
--cache=/Users/motoengineer/.npm --prefer-offline=false --prefer-online=false --offline=false --no-progress --no-save
--no-audit --include=dev --include=peer --include=optional --no-package-lock-only --no-dry-runThen try running this command:
sudo chown -R 501:20 "/Users/{username}/.npm"Tested Operating Systems
This tutorial has been tested for:
- Mac M1 Silicone
- Mac Intel
- Linux (Ubuntu)
Once your development environment is setup, lets begin:
Step 1: Installing the SDK
Clone the repo by using the following command:
git clone https://github.com/joticajulian/koinos-contracts-asChange into the directory of the SDK by using the following command:
cd koinos-contract-asInstall the dependencies within the folder with yarn by using the following command:
yarn installStep 2: Modify your .env for the deployer
The koinos-contract-as repo contains a deployment script so you do not need manually deploy via the koinos-cli wallet. To use the automatic deployer, you must set it up first. To do this clone the env.example file and modify it. To begin, clone and rename the file as .env using the following command:
cp env.example .envOpen .env with the editor of your choice. Once open, it should appear something like this:
HARBINGER_MANA_SHARER_PRIVATE_KEY=
HARBINGER_TOKEN_CONTRACT_PRIVATE_KEY=
HARBINGER_TOKEN_CONTRACT_ID=
MAINNET_MANA_SHARER_PRIVATE_KEY=
MAINNET_TOKEN_CONTRACT_PRIVATE_KEY=
MAINNET_TOKEN_CONTRACT_ID=If you are developing on test net, fill in the information for HARBINGER, if you are developing on main net, fill in the information for MAINNET.
The
_MANA_SHARER_PRIVATE_KEYis the private key to a Koinos wallet that containts liquid $KOIN. This wallet is used to cover the Mana cost of uploading the.wasmand.abifile to the Koinos Blockchain. If you are working on testnet and need testnet $KOIN ($tKOIN) then head over the discord faucet to get some for free. For main net, you will need to buy $KOIN from a CEX or DEX.The
_TOKEN_CONTRACT_PRIVATE_KEYis the private key to the wallet address that will hold your smart contract. You may create a wallet usingkoinos-clior any of the 3rd party wallets.The
_TOKEN_CONTRACT_IDis the wallet address associated with the_TOKEN_CONTRACT_PRIVATE_KEY.
In total, you will need two wallets and their private keys. One wallet contains liquid $KOIN (or $tKOIN), while the other can have no $KOIN. The purpose of this is so you can deploy a smart contract into an empty wallet and not end up with any dust in it.
Step 3: Modify Token.ts
Enter the contracts folder and you will find three folders.
hellois a basic hello world contract. It is not used in this tutorial, but you can use it as a reference. Open package.json for scripts on its compilation and deployment.manashareris a script that allows the mana cost to deploy the contract to be covered by the wallet address of the_MANA_SHARER_PRIVATE_KEY.tokenis a typical token contract that can create new tokens.
Open the file located at /token/assembly/proto/token.ts and scroll to line 24-27. Adjust the variables to suite your project. It should appear something similar to this:
_name: string = "My Token";
_symbol: string = "TKN";
_decimals: u32 = 8;If you want to make any more adjustments, feel free to make them now.
Once you are done, save the file.
Step 3: Compile the Token Project
From the /contracts folder, run the following command to build your contract.
yarn token:buildYou should get a response that looks similar to this:
yarn run v1.22.15
$ yarn token:precompile && yarn token:asbuild:release
$ koinos-precompiler-as contracts/token
source file copied to /Users/learnkoinos/koinos-contracts-as/contracts/token/build
/Users/learnkoinos/koinos-contracts-as/contracts/token/build/proto/token.proto
proto files generated at /Users/learnkoinos/koinos-contracts-as/contracts/token/build/proto
interfaces generated at /Users/learnkoinos/koinos-contracts-as/contracts/token/build/interfaces
abi file generated at /Users/learnkoinos/koinos-contracts-as/contracts/token/build/token-abi.json
precompilation generated at /Users/learnkoinos/koinos-contracts-as/contracts/token/build/index.ts
$ asc contracts/token/build/index.ts --config contracts/token/asconfig.json --use abort= --target release
✨ Done in 5.89s.If all is well, then you've just compiled your token contract.
Step 4: Deploy your Token Project
Since we already setup our .env file earlier, we simply need to execute the following command:
yarn token:deployYou should get a response that looks similar to this:
yarn run v1.22.15
$ ts-node contracts/token/scripts/deployment.ts
TypeError: Cannot read properties of undefined (reading '0')
at bitcoinDecode (/Users/learnkoinos/koinos-contracts-as/node_modules/koilib/src/utils.ts:166:12)
at Function.fromWif (/Users/learnkoinos/koinos-contracts-as/node_modules/koilib/src/Signer.ts:262:37)
at /Users/learnkoinos/koinos-contracts-as/contracts/token/scripts/deployment.ts:15:35
at step (/Users/learnkoinos/koinos-contracts-as/contracts/token/scripts/deployment.ts:33:23)
at Object.next (/Users/learnkoinos/koinos-contracts-as/contracts/token/scripts/deployment.ts:14:53)
at /Users/learnkoinos/koinos-contracts-as/contracts/token/scripts/deployment.ts:8:71
at new Promise (<anonymous>)
at __awaiter (/Users/learnkoinos/koinos-contracts-as/contracts/token/scripts/deployment.ts:4:12)
at main (/Users/learnkoinos/koinos-contracts-as/contracts/token/scripts/deployment.ts:49:12)
at Object.<anonymous> (/Users/learnkoinos/koinos-contracts-as/contracts/token/scripts/deployment.ts:49:1)
✨ Done in 0.79s.If all is well, then you've just deployed your token contract to the address you've entered previously in the _TOKEN_CONTRACT_ID field. You can register the token with koinos-cli and begin to interact with it. You may also use Koinos Blocks to interact with your token. Just search by entering the _TOKEN_CONTRACT_ID in the search field of Koinos Blocks.
Step 5: Minting new Tokens
Since the token is now initialized, you can generate new tokens. This repo includes a token generator script located at koinos-contracts-as/contracts/token/scripts/mint.ts. Open this file with your preferred editor and go to line 35. You may adjust the value to mint as many tokens as you wish for whatever purpose you are intending to use it for.
Note: If you are getting rclimit errors. Reduce the rclimit shown on line 26 or get more $tKOIN/$KOIN.
10 months ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago