GRC20 Integration Technical Guide

The purpose of document to explain basics of interacting with an GRC20 contract with the glitchd CLI command tool.

Intro

We recommend that an exchange use one main address to store tokens for all users. Below MAIN_GRC_ADDRESS is the main address.

The address of the GRC20 token contract is TOKEN_CONTRACT_ADDRESS.

  • gas limit is DEFAULT_GAS_LIMIT, recommended value is 150000
  • gas price is DEFAULT_GAS_PRICE,recommended value is 0.00000060

TOKEN_DECIMALS is the decimals of the token, which varies per token. Here we set it 8.

We'll use the following utility functions:

  • addressToHash160 - Convert base58 address to hash160 address.
  • To32bytesArg left-pad hex data to 32 bytes with 0.
  • add Decimals multiply the nominal token amount by the number of decimal places.

Running GLITCHD

You should remember to enable the indexing service when starting glitchd, using the flags -logevents -txindex.

Interacting With GRC20

In the CLI examples below, please substitute {} with actual addresses and values.

Getting Token Balance

  • $userAddress is the deposit address
    glitch-cli callcontract \
    {TOKEN_CONTRACT_ADDRESS} \
    70823a01{to32bytesArg(addressToHash160($userAddress))}
    In the JSON output look for executionResult.output. This is the token balance.

Withdraw

  • $userAddress is the withdraw address
  • $amount the withdraw amount in unit token glitch-cli sendtocontract \
    {TOKEN_CONTRACT_ADDRESS} \
    a90b59cb{to32bytesArg(addressToHash160($userAddress))}{to32bytesArg(addDecimals($amount)) \
    0 \
    {DEFAULT_GAS_LIMIT} \
    {DEFAULT_GAS_PRICE} \
    {MAIN_GRC_ADDRESS}

The command returns the txid of this transaction. You may use it to find information about this transaction (e.g. number of confirmations).

Generate a deposit address

For an exchange, a user may use the same address for both GLITCH and other GRC20 tokens.

Use this command to generate a deposit address:

glitch-cli getnewaddres

Deposit and Witdraw Logs

  • $startingBlock is where you want to start looking (inclursive)
  • You can start looking from 0, but for better efficiency, you should remember where to start looking. glitch-cli searchlogs \
    STARTING_BLOCK \
    999999999 \
    '{ "addresses": ["TOKEN_CONTRACT_ADDRESS"]}' \
    '{"topics": ["ddf2569c2b068fc372ad1be2c89b8daa952ba7f163c4a11628f55a4df523b3ef"]}'

The event type filtered is the Transfer event:

event Transfer(address indexed from, address indexed to, uint256 _value)

Look through the logs to filter by to or from addresses.

Checking Confirmations

Given a transaction id $txid:

glitch-cli gettransaction $txid

Use the property confirmations from output.