myria-core-sdk
Version:
Latest version SDK
161 lines • 14.3 kB
JavaScript
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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