Khi tham gia vào các nền tảng tài chính phi tập trung (DeFi), việc sử dụng và quản lý các token đóng một vai trò quan trọng. Trong quá trình tham gia vào các giao dịch DeFi, bạn sẽ thường xuyên gặp phải các bước “approve” và “stake” token. Đây là hai hoạt động cơ bản nhưng lại có thể gây nhầm lẫn cho người mới tham gia. Trong bài viết này, chúng ta sẽ tìm hiểu về đoạn mã JavaScript dành cho việc approve và stake token trong môi trường DeFi, cùng với việc giải thích từng dòng code để hiểu rõ hơn về cách hoạt động của chúng.
Hàm Approve Token
async function approveTokenSpend(_mint_fee_wei, sClass) {
let gasEstimation;
try {
gasEstimation = await oContractToken.methods.approve(_CONTRACT_DATA[_NETWORK_ID].STACKING[sClass].address, _mint_fee_wei).estimateGas({
from: selectedAccount
});
console.log('gasEstimation', gasEstimation);
} catch (error) {
console.log(error);
showHideBtnsVal('#stake-btn', true);
notyf.error(formatEthErrorMsg(error));
return;
}
oContractToken.methods.approve(_CONTRACT_DATA[_NETWORK_ID].STACKING[sClass].address, _mint_fee_wei)
.send({
from: selectedAccount,
gas: gasEstimation
})
.on('transactionHash', (hash) => {
console.log("Transaction Hash: ", hash);
})
.on('receipt', (receipt) => {
console.log(receipt);
stackTokenMain(_mint_fee_wei, sClass);
})
.catch((error) => {
console.log(error);
notyf.error(formatEthErrorMsg(error));
showHideBtnsVal('#stake-btn', true);
return;
});
}
Đây là một đoạn mã JavaScript có tên hàm là approveTokenSpend. Hàm này nhận vào hai tham số là _mint_fee_wei và sClass. Đoạn mã này có thể được sử dụng trong một ứng dụng blockchain để thực hiện việc chấp thuận chi tiêu token.
Dưới đây là giải thích chi tiết cho từng dòng trong đoạn mã:
async function approveTokenSpend(_mint_fee_wei, sClass) {: Khai báo hàmapproveTokenSpendvới hai tham số đầu vào là_mint_fee_weivàsClass. Hàm này được đánh dấu làasync, có nghĩa là nó sẽ trả về mộtPromisevà có thể sử dụng từ khóaawaitbên trong hàm.let gasEstimation;: Khai báo biếngasEstimationđể lưu trữ ước tính chi phí gas cho giao dịch.try {: Bắt đầu một khối lệnhtryđể bắt lỗi nếu có.gasEstimation = await oContractToken.methods.approve(_CONTRACT_DATA[_NETWORK_ID].STACKING[sClass].address, _mint_fee_wei).estimateGas({: Gọi phương thứcapprovecủa đối tượngoContractTokenđể chấp thuận chi tiêu token. Sử dụng phương thứcestimateGasđể ước tính chi phí gas cho giao dịch và lưu kết quả vào biếngasEstimation.from: selectedAccount: Thiết lập thuộc tínhfromcủa đối tượng truyền vào phương thứcestimateGasbằng giá trị của biếnselectedAccount.});: Kết thúc khối lệnh truyền vào phương thứcestimateGas.console.log('gasEstimation', gasEstimation);: In ra giá trị của biếngasEstimationđể kiểm tra.} catch (error) {: Bắt đầu một khối lệnhcatchđể xử lý lỗi nếu có.console.log(error);: In ra thông tin lỗi.showHideBtnsVal('#stake-btn', true);: Gọi hàmshowHideBtnsValvới hai tham số đầu vào là chuỗi selector cho nút stake và giá trị boolean để hiển thị hoặc ẩn nút.notyf.error(formatEthErrorMsg(error));: Gọi hàmformatEthErrorMsgvới tham số đầu vào là đối tượng lỗi và truyền kết quả vào phương thứcerrorcủa đối tượngnotyfđể hiển thị thông báo lỗi.return;: Thoát khỏi hàm.
Hàm Stake Token
async function stackTokenMain(_amount_wei, sClass) {
let gasEstimation;
let oContractStacking = getContractObj(sClass);
try {
gasEstimation = await oContractStacking.methods.stake(_amount_wei).estimateGas({
from: selectedAccount
});
console.log('gasEstimation', gasEstimation);
} catch (error) {
console.log(error);
notyf.error(formatEthErrorMsg(error));
showHideBtnsVal('#stake-btn', true);
return;
}
oContractStacking.methods.stake(_amount_wei)
.send({
from: selectedAccount,
gas: gasEstimation
})
.on('transactionHash', (hash) => {
console.log("Transaction Hash: ", hash);
})
.on('receipt', (receipt) => {
$('#amount-to-stack').val('');
console.log(receipt);
showHideBtnsVal('#stake-btn', true);
// refreshBal(sClass);
loadInitialData(sClass);
})
.catch((error) => {
console.log(error);
showHideBtnsVal('#stake-btn', true);
notyf.error(formatEthErrorMsg(error));
return;
});
}
Đây là một đoạn mã JavaScript có tên hàm là stackTokenMain. Hàm này nhận vào hai tham số là _amount_wei và sClass. Đoạn mã này có thể được sử dụng trong một ứng dụng blockchain để thực hiện việc stake token.
Dưới đây là giải thích chi tiết cho từng dòng trong đoạn mã:
async function stackTokenMain(_amount_wei, sClass) {: Khai báo hàmstackTokenMainvới hai tham số đầu vào là_amount_weivàsClass. Hàm này được đánh dấu làasync, có nghĩa là nó sẽ trả về mộtPromisevà có thể sử dụng từ khóaawaitbên trong hàm.let gasEstimation;: Khai báo biếngasEstimationđể lưu trữ ước tính chi phí gas cho giao dịch.let oContractStacking = getContractObj(sClass);: Khai báo biếnoContractStackingvà gán giá trị trả về của hàmgetContractObjvới tham số đầu vào làsClass.try {: Bắt đầu một khối lệnhtryđể bắt lỗi nếu có.gasEstimation = await oContractStacking.methods.stake(_amount_wei).estimateGas({: Gọi phương thứcstakecủa đối tượngoContractStackingđể stake token. Sử dụng phương thứcestimateGasđể ước tính chi phí gas cho giao dịch và lưu kết quả vào biếngasEstimation.from: selectedAccount: Thiết lập thuộc tínhfromcủa đối tượng truyền vào phương thứcestimateGasbằng giá trị của biếnselectedAccount.});: Kết thúc khối lệnh truyền vào phương thứcestimateGas.console.log('gasEstimation', gasEstimation);: In ra giá trị của biếngasEstimationđể kiểm tra.} catch (error) {: Bắt đầu một khối lệnhcatchđể xử lý lỗi nếu có.console.log(error);: In ra thông tin lỗi.notyf.error(formatEthErrorMsg(error));: Gọi hàmformatEthErrorMsgvới tham số đầu vào là đối tượng lỗi và truyền kết quả vào phương thứcerrorcủa đối tượngnotyfđể hiển thị thông báo lỗi.showHideBtnsVal('#stake-btn', true);: Gọi hàmshowHideBtnsValvới hai tham số đầu vào là chuỗi selector cho nút stake và giá trị boolean để hiển thị hoặc ẩn nút.return;: Thoát khỏi hàm.oContractStacking.methods.stake(_amount_wei): Gọi phương thứcstakecủa đối tượngoContractStackingđể stake token..send({: Gọi phương thứcsendđể gửi giao dịch.from: selectedAccount,: Thiết lập thuộc tínhfromcủa đối tượng truyền vào phương thứcsendbằng giá trị của biếnselectedAccount.gas: gasEstimation: Thiết lập thuộc tínhgascủa đối tượng truyền vào phương thứcsendbằng giá trị của biếngasEstimation.}): Kết thúc khối lệnh truyền vào phương thứcsend..on('transactionHash', (hash) => {: Đăng ký sự kiệntransactionHashđể lắng nghe khi có thông tin về hash của giao dịch.console.log("Transaction Hash: ", hash);: In ra thông tin về hash của giao dịch.}): Kết thúc khối lệnh xử lý sự kiệntransactionHash..on('receipt', (receipt) => {: Đăng ký sự kiệnreceiptđể lắng nghe khi có thông tin về biên lai của giao dịch.$('#amount-to-stack').val('');: Đặt giá trị của phần tử HTML có id làamount-to-stackthành chuỗi rỗng.console.log(receipt);: In ra thông tin về biên lai của giao dịch.showHideBtnsVal('#stake-btn', true);: Gọi hàmshowHideBtnsValvới hai tham số đầu vào là chuỗi selector cho nút stake và giá trị boolean để hiển thị hoặc ẩn nút.loadInitialData(sClass);: Gọi hàmloadInitialDatavới tham số đầu vào làsClass.}): Kết thúc khối lệnh xử lý sự kiệnreceipt..catch((error) => {: Bắt đầu một khối lệnh để xử lý lỗi nếu có.console.log(error);: In ra thông tin lỗi.showHideBtnsVal('#stake-btn', true);: Gọi hàmshowHideBtnsValvới hai tham số đầu vào là chuỗi selector cho nút stake và giá trị boolean để hiển thị hoặc ẩn nút.notyf.error(formatEthErrorMsg(error));: Gọi hàmformatEthErrorMsgvới tham số đầu vào là đối tượng lỗi và truyền kết quả vào phương thứcerrorcủa đối tượngnotyfđể hiển thị thông báo lỗi.
Lưu ý rằng bên trên chỉ là đoạn code javascript, còn phải kết nối với Solidity. Mình sẽ hướng dẫn ở phần khác. Hoặc bạn có thể tham khảo website staking token SGN: https://135web.net/
Như vậy, thông qua việc viết và giải thích đoạn mã JavaScript cho việc approve và stake token, chúng ta đã có cái nhìn rõ ràng hơn về cách thức hoạt động của hai hoạt động quan trọng trong DeFi. Việc sử dụng và quản lý token trong các giao dịch DeFi không chỉ đơn thuần là việc nhấn một vài nút, mà còn đòi hỏi hiểu biết về cách thức giao tiếp với hợp đồng thông minh và xác minh giao dịch của bạn trên blockchain. Hi vọng bài viết này đã giúp bạn hiểu rõ hơn về quy trình approve và stake token, từ đó tạo ra những giao dịch an toàn và hiệu quả trong thế giới DeFi đầy tiềm năng.
Vietnam Pham – Click Digital
- If you’d like to invest in blockchain advertising companies, just BUY token Saigon (SGN) at Pancakeswap: https://t.co/KJbk71cFe8 (do not worry about low liquidity)
- Backed by Click Digital Company
- Enhancing blockchain knowledge
- BSC address: 0xa29c5da6673fd66e96065f44da94e351a3e2af65
- Twitter: https://twitter.com/SaigonSGN135
- Staking SGN: http://135web.net
Digital Marketing Specialist
