如何从 React 前端向智能合约发送可变数量的以太币?
How to send variable amount of ether to smart contract from React front end?
我正在尝试从我的 React 前端向我的智能合约发送可变数量的以太币。在混音中,我只需选择数量并使用函数
发送它就可以做到这一点
在我的前端,这是 values.amount 是 100wei
的函数
const sendEth = async(e) => {
e.preventDefault()
try {
const { ethereum } = window;
if (ethereum) {
const provider = new ethers.providers.Web3Provider(ethereum);
const signer = provider.getSigner();
const connectedContract = new ethers.Contract(CONTRACT_ADDRESS, escrowAbi.abi, signer);
let nftTxn = await connectedContract.depositEth(values.amount);
console.log("Mining...please wait.", nftTxn)
await nftTxn.wait();
console.log(`Mined, see transaction: https://rinkeby.etherscan.io/tx/${nftTxn.hash}`);
// console.log(connectedContract)
} else {
console.log("Ethereum object doesn't exist!");
}
} catch (error) {
console.log(error)
}
}
在我的智能合约中,这是我的 depositEth 函数 - 然而 msg.value 是我想传递的参数,但我不能将它作为参数传递给这个函数?
仅供参考,在我的应用程序中,一旦您向合同支付 ETH,它就会发布 NFT。
function depositEth() public payable hasToken(address(this), nftAddress) {
require(msg.value == amountOwed, 'You ow more money');
buyerAddress = payable(msg.sender);
if(walletHoldsToken(address(this),nftAddress)) {
ERC721(nftAddress).safeTransferFrom(address(this), buyerAddress, tokenID);
}
}
所以我要问的是如何将 x 数量的 eth 发送到具有前端定义的该值的合约?
您的 depositEth()
函数需要 0 个参数,因此 JS 片段也需要传递 0 个参数。
ethers
中有 overrides 对象,总是在常规函数参数之后传递(在您的情况下是第一位,因为参数为 0),允许修改交易的某些字段调用函数,包括它的 value
.
let nftTxn = await connectedContract.depositEth({
value: values.amount
});
在你的智能合约中定义一个函数来return欠款金额:
function getOwedAmount() public view returns (uint256) {
// i am assuming " amountOwed" is state variable, uint256
return amountOwed;
}
创建合约后。
const connectedContract = new ethers.Contract(CONTRACT_ADDRESS, escrowAbi.abi, signer)
获取拥有的数量
let owedAmount = await contract.getOwedAmount();
owedAmount=owedAmount.toString()
let transaction=await connectedContract.depositEth({value:owedAmount})
await transaction.wait();
因为 depositEth
是应付的,我们可以将最后一个参数作为一个对象传递,指定我们发送了多少,solidity 会自动将该金额分配给 msg.value
我正在尝试从我的 React 前端向我的智能合约发送可变数量的以太币。在混音中,我只需选择数量并使用函数
发送它就可以做到这一点在我的前端,这是 values.amount 是 100wei
的函数const sendEth = async(e) => {
e.preventDefault()
try {
const { ethereum } = window;
if (ethereum) {
const provider = new ethers.providers.Web3Provider(ethereum);
const signer = provider.getSigner();
const connectedContract = new ethers.Contract(CONTRACT_ADDRESS, escrowAbi.abi, signer);
let nftTxn = await connectedContract.depositEth(values.amount);
console.log("Mining...please wait.", nftTxn)
await nftTxn.wait();
console.log(`Mined, see transaction: https://rinkeby.etherscan.io/tx/${nftTxn.hash}`);
// console.log(connectedContract)
} else {
console.log("Ethereum object doesn't exist!");
}
} catch (error) {
console.log(error)
}
}
在我的智能合约中,这是我的 depositEth 函数 - 然而 msg.value 是我想传递的参数,但我不能将它作为参数传递给这个函数?
仅供参考,在我的应用程序中,一旦您向合同支付 ETH,它就会发布 NFT。
function depositEth() public payable hasToken(address(this), nftAddress) {
require(msg.value == amountOwed, 'You ow more money');
buyerAddress = payable(msg.sender);
if(walletHoldsToken(address(this),nftAddress)) {
ERC721(nftAddress).safeTransferFrom(address(this), buyerAddress, tokenID);
}
}
所以我要问的是如何将 x 数量的 eth 发送到具有前端定义的该值的合约?
您的 depositEth()
函数需要 0 个参数,因此 JS 片段也需要传递 0 个参数。
ethers
中有 overrides 对象,总是在常规函数参数之后传递(在您的情况下是第一位,因为参数为 0),允许修改交易的某些字段调用函数,包括它的 value
.
let nftTxn = await connectedContract.depositEth({
value: values.amount
});
在你的智能合约中定义一个函数来return欠款金额:
function getOwedAmount() public view returns (uint256) {
// i am assuming " amountOwed" is state variable, uint256
return amountOwed;
}
创建合约后。
const connectedContract = new ethers.Contract(CONTRACT_ADDRESS, escrowAbi.abi, signer)
获取拥有的数量
let owedAmount = await contract.getOwedAmount();
owedAmount=owedAmount.toString()
let transaction=await connectedContract.depositEth({value:owedAmount})
await transaction.wait();
因为 depositEth
是应付的,我们可以将最后一个参数作为一个对象传递,指定我们发送了多少,solidity 会自动将该金额分配给 msg.value