StackAsk is a community where developers ask questions, share answers and learn from each others real-world experience, so every solved problem helps the next person who runs into it.
const ethereumButton = $('#enableEthereumButton'); const signButton = $('#signButton'); const awardItemButton = $('#awardItemButton'); const showAccount = $('#showAccount'); const showBalance = $('#showBalance'); const showSignatureText = $('#showSignatureText'); const recoverText = $('#recoverText'); const messageInput = $('#messageInput'); const contractInfoText = $('#contractInfoText'); const tokenOwnerInput = $('#tokenOwnerInput'); const tokenURIInput = $('#tokenURIInput'); const tokenIdText = $('#tokenIdText'); var account = ''; async function getAccount() { const accounts = await ethereum.request({ method: 'eth_requestAccounts' }); account = accounts[0]; web3.eth.defaultAccount = account; showAccount.text(account); getBalance(); getContract(); } async function getBalance() { const balance = await ethereum.request({ method: 'eth_getBalance', params: [ account, "latest" ] }); showBalance.text(parseInt(balance, 16)); } async function sign() { const message = stringToHex(messageInput.val()); const signature = await ethereum.request({ method: 'personal_sign', params: [ message, account ] }); showSignatureText.text(message, signature); recover(message, signature); } async function recover(message, signature) { const recoverValue = await ethereum.request({ method: 'personal_ecRecover', params: [ message, signature ] }); recoverText.text(recoverValue); } var contract; const web3 = new Web3(ethereum); function getContract() { $.get( "/contract", function(data, status) { console.log('contract: ', data.address); web3.eth.Contract.defaultAccount = account; contract = new web3.eth.Contract(data.abi, data.address); contract.address = data.address; contract.abi = data.abi; getContractInfo(); } ); } async function getContractInfo() { const name = await contract.methods.name().call(); const symbol = await contract.methods.symbol().call(); contractInfoText.text(name + ' - ' + symbol); } async function awardItem() { const tokenOwner = tokenOwnerInput.val(); const tokenURI = tokenURIInput.val(); console.log('award item, owner: ' + tokenOwner + ', uri: ' + tokenURI); const result = await contract.methods.awardItem(tokenOwner, tokenURI).send({from: account}); const tokenId = result.events.Transfer.returnValues.tokenId; tokenIdText.text(tokenId); } (function() { if (typeof window.ethereum === 'undefined') { return; } console.log('MetaMask is installed!'); ethereumButton.on('click', () => { getAccount(); }); signButton.on('click', () => { sign(); }); awardItemButton.on('click', () => { awardItem(); }); })();
<span><!DOCTYPE html></span> <span><<span>html</span> <span>lang</span>=<span>"en"</span>></span> <span><<span>head</span>></span> <span><<span>meta</span> <span>charset</span>=<span>"UTF-8"</span>></span> <span><<span>title</span>></span>NFT Game<span></<span>title</span>></span> <span><<span>link</span> <span>rel</span>=<span>"stylesheet"</span> <span>href</span>=<span>"https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"</span> <span>integrity</span>=<span>"sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"</span> <span>crossorigin</span>=<span>"anonymous"</span>></span> <span><<span>link</span> <span>rel</span>=<span>"stylesheet"</span> <span>href</span>=<span>"/css/style.css"</span>></span> <span></<span>head</span>></span> <span><<span>body</span>></span> <span><<span>div</span> <span>class</span>=<span>"container"</span>></span> <span><<span>div</span> <span>class</span>=<span>"row"</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 text-center"</span>></span> <span><<span>h3</span>></span>Welcome to NFT Game<span></<span>h3</span>></span> <span></<span>div</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"row"</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 text-center"</span>></span> <span><<span>button</span> <span>id</span>=<span>"enableEthereumButton"</span> <span>class</span>=<span>"btn btn-primary"</span>></span>Enable Ethereum<span></<span>button</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 text-center mt-2"</span>></span> <span><<span>h5</span>></span>Account: <span><<span>span</span> <span>id</span>=<span>"showAccount"</span> <span>class</span>=<span>"text-success"</span>></span><span></<span>span</span>></span><span></<span>h5</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 text-center mt-2"</span>></span> <span><<span>h5</span>></span>Balance: <span><<span>span</span> <span>id</span>=<span>"showBalance"</span> <span>class</span>=<span>"text-danger"</span>></span><span></<span>span</span>></span><span></<span>h5</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 row text-center mt-2"</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-3"</span>></span><span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-6 input-group"</span>></span> <span><<span>button</span> <span>id</span>=<span>"signButton"</span> <span>class</span>=<span>"btn btn-primary"</span>></span>Sign<span></<span>button</span>></span> <span><<span>input</span> <span>id</span>=<span>"messageInput"</span> <span>type</span>=<span>"text"</span> <span>class</span>=<span>"form-control"</span> <span>value</span>=<span>"Hello World"</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-3"</span>></span><span></<span>div</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 text-center mt-2"</span>></span> <span><<span>h5</span>></span>Signature: <span><<span>span</span> <span>id</span>=<span>"showSignatureText"</span> <span>class</span>=<span>"text-secondary"</span>></span><span></<span>span</span>></span><span></<span>h5</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 text-center mt-2"</span>></span> <span><<span>h5</span>></span>Recover Text: <span><<span>span</span> <span>id</span>=<span>"recoverText"</span> <span>class</span>=<span>"text-secondary"</span>></span><span></<span>span</span>></span><span></<span>h5</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 text-center mt-2"</span>></span> <span><<span>h5</span>></span>Contract: <span><<span>span</span> <span>id</span>=<span>"contractInfoText"</span> <span>class</span>=<span>"text-info"</span>></span><span></<span>span</span>></span><span></<span>h5</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 row text-center mt-2"</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-2"</span>></span><span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-8 input-group"</span>></span> <span><<span>button</span> <span>id</span>=<span>"awardItemButton"</span> <span>class</span>=<span>"btn btn-primary"</span>></span>Award NFT<span></<span>button</span>></span> <span><<span>input</span> <span>id</span>=<span>"tokenOwnerInput"</span> <span>type</span>=<span>"text"</span> <span>class</span>=<span>"form-control"</span> <span>placeholder</span>=<span>"Token owner"</span> <span>value</span>=<span>"0x3c31b4b9d6c24bad29498f99aaa6914231362c7f"</span>></span> <span><<span>input</span> <span>id</span>=<span>"tokenURIInput"</span> <span>type</span>=<span>"text"</span> <span>class</span>=<span>"form-control"</span> <span>placeholder</span>=<span>"Token URI"</span> <span>value</span>=<span>"https://youngmonkeys.org/"</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-2"</span>></span><span></<span>div</span>></span> <span></<span>div</span>></span> <span><<span>div</span> <span>class</span>=<span>"col-md-12 text-center mt-2"</span>></span> <span><<span>h5</span>></span>New TokenId: <span><<span>span</span> <span>id</span>=<span>"tokenIdText"</span> <span>class</span>=<span>"text-success"</span>></span><span></<span>span</span>></span><span></<span>h5</span>></span> <span></<span>div</span>></span> <span></<span>div</span>></span> <span></<span>div</span>></span> <span><<span>script</span> <span>src</span>=<span>"https://code.jquery.com/jquery-3.6.0.js"</span> <span>integrity</span>=<span>"sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk="</span> <span>crossorigin</span>=<span>"anonymous"</span>></span><span></span><span></<span>script</span>></span> <span><<span>script</span> <span>src</span>=<span>"https://cdnjs.cloudflare.com/ajax/libs/web3/1.6.1/web3.min.js"</span> <span>integrity</span>=<span>"sha512-5erpERW8MxcHDF7Xea9eBQPiRtxbse70pFcaHJuOhdEBQeAxGQjUwgJbuBDWve+xP/u5IoJbKjyJk50qCnMD7A=="</span> <span>crossorigin</span>=<span>"anonymous"</span> <span>referrerpolicy</span>=<span>"no-referrer"</span>></span><span></span><span></<span>script</span>></span> <span><<span>script</span> <span>src</span>=<span>"/js/main.js"</span>></span><span></span><span></<span>script</span>></span>
2.2K Point(s)
1.2K Point(s)
313 Point(s)
178 Point(s)
138 Point(s)
Your account is signed in on the device(s) below. Sign out of at least one of them to continue signing in on this device.
Your account is signed in on the device(s) below. Sign out directly on one of those devices, or wait until the sign-in again time shown below.
If you cant access those devices, please contact the administrator to sign them out for you.
Input your email to receive reset password link, or if you remember your password, you can click