@nori-zk/mina-token-bridge
Version:
Nori ethereum state settelment and nETH token bridge zkApp
43 lines • 2.31 kB
JavaScript
// As opposed to using the provable method we can update a VK directly via a dedicated transaction
// Load environment variables from .env file
import 'dotenv/config';
import { Mina, AccountUpdate, fetchAccount } from 'o1js';
import { Logger, LogPrinter } from 'esm-iso-logger';
import { vkSafeToVk } from '@nori-zk/o1js-zk-utils';
import noriTokenBridgeVkData from '../integrity/NoriTokenBridge.VkData.json' with { type: 'json' };
import noriTokenBridgeVkHashStr from '../integrity/NoriTokenBridge.VkHash.json' with { type: 'json' };
import { parseAdminBinEnv, setupNetworkAndCompile } from './utils/adminBinUtils.js';
const logger = new Logger('UpdateVkNonProvable');
new LogPrinter('NoriTokenBridge');
const config = parseAdminBinEnv(logger, 'UpdateVkNonProvable');
const vkSafe = {
data: noriTokenBridgeVkData,
hashStr: noriTokenBridgeVkHashStr,
};
const newVerificationKey = vkSafeToVk(vkSafe);
logger.log(`New VK hash: '${vkSafe.hashStr}'`);
logger.log(`VkData file: 'src/integrity/NoriTokenBridge.VkData.json'`);
logger.log(`VkHash file: 'src/integrity/NoriTokenBridge.VkHash.json'`);
async function updateVkNonProvable() {
const tokenBridge = await setupNetworkAndCompile(logger, config);
const tokenBridgeAddress = config.tokenBridgePrivateKey.toPublicKey();
logger.log('Creating non-provable update VK transaction...');
const txn = await Mina.transaction({ fee: config.fee, sender: config.adminKey.toPublicKey() }, async () => {
logger.log(`Setting new verification key with hash: '${vkSafe.hashStr}'`);
const ac = AccountUpdate.createSigned(tokenBridgeAddress);
AccountUpdate.setValue(ac.update.verificationKey, newVerificationKey);
tokenBridge.approve(ac);
});
const signedTx = txn.sign([config.adminKey, config.tokenBridgePrivateKey]);
logger.log('Sending transaction...');
const pendingTx = await signedTx.send();
logger.log('Waiting for transaction to be included in a block...');
await pendingTx.wait();
await fetchAccount({ publicKey: tokenBridgeAddress });
logger.log('Non-provable VK update successful!');
}
updateVkNonProvable().catch((err) => {
logger.fatal(`UpdateVkNonProvable function encountered an error.\n${String(err)}`);
process.exit(1);
});
//# sourceMappingURL=updateVkNonProvable.js.map