UNPKG

l1-lottery-contracts

Version:

This repo contains smart contracts and related scripts for ZkNoid L1 Lottery proposed [here](https://forums.minaprotocol.com/t/zknoid-l1-lottery/6269)

74 lines (54 loc) 1.98 kB
import { AccountUpdate, fetchAccount, Mina, PrivateKey, PublicKey } from 'o1js'; import { configDefaultInstance } from './utils.js'; import { PlotteryFactory } from '../src/Factory.js'; import * as fs from 'fs'; import { treasury } from '../src/constants.js'; const { transactionFee } = configDefaultInstance(); const networkId = Mina.activeInstance.getNetworkId().toString(); console.log('Network id', networkId); let deployerKey = PrivateKey.fromBase58(process.env.DEPLOYER_KEY!); let deployer = deployerKey.toPublicKey(); console.log(`Deploying with ${deployer.toBase58()}`); console.log(`Compiling PlotteryFactory`); let { verificationKey } = await PlotteryFactory.compile(); const factoryDataPath = `./deployV2/${networkId}/${verificationKey.hash.toString()}/factory.json`; if (fs.existsSync(factoryDataPath)) { throw Error('Contract with same verification key already deployed'); } await fetchAccount({ publicKey: treasury, }); await fetchAccount({ publicKey: deployer }) let factoryKey = PrivateKey.random(); let factoryAddress = factoryKey.toPublicKey(); let factory = new PlotteryFactory(factoryAddress); console.log(`Preparing transaction`); let tx = Mina.transaction( { sender: deployer, fee: transactionFee }, async () => { AccountUpdate.fundNewAccount(deployer); factory.deploy(); } ); await tx.prove(); let txInfo = await tx.sign([factoryKey, deployerKey]).send(); let deploymentData = { address: factoryAddress.toBase58(), key: factoryKey.toBase58(), }; if ( !fs.existsSync(`./deployV2/${networkId}/${verificationKey.hash.toString()}`) ) { fs.mkdirSync(`./deployV2/${networkId}/${verificationKey.hash.toString()}`, { recursive: true, }); } fs.writeFileSync( `./deployV2/${networkId}/${verificationKey.hash.toString()}/factory.json`, JSON.stringify(deploymentData, null, 2) ); console.log(`Transaction hash: ${txInfo.hash}`); console.log('Waiting for transaction to be included in block'); await txInfo.wait();