diff --git a/pages/verification/index.tsx b/pages/verification/index.tsx index 3c8a004..bb20bc6 100644 --- a/pages/verification/index.tsx +++ b/pages/verification/index.tsx @@ -5,10 +5,7 @@ import { useEffect, useState } from "react"; import Image from "next/image"; // Types -import { - IcnsVerificationResponse, - TwitterAuthInfoResponse, -} from "../../types"; +import { IcnsVerificationResponse, TwitterAuthInfoResponse } from "../../types"; import { request } from "../../utils/url"; // Styles @@ -21,10 +18,17 @@ import { SkeletonChainList } from "../../components/skeleton"; import { PrimaryButton } from "../../components/primary-button"; import { AccountInfos } from "../../config"; -import { - TwitterProfile, -} from "../../components/twitter-profile"; +import { TwitterProfile } from "../../components/twitter-profile"; import { ChainList } from "../../components/chain-list"; +import { + getKeplrFromWindow, + KeplrWallet, + makeCosmwasmExecMsg, + sendMsgs, + simulateMsgs, +} from "../../wallets"; +import { TendermintTxTracer } from "@keplr-wallet/cosmos"; +import { Buffer } from "buffer/"; export default function VerificationPage() { const [twitterAuthInfo, setTwitterAuthInfo] = @@ -46,20 +50,146 @@ export default function VerificationPage() { setTwitterAuthInfo(newTwitterAuthInfo); - const icnsVerificationList = ( - await request("/api/icns-verification", { - method: "post", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ - claimer: "osmo1y5mm5nj5m8ttddt5ccspek6xgyyavehrkak7gq", - authToken: newTwitterAuthInfo.accessToken, - }), - }) - ).verificationList; + await (async () => { + const keplr = await getKeplrFromWindow(); + if (keplr) { + const wallet = new KeplrWallet(keplr); - console.log(icnsVerificationList); + const mainChainId = "osmo-test-4"; + const chainIds = (await wallet.getChainInfosWithoutEndpoints()).map( + (c) => c.chainId, + ); + + await wallet.init(chainIds); + + const key = await wallet.getKey(mainChainId); + + const icnsVerificationList = ( + await request( + "/api/icns-verification", + { + method: "post", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + claimer: key.bech32Address, + authToken: newTwitterAuthInfo.accessToken, + }), + }, + ) + ).verificationList; + + console.log(icnsVerificationList); + + const registerMsg = makeCosmwasmExecMsg( + key.bech32Address, + "osmo1u3sm9029430ca7xqz5afx4n0d42mgs2w97syex23g3vz2m673hxsv905sn", + { + claim: { + name: newTwitterAuthInfo.username, + verifying_msg: + icnsVerificationList[0].status === "fulfilled" + ? icnsVerificationList[0].value.data.verifying_msg + : "", + verifications: icnsVerificationList.map((verification) => { + if (verification.status === "fulfilled") { + return { + public_key: verification.value.data.public_key, + signature: verification.value.data.signature, + }; + } + }), + }, + }, + [ + { + denom: "uosmo", + amount: "500000", + }, + ], + ); + + const test = await wallet.signICNSAdr36( + mainChainId, + "osmo1q2qpencrnnlamwalxt6tac2ytl35z5jejn0v4frnp6jff7gwp37sjcnhu5", + key.bech32Address, + newTwitterAuthInfo.username, + chainIds, + ); + + const addressMsgs = test.map((adr36Info) => { + console.log(adr36Info); + + return makeCosmwasmExecMsg( + key.bech32Address, + "osmo1q2qpencrnnlamwalxt6tac2ytl35z5jejn0v4frnp6jff7gwp37sjcnhu5", + { + set_record: { + name: newTwitterAuthInfo.username, + bech32_prefix: adr36Info.bech32Prefix, + adr36_info: { + signer_bech32_address: adr36Info.bech32Address, + address_hash: adr36Info.addressHash, + pub_key: Buffer.from(adr36Info.pubKey).toString("base64"), + signature: Buffer.from(adr36Info.signature).toString( + "base64", + ), + signature_salt: adr36Info.signatureSalt.toString(), + }, + }, + }, + [], + ); + }); + + const aminoMsgs = [registerMsg.amino]; + const protoMsgs = [registerMsg.proto]; + for (const addressMsg of addressMsgs) { + aminoMsgs.push(addressMsg.amino); + protoMsgs.push(addressMsg.proto); + } + + const chainInfo = { + chainId: mainChainId, + rest: "https://lcd.testnet.osmosis.zone", + }; + + const simulated = await simulateMsgs( + chainInfo, + key.bech32Address, + { + proto: protoMsgs, + }, + { + amount: [], + }, + ); + + const txHash = await sendMsgs( + wallet, + chainInfo, + key.bech32Address, + { + amino: aminoMsgs, + proto: protoMsgs, + }, + { + amount: [], + gas: Math.floor(simulated.gasUsed * 1.5).toString(), + }, + ); + + const txTracer = new TendermintTxTracer( + "https://rpc.testnet.osmosis.zone", + "/websocket", + ); + + const result = await txTracer.traceTx(txHash); + + console.log(result); + } + })(); setIsLoading(false); }