Smart contracts examples
ERC-20 on AssemblyScript example
import {JSON} from "assemblyscript-json";
// Declare imports
@external("klyntar", "getFromState")
declare function getFromState(key: string): string;
@external("klyntar", "setToState")
declare function setToState(key: string, value: string): void;
@external("klyntar", "getCallerAddress")
declare function getCallerAddress(): string;
// Constants to store data
const ACCOUNT_KEY_PREFIX = "account:";
function getParsedAccount(accountID: string):JSON.Obj {
return <JSON.Obj>(JSON.parse(getFromState(ACCOUNT_KEY_PREFIX+accountID)));
}
export function totalSupply(): string {
return getFromState("totalSupply");
}
export function balanceOf(address: string): string {
let account: JSON.Obj = <JSON.Obj>(JSON.parse(getFromState(ACCOUNT_KEY_PREFIX+address))); // {balance:1337}
let balance: JSON.Integer | null = account.getInteger("balance");
if(balance!== null){
return balance.stringify();
} else return "0"
}
// ERC-20: Transfer from address to address
// Input example: {to:"recipientAccount",amount:1337}
export function transfer(objWithToAndAmount: string): boolean {
let callerAddress = getCallerAddress();
let handlerWithToAndAmount: JSON.Obj = <JSON.Obj>(JSON.parse(objWithToAndAmount));
// Parse <to> and <amount>
let recipientAddress: JSON.Str | null = handlerWithToAndAmount.getString("to");
let amountToTransfer: JSON.Integer | null = handlerWithToAndAmount.getInteger("amount");
if(recipientAddress !== null && amountToTransfer !== null && amountToTransfer._num > 0) {
// Get accounts
let senderAccount: JSON.Obj = getParsedAccount(callerAddress); // {balance:1337}
let recipientAccount: JSON.Obj = getParsedAccount(recipientAddress._str); // {balance:1337}
if(recipientAccount.getInteger("balance") === null){
recipientAccount = JSON.Value.Object();
recipientAccount.set("balance",JSON.from(0));
}
let senderBalance: JSON.Integer | null = senderAccount.getInteger("balance");
if(senderBalance !== null && senderBalance >= amountToTransfer){
senderAccount.set("balance",JSON.from(senderBalance._num-amountToTransfer._num));
let recipientBalance: JSON.Integer | null = recipientAccount.getInteger("balance");
if(recipientBalance !== null){
recipientAccount.set("balance",JSON.from(recipientBalance._num-amountToTransfer._num));
}
return true;
} else return false;
} else return false;
}
export function mint(initialSupplyStr: string): void {}
ERC-20 using Rust language
Getter/Setter using AssemblyScript
Last updated
Was this helpful?