From 8af6b773b71e3121c7faeadd30763531556103a3 Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto Date: Sun, 30 Jun 2024 11:53:21 +0000 Subject: [PATCH] fix: wownero seed giving incorrect add: pr-comment.yaml --- .github/workflows/pr-comment.yaml | 61 +++++++++++++++++++ .github/workflows/xmruw.yaml | 19 +++++- .../src/main/cpp/wallet2_api_c.cpp | 53 ++++++++++------ 3 files changed, 110 insertions(+), 23 deletions(-) create mode 100644 .github/workflows/pr-comment.yaml diff --git a/.github/workflows/pr-comment.yaml b/.github/workflows/pr-comment.yaml new file mode 100644 index 0000000..90619bd --- /dev/null +++ b/.github/workflows/pr-comment.yaml @@ -0,0 +1,61 @@ +name: Comment on pull request +on: + workflow_run: + workflows: ['Test workflow with upload'] + types: [completed] +jobs: + pr_comment: + if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v6 + with: + # This snippet is public-domain, taken from + # https://github.com/oprypin/nightly.link/blob/master/.github/workflows/pr-comment.yml + script: | + async function upsertComment(owner, repo, issue_number, purpose, body) { + const {data: comments} = await github.rest.issues.listComments( + {owner, repo, issue_number}); + + const marker = ``; + body = marker + "\n" + body; + + const existing = comments.filter((c) => c.body.includes(marker)); + if (existing.length > 0) { + const last = existing[existing.length - 1]; + core.info(`Updating comment ${last.id}`); + await github.rest.issues.updateComment({ + owner, repo, + body, + comment_id: last.id, + }); + } else { + core.info(`Creating a comment in issue / PR #${issue_number}`); + await github.rest.issues.createComment({issue_number, body, owner, repo}); + } + } + + const {owner, repo} = context.repo; + const run_id = ${{github.event.workflow_run.id}}; + + const pull_requests = ${{ toJSON(github.event.workflow_run.pull_requests) }}; + if (!pull_requests.length) { + return core.error("This workflow doesn't match any pull requests!"); + } + + const artifacts = await github.paginate( + github.rest.actions.listWorkflowRunArtifacts, {owner, repo, run_id}); + if (!artifacts.length) { + return core.error(`No artifacts found`); + } + let body = `Download the artifacts for this pull request:\n`; + for (const art of artifacts) { + body += `\n* [${art.name}.zip](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`; + } + + core.info("Review thread message body:", body); + + for (const pr of pull_requests) { + await upsertComment(owner, repo, pr.number, + "nightly-link", body); + } diff --git a/.github/workflows/xmruw.yaml b/.github/workflows/xmruw.yaml index d1955d5..d25cedd 100644 --- a/.github/workflows/xmruw.yaml +++ b/.github/workflows/xmruw.yaml @@ -21,6 +21,8 @@ jobs: ./apply_patches.sh monero - name: monero/aarch64-linux-android run: ./build_single.sh monero aarch64-linux-android -j$(nproc) + - name: wownero/aarch64-linux-android + run: ./build_single.sh monero aarch64-linux-android -j$(nproc) - name: clone xmruw run: | git clone https://github.com/mrcyjanek/unnamed_monero_wallet @@ -36,16 +38,27 @@ jobs: with: distribution: 'zulu' java-version: '17' - - name: build xmruw + - name: build xmruw (monero) run: | cd unnamed_monero_wallet + ./codegen.sh -DCOIN_MONERO -DLIBSTEALTH_DISABLED flutter pub get make version ./build_changelog.sh cp ../release/monero/aarch64-linux-android_libwallet2_api_c.so.xz android/app/src/main/jniLibs/arm64-v8a/libmonero_libwallet2_api_c.so.xz unxz -f android/app/src/main/jniLibs/arm64-v8a/*.xz - flutter build apk --debug --flavor clean --dart-define=libstealth_calculator=false - - name: Archive code coverage results + flutter build apk --debug --flavor clean_monero + - name: build xmruw (wownero) + run: | + cd unnamed_monero_wallet + ./codegen.sh -DCOIN_WOWNERO -DLIBSTEALTH_DISABLED + flutter pub get + make version + ./build_changelog.sh + cp ../release/wownero/aarch64-linux-android_libwallet2_api_c.so.xz android/app/src/main/jniLibs/arm64-v8a/libwownero_libwallet2_api_c.so.xz + unxz -f android/app/src/main/jniLibs/arm64-v8a/*.xz + flutter build apk --debug --flavor clean_wownero + - name: Upload APK uses: actions/upload-artifact@v4 with: name: xmruw apk diff --git a/wownero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp b/wownero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp index 2ba0ef9..6afdfe4 100644 --- a/wownero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp +++ b/wownero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp @@ -1870,32 +1870,45 @@ uint64_t WOWNERO_cw_WalletListener_height(void* cw_walletListener_ptr) { // https://github.com/cypherstack/flutter_libmonero/blob/2c684cedba6c3d9353c7ea748cadb5a246008027/cw_wownero/ios/Classes/wownero_api.cpp#L240 // this code slightly goes against the way of being simple void* WOWNERO_deprecated_restore14WordSeed(char *path, char *password, char *seed, int32_t networkType) { - Monero::NetworkType _networkType = static_cast(networkType); Monero::WalletManager *walletManager = Monero::WalletManagerFactory::getWalletManager(); + try { + Monero::NetworkType _networkType = static_cast(networkType); - // 14 word seeds /* - wownero_seed wow_seed(seed, "wownero"); + // 14 word seeds /* + wownero_seed wow_seed(seed, "wownero"); - std::stringstream seed_stream; - seed_stream << wow_seed; - std::string seed_str = seed_stream.str(); + std::stringstream seed_stream; + seed_stream << wow_seed; + std::string seed_str = seed_stream.str(); - std::stringstream key_stream; - key_stream << wow_seed.key(); - std::string spendKey = key_stream.str(); + std::stringstream key_stream; + key_stream << wow_seed.key(); + std::string spendKey = key_stream.str(); - uint64_t restoreHeight = wow_seed.blockheight(); + uint64_t restoreHeight = wow_seed.blockheight(); - Monero::Wallet *wallet = walletManager->createDeterministicWalletFromSpendKey( - std::string(path), - std::string(password), - "English", - static_cast(_networkType), - (uint64_t)restoreHeight, - spendKey, - 1); - wallet->setCacheAttribute("cake.seed", seed_str); - return reinterpret_cast(wallet); + Monero::Wallet *wallet = walletManager->createDeterministicWalletFromSpendKey( + std::string(path), + std::string(password), + "English", + static_cast(_networkType), + (uint64_t)restoreHeight, + spendKey, + 1); + wallet->setCacheAttribute("cake.seed", seed_str); + return reinterpret_cast(wallet); + } catch (...) { + // fallback code so wallet->status() returns at least something.. eh.. + Monero::Wallet *wallet = walletManager->recoveryWallet( + "/", + "", + "invalid mnemonic", + static_cast(networkType), + 0, + 1, + ""); + return reinterpret_cast(wallet); + } } uint64_t WOWNERO_deprecated_14WordSeedHeight(char *seed) {