TON প্রায় নতুন এবং নেটওয়ার্কে একটি নতুন টোকেন তৈরি করা অন্যান্য নেটওয়ার্কের মতো সহজ নয়। আপনার জেটনগুলি তৈরি করার জন্য ইতিমধ্যেই একটি ওয়েবসাইট রয়েছে (TON-এর ব্লকচেইনে ফাংগিবল টোকেনগুলিকে জেটন বলা হয়) কিন্তু এটি আপনাকে টোকেনের জন্য আপনার কোড ব্যবহার করার অনুমতি দেয় না এবং আপনি শুধুমাত্র ব্যবহার করতে পারেন অফিসিয়াল জেটন চুক্তি,
এই নিবন্ধে, আমি আপনাকে দেখাতে যাচ্ছি কিভাবে TON-এর ব্লকচেইনে আপনার কাস্টমাইজড টোকেন স্থাপন করবেন।
TON এর ওয়েবসাইট কয়েকটি সহজ ক্লিকের মাধ্যমে আপনার জেটন তৈরি করা সহজ করে তোলে। এই নিবন্ধটি লেখার সময়, ওয়েবসাইট লিঙ্ক এখানে,
ওয়েবসাইট সহজ. প্রথমত, আপনাকে আপনার ওয়ালেটটি উপলব্ধ এক্সটেনশনগুলির একটির সাথে সংযুক্ত করতে হবে (আমি ওপেনমাস্ক ব্যবহার করেছি যা সুপরিচিত ওয়ালেট ওপেনমাস্কের মতো)। এর পরে, আপনার একটি সাধারণ ফর্ম পূরণ করা উচিত যাতে আপনি যে জেটন তৈরি করতে চান সে সম্পর্কে প্রাথমিক তথ্য রয়েছে। মনে রাখবেন যে টোকেন তৈরি করতে আপনার ওয়ালেটে কমপক্ষে 2 টি TAIN থাকতে হবে। এটা যে সহজ.
কিন্তু, ওয়েবসাইটের কিছু বড় সমস্যা আছে। তাদের মধ্যে একটি হল আপনি টেস্টনেটে কয়েন মাইন করতে পারবেন না। দ্বিতীয়টি হল আপনার কাছে দুটি অফিসিয়াল টোকেন কোডের অ্যাক্সেস আছে এবং এতে আপনার নিজস্ব বৈশিষ্ট্য যোগ করতে পারবেন না। ব্যক্তিগতভাবে, এই ত্রুটিগুলি আমাকে অনেক ক্ষতি করেছে তাই আমি ওয়েবসাইটের রেপো ক্লোন করার এবং এটি প্রতিস্থাপন করার সিদ্ধান্ত নিয়েছি। পরে, আমি আপনাকে দেখাব কিভাবে টেস্টনেটে আপনার টোকেন স্থাপন করতে হয় এবং আমরা কোডটি নিয়ে কিছুটা খেলি।
জেটন মিন্টার সংগ্রহস্থল ক্লোন করুন এবং সেটআপ করুন
প্রথমত, আমরা আমাদের প্রকল্পের জন্য একটি ডিরেক্টরি তৈরি করি এবং সংগ্রহস্থল ক্লোন করি।
mkdir awesome_jetton && cd $_
git clone https://github.com/ton-blockchain/minter.git
cd minter
প্রকল্পটি চালানোর জন্য আপনার ডিভাইসে npm ইনস্টল থাকতে হবে। আপনার ডিভাইসে এটি ইতিমধ্যেই ইনস্টল না থাকলে, আপনি ব্যবহার করতে পারেন এই এটি ইনস্টল করার জন্য টিউটোরিয়াল।
আপনার Npm আছে তা নিশ্চিত করার পরে, নীচের কমান্ড দিয়ে প্রকল্পটি শুরু করুন।
npm init
তারপরে আপনাকে প্রয়োজনীয়তাগুলি ইনস্টল করতে হবে।
npm install
এখন, আপনি এই কমান্ডের মাধ্যমে অ্যাপটি অ্যাক্সেস করতে পারেন।
npm start
আপনার ওয়ালেট সেটআপ করুন
এখন আপনি প্রকল্পটি কনফিগার করেছেন, আপনি আপনার TON ওয়ালেট তৈরি করতে পারেন। প্রথমত, আপনাকে OpenMask এক্সটেনশন ইনস্টল করতে হবে এখানে,
ওপেনমাস্ক মেটামাস্কের সবচেয়ে কাছের। ইন্টারফেসটি অনেকটাই একই এবং এটি টেস্টনেট সমর্থন করে যা খুবই উত্তেজনাপূর্ণ।
আপনি আপনার ব্রাউজারের জন্য এক্সটেনশনটি ডাউনলোড করার পরে, আপনাকে একটি নতুন ওয়ালেট তৈরি করতে হবে৷
এর পরে, প্রকল্পে ফিরে যান এবং আপনার ওয়ালেট সংযোগ করুন।
এর পরে, ওপেনমাস্ক আপনার অনুমতি নেওয়ার চেষ্টা করে।
একবার আপনি এই পদক্ষেপগুলি সম্পন্ন করলে, আপনি এখন সেখানে আপনার ওয়ালেট দেখতে পাবেন।
আপনার মানিব্যাগ তহবিল
এখন আপনি সবকিছু সেট আপ করেছেন, আপনাকে কিছু টেস্টনেট টোকেন পেতে হবে। আপনি একটি থেকে এই ট্যাপ পেতে পারেন টেলিগ্রাম বট, প্রথমে, আপনাকে OpenMask থেকে আপনার ওয়ালেটের ঠিকানা অনুলিপি করতে হবে (এখানে আমার হল kQDYWs9499-QG6Nc6gxykymlnaWY-2CqACAJI7StAc2wz0oO)। তারপর আপনাকে বটকে বার্তা পাঠাতে হবে এবং প্রক্রিয়াটি সম্পূর্ণ করতে হবে।
আপনি আপনার অনুরোধ করার কিছুক্ষণ পরে, আপনার ওয়ালেট চার্জ করা হবে।
আপনি আপনার ওয়ালেট দেখে লেনদেন যাচাই করতে পারেন টেস্টনেটের টোনস্ক্যান,
টেস্টনেটের কার্যকারিতা সহ প্রকল্পটি কাস্টমাইজ করুন
Testnet এর API বিনামূল্যে কিন্তু একটি API কী ছাড়া আপনি প্রতি সেকেন্ডে একাধিক অনুরোধ করতে পারবেন না যা একটি সমস্যা। আপনি একটি বিনামূল্যে API কী পেতে পারেন টেলিগ্রাম বট,
এখন আপনার কাছে এপিআই কী আছে, টেস্টনেট নেটওয়ার্ক অ্যাক্সেস করতে আপনাকে প্রজেক্ট কোডটি কিছুটা পরিবর্তন করতে হবে। অনুসন্ধান get-tons-client.ts ভিতরে src/lib পথ আপনার এন্ডপয়েন্ট পরিবর্তন করা উচিত এবং ফাইলটিতে আপনার API কী যোগ করা উচিত।
const endpointP = 'https://testnet.toncenter.com/api/v2/jsonRPC';
const apiKey = '7a0c2bf7b733201f0f4e21d6ccebd4699375b09ea57e1aa0a428cd99687e9b21';async function _getClient() {
return new TonClient({
endpoint: await endpointP,
apiKey: await apiKey
});
}
এখন থেকে, প্রকল্পের প্রতিটি API অনুরোধ মেইননেটের পরিবর্তে টেস্টনেটে যায়। পরবর্তী বিভাগে, আমরা জেটনের কোড কিছুটা পরিবর্তন করতে যাচ্ছি।
Jetton এর কোড বৈশিষ্ট্য যোগ করুন
এই অংশটি প্রক্রিয়াটির সবচেয়ে জটিল অংশ হতে পারে। আপনি দেখতে, আমি src/lib/চুক্তি অফিসিয়াল জেটনের কোডের সংকলিত সংস্করণ রয়েছে। সুতরাং আপনি যদি সত্যিই কোডে কিছু পরিবর্তন করতে চান, তাহলে আপনাকে প্রথমে এটি কম্পাইল করতে হবে এবং তারপর সেই ফাইলগুলিতে হেক্স সংস্করণটি রাখুন।
এখানে, আমি একটি মূর্খ জিনিস করতে চাই. যখনই একটি লেনদেন করা হবে, শুধুমাত্র অর্ধেক টোকেন পাঠানো হবে এবং বাকি অর্ধেক বার্ন করা হবে। আমি ওয়ালেট কোড পরিবর্তন করতে চাই.
প্রথমত, আমাকে অফিসিয়াল রিপোজিটরি ক্লোন করতে হবে।
git clone https://github.com/ton-blockchain/token-contract.git
আমাদের শুধু পরিবর্তন করতে হবে jetton-wallet.fc FungibleTokens ফোল্ডারে। TON এর ব্লকচেইন হল স্মার্ট চুক্তির প্রাথমিক ভাষা উদযাপন, এটি সলিডিটির মতো সহজ নয় এবং সিনট্যাক্স শিখতে কিছুটা সময় লাগতে পারে। কিন্তু, যদি আপনার স্মার্ট চুক্তির কিছু অভিজ্ঞতা থাকে, তাহলে আপনি শীঘ্রই জানতে পারবেন যে কোডের কোন অংশটি পরিবর্তন করতে হবে।
() send_tokens (slice in_msg_body, slice sender_address, int msg_value, int fwd_fee) impure {
int query_id = in_msg_body~load_uint(64);
int jetton_amount = in_msg_body~load_coins();
slice to_owner_address = in_msg_body~load_msg_addr();
force_chain(to_owner_address);
(int balance, slice owner_address, slice jetton_master_address, cell jetton_wallet_code) = load_data();
balance -= jetton_amount;throw_unless(705, equal_slices(owner_address, sender_address));
throw_unless(706, balance >= 0);
cell state_init = calculate_jetton_wallet_state_init(to_owner_address, jetton_master_address, jetton_wallet_code);
slice to_wallet_address = calculate_jetton_wallet_address(state_init);
slice response_address = in_msg_body~load_msg_addr();
cell custom_payload = in_msg_body~load_dict();
int forward_ton_amount = in_msg_body~load_coins();
throw_unless(708, slice_bits(in_msg_body) >= 1);
slice either_forward_payload = in_msg_body;
var msg = begin_cell()
.store_uint(0x18, 6)
.store_slice(to_wallet_address)
.store_coins(0)
.store_uint(4 + 2 + 1, 1 + 4 + 4 + 64 + 32 + 1 + 1 + 1)
.store_ref(state_init);
var msg_body = begin_cell()
.store_uint(op::internal_transfer(), 32)
.store_uint(query_id, 64)
.store_coins(jetton_amount)
.store_slice(owner_address)
.store_slice(response_address)
.store_coins(forward_ton_amount)
.store_slice(either_forward_payload)
.end_cell();
msg = msg.store_ref(msg_body);
int fwd_count = forward_ton_amount ? 2 : 1;
throw_unless(709, msg_value >
forward_ton_amount +
;; 3 messages: wal1->wal2, wal2->owner, wal2->response
;; but last one is optional (it is ok if it fails)
fwd_count * fwd_fee +
(2 * gas_consumption() + min_tons_for_storage()));
;; universal message send fee calculation may be activated here
;; by using this instead of fwd_fee
;; msg_fwd_fee(to_wallet, msg_body, state_init, 15)
send_raw_message(msg.end_cell(), 64); ;; revert on errors
save_data(balance, owner_address, jetton_master_address, jetton_wallet_code);
}
এইটা পাঠান_টোকেন ফাংশন যার দায়িত্ব হল এক ওয়ালেট থেকে অন্য ওয়ালেটে কিছু পরিমাণ স্থানান্তর করা।
আমাকে শুধু যোগফলকে দুই দ্বারা ভাগ করতে হবে।
jetton_amount = jetton_amount / 2;
চূড়ান্ত কোড এই মত চেহারা.
() send_tokens (slice in_msg_body, slice sender_address, int msg_value, int fwd_fee) impure {
int query_id = in_msg_body~load_uint(64);
int jetton_amount = in_msg_body~load_coins();
slice to_owner_address = in_msg_body~load_msg_addr();
force_chain(to_owner_address);
(int balance, slice owner_address, slice jetton_master_address, cell jetton_wallet_code) = load_data();
jetton_amount = jetton_amount / 2;
balance -= jetton_amount;throw_unless(705, equal_slices(owner_address, sender_address));
throw_unless(706, balance >= 0);
cell state_init = calculate_jetton_wallet_state_init(to_owner_address, jetton_master_address, jetton_wallet_code);
slice to_wallet_address = calculate_jetton_wallet_address(state_init);
slice response_address = in_msg_body~load_msg_addr();
cell custom_payload = in_msg_body~load_dict();
int forward_ton_amount = in_msg_body~load_coins();
throw_unless(708, slice_bits(in_msg_body) >= 1);
slice either_forward_payload = in_msg_body;
var msg = begin_cell()
.store_uint(0x18, 6)
.store_slice(to_wallet_address)
.store_coins(0)
.store_uint(4 + 2 + 1, 1 + 4 + 4 + 64 + 32 + 1 + 1 + 1)
.store_ref(state_init);
var msg_body = begin_cell()
.store_uint(op::internal_transfer(), 32)
.store_uint(query_id, 64)
.store_coins(jetton_amount)
.store_slice(owner_address)
.store_slice(response_address)
.store_coins(forward_ton_amount)
.store_slice(either_forward_payload)
.end_cell();
msg = msg.store_ref(msg_body);
int fwd_count = forward_ton_amount ? 2 : 1;
throw_unless(709, msg_value >
forward_ton_amount +
;; 3 messages: wal1->wal2, wal2->owner, wal2->response
;; but last one is optional (it is ok if it fails)
fwd_count * fwd_fee +
(2 * gas_consumption() + min_tons_for_storage()));
;; universal message send fee calculation may be activated here
;; by using this instead of fwd_fee
;; msg_fwd_fee(to_wallet, msg_body, state_init, 15)
send_raw_message(msg.end_cell(), 64); ;; revert on errors
save_data(balance, owner_address, jetton_master_address, jetton_wallet_code);
}
এখন, আপনাকে চুক্তিগুলি কম্পাইল করতে হবে। সংকলিত স্ক্রিপ্ট এই মত দেখায়.
func -SPA -o ./build/jetton-wallet.fif ../stdlib.fc params.fc op-codes.fc jetton-utils.fc jetton-wallet.fc
echo '"build/jetton-wallet.fif" include 2 boc+>B "build/jetton-wallet.boc" B>file' | fift -s
func -SPA -o ./build/jetton-minter.fif ../stdlib.fc params.fc op-codes.fc jetton-utils.fc jetton-minter.fc
func -SPA -o ./build/jetton-minter-ICO.fif ../stdlib.fc params.fc op-codes.fc jetton-utils.fc jetton-minter-ICO.fc
func -SPA -o ./build/jetton-discovery.fif ../stdlib.fc params.fc op-codes.fc discovery-params.fc jetton-utils.fc jetton-discovery.fc
func -SPA -o ./build/jetton-minter-discoverable.fif ../stdlib.fc params.fc op-codes.fc discovery-params.fc jetton-utils.fc jetton-minter-discoverable.fcfift -s build/print-hex.fif
আপনি দেখতে পারেন, আপনি ইনস্টল করতে হবে উদযাপন এবং পাঁচ আপনার ডিভাইসে। তুমি ব্যবহার করতে পার অফিসিয়াল টিউটোরিয়াল প্রয়োজনীয়তা স্থাপন করতে।
আপনি সেগুলি ইনস্টল করার পরে, কেবল স্ক্রিপ্টটি চালান এবং আপনি এইরকম ফলাফল দেখতে আশা করবেন।
আমাদের শুধুমাত্র প্রয়োজন জেটন-ওয়ালেট অংশ, তাই হেক্স কপি করুন এবং পেস্ট করুন src/lib/contracts/jetton-wallet.compiled.json ফাইল ছোট প্রকল্পে,
আপনার jettons minting
এখন আপনার জেটন কাস্ট করার জন্য সবকিছু প্রস্তুত। প্রকল্প পুনরায় শুরু করুন এবং যান http://localhost:3000 এখন আবার।
আপনার ইচ্ছা অনুযায়ী বিশদগুলি পূরণ করুন এবং মিন্টিং প্রক্রিয়াটি সম্পূর্ণ করুন।
এখন আমাদের টোকেনের কার্যকারিতা পরীক্ষা করার সময়। আমি OpenMask এ 10 AWJ পাঠাতে একটি নতুন টেস্টনেট ওয়ালেট তৈরি করেছি। আমি আশা করি এই প্রক্রিয়ায় 5টি AWJ বাদ দিতে পারব। টোকেন স্থানান্তর করতে আপনি প্যানেল বা ওপেনমাস্ক ব্যবহার করতে পারেন।
লেনদেন সম্পন্ন হওয়ার পরে, আপনি OpenMask-এ আপনার ব্যালেন্স চেক করতে পারেন। ডিফল্টরূপে, OpenMask আপনার টোকেন ধারণ করে না কিন্তু আপনি সহজেই এটি যোগ করতে পারেন। আপনার টোকেনের ঠিকানাটি অনুলিপি করুন (আপনি এটি এক্সপ্লোরার থেকে বা প্রকল্পের মূল পৃষ্ঠা থেকে পেতে পারেন)। ক্লিক টোকেন আমদানি করুন OpenMask এর হোমপেজের শেষে বোতাম।
এখানে আপনি দেখতে পাচ্ছেন যে আপনার কাছে আসল 10 এর পরিবর্তে শুধুমাত্র 5টি AWJ আছে।
TON-এ চুক্তি বিকাশ করা এত সহজ নয়। উদাহরণস্বরূপ, Ethereum-এ অনেক টুল এই প্রক্রিয়াটিকে আপনার জন্য সহজ করে তোলে কিন্তু এখানে নয়। নেটওয়ার্কের উন্নতি হতে কিছুটা সময় লাগতে পারে, কিন্তু আমি এখানে সম্ভাবনা দেখতে পাচ্ছি এবং আশা করছি যে এক বা দুই বছরের মধ্যে, TON আমরা যা আশা করেছিলাম তা হয়ে উঠবে।