Ошибка не удается найти модуль cryptojs в waves-crypto npm module

#wavesplatform

#wavesplatform

Вопрос:

Я пытаюсь использовать @waves / waves-crypto, у меня есть import * как wavesCrypto из «@waves / waves-crypto» в моем файле .ts, но я все еще получаю ошибку в самом модуле npm. Я пытаюсь создать кошелек waves, используя nativescript, и прямо сейчас я пытаюсь создать адрес и начальное значение, а также открытый и закрытый ключи для пользователя. это login.ts, где я вызываю @waves / волны-крипто

 import { Component, ElementRef, ViewChild } from "@angular/core";
import { Router } from "@angular/router";
import { alert, prompt } from "tns-core-modules/ui/dialogs";
import { Page } from "tns-core-modules/ui/page";
import { Routes } from "@angular/router";
//import { publicKey, verifySignature, signBytes, address, keyPair, privateKey } from "../@waves/waves-crypto";
import * as wavesCrypto from '../@waves/waves-crypto';

import { User } from "../shared/user.model";
import { UserService } from "../shared/user.service";

@Component({
    selector: "app-login",
    moduleId: module.id,
    templateUrl: "./login.component.html",
    styleUrls: ['./login.component.css']
})
export class LoginComponent {
    isLoggingIn = true;
    user: User;
    @ViewChild("password") password: ElementRef;
    @ViewChild("confirmPassword") confirmPassword: ElementRef;
    @ViewChild("waves") waves: ElementRef;

    constructor(private page: Page, private userService: UserService, private router: Router) {
        this.page.actionBarHidden = true;
        this.user = new User();
        // this.user.email = "foo2@foo.com";
        // this.user.password = "foo";
        const seed = 'magicseed';
        const pubKey = wavesCrypto.publicKey(seed);
        const bytes = Uint8Array.from([1, 2, 3, 4]);
        const sig = wavesCrypto.signBytes(bytes, seed);
        const isValid = wavesCrypto.verifySignature(pubKey, bytes, sig)
    }

    wallet() {
        let walletAddress = wavesCrypto.address('seed', 'T');
        let keyPair = wavesCrypto.keyPair('seed');
        //publicKey('seed');
        //privateKey('seed');
        wavesCrypto.privateKey('seed');
        alert(walletAddress);
        console.log(walletAddress);
        console.log(keyPair);
    }

    toggleForm() {
        this.isLoggingIn = !this.isLoggingIn;
    }

    submit() {
        if (!this.user.email || !this.user.password) {
            this.alert("Please provide both an email address and password.");
            return;
        }

        if (this.isLoggingIn) {
            this.login();
        } else {
            this.register();
        }
    }

    login() {
        this.userService.login(this.user)
            .then(() => {
                this.router.navigate(["/home"]);
            })
            .catch(() => {
                this.alert("Unfortunately we could not find your account.");
            });
    }

    register() {
        if (this.user.password != this.user.confirmPassword) {
            this.alert("Your passwords do not match.");
            return;
        }
        this.userService.register(this.user)
            .then(() => {
                this.alert("Your account was successfully created.");
                this.isLoggingIn = true;
            })
            .catch(() => {
                this.alert("Unfortunately we were unable to create your account.");
            });
    }

    forgotPassword() {
        prompt({
            title: "Forgot Password",
            message: "Enter the email address you used to register for APP NAME to reset your password.",
            inputType: "email",
            defaultText: "",
            okButtonText: "Ok",
            cancelButtonText: "Cancel"
        }).then((data) => {
            if (data.result) {
                this.userService.resetPassword(data.text.trim())
                    .then(() => {
                        this.alert("Your password was successfully reset. Please check your email for instructions on choosing a new password.");
                    }).catch(() => {
                        this.alert("Unfortunately, an error occurred resetting your password.");
                    });
            }
        });
    }

    focusPassword() {
        this.password.nativeElement.focus();
    }
    focusConfirmPassword() {
        if (!this.isLoggingIn) {
            this.confirmPassword.nativeElement.focus();
        }
    }

    alert(message: string) {
        return alert({
            title: "APP NAME",
            okButtonText: "OK",
            message: message
        });
    }
}
  

Ответ №1:

У меня такая же проблема, и я открыл следующий выпуск в репозитории Github (вы можете перейти и нажать «Нравится» или «комментарий»), ссылка здесь

В вопросе я объясняю обходной путь, который работает для меня для проверки подписи, вы можете использовать тот же фрагмент.

Сначала импортируйте необходимые подмодули вручную:

 import { default as axlsign } from '@waves/signature-generator/libs/axlsign';
import { default as convert } from '@waves/signature-generator/dist/utils/convert';
import { concatUint8Arrays } from '@waves/signature-generator/dist/utils/concat';
import { default as base58 } from '@waves/signature-generator/dist/libs/base58';
  

Затем вы можете использовать следующий код для проверки подписи и ключа публикации:

 let prefix = "WavesWalletAuthentication";
let host = new URL(yourServerUrl).hostname;

let user = wavesAddressString;
let payload = theStringThatWasSigned;

let data = [prefix, host, payload]
    .map(d => convert.stringToByteArrayWithSize(d))
    .map(stringWithSize => Uint8Array.from(stringWithSize));
let dataBytes = concatUint8Arrays(...data);

let publicKeyBytes = base58.decode(publicKeyOnBase58Format);
let signatureBytes = base58.decode(signatureOnBase58Format);

let validSignature = axlsign.verify(publicKeyBytes, dataBytes, signatureBytes);
console.log("(login) validSignature?", validSignature);