summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/pr-comment.yaml61
-rw-r--r--.github/workflows/xmruw.yaml19
-rw-r--r--wownero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp63
3 files changed, 115 insertions, 28 deletions
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 = `<!-- bot: ${purpose} -->`;
+ 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<Monero::NetworkType>(networkType);
Monero::WalletManager *walletManager = Monero::WalletManagerFactory::getWalletManager();
-
- // 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 key_stream;
- key_stream << wow_seed.key();
- std::string spendKey = key_stream.str();
-
- uint64_t restoreHeight = wow_seed.blockheight();
-
- Monero::Wallet *wallet = walletManager->createDeterministicWalletFromSpendKey(
- std::string(path),
- std::string(password),
- "English",
- static_cast<Monero::NetworkType>(_networkType),
- (uint64_t)restoreHeight,
- spendKey,
- 1);
- wallet->setCacheAttribute("cake.seed", seed_str);
- return reinterpret_cast<void*>(wallet);
+ try {
+ Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
+
+ // 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 key_stream;
+ key_stream << wow_seed.key();
+ std::string spendKey = key_stream.str();
+
+ uint64_t restoreHeight = wow_seed.blockheight();
+
+ Monero::Wallet *wallet = walletManager->createDeterministicWalletFromSpendKey(
+ std::string(path),
+ std::string(password),
+ "English",
+ static_cast<Monero::NetworkType>(_networkType),
+ (uint64_t)restoreHeight,
+ spendKey,
+ 1);
+ wallet->setCacheAttribute("cake.seed", seed_str);
+ return reinterpret_cast<void*>(wallet);
+ } catch (...) {
+ // fallback code so wallet->status() returns at least something.. eh..
+ Monero::Wallet *wallet = walletManager->recoveryWallet(
+ "/",
+ "",
+ "invalid mnemonic",
+ static_cast<Monero::NetworkType>(networkType),
+ 0,
+ 1,
+ "");
+ return reinterpret_cast<void*>(wallet);
+ }
}
uint64_t WOWNERO_deprecated_14WordSeedHeight(char *seed) {