# 为greta00教程代码的优化

By [tmbtc](https://paragraph.com/@tmbtc) · 2022-07-13

---

greta的教程会卡在第三步，下面的这个试验过之后是可以跑通的，记得把这段秘钥改成自己的const ALCHEMY\_SECRET = 'vSyIaL\_nTezVkzJbgitf8lIJJRW9qZuE'; // Replace with your secret

const { providers, Contract, utils } = require("ethers"); const got = require("got");

const doStuff = async () => { const ALCHEMY\_SECRET = 'vSyIaL\_nTezVkzJbgitf8lIJJRW9qZuE'; // Replace with your secret const provider = new providers.AlchemyProvider('rinkeby', ALCHEMY\_SECRET);

const block = await provider.getBlockNumber();

console.log("The latest Ethereum block is:", block); const REGISTRY\_CONTRACT\_ADDRESS = '0xe3Be01D99bAa8dB9905b33a3cA391238234B79D1' const REGISTRY\_ABI = \[ { name: 'getDirectoryUrl', inputs: \[{ internalType: 'bytes32', name: 'username', type: 'bytes32' }\], outputs: \[{ internalType: 'string', name: '', type: 'string'}\], stateMutability: 'view', type: 'function', }, { inputs: \[{ internalType: 'address', name: '', type: 'address' }\], name: 'addressToUsername', outputs: \[{ internalType: 'bytes32', name: '', type: 'bytes32' }\], stateMutability: 'view', type: 'function', }, \];

const registryContract = new Contract(REGISTRY\_CONTRACT\_ADDRESS, REGISTRY\_ABI, provider);

const username = 'v'; const byte32Name = utils.formatBytes32String(username); const directoryUrl = await registryContract.getDirectoryUrl(byte32Name); console.log(directoryUrl); const directoryResponse = await got(directoryUrl); const directory = JSON.parse(directoryResponse.body); console.log(directory); console.log(directory, '\\n'); const addressActivityUrl = directory.body.addressActivityUrl; const addressActivityResponse = await got(addressActivityUrl); const addressActivity = JSON.parse(addressActivityResponse.body); const cast = addressActivity\[0\]; console.log(directory) console.log(cast, '\\n')

const stringifiedCastBody = JSON.stringify(cast.body); const calculatedHash = utils.keccak256(utils.toUtf8Bytes(stringifiedCastBody)); const expectedHash = cast.merkleRoot;

if (calculatedHash !== expectedHash) { console.log('FAILED'); } else { console.log('PASSED'); }

const recoveredAddress = utils.verifyMessage(cast.merkleRoot, cast.signature); const expectedAddress = cast.body.address;

if (recoveredAddress !== expectedAddress) { console.log('FAILED'); } else { console.log('PASSED'); }

const encodedUsername = await registryContract.addressToUsername(expectedAddress); const expectedUsername = utils.parseBytes32String(encodedUsername); const castUsername = cast.body.username;

if (expectedUsername !== castUsername) { console.log('FAILED'); } else { console.log('PASSED'); }

}

doStuff();

---

*Originally published on [tmbtc](https://paragraph.com/@tmbtc/greta00)*
