HcashOrg/HyperExchange

HX Token contract protocol proposal(HRC12)

Opened this issue · 0 comments

Valid hx token contracts must have some fixed APIs and offline APIs.

Indicate the token amount with a number without precision in all apis of token contracts

APIs

  • transfer: arg format: "toAddress,amount[,optional_memo]": transfer amount of token from caller to toAddress. caller can be other smart contract
  • transferFrom: arg format: "authorizerAddress,toAddress,amount[,optional_memo]": If authorizerAddress approved some balance(amountApproved) of this token to caller_address(user B). Then user B can use this API(transferFrom) to transfer at-most amountApproved of this token from authorizerAddress to other user. If this operation is successful, the amount of approved will be reduced.
  • approve: arg format: "spenderAddress,amount[,optional_memo]": caller approve amount of this token to spenderAddress. If this operation is successfully, then the spenderAddress can transferFrom at-most amount of this token to other users.

Offline APIs(for query execution)

  • tokenName: return name of this token(not unique)
  • tokenSymbol: return symbol of this token(not unique)
  • totalSupply: return total supply of this token
  • precision: return precision of this token. Precisions are 1, 10, 100, 1000, ... 100000000, etc.
  • balanceOf: arg format: "ownerAddress", return owner's token balance of this token
  • approvedBalanceFrom: arg format: "spenderAddress,authorizerAddress": query approved balance from authorizerAddress to spenderAddress
  • allApprovedFromUser: arg format: "authorizerAddress": query all approved balance from authorizerAddress

Events

HX token contracts must use some events to notify third-party to know token contract changes. At least need to include the following events:

  • Approved(json string of {from: authorizerAddress, spender: spenderAddress, amount: amount})
  • Transfer(json string of {from: fromAddress, to: toAddress, amount: transfer amount, memo: memo string})