トークンを書き始めてからスマートコントラクトシステムを書き始める前に、FreeTONのスマートコントラクトの重要な要素の概要を簡単に見てみましょう。
前回の記事、TON(FreeTON)のスマートコントラクトであるHello Wordでは、 FreeTONとHelloWorldのスマートコントラクトの使用の最初の部分について説明しました。
この記事の構造:
数値タイプintとuint、純粋関数とイベント(イベント):ブロックチェーン上に計算機を書いてみましょう。
構造と配列:データベースとしてのスマートコントラクト。
ハッシュテーブル:マッピング;
公開鍵とが必要です。
: tvm.accept(); -.
int ( ) uint ( ). , : int8, int16, uint128. int uint - int256 uint256. - .
- . calc, 3 uint-: 2 - , . calc pure, , , -, , .
, - , - .
pragma ton-solidity >= 0.35.0;
pragma AbiHeader expire;
contract HelloCalc {
event UnknownOperator(uint op);
function calc(uint a, uint b, uint op) public pure returns (uint) {
tvm.accept();
if(op == 1) {
return a + b;
} else if(op == 2) {
return a - b;
} else if(op == 3) {
return a * b;
} else if(op == 4) {
return a / b;
} else if(op == 5) {
return a % b;
} else if(op == 6) {
return a ** b;
}else {
emit UnknownOperator(op);
return 0;
}
}
}
(event) - , , , , , 0 , , .
( ) -, , , -. , - blockchain, - blockchain . - blockchain.
pragma ton-solidity >= 0.35.0;
pragma AbiHeader expire;
contract HelloUser {
event NewUser(uint id);
struct User {
uint weight;
uint balance;
}
User[] users;
function AddUser(uint w, uint b) public {
tvm.accept();
users.push(User(w, b));
emit NewUser(users.length - 1);
}
function GetUser(uint id) public view returns (uint w, uint b) {
tvm.accept();
w = users[id].weight;
b = users[id].balance;
}
}
User , 2 uint: . , , , . push, - NewUser.
GetUser: returns, . pure view.
-: mapping
, (User) ( , ) . mapping. , , , , . , , .
mapping :
contract HelloToken {
event TokenCreated(uint owner, uint tid);
struct Token {
string name;
string symbol;
}
Token[] tokens;
mapping (uint => uint) accounts;
function NewToken() public {
tvm.accept();
tokens.push(Token("", ""));
accounts[tokens.length-1] = msg.pubkey();
emit TokenCreated(msg.pubkey(), tokens.length-1);
}
function GetTokenOwner(uint tid) public view returns (uint) {
tvm.accept();
return accounts[tid];
}
function GetTokenInfo(uint tid) public view returns (string _name, string _symbol) {
tvm.accept();
_name = tokens[tid].name;
_symbol = tokens[tid].symbol;
}
function SetTokenInfo(uint tid, string _name, string _symbol) public {
require(msg.pubkey() == accounts[tid], 101);
tvm.accept();
tokens[tid].name = _name;
tokens[tid].symbol = _symbol;
}
}
require
- , , - , ( ). : , , value TON Crystal . . - API msg.pubkey(). NewToken() accounts[tokens.length-1] = msg.pubkey(); ID accounts , , tokens. SetTokenInfo() , , . tid accounts . .
ここでは、FreeTONスマートコントラクトのトピックを「ゼロから」研究する読者のために側面を説明しました。次の記事では、独自のトークンの作成を開始します。