import { toLedgerNetworkId, toRuntimeNetworkId, toZswapNetworkId, } from '@midnight-ntwrk/midnight-js-network-id'; import { setNetworkId } from '@midnight-ntwrk/compact-runtime'; import { setNetworkId as zwapSetNetworkId } from '@midnight-ntwrk/zswap'; import { setNetworkId as ledgerSetNetworkId } from '@midnight-ntwrk/ledger'; import { encodeCoinPublicKey } from '@midnight-ntwrk/compact-runtime'; import { deployContract, withZswapWitnesses } from '@midnight-ntwrk/midnight-js-contracts'; import { Transaction } from '@midnight-ntwrk/ledger'; import { Contract, ledger, witnesses } from '@midnight-ntwrk/counter-contract'; import { levelPrivateStateProvider } from '@midnight-ntwrk/midnight-js-level-private-state-provider'; import { FetchZkConfigProvider } from '@midnight-ntwrk/midnight-js-fetch-zk-config-provider'; import { httpClientProofProvider } from '@midnight-ntwrk/midnight-js-http-client-proof-provider'; import { indexerPublicDataProvider } from '@midnight-ntwrk/midnight-js-indexer-public-data-provider'; import { createBalancedTx, } from '@midnight-ntwrk/midnight-js-types'; const gamePlays = []; console.log('herehere'); const networkId = 'devnet'; setNetworkId(toRuntimeNetworkId(networkId)); zwapSetNetworkId(toZswapNetworkId(networkId)); ledgerSetNetworkId(toLedgerNetworkId(networkId)); let providers; const initializeProviders = async () => { const dappConnectorApi = window.midnight.mnLace; const uris = await dappConnectorApi.serviceUriConfig(); const { state } = await connectWallet(); const walletState = await wallet.state(); console.log('window.location.origin ', window.location.origin); return { privateStateProvider: levelPrivateStateProvider({ privateStateStoreName: 'counterPrivateState', }), zkConfigProvider: new FetchZkConfigProvider(window.location.origin, fetch.bind(window)), proofProvider: httpClientProofProvider(uris.proverServerUri), publicDataProvider: indexerPublicDataProvider(uris.indexerUri, uris.indexerWsUri), walletProvider: { coinPublicKey: walletState.coinPublicKey, async balanceTx(tx, newCoins) { const balanceTx = await wallet.balanceTransaction(tx.tx, newCoins); const proveTx = await wallet.proveTransaction(balanceTx); return createBalancedTx(Transaction.deserialize(proveTx.serialize())); }, }, midnightProvider: { submitTx(tx) { return wallet.submitTransaction(tx.tx); }, }, }; }; let wallet; const connectWallet = async () => (await window.midnight.mnLace.enable()); window.addEventListener('load', async () => wallet = await connectWallet()); console.log('wallet ', wallet); let counterContract; const createNewContract = async () => { console.log('createNewContract'); providers = await initializeProviders(); console.log('createNewContractDos'); counterContract = await deploy(providers); console.log('counterContract ', counterContract); }; const verifyScore = async () => { console.log('in verifyScore'); for (const play of gamePlays) { console.log('before play execution'); await play(); console.log('after play execution'); } const counterObject = await displayCounterValue(providers, counterContract); console.log('counterObject ', counterObject); const counterDiv = document.getElementById('counterValue'); counterDiv.textContent = counterObject.counterValue; }; document.getElementById("connectWallet").addEventListener("click", connectWallet); document.getElementById("createNewContract").addEventListener("click", createNewContract); document.getElementById("verifyScore").addEventListener("click", verifyScore); export const createCounterContract = (coinPublicKey) => { console.log(coinPublicKey); const counterContract = new Contract(withZswapWitnesses(witnesses)(encodeCoinPublicKey(coinPublicKey))); console.log('counterContract in createCounterCountract ', counterContract); return counterContract; }; const deploy = async (providers) => { console.log('herehere'); const { state } = await connectWallet(); console.log('walletState.coinPublicKey ', (await state()).coinPublicKey); try { const counterContract = await deployContract(providers, 'counterPrivateState', {}, createCounterContract((await state()).coinPublicKey)); console.log('counterContract ', counterContract); createIframe(); return counterContract; } catch (err) { console.log('err ', err); } }; const createIframe = () => { var ifrm = document.createElement("iframe"); ifrm.setAttribute("src", "https://hollow-ice-whispering.on-fleek.app/"); ifrm.setAttribute("sandbox", "allow-popups allow-forms allow-scripts allow-same-origin"); document.body.appendChild(ifrm); }; export const getCounterLedgerState = (providers, contractAddress) => providers.publicDataProvider .queryContractState(contractAddress) .then((contractState) => (contractState != null ? ledger(contractState.data).score : null)); export const displayCounterValue = async (providers, counterContract) => { const contractAddress = counterContract.finalizedDeployTxData.contractAddress; const counterValue = await getCounterLedgerState(providers, contractAddress); if (counterValue === null) { console.log(`There is no counter contract deployed at ${contractAddress}.`); } else { console.log(`Current counter value: ${Number(counterValue)}`); } return { contractAddress, counterValue }; }; export const incrementScore = async (counterContract) => { console.log('Incrementing Score...'); console.log('gamePlays ', gamePlays); console.log('counterContract.contractCircuitsInterface ', counterContract.contractCircuitsInterface); gamePlays.push(counterContract.contractCircuitsInterface.incrementScore); console.log('gamePlays ', gamePlays); }; const incrementCounter = async () => { console.log('in increment'); const returnObj = await incrementScore(counterContract); }; window.addEventListener("message", event => { console.log('here'); console.log(event); console.log('event.data.url ', event.data.url); if (event.data.url !== undefined) { incrementCounter(); } }, false);