Tự học Web3: Calling Payable Functions gọi hàm Payable từ web3.js đến một hợp đồng được viết bằng Solidity
Calling Payable Functions
Tự học Web3: Calling Payable Functions gọi hàm Payable từ web3.js đến một hợp đồng được viết bằng Solidity
Chúng ta sắp đi đến những bài cuối cùng của khoá học Solidity và Web3 miễn phí này rồi. Trong bài hôm nay hãy xem xét một loại hàm khác yêu cầu xử lý đặc biệt trong Web3.js - Payable Functions.
Calling Payable Functions
Hàm Level Up!
Nhớ lại trong ZombieHelper, chúng tôi đã thêm một Payable Functionsđể người dùng có thể lên cấp:
function levelUp(uint _zombieId) external payable {
require(msg.value == levelUpFee);
zombies[_zombieId].level++;
}
Cách gửi Ether cùng với một chức năng rất đơn giản, với một lưu ý: chúng ta cần chỉ định số tiền cần gửi trong wei, không phải Ether.
Wei là gì?
Một wei là đơn vị con nhỏ nhất của Ether - có 10 ^ 18 wei trong một ether.
Đó là rất nhiều số 0 để đếm - nhưng may mắn là Web3.js có một tiện ích chuyển đổi thực hiện điều này cho chúng ta.
// This will convert 1 ETH to Wei
web3js.utils.toWei("1");
Trong DApp của chúng tôi, chúng tôi đặt levelUpFee = 0,001 ether, vì vậy khi chúng tôi gọi hàm levelUp, chúng tôi có thể yêu cầu người dùng gửi 0,001 Ether cùng với nó bằng cách sử dụng mã sau:
cryptoZombies.methods.levelUp(zombieId)
.send({ from: userAccount, value: web3js.utils.toWei("0.001", "ether") })
Và chúng ta sẽ gọi hàm Level UP từ Javascript như sau
function levelUp(zombieId) {
$("#txStatus").text("Leveling up your zombie..."); return cryptoZombies.methods.levelUp(zombieId) .send({ from: userAccount, value: web3js.utils.toWei("0.001", "ether") }) .on("receipt", function(receipt) { $("#txStatus").text("Power overwhelming! Zombie successfully leveled up"); }) .on("error", function(error) { $("#txStatus").text(error); }); }
BÀI TIẾP THEO: BÀI SỐ 50HỌC TỪ ĐẦU: BÀI SỐ 1