Algorand Smart Contract - Menggunakan Algorand SDK Pada Algorand Smart Contracts

in #algo3 years ago (edited)

Algorand Smarct Contract - Tutorial #02

Algorand Smart Contracts (ASC1) merupakan Smart Contract Layers Pertama. Kontrak ini tidak hanya berfungsi sebagai bagian dari protokol, tetapi juga dapat berinteraksi dengan semua fitur layers pertama,termasuk Atomic Transfer dan Algorand Standard Assets (ASA).

Pembahasan

Menggunakan Algorand SDK dengan Algorand Smart Contracts
.
File biner yang dibuat dengan menyusun program TEAL dapat dimuat dan digunakan di false satu Algorand SDK, yang mendukung Java, JavaScript, Go dan Python. Penggunaan ASC1 SDK per halaman mencakup setiap bahasa secara rinci. Untuk tujuan ilustrasi, kami dapat menunjukkan cara menggunakan program simple.TEALdi postingan sebelumnya untuk memasukan transaksi dengan sign yang didelegasikan. Program ini mereplikasi perintah di bagian sebelumnya dan diimplementasikan untuk dijalankan dengan Node.js.

const algosdk = require('algosdk');
const fs = require('fs');// Retrieve the token, server and port
// values for your installation in the algod.net
// and algod.token files within the data directory
const token = "yournodetoken";
const server = "http://127.0.0.1";
const port = 8080;// Recover the account
// C3MKH...
var mnemonic = "awake climb practice ten mutual calm " +
"expand danger twelve inhale near harvest ensure " +
"life heart okay spend priority spare target " +
"flock wrong essence absent poet";
var recoveredAccount = algosdk.mnemonicToSecretKey(mnemonic);
console.log(recoveredAccount.addr);// instantiate the algod wrapper
let algodclient = new algosdk.Algod(token, server, port);
(async() => {
// Get the relevant params from algod
// for suggested parameters
let params = await algodclient.getTransactionParams();
let endRound = params.lastRound + parseInt(1000);
let fee = await algodclient.suggestedFee(); // These are the base64 dump of the
// compile simple.teal program
// Used command line $ cat simple.teal.tok | base64
let program = new Uint8Array(Buffer.from("ASABASI=", "base64"));
// makeLogicSig method takes the program and parameters
// in this example we have no parameters
let lsig = algosdk.makeLogicSig(program);
// sign the logic with your accounts secret
// key. This is essentially giving your
// key authority to anyone with the lsig
// and if the logic returns true
// exercise extreme care
// If this were a contract account usage
// you would not do this sign operation
lsig.sign(recoveredAccount.sk); // At this point you can save the lsig off and share
// as your delegated signature.
// The LogicSig class supports serialization and
// provides the lsig.toByte and fromByte methods
// to easily convert for file saving and
// reconstituting and LogicSig object // Create a transaction
let txn = {
"from": recoveredAccount.addr,
"to": "STF6TH6PKINM4CDIQHNSC7QEA4DM5OJKKSACAPWGTG776NWSQOMAYVGOQE",
"fee": params.fee,
"amount": 200000,
"firstRound": params.lastRound,
"lastRound": endRound,
"genesisID": params.genesisID,
"genesisHash": params.genesishashb64
}; // Create logic signed transaction.
// Had this been a contract account the lsig would not contain the
// signature but would be submitted the same way
let rawSignedTxn = algosdk.signLogicSigTransaction(txn, lsig); // Save the signed transaction file for debugging purposes
// Use with goal clerk dryrun -t simple.stxn to
// see how the logic is processed
// Comment out if you do not plan on using dryrun
fs.writeFileSync("simple.stxn", rawSignedTxn.blob); // Submit the lsig signed transaction
let tx = (await algodclient.sendRawTransaction(rawSignedTxn.blob));
console.log("Transaction : " + tx.txId);})().catch(e => {
console.log(e);
});

Spesifikasi TEAL Languange(Bahasa TEAL)

Seperti yang dinyatakan di atas, TEAL adalah bahasa seperti assembly dan diproses dengan Stack machine.
Bahasa TEAL ini adalah bahasa tidak lengkap yang tidak mendukung Looping tetapi mendukung Forward branchs. Program TEAL diproses satu baris pada satu waktu yang mem push dan pop up value dari stack. Value stack ini adalah bilangan bulat 64 bit unsigned atau string byte. TEAL menyediakan satu set operator yang mengoperasikan value-value di dalam stack. TEAL juga memungkinkan argumen untuk diteruskan ke dalam program dari transaksi, space awal untuk menyimpan value sementara untuk digunakan nanti dalam program, akses ke properti transaksi yang dikelompokkan dan juga tunggal, value global, beberapa operator palsu, konstanta dan beberapa flow kontrol ,
yang berfungsi seperti bnz untuk branching.

20201128_143840.png

Mendapatkan Properti Transaksi
.
Tujuan utama dari program TEAL adalah untuk menampilkan True atau False. Ketika program selesai , jika ada value bukan nol pada stack maka itu akan mengembalikan true dan jika memiliki value nol atau stack kosong itu akan mengembalikan false. Jika stack memiliki lebih dari satu value saat ini, program juga akan mengembalikan value dan false. Jadi melihat diagram di atas, beberapa perintah pertama akan diproses seperti:
Baris program nomor 1:

20201128_145509.png
Perhatikan bahwa kami menggunakan txnuntuk mereferensikan daftar transaksi properti saat ini. Jika kami menggunakan program ini dengan transaksi yang dikelompokkan, kami akan mereferensikan grup transaksi yang digunakan gtxn. Anda akan menggunakan global Group Size untuk mendapatkan jumlah transaksi dalam grup. Anda kemudian dapat menggunakan gtxn 0 Receiver untuk mendapatkan penerima transaksi pertama.
Opcode Pseudo
.
Melanjutkan contoh sebelumnya.
Baris program nomor 2:

20201128_150605.png

Di sini kita menggunakan addr pseudo opcode untuk mengubah alamat yang di-hardcode menjadi constant byte untuk diletakkan di stack. Lihat dokumentasi Tinjauan TEAL untuk pseudo opcode tambahan.

Operations
.
TEAL menyediakan banyak operator untuk bekerja dengan data yang ada di stack. Lihat dokumentasi Gambaran Umum TEALuntuk daftar lengkap operator. Sebagian besar operator bertindak pada dua nilai terakhir di stack.Teal Opcodesdokumentasi menjelaskan jumlah argumen dan jika ada sesuatu yang mem Push kembali ke stack sebagai akibat dari operasi.
Baris program nomor 3:
20201128_151757.png
Argumen Passing
.
Nantinya, dalam kode kita memiliki pemasukan untuk memuat argumen pertama ke stack.
Baris program nomor 13:

20201128_152105.png
Semua parameter argumen ke program TEAL adalah Array byte. Urutan order anda juga menentukan spesifikasinya. Dalam kasus ini, kami memuat parameter pertama ke stack. Sebagian besar SDK menyediakan fungsi bahasa standar yang memungkinkan Anda mengonversi parameter menjadi array byte. Jika Anda menggunakan baris perintah tujuan maka parameter harus diteruskan sebagai string encoded base64. Jadi, Anda perlu mengubah parameter Anda sebelum meneruskannya. Misalnya, jika Anda ingin meneruskan "mystringargument", Anda dapat menggunakan perintah echo seperti berikut untuk mengonversi ke string base64 untuk tujuan.
$ echo -n mystringargument | base64
Yang akan mengembalikan hasil sebagai berikut.
bXlzdHJpbmdhcmd1bWVudA==
Hasil ini dapat digunakan bersama dengan parameter - b64args untuk goal clerk send perintah tersebut.
goal clerk send -a 1000 -c fromaddr --to toaddr --from-program myteal.teal --argb64 "bXlzdHJpbmdhcmd1bWVudA==" -d ~/node/data

Jika Anda mencoba meneruskan value integer di 123, Anda dapat menggunakan perintah python seperti berikut untuk mendapatkan string yang dikodekan base64. Perhatikan bahwa saat ini TEAL tidak mendukung angka negatif.
$ python3 -c "import base64;print(base64.b64encode((123).to_bytes(8,'big')))"
Yang akan menghasilkan tampilan seperti berikut ini.
'AAAAAAAAAHs='
Di SDK, Anda dapat menggunakan fungsi native languange. Misalnya untuk meneruskan argumen string ke Python SDK, Anda akan menggunakan kode yang mirip dengan contoh di bawah ini.
arg_str = "my string"
arg1 = arg_str.encode()
lsig = transaction.LogicSig(program, args=[arg1])

Untuk argumen Integer yang akan Anda gunakan (ingat TEAL hanya mendukung value positif):
arg1 = (123).to_bytes(8, 'big')
lsig = transaction.LogicSig(program, args=[arg1])

Menyimpan dan Memuat dari Scratchspace
.

TEAL menyediakan space awal sebagai cara menyimpan value sementara untuk digunakan nanti dalam kode Anda. Pada contoh di bawah ini, pertama-tama kita meload 12 ke stack dan kemudian menduplikasinya. Selanjutnya, kami mengalikan kedua angka tersebut sehingga 144 berada di puncak stack. Perintah penyimpanan digunakan untuk menyimpan value ini di space awal 1 slot.

20201128_153506.png

Nanti kita bisa mengambil value ini dan menggunakan perintah load. Perhatikan, bahwa operasi ini tidak mengosongkan slot space awal. Valuenya dapat dimuat ulang lagi, nanti dalam program
20201128_153637.png

Menggunakan Parameter Lease
.

Satu hal lagi yang perlu diperhatikan, tentang adanya parameter transaksi lease untuk lease yang baru. Parameter ini sangat berguna untuk mencegah siapa pun mengirimkan transaksi ganda. Parameter ini adalah string 32-byte yang Anda buat (sasaran nya adalah untuk di encoded base64) yang dikombinasikan dengan field sender membuat transaksi menjadi unik. Jika ada yang mensubmit ulang transaksi dari pengirim yang sama dan parameter lease yang sama, transaksi tersebut akan ditolak, hingga round terakhir yang valid untuk transaksi tersebut. Setelah round terakhir yang valid melewati masa lease lama berakhir, dan transaksi baru dengan pengirim dan lease yang sama dapat dikirim lagi. Anda dapat mengakses parameter lease di TEAL dengan menggunakan txn Lease request/call.
Biaya Operasional Opcode TEAL
.
Program TEAL dibatasi hingga 1000 byte. Ini adalah ukuran program yang di request dan ditambah argumennya. Selain itu, demi menjaga kecepatan, juga dibatasi oleh biaya opcode. Batas ini ditetapkan ke 20000 untuk seluruh program, di mana sebagian besar opcode berharga 1 lebih mahal dari harga awal . Misalnya untuk menggunakan fungsi SHA256 ,dan yang mendapatkan value SHA256 dari value terakhir pada stack dengan biaya 7. Beberapa opcode sangat mahal seperti menggunakan fungsi ed25519verify yang harganya 1900. Halaman TEAL Opcodes mencantumkan biaya semua opcode.
Spesifikasi Bahasa TEAL dijelaskan secara lengkap di Transaction Execution Approval Language lalu pelaksanaan Transaksi dan daftar lengkap opcode yang didukung oleh TEAL dijelaskan di halaman referensi TEAL Opcodes
Untuk contoh baris demi baris yang terdokumentasi dari program TEAL, lihat ASC1 Escrow Exampleyang mencakup bagaimana stack diproses.

Apa program teal tidak bisa lakukan?
.
TEAL sementara sangat kuat dibatasi oleh desain di beberapa area. Alasannya adalah untuk terus menjamin throughput yang cepat di jaringan Algorand. Meskipun TEAL dapat menganalisis transaksi atau sekelompok transaksi, TEAL tidak dapat mengubah transaksi. TEAL tidak dapat mencari saldo Algo atau Algorand Standard Asset. TEAL tidak dapat mencari informasi di blok atau transaksi sebelumnya. TEAL tidak tahu putaran mana yang sebenarnya akan dilakukan transaksi saat ini ke buku besar, meskipun ia akan mengetahui kisaran putarannya. TEAL juga tidak akan tahu kapan transaksi dilakukan. Juga seperti yang dinyatakan sebelumnya TEAL tidak dapat berulang dan hanya dapat melakukan loop ke depan.

Pedoman
.
Karena TEAL sangat kuat, pengembang harus berhati-hati dalam menguji batasan tertentu, seperti memastikan untuk menguji bahwa biaya transaksi tidak terlalu besar atau memverifikasi bahwa semua parameter yang diperlukan telah ditetapkan. Untuk melihat daftar pedoman serta tip dan pola umum lihat halaman TEAL Overview

Source

20201127_103252.jpeg

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.032
BTC 57824.15
ETH 2965.89
USDT 1.00
SBD 3.70