UNPKG

myria-core-sdk

Version:

Latest version SDK

161 lines 14.3 kB
import * as encUtils from "enc-utils"; import { NativeMyriaClient, } from "../clients/NativeMyriaClient"; import { CommonAPI } from "../core/apis/common.api"; import { AssetMarketpAPI, UserAPI } from "../core/apis"; const StarkwareLib = require("@starkware-industries/starkware-crypto-utils"); const keyDerivation = StarkwareLib.keyDerivation; // const ec = StarkwareLib.ec; export const SIGN_MESSAGE = "Sign-in to your Myria L2 Wallet"; const METAMASK_MESSAGE_SIGNATURE = `Welcome to Myria!\n\nSelect 'Sign' to create and sign in to your Myria account.\n\nThis request will not trigger a blockchain transaction or cost any gas fees.\n\n`; export class NativeMobileModule { constructor(nativeClient) { this.nativeMyriaClient = new NativeMyriaClient(nativeClient); this.commonApi = new CommonAPI(nativeClient.env); this.userL2Api = new UserAPI(nativeClient.env); this.assetMarketpApi = new AssetMarketpAPI(nativeClient.env); } /** * Get stark public key by wallet signature * @param signature * s */ getStarkPublicKey(signature) { const privateKeyFromSignature = keyDerivation.getPrivateKeyFromEthSignature(signature); return keyDerivation.privateToStarkKey(privateKeyFromSignature); } serializeSignatureOptions(sig) { return encUtils.addHexPrefix(encUtils.padLeft(sig.r.toString(16), 64) + encUtils.padLeft(sig.s.toString(16), 64)); } async getServerTimestamp() { const serverTime = await this.commonApi.getTimeFromMyriaverse(); return serverTime; } getWalletSignMessage() { return SIGN_MESSAGE; } /** * @private * @description Allow to generate the signature for registration process with server time * @param {string} serverTime milliseconds as string * @returns {string} a string as the message for metamask's signing */ getRegisteredMessageWithTimestamp(serverTime) { return `${METAMASK_MESSAGE_SIGNATURE}${JSON.stringify({ created_on: serverTime, })}`; } async checkIfWalletExisted(walletEthAddress) { const userWalletResponse = await this.userL2Api.getUserByWalletAddress(walletEthAddress); return userWalletResponse; } async registerWalletL2(ethAddress, walletSignature, userType, referrerId) { if (userType && !referrerId) { throw new Error('ReferrerId is required!'); } const msgHash = StarkwareLib.pedersen([ "UserRegistration:", ethAddress, ]); const privateStarkKeyInternal = keyDerivation.getPrivateKeyFromEthSignature(walletSignature); const keyPair = StarkwareLib.ec.keyFromPrivate(privateStarkKeyInternal, "hex"); const pubKey = StarkwareLib.ec.keyFromPublic(keyPair.getPublic(true, "hex"), "hex"); const starkKey = keyDerivation.privateToStarkKey(privateStarkKeyInternal); const pureStarkSignature = StarkwareLib.sign(keyPair, msgHash); const verify = StarkwareLib.verify(pubKey, msgHash, pureStarkSignature); if (!verify) { throw new Error("Stark signature generate error - please recheck the data"); } const starkSignature = { r: `0x${pureStarkSignature.r.toJSON()}`, s: `0x${pureStarkSignature.s.toJSON()}`, }; const payload = { ethAddress: ethAddress, signature: starkSignature, starkKey: `0x${starkKey}`, userType, referrerId }; const registerResult = await this.userL2Api.registerUser(payload); return registerResult.data; } async registerWalletAccount(registeredAccountSignature, walletSignature, signMessage, ethAddress, userType, referrerId) { // Register account const registerData = { wallet_id: ethAddress, signature: registeredAccountSignature, message: signMessage }; const registeredResponse = await this.commonApi.registerUser(registerData); console.log('Register user response => ', JSON.stringify(registeredResponse)); if (registeredResponse.status === "success") { const registerUserData = await this.registerWalletL2(ethAddress, walletSignature, userType, referrerId); return registerUserData; } else { throw new Error(`Wallet registration failed: ${registeredResponse.data}`); } } /** * Get private stark key from the signature * @param signature * s */ getPrivateStarkKey(signature) { const privateStarkKeyInternal = keyDerivation.getPrivateKeyFromEthSignature(signature); return privateStarkKeyInternal; } generateStarkSignature(walletSignature, msgHash, myriaPrivateStarkKey) { let privateStarkKeyInternal; const publicStarkKey = this.getStarkPublicKey(walletSignature); if (myriaPrivateStarkKey) { privateStarkKeyInternal = myriaPrivateStarkKey; } else { privateStarkKeyInternal = this.getPrivateStarkKey(walletSignature); } const keyPair = StarkwareLib.ec.keyFromPrivate(privateStarkKeyInternal, "hex"); const pureStarkSignature = StarkwareLib.sign(keyPair, msgHash); const verify = StarkwareLib.verify(publicStarkKey, msgHash, pureStarkSignature); if (!verify) { throw new Error("Stark signature generate error - please recheck the data"); } const starkSignature = { r: `0x${pureStarkSignature.r.toJSON()}`, s: `0x${pureStarkSignature.s.toJSON()}`, }; return starkSignature; } generateStarkSerializeSignature(walletSignature, msgHash, myriaPrivateStarkKey) { let privateStarkKeyInternal; const publicStarkKey = this.getStarkPublicKey(walletSignature); if (myriaPrivateStarkKey) { privateStarkKeyInternal = myriaPrivateStarkKey; } else { privateStarkKeyInternal = this.getPrivateStarkKey(walletSignature); } const keyPair = StarkwareLib.ec.keyFromPrivate(privateStarkKeyInternal, "hex"); const pureStarkSignature = StarkwareLib.sign(keyPair, msgHash); const verify = StarkwareLib.verify(publicStarkKey, msgHash, pureStarkSignature); if (!verify) { throw new Error("Stark signature generate error - please recheck the data"); } const serializeSignature = this.serializeSignatureOptions(pureStarkSignature); console.log("[Core-SDK] Pure stark signature serialize -> ", serializeSignature); return serializeSignature; } async getAssetsByStarkKey(starkKey, page, limit) { if (!starkKey) { throw new Error("Stark Key is required"); } else { const pageNumber = page || 1; const limitNumber = limit || 10; const result = await this.assetMarketpApi.requestAssetStarkKey(starkKey, pageNumber, limitNumber); return result; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmF0aXZlTW9iaWxlTW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvTmF0aXZlTW9iaWxlTW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFFTCxpQkFBaUIsR0FDbEIsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFeEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7QUFFN0UsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQztBQUNqRCw4QkFBOEI7QUFFOUIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGlDQUFpQyxDQUFDO0FBQzlELE1BQU0sMEJBQTBCLEdBQUcscUtBQXFLLENBQUM7QUFRek0sTUFBTSxPQUFPLGtCQUFrQjtJQU03QixZQUFZLFlBQWdDO1FBQzFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsU0FBaUI7UUFDeEMsTUFBTSx1QkFBdUIsR0FDM0IsYUFBYSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxD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