Focus mode
These contents have been prepared using online resources. Patika.dev’s own contents are currently under preparation.
This note will walk you through a starter project that you may use in NCD I and will give you basic knowledge of its structure, internal work and problems you may encounter.
In order to have little to no troubles and awaitings during this course, you should have installed:
npm
Node.JS package managergit
version controlnpm install -g [email protected]
)near-cli
Also, you have to use your testnet account. If you don’t have one - create
.
To start with, let’s clone repository we’ll be working with. You can do it through GitHub client or using git clone https://github.com/Learn-NEAR/starter--near-sdk-as
command. Open project folder in terminal and run yarn
. yarn
is a package manager that allows to download and solve project’s dependencies - pieces of code that are required for project to work. You will see such output:
PS C:\Github\starter--near-sdk-as> yarn
yarn install v1.22.15
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Done in 2.16s.
Let’s have a closer look at the content of our project.
{
"name": "starter--near-sdk-as",
"version": "0.0.1",
"description": "Start with a basic project",
"scripts": {
"dev": "watch -d -n 1 'clear && yarn test'",
"test": "yarn asp -f unit.spec",
"clean": "rm -rf ./build && rm -rf ./neardev",
"build": "asb --target debug",
"build:release": "asb",
"asp": "asp --verbose --nologo"
},
"keywords": [],
"author": "[email protected]",
"license": "ISC",
"devDependencies": {
"near-sdk-as": "^3.1.0"
}
}
What we see here is a configuration file for our project containing the name of project, version etc. What we are interested in are scripts
. Those are aliases for shell commands with specific options. For example, clean
is a short name for a command that deletes folders build and neardev, and build:release
executes AssemblyScript asb (build)
command.
{
"workspaces": [
"src/simple",
"src/singleton"
]
}
This file is a collection of folders with our contracts in them. When we execute build:release
command, we compile contracts from each workspace into the output folder. More about them next.
Inside src
are simple and singleton
- our workspaces. They have the same structure, including tests and assembly folders. The difference between them is style they’re written in.
We say that an AssemblyScript contract is written in the “simple style” when the index.ts file (the contract entry point) includes a series of exported functions.
In this case, all exported functions become public contract methods.
// return the string 'hello world'
export function helloWorld(): string {}
// read the given key from account (contract) storage
export function read(key: string): string {}
// write the given value at the given key to account (contract) storage
export function write(key: string, value: string): string {}
// private helper method used by read() and write() above
private storageReport(): string {}
We say that an AssemblyScript contract is written in the “singleton style” when the index.ts file (the contract entry point) has a single exported class (the name of the class doesn’t matter) that is decorated with @nearBindgen.
In this case, all methods on the class become public contract methods unless marked private. Also, all instance variables are stored as a serialized instance of the class under a special storage key named STATE. AssemblyScript uses JSON for storage serialization.
@nearBindgen
export class Contract {
// return the string 'hello world'
helloWorld(): string {}
// read the given key from account (contract) storage
read(key: string): string {}
// write the given value at the given key to account (contract) storage
@mutateState()
write(key: string, value: string): string {}
// private helper method used by read() and write() above
private storageReport(): string {}
}
Warning: be careful when creating a new workspace
Don’t forget to add it’s location to asconfig.json
Your workspace must have assembly
folder and index.ts
file!
Those are command line scenarios that recreate some certain behaviour using the contracts in this project. We’re using them in the next section.
Note: Use OS of your preference, however, Windows users should take in consideration that you should launch your scripts not via PowerShell or cmd, use Git Bash instead.
Warning: Mac with M1 chip has compatibility issues with WASM.
Programs to Accelerate Your Progress in a Software Career
Join our 4-8 month intensive Patika+ bootcamps, start with the fundamentals and gain comprehensive knowledge to kickstart your software career!
You need to enroll in the course to be able to comment!