[英]How to decode response from calling smart contract on Ethereum using Web3js on nodejs
[英]Integrate with Ethereum smart contract using other person Signer on server-side (NodeJS)
我正在建立一個銷售 NFT 的網站。 我看到讓訪問者為 NFT 項目付款的方式是與客戶端的智能合約集成,以便從他們的錢包(例如 Metamask)中獲取 Signer。
我的客戶代碼:
export async function createItemToken(itemPrice: number): Promise<string> {
const web3Modal = new Web3Modal();
const connection = await web3Modal.connect();
const provider = new ethers.providers.Web3Provider(connection);
const signer = provider.getSigner();
const contract = new ethers.Contract(
contractAddress,
MyNFTContract.abi,
signer,
);
const formatedItemPrice = ethers.utils.parseUnits(String(itemPrice), 'ether');
const transaction = await contract.transferToken(
{value: itemPrice},
);
const tx = await transaction.wait();
return tx.transactionHash;
}
我了解訪問者錢包的訪問權限僅在客戶端,但讓客戶端調用智能合約是沒有意義的。 例如,訪問者可以為商品輸入不同的價格。
如何避免? 有沒有辦法在服務器端(NodeJS)進行這種集成?
我找不到在服務器上獲取訪問者簽名者的方法,所以也許我的所有流程都不正確......感謝您的幫助!
訪問者可以為商品輸入不同的價格
他們當然可以。 但智能合約還應驗證該value
是否為預期價格。 如果不是,它應該恢復交易。
根據提供的代碼和問題,我假設創建代幣的價格僅存儲在鏈下。 您應該使用合約作為價格的真實來源,並在鏈上進行驗證。
pragma solidity ^0.8;
contract MyNFTContract {
function transferToken() external payable {
require(msg.value == this.getPrice(), "Incorrect value");
// ...
}
function getPrice() external pure returns (uint256) {
// can by also dynamic based on the token ID or any other on-chain param
return 0.5 ether;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.