Approve và Stake Token: code javascript và giải thích

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_weisClass. Đ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ã:

  1. async function approveTokenSpend(_mint_fee_wei, sClass) {: Khai báo hàm approveTokenSpend với hai tham số đầu vào là _mint_fee_weisClass. Hàm này được đánh dấu là async, có nghĩa là nó sẽ trả về một Promise và có thể sử dụng từ khóa await bên trong hàm.
  2. let gasEstimation;: Khai báo biến gasEstimation để lưu trữ ước tính chi phí gas cho giao dịch.
  3. try {: Bắt đầu một khối lệnh try để bắt lỗi nếu có.
  4. gasEstimation = await oContractToken.methods.approve(_CONTRACT_DATA[_NETWORK_ID].STACKING[sClass].address, _mint_fee_wei).estimateGas({: Gọi phương thức approve của đối tượng oContractToken để chấp thuận chi tiêu token. Sử dụng phương thức estimateGas để ước tính chi phí gas cho giao dịch và lưu kết quả vào biến gasEstimation.
  5. from: selectedAccount: Thiết lập thuộc tính from của đối tượng truyền vào phương thức estimateGas bằng giá trị của biến selectedAccount.
  6. });: Kết thúc khối lệnh truyền vào phương thức estimateGas.
  7. console.log('gasEstimation', gasEstimation);: In ra giá trị của biến gasEstimation để kiểm tra.
  8. } catch (error) {: Bắt đầu một khối lệnh catch để xử lý lỗi nếu có.
  9. console.log(error);: In ra thông tin lỗi.
  10. showHideBtnsVal('#stake-btn', true);: Gọi hàm showHideBtnsVal vớ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.
  11. notyf.error(formatEthErrorMsg(error));: Gọi hàm formatEthErrorMsg với tham số đầu vào là đối tượng lỗi và truyền kết quả vào phương thức error của đối tượng notyf để hiển thị thông báo lỗi.
  12. 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ã:

  1. async function stackTokenMain(_amount_wei, sClass) {: Khai báo hàm stackTokenMain với hai tham số đầu vào là _amount_wei và sClass. Hàm này được đánh dấu là async, có nghĩa là nó sẽ trả về một Promise và có thể sử dụng từ khóa await bên trong hàm.
  2. let gasEstimation;: Khai báo biến gasEstimation để lưu trữ ước tính chi phí gas cho giao dịch.
  3. let oContractStacking = getContractObj(sClass);: Khai báo biến oContractStacking và gán giá trị trả về của hàm getContractObj với tham số đầu vào là sClass.
  4. try {: Bắt đầu một khối lệnh try để bắt lỗi nếu có.
  5. gasEstimation = await oContractStacking.methods.stake(_amount_wei).estimateGas({: Gọi phương thức stake của đối tượng oContractStacking để stake token. Sử dụng phương thức estimateGas để ước tính chi phí gas cho giao dịch và lưu kết quả vào biến gasEstimation.
  6. from: selectedAccount: Thiết lập thuộc tính from của đối tượng truyền vào phương thức estimateGas bằng giá trị của biến selectedAccount.
  7. });: Kết thúc khối lệnh truyền vào phương thức estimateGas.
  8. console.log('gasEstimation', gasEstimation);: In ra giá trị của biến gasEstimation để kiểm tra.
  9. } catch (error) {: Bắt đầu một khối lệnh catch để xử lý lỗi nếu có.
  10. console.log(error);: In ra thông tin lỗi.
  11. notyf.error(formatEthErrorMsg(error));: Gọi hàm formatEthErrorMsg với tham số đầu vào là đối tượng lỗi và truyền kết quả vào phương thức error của đối tượng notyf để hiển thị thông báo lỗi.
  12. showHideBtnsVal('#stake-btn', true);: Gọi hàm showHideBtnsVal vớ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.
  13. return;: Thoát khỏi hàm.
  14. oContractStacking.methods.stake(_amount_wei): Gọi phương thức stake của đối tượng oContractStacking để stake token.
  15. .send({: Gọi phương thức send để gửi giao dịch.
  16. from: selectedAccount,: Thiết lập thuộc tính from của đối tượng truyền vào phương thức send bằng giá trị của biến selectedAccount.
  17. gas: gasEstimation: Thiết lập thuộc tính gas của đối tượng truyền vào phương thức send bằng giá trị của biến gasEstimation.
  18. }): Kết thúc khối lệnh truyền vào phương thức send.
  19. .on('transactionHash', (hash) => {: Đăng ký sự kiện transactionHash để lắng nghe khi có thông tin về hash của giao dịch.
  20. console.log("Transaction Hash: ", hash);: In ra thông tin về hash của giao dịch.
  21. }): Kết thúc khối lệnh xử lý sự kiện transactionHash.
  22. .on('receipt', (receipt) => {: Đăng ký sự kiện receipt để lắng nghe khi có thông tin về biên lai của giao dịch.
  23. $('#amount-to-stack').val('');: Đặt giá trị của phần tử HTML có id là amount-to-stack thành chuỗi rỗng.
  24. console.log(receipt);: In ra thông tin về biên lai của giao dịch.
  25. showHideBtnsVal('#stake-btn', true);: Gọi hàm showHideBtnsVal vớ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.
  26. loadInitialData(sClass);: Gọi hàm loadInitialData với tham số đầu vào là sClass.
  27. }): Kết thúc khối lệnh xử lý sự kiện receipt.
  28. .catch((error) => {: Bắt đầu một khối lệnh để xử lý lỗi nếu có.
  29. console.log(error);: In ra thông tin lỗi.
  30. showHideBtnsVal('#stake-btn', true);: Gọi hàm showHideBtnsVal vớ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.
  31. notyf.error(formatEthErrorMsg(error));: Gọi hàm formatEthErrorMsg với tham số đầu vào là đối tượng lỗi và truyền kết quả vào phương thức error của đối tượng notyf để 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
Rate this post

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *