mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-23 12:09:43 +00:00
fix zano build issues on android
This commit is contained in:
parent
e2278ae403
commit
465f1dec9d
21 changed files with 3 additions and 2713 deletions
|
@ -0,0 +1 @@
|
||||||
|
../../../../../../scripts/monero_c/release/zano/aarch64-linux-android_libwallet2_api_c.so
|
|
@ -0,0 +1 @@
|
||||||
|
../../../../../../scripts/monero_c/release/zano/armv7a-linux-androideabi_libwallet2_api_c.so
|
1
android/app/src/main/jniLibs/x86_64/libzano_libwallet2_api_c.so
Symbolic link
1
android/app/src/main/jniLibs/x86_64/libzano_libwallet2_api_c.so
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../../../../../../scripts/monero_c/release/zano/x86_64-linux-android_libwallet2_api_c.so
|
9
cw_zano/android/.gitignore
vendored
9
cw_zano/android/.gitignore
vendored
|
@ -1,9 +0,0 @@
|
||||||
*.iml
|
|
||||||
.gradle
|
|
||||||
/local.properties
|
|
||||||
/.idea/workspace.xml
|
|
||||||
/.idea/libraries
|
|
||||||
.DS_Store
|
|
||||||
/build
|
|
||||||
/captures
|
|
||||||
.cxx/
|
|
|
@ -1,119 +0,0 @@
|
||||||
cmake_minimum_required(VERSION 3.4.1)
|
|
||||||
|
|
||||||
add_library( cw_zano
|
|
||||||
SHARED
|
|
||||||
../ios/Classes/zano_api.cpp)
|
|
||||||
|
|
||||||
find_library( log-lib log )
|
|
||||||
|
|
||||||
set(EXTERNAL_LIBS_DIR ${CMAKE_SOURCE_DIR}/../../cw_shared_external/ios/External/android)
|
|
||||||
set(EXTERNAL_ZANO_ROOT ${CMAKE_SOURCE_DIR}/../../../zano)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
############
|
|
||||||
# OpenSSL
|
|
||||||
############
|
|
||||||
|
|
||||||
add_library(crypto STATIC IMPORTED)
|
|
||||||
set_target_properties(crypto PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libcrypto.a)
|
|
||||||
|
|
||||||
add_library(ssl STATIC IMPORTED)
|
|
||||||
set_target_properties(ssl PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libssl.a)
|
|
||||||
|
|
||||||
############
|
|
||||||
# Boost
|
|
||||||
############
|
|
||||||
|
|
||||||
add_library(boost_chrono STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_chrono PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_chrono.a)
|
|
||||||
|
|
||||||
add_library(boost_date_time STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_date_time PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_date_time.a)
|
|
||||||
|
|
||||||
add_library(boost_filesystem STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_filesystem PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_filesystem.a)
|
|
||||||
|
|
||||||
add_library(boost_program_options STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_program_options PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_program_options.a)
|
|
||||||
|
|
||||||
add_library(boost_regex STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_regex PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_regex.a)
|
|
||||||
|
|
||||||
add_library(boost_serialization STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_serialization PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_serialization.a)
|
|
||||||
|
|
||||||
add_library(boost_system STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_system PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_system.a)
|
|
||||||
|
|
||||||
add_library(boost_thread STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_thread PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_thread.a)
|
|
||||||
|
|
||||||
add_library(boost_wserialization STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_wserialization PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_wserialization.a)
|
|
||||||
|
|
||||||
add_library(boost_log STATIC IMPORTED)
|
|
||||||
set_target_properties(boost_log PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/libboost_log.a)
|
|
||||||
|
|
||||||
#############
|
|
||||||
# Zano
|
|
||||||
#############
|
|
||||||
add_library(zano_common STATIC IMPORTED)
|
|
||||||
set_target_properties(zano_common PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/zano/libcommon.a)
|
|
||||||
|
|
||||||
|
|
||||||
add_library(zano_crypto STATIC IMPORTED)
|
|
||||||
set_target_properties(zano_crypto PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/zano/libcrypto.a)
|
|
||||||
|
|
||||||
add_library(zano_currency_core STATIC IMPORTED)
|
|
||||||
set_target_properties(zano_currency_core PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/zano/libcurrency_core.a)
|
|
||||||
|
|
||||||
add_library(zano_z STATIC IMPORTED)
|
|
||||||
set_target_properties(zano_z PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/zano/libz.a)
|
|
||||||
|
|
||||||
add_library(zano_wallet STATIC IMPORTED)
|
|
||||||
set_target_properties(zano_wallet PROPERTIES IMPORTED_LOCATION
|
|
||||||
${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/lib/zano/libwallet.a)
|
|
||||||
|
|
||||||
include_directories( ${EXTERNAL_LIBS_DIR}/${ANDROID_ABI}/include )
|
|
||||||
include_directories( ${EXTERNAL_ZANO_ROOT}/src/wallet )
|
|
||||||
|
|
||||||
|
|
||||||
target_link_libraries( cw_zano
|
|
||||||
zano_common
|
|
||||||
zano_crypto
|
|
||||||
zano_currency_core
|
|
||||||
zano_z
|
|
||||||
zano_wallet
|
|
||||||
|
|
||||||
boost_chrono
|
|
||||||
boost_date_time
|
|
||||||
boost_filesystem
|
|
||||||
boost_program_options
|
|
||||||
boost_regex
|
|
||||||
boost_serialization
|
|
||||||
boost_system
|
|
||||||
boost_thread
|
|
||||||
boost_wserialization
|
|
||||||
boost_log
|
|
||||||
|
|
||||||
ssl
|
|
||||||
crypto
|
|
||||||
${log-lib}
|
|
||||||
)
|
|
|
@ -1,45 +0,0 @@
|
||||||
group 'com.cakewallet.cw_zano'
|
|
||||||
version '1.0-SNAPSHOT'
|
|
||||||
|
|
||||||
buildscript {
|
|
||||||
ext.kotlin_version = '1.7.10'
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
jcenter()
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
classpath 'com.android.tools.build:gradle:4.1.0'
|
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rootProject.allprojects {
|
|
||||||
repositories {
|
|
||||||
google()
|
|
||||||
jcenter()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
apply plugin: 'com.android.library'
|
|
||||||
apply plugin: 'kotlin-android'
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdkVersion 28
|
|
||||||
|
|
||||||
sourceSets {
|
|
||||||
main.java.srcDirs += 'src/main/kotlin'
|
|
||||||
}
|
|
||||||
defaultConfig {
|
|
||||||
minSdkVersion 21
|
|
||||||
}
|
|
||||||
externalNativeBuild {
|
|
||||||
cmake {
|
|
||||||
path "CMakeLists.txt"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
org.gradle.jvmargs=-Xmx1536M
|
|
||||||
android.useAndroidX=true
|
|
||||||
android.enableJetifier=true
|
|
|
@ -1,5 +0,0 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
|
||||||
distributionPath=wrapper/dists
|
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
|
||||||
zipStorePath=wrapper/dists
|
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
|
|
|
@ -1 +0,0 @@
|
||||||
rootProject.name = 'cw_zano'
|
|
|
@ -1,3 +0,0 @@
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="com.cakewallet.cw_zano">
|
|
||||||
</manifest>
|
|
|
@ -1,36 +0,0 @@
|
||||||
package com.cakewallet.cw_zano
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull
|
|
||||||
|
|
||||||
import io.flutter.embedding.engine.plugins.FlutterPlugin
|
|
||||||
import io.flutter.plugin.common.MethodCall
|
|
||||||
import io.flutter.plugin.common.MethodChannel
|
|
||||||
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
|
|
||||||
import io.flutter.plugin.common.MethodChannel.Result
|
|
||||||
import io.flutter.plugin.common.PluginRegistry.Registrar
|
|
||||||
|
|
||||||
/** CwZanoPlugin */
|
|
||||||
class CwZanoPlugin: FlutterPlugin, MethodCallHandler {
|
|
||||||
/// The MethodChannel that will the communication between Flutter and native Android
|
|
||||||
///
|
|
||||||
/// This local reference serves to register the plugin with the Flutter Engine and unregister it
|
|
||||||
/// when the Flutter Engine is detached from the Activity
|
|
||||||
private lateinit var channel : MethodChannel
|
|
||||||
|
|
||||||
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
|
|
||||||
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "cw_zano")
|
|
||||||
channel.setMethodCallHandler(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
|
|
||||||
if (call.method == "getPlatformVersion") {
|
|
||||||
result.success("Android ${android.os.Build.VERSION.RELEASE}")
|
|
||||||
} else {
|
|
||||||
result.notImplemented()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
|
|
||||||
channel.setMethodCallHandler(null)
|
|
||||||
}
|
|
||||||
}
|
|
37
cw_zano/ios/.gitignore
vendored
37
cw_zano/ios/.gitignore
vendored
|
@ -1,37 +0,0 @@
|
||||||
.idea/
|
|
||||||
.vagrant/
|
|
||||||
.sconsign.dblite
|
|
||||||
.svn/
|
|
||||||
|
|
||||||
.DS_Store
|
|
||||||
*.swp
|
|
||||||
profile
|
|
||||||
|
|
||||||
DerivedData/
|
|
||||||
build/
|
|
||||||
GeneratedPluginRegistrant.h
|
|
||||||
GeneratedPluginRegistrant.m
|
|
||||||
|
|
||||||
.generated/
|
|
||||||
|
|
||||||
*.pbxuser
|
|
||||||
*.mode1v3
|
|
||||||
*.mode2v3
|
|
||||||
*.perspectivev3
|
|
||||||
|
|
||||||
!default.pbxuser
|
|
||||||
!default.mode1v3
|
|
||||||
!default.mode2v3
|
|
||||||
!default.perspectivev3
|
|
||||||
|
|
||||||
xcuserdata
|
|
||||||
|
|
||||||
*.moved-aside
|
|
||||||
|
|
||||||
*.pyc
|
|
||||||
*sync/
|
|
||||||
Icon?
|
|
||||||
.tags*
|
|
||||||
|
|
||||||
/Flutter/Generated.xcconfig
|
|
||||||
/Flutter/flutter_export_environment.sh
|
|
|
@ -1,4 +0,0 @@
|
||||||
#import <Flutter/Flutter.h>
|
|
||||||
|
|
||||||
@interface CwZanoPlugin : NSObject<FlutterPlugin>
|
|
||||||
@end
|
|
|
@ -1,15 +0,0 @@
|
||||||
#import "CwZanoPlugin.h"
|
|
||||||
#if __has_include(<cw_zano/cw_zano-Swift.h>)
|
|
||||||
#import <cw_zano/cw_zano-Swift.h>
|
|
||||||
#else
|
|
||||||
// Support project import fallback if the generated compatibility header
|
|
||||||
// is not copied when this plugin is created as a library.
|
|
||||||
// https://forums.swift.org/t/swift-static-libraries-dont-copy-generated-objective-c-header/19816
|
|
||||||
#import "cw_zano-Swift.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@implementation CwZanoPlugin
|
|
||||||
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
|
|
||||||
[SwiftCwZanoPlugin registerWithRegistrar:registrar];
|
|
||||||
}
|
|
||||||
@end
|
|
|
@ -1,14 +0,0 @@
|
||||||
import Flutter
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
public class SwiftCwZanoPlugin: NSObject, FlutterPlugin {
|
|
||||||
public static func register(with registrar: FlutterPluginRegistrar) {
|
|
||||||
let channel = FlutterMethodChannel(name: "cw_zano", binaryMessenger: registrar.messenger())
|
|
||||||
let instance = SwiftCwZanoPlugin()
|
|
||||||
registrar.addMethodCallDelegate(instance, channel: channel)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
|
|
||||||
result("iOS " + UIDevice.current.systemVersion)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,870 +0,0 @@
|
||||||
#include <stdint.h>
|
|
||||||
#include "cstdlib"
|
|
||||||
#include <chrono>
|
|
||||||
#include <functional>
|
|
||||||
#include <iostream>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <mutex>
|
|
||||||
#include "thread"
|
|
||||||
|
|
||||||
|
|
||||||
#if __APPLE__
|
|
||||||
// Fix for randomx on ios
|
|
||||||
void __clear_cache(void* start, void* end) { }
|
|
||||||
//#include "../External/ios/include/wallet2_api.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "../External/include/wallet2_api.h"
|
|
||||||
|
|
||||||
#include "../../../cw_shared_external/ios/External/ios/sources/zano/src/wallet/plain_wallet_api.h"
|
|
||||||
//#include "plain_wallet_api_ex.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//using namespace std::chrono_literals;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
//const uint64_t MONERO_BLOCK_SIZE = 1000;
|
|
||||||
|
|
||||||
struct Utf8Box
|
|
||||||
{
|
|
||||||
char *value;
|
|
||||||
|
|
||||||
Utf8Box(char *_value)
|
|
||||||
{
|
|
||||||
value = _value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct SubaddressRow
|
|
||||||
{
|
|
||||||
uint64_t id;
|
|
||||||
char *address;
|
|
||||||
char *label;
|
|
||||||
|
|
||||||
SubaddressRow(std::size_t _id, char *_address, char *_label)
|
|
||||||
{
|
|
||||||
id = static_cast<uint64_t>(_id);
|
|
||||||
address = _address;
|
|
||||||
label = _label;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct AccountRow
|
|
||||||
{
|
|
||||||
uint64_t id;
|
|
||||||
char *label;
|
|
||||||
|
|
||||||
AccountRow(std::size_t _id, char *_label)
|
|
||||||
{
|
|
||||||
id = static_cast<uint64_t>(_id);
|
|
||||||
label = _label;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ZanoBalance
|
|
||||||
{
|
|
||||||
uint64_t amount;
|
|
||||||
char *assetType;
|
|
||||||
|
|
||||||
ZanoBalance(char *_assetType, uint64_t _amount)
|
|
||||||
{
|
|
||||||
amount = _amount;
|
|
||||||
assetType = _assetType;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ZanoRate
|
|
||||||
{
|
|
||||||
uint64_t rate;
|
|
||||||
char *assetType;
|
|
||||||
|
|
||||||
ZanoRate(char *_assetType, uint64_t _rate)
|
|
||||||
{
|
|
||||||
rate = _rate;
|
|
||||||
assetType = _assetType;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*struct MoneroWalletListener : Monero::WalletListener
|
|
||||||
{
|
|
||||||
uint64_t m_height;
|
|
||||||
bool m_need_to_refresh;
|
|
||||||
bool m_new_transaction;
|
|
||||||
|
|
||||||
MoneroWalletListener()
|
|
||||||
{
|
|
||||||
m_height = 0;
|
|
||||||
m_need_to_refresh = false;
|
|
||||||
m_new_transaction = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void moneySpent(const std::string &txId, uint64_t amount, std::string assetType)
|
|
||||||
{
|
|
||||||
m_new_transaction = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void moneyReceived(const std::string &txId, uint64_t amount, std::string assetType)
|
|
||||||
{
|
|
||||||
m_new_transaction = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void unconfirmedMoneyReceived(const std::string &txId, uint64_t amount)
|
|
||||||
{
|
|
||||||
m_new_transaction = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void newBlock(uint64_t height)
|
|
||||||
{
|
|
||||||
m_height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
void updated()
|
|
||||||
{
|
|
||||||
m_new_transaction = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void refreshed()
|
|
||||||
{
|
|
||||||
m_need_to_refresh = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void resetNeedToRefresh()
|
|
||||||
{
|
|
||||||
m_need_to_refresh = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool isNeedToRefresh()
|
|
||||||
{
|
|
||||||
return m_need_to_refresh;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool isNewTransactionExist()
|
|
||||||
{
|
|
||||||
return m_new_transaction;
|
|
||||||
}
|
|
||||||
|
|
||||||
void resetIsNewTransactionExist()
|
|
||||||
{
|
|
||||||
m_new_transaction = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t height()
|
|
||||||
{
|
|
||||||
return m_height;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct TransactionInfoRow
|
|
||||||
{
|
|
||||||
uint64_t amount;
|
|
||||||
uint64_t fee;
|
|
||||||
uint64_t blockHeight;
|
|
||||||
uint64_t confirmations;
|
|
||||||
uint32_t subaddrAccount;
|
|
||||||
int8_t direction;
|
|
||||||
int8_t isPending;
|
|
||||||
uint32_t subaddrIndex;
|
|
||||||
|
|
||||||
char *hash;
|
|
||||||
char *paymentId;
|
|
||||||
char *assetType;
|
|
||||||
|
|
||||||
int64_t datetime;
|
|
||||||
|
|
||||||
TransactionInfoRow(/*wallet_public::wallet_transfer_info& wti*/)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
amount = wti.subtransfers.
|
|
||||||
fee = transaction->fee();
|
|
||||||
blockHeight = transaction->blockHeight();
|
|
||||||
subaddrAccount = transaction->subaddrAccount();
|
|
||||||
std::set<uint32_t>::iterator it = transaction->subaddrIndex().begin();
|
|
||||||
subaddrIndex = *it;
|
|
||||||
confirmations = transaction->confirmations();
|
|
||||||
datetime = static_cast<int64_t>(transaction->timestamp());
|
|
||||||
direction = transaction->direction();
|
|
||||||
isPending = static_cast<int8_t>(transaction->isPending());
|
|
||||||
std::string *hash_str = new std::string(transaction->hash());
|
|
||||||
hash = strdup(hash_str->c_str());
|
|
||||||
paymentId = strdup(transaction->paymentId().c_str());
|
|
||||||
assetType = strdup(transaction->assetType().c_str());
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
Monero::Wallet *m_wallet;
|
|
||||||
Monero::TransactionHistory *m_transaction_history;
|
|
||||||
MoneroWalletListener *m_listener;
|
|
||||||
Monero::Subaddress *m_subaddress;
|
|
||||||
Monero::SubaddressAccount *m_account;
|
|
||||||
uint64_t m_last_known_wallet_height;
|
|
||||||
uint64_t m_cached_syncing_blockchain_height = 0;
|
|
||||||
std::mutex store_lock;
|
|
||||||
bool is_storing = false;
|
|
||||||
*/
|
|
||||||
//void change_current_wallet(Monero::Wallet *wallet)
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
m_wallet = wallet;
|
|
||||||
m_listener = nullptr;
|
|
||||||
|
|
||||||
|
|
||||||
if (wallet != nullptr)
|
|
||||||
{
|
|
||||||
m_transaction_history = wallet->history();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_transaction_history = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wallet != nullptr)
|
|
||||||
{
|
|
||||||
m_account = wallet->subaddressAccount();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_account = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wallet != nullptr)
|
|
||||||
{
|
|
||||||
m_subaddress = wallet->subaddress();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_subaddress = nullptr;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
//}
|
|
||||||
|
|
||||||
//Monero::Wallet *get_current_wallet()
|
|
||||||
//{
|
|
||||||
|
|
||||||
// return nullptr;//return m_wallet;
|
|
||||||
//}
|
|
||||||
|
|
||||||
char * create_wallet(char *path, char *password, char *language, int32_t networkType, char *error)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::generate(path, password).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
char * restore_wallet_from_seed(char *path, char *password, char *seed, int32_t networkType, uint64_t restoreHeight, char *error)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::restore(seed, path, password, "").c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool restore_wallet_from_keys(char *path, char *password, char *language, char *address, char *viewKey, char *spendKey, int32_t networkType, uint64_t restoreHeight, char *error)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
Monero::NetworkType _networkType = static_cast<Monero::NetworkType>(networkType);
|
|
||||||
Monero::Wallet *wallet = Monero::WalletManagerFactory::getWalletManager()->createWalletFromKeys(
|
|
||||||
std::string(path),
|
|
||||||
std::string(password),
|
|
||||||
std::string(language),
|
|
||||||
_networkType,
|
|
||||||
(uint64_t)restoreHeight,
|
|
||||||
std::string(address),
|
|
||||||
std::string(viewKey),
|
|
||||||
std::string(spendKey));
|
|
||||||
|
|
||||||
int status;
|
|
||||||
std::string errorString;
|
|
||||||
|
|
||||||
wallet->statusWithErrorString(status, errorString);
|
|
||||||
|
|
||||||
if (status != Monero::Wallet::Status_Ok || !errorString.empty())
|
|
||||||
{
|
|
||||||
error = strdup(errorString.c_str());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
change_current_wallet(wallet);
|
|
||||||
*/
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
char * load_wallet(char *path, char *password, int32_t nettype)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::open(path, password).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
char *error_string() {
|
|
||||||
return strdup("");//strdup(get_current_wallet()->errorString().c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool is_wallet_exist(char *path)
|
|
||||||
{
|
|
||||||
return plain_wallet::is_wallet_exist(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
char *close_wallet(uint64_t hwallet)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::close_wallet(hwallet).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *get_wallet_info(uint64_t hwallet) {
|
|
||||||
return strdup(plain_wallet::get_wallet_info(hwallet).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
get_filename(): -> get_wallet_info(h).wi.path
|
|
||||||
secret_view_key(): -> get_wallet_info(h).wi_extended.view_private_key
|
|
||||||
public_view_key(): -> get_wallet_info(h).wi_extended.view_public_key
|
|
||||||
secret_spend_key(): -> get_wallet_info(h).wi_extended.spend_private_key
|
|
||||||
public_spend_key(): -> get_wallet_info(h).wi_extended.spend_public_key
|
|
||||||
get_address(): -> get_wallet_info(h).wi.address
|
|
||||||
seed(): -> get_wallet_info(h).wi_extended.seed
|
|
||||||
get_current_height(): -> get_wallet_status(h).current_wallet_height
|
|
||||||
get_node_height(): -> get_wallet_status(h).current_daemon_height
|
|
||||||
|
|
||||||
get_syncing_height() ??? how it's different from get_current_height??=
|
|
||||||
start_refresh() ???
|
|
||||||
set_refresh_from_block_height ???
|
|
||||||
set_recovering_from_seed ???
|
|
||||||
get_node_height_or_update ???
|
|
||||||
is_needed_to_refresh ???
|
|
||||||
is_new_transaction_exist ???
|
|
||||||
set_listener ???
|
|
||||||
transactions_refresh() ???
|
|
||||||
on_startup() ???
|
|
||||||
rescan_blockchain() ???
|
|
||||||
set_trusted_daemon()/trusted_daemon() ???
|
|
||||||
|
|
||||||
|
|
||||||
asset_types_size()/asset_types() dedicated from balance
|
|
||||||
|
|
||||||
update_rate()/get_rate()/size_of_rate() - need to fetch Zano price from coinmarketcap API, other assets ???
|
|
||||||
|
|
||||||
subaddrress_size()/subaddrress_get_all() - no subaddresses, only one address, available via get_wallet_info(h).wi.address
|
|
||||||
|
|
||||||
connect_to_node()/is_connected(): -> get_connectivity_status(): {
|
|
||||||
"is_online": true,
|
|
||||||
"last_daemon_is_disconnected": false,
|
|
||||||
"is_server_busy": false,
|
|
||||||
"last_proxy_communicate_timestamp": 12121212
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
get_full_balance/get_unlocked_balance(): -> async_call("invoke", hwallet, "{method: 'get_recent_txs_and_info', params: {offset: 0,count: 30,update_provision_info: true}}")
|
|
||||||
return list of last transactions + balances
|
|
||||||
|
|
||||||
store(): -> async_call("invoke", hwallet, "{method: 'store', params: {}}")
|
|
||||||
|
|
||||||
set_password() return "OK" if succeded
|
|
||||||
|
|
||||||
transaction_create/transaction_commit () replaced with method 'transfer' that receive following argument in JSON:
|
|
||||||
async_call("invoke", hwallet, "
|
|
||||||
{
|
|
||||||
"method": "transfer",
|
|
||||||
"params": {
|
|
||||||
"destinations": [
|
|
||||||
{
|
|
||||||
"amount": "0.222",
|
|
||||||
"address": "iZ2GHyPD7g28hgBfboZeCENaYrHSYZ1bLFi5cgWvn4WJLaxfgs4kqG6cJi9ai2zrXWSCpsvRXit14gKjeijx6YPCLJEv6Fx4rVm1hdAGQFiv",
|
|
||||||
"asset_id" "bec034f4f158f97cfc4933c3e387b098f69870e955a49061f9ce956212729534"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"fee": 10000000000,
|
|
||||||
"mixin": 10,
|
|
||||||
"payment_id": "",
|
|
||||||
"comment": "haha",
|
|
||||||
"push_payer": false,
|
|
||||||
"hide_receiver": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
")
|
|
||||||
|
|
||||||
after transaction_create() event happened you need to call API get_current_tx_fee(priority_raw), get fee from it and use it to
|
|
||||||
show to dialog in UI, and then if confirmed when transaction_commit() need to actually call async_call(...) that do actual transfer
|
|
||||||
|
|
||||||
subaddress doesn't exist in Zano so following api is not present:
|
|
||||||
subaddress_add_row/subaddress_set_label/subaddress_refresh/account_size/account_get_all/account_add_row/account_set_label_row/account_refresh
|
|
||||||
|
|
||||||
transactions_get_all() ->
|
|
||||||
async_call("invoke", hwallet, "
|
|
||||||
{
|
|
||||||
"method": "get_recent_txs_and_info",
|
|
||||||
"params": {
|
|
||||||
"offset": 0,
|
|
||||||
"count": 30,
|
|
||||||
"update_provision_info": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
")
|
|
||||||
|
|
||||||
transactions_count() -> invoke: get_recent_txs_and_info
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
uint64_t get_current_tx_fee(uint64_t priority)
|
|
||||||
{
|
|
||||||
return plain_wallet::get_current_tx_fee(priority);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char* get_wallet_status(uint64_t hwallet)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::get_wallet_status(hwallet).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
char* get_address_info(char* address)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::get_address_info(address).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char* async_call(char* method_name, uint64_t instance_id, char* params)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::async_call(method_name, instance_id, params).c_str());
|
|
||||||
}
|
|
||||||
char* try_pull_result(uint64_t job_id)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::try_pull_result(job_id).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
char* sync_call(const std::string& method_name, uint64_t instance_id, const std::string& params)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::sync_call(method_name, instance_id, params).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
char* get_connectivity_status()
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::get_connectivity_status().c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool setup_node(char *address, char *login, char *password, bool use_ssl, bool is_light_wallet, char *error)
|
|
||||||
{
|
|
||||||
nice(19);
|
|
||||||
if(use_ssl)
|
|
||||||
{
|
|
||||||
//LOG_ERROR("SSL is not supported yet for Zano");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string res = plain_wallet::init(address, "", 0);
|
|
||||||
if(API_RETURN_CODE_OK != res)
|
|
||||||
{
|
|
||||||
//LOG_ERROR("Failed init wallet");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//void start_refresh()
|
|
||||||
//{
|
|
||||||
//get_current_wallet()->refreshAsync();
|
|
||||||
//get_current_wallet()->startRefresh();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void set_refresh_from_block_height(uint64_t height)
|
|
||||||
//{
|
|
||||||
//get_current_wallet()->setRefreshFromBlockHeight(height);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void set_recovering_from_seed(bool is_recovery)
|
|
||||||
//{
|
|
||||||
//get_current_wallet()->setRecoveringFromSeed(is_recovery);
|
|
||||||
//}
|
|
||||||
|
|
||||||
char* set_password(uint64_t hwallet, char *password, Utf8Box &error)
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::reset_wallet_password(hwallet, password).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
bool transaction_create(char *address, char *asset_type, char *payment_id, char *amount,
|
|
||||||
uint8_t priority_raw, uint32_t subaddr_account, Utf8Box &error, PendingTransactionRaw &pendingTransaction)
|
|
||||||
{
|
|
||||||
pendingTransaction.fee = plain_wallet::get_current_tx_fee(priority_raw);
|
|
||||||
pendingTransaction.amount = strdup(amount);
|
|
||||||
pendingTransaction.address = strdup(address);
|
|
||||||
pendingTransaction.asset_type = strdup(asset_type);
|
|
||||||
pendingTransaction.payment_id = strdup(payment_id);
|
|
||||||
pendingTransaction.priority_raw = priority_raw;
|
|
||||||
pendingTransaction.subaddr_account = 0;
|
|
||||||
return true;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
//bool transaction_create_mult_dest(char **addresses, char *asset_type, char *payment_id, char **amounts, uint32_t size,
|
|
||||||
// uint8_t priority_raw, uint32_t subaddr_account, Utf8Box &error, PendingTransactionRaw &pendingTransaction)
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
nice(19);
|
|
||||||
|
|
||||||
std::vector<std::string> _addresses;
|
|
||||||
std::vector<uint64_t> _amounts;
|
|
||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
_addresses.push_back(std::string(*addresses));
|
|
||||||
_amounts.push_back(Monero::Wallet::amountFromString(std::string(*amounts)));
|
|
||||||
addresses++;
|
|
||||||
amounts++;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto priority = static_cast<Monero::PendingTransaction::Priority>(priority_raw);
|
|
||||||
std::string _payment_id;
|
|
||||||
Monero::PendingTransaction *transaction;
|
|
||||||
|
|
||||||
if (payment_id != nullptr)
|
|
||||||
{
|
|
||||||
_payment_id = std::string(payment_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
transaction = m_wallet->createTransactionMultDest(_addresses, _payment_id, _amounts,
|
|
||||||
std::string(asset_type), std::string(asset_type), m_wallet->defaultMixin(), priority, subaddr_account,{});
|
|
||||||
|
|
||||||
int status = transaction->status();
|
|
||||||
|
|
||||||
if (status == Monero::PendingTransaction::Status::Status_Error || status == Monero::PendingTransaction::Status::Status_Critical)
|
|
||||||
{
|
|
||||||
error = Utf8Box(strdup(transaction->errorString().c_str()));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_listener != nullptr) {
|
|
||||||
m_listener->m_new_transaction = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
pendingTransaction = PendingTransactionRaw(transaction);
|
|
||||||
return true;
|
|
||||||
*/
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//bool transaction_commit(PendingTransactionRaw *transaction, Utf8Box &error)
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
bool committed = transaction->transaction->commit();
|
|
||||||
|
|
||||||
if (!committed)
|
|
||||||
{
|
|
||||||
error = Utf8Box(strdup(transaction->transaction->errorString().c_str()));
|
|
||||||
} else if (m_listener != nullptr) {
|
|
||||||
m_listener->m_new_transaction = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return committed;
|
|
||||||
*/
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//uint64_t get_node_height_or_update(uint64_t base_eight)
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
if (m_cached_syncing_blockchain_height < base_eight) {
|
|
||||||
m_cached_syncing_blockchain_height = base_eight;
|
|
||||||
}
|
|
||||||
|
|
||||||
return m_cached_syncing_blockchain_height;
|
|
||||||
*/
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//uint64_t get_syncing_height(uint64_t hwallet)
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
if (m_listener == nullptr) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t height = m_listener->height();
|
|
||||||
|
|
||||||
if (height <= 1) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (height != m_last_known_wallet_height)
|
|
||||||
{
|
|
||||||
m_last_known_wallet_height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
return height;
|
|
||||||
*/
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//uint64_t is_needed_to_refresh()
|
|
||||||
//{
|
|
||||||
// return 0;
|
|
||||||
/*
|
|
||||||
if (m_listener == nullptr) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool should_refresh = m_listener->isNeedToRefresh();
|
|
||||||
|
|
||||||
if (should_refresh) {
|
|
||||||
m_listener->resetNeedToRefresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
return should_refresh;
|
|
||||||
*/
|
|
||||||
//}
|
|
||||||
|
|
||||||
//uint8_t is_new_transaction_exist()
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
if (m_listener == nullptr) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_new_transaction_exist = m_listener->isNewTransactionExist();
|
|
||||||
|
|
||||||
if (is_new_transaction_exist)
|
|
||||||
{
|
|
||||||
m_listener->resetIsNewTransactionExist();
|
|
||||||
}
|
|
||||||
|
|
||||||
return is_new_transaction_exist;
|
|
||||||
*/
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void set_listener()
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
m_last_known_wallet_height = 0;
|
|
||||||
|
|
||||||
if (m_listener != nullptr)
|
|
||||||
{
|
|
||||||
free(m_listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_listener = new MoneroWalletListener();
|
|
||||||
get_current_wallet()->setListener(m_listener);
|
|
||||||
*/
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int64_t *subaddrress_get_all()
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
std::vector<Monero::SubaddressRow *> _subaddresses = m_subaddress->getAll();
|
|
||||||
size_t size = _subaddresses.size();
|
|
||||||
int64_t *subaddresses = (int64_t *)malloc(size * sizeof(int64_t));
|
|
||||||
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
Monero::SubaddressRow *row = _subaddresses[i];
|
|
||||||
SubaddressRow *_row = new SubaddressRow(row->getRowId(), strdup(row->getAddress().c_str()), strdup(row->getLabel().c_str()));
|
|
||||||
subaddresses[i] = reinterpret_cast<int64_t>(_row);
|
|
||||||
}
|
|
||||||
|
|
||||||
return subaddresses;
|
|
||||||
*/
|
|
||||||
// return nullptr;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int32_t subaddrress_size()
|
|
||||||
//{
|
|
||||||
//std::vector<Monero::SubaddressRow *> _subaddresses = m_subaddress->getAll();
|
|
||||||
//return _subaddresses.size();
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void subaddress_add_row(uint32_t accountIndex, char *label)
|
|
||||||
//{
|
|
||||||
//m_subaddress->addRow(accountIndex, std::string(label));
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void subaddress_set_label(uint32_t accountIndex, uint32_t addressIndex, char *label)
|
|
||||||
//{
|
|
||||||
//m_subaddress->setLabel(accountIndex, addressIndex, std::string(label));
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void subaddress_refresh(uint32_t accountIndex)
|
|
||||||
//{
|
|
||||||
//m_subaddress->refresh(accountIndex);
|
|
||||||
//}
|
|
||||||
//int32_t account_size()
|
|
||||||
//{
|
|
||||||
//std::vector<Monero::SubaddressAccountRow *> _accocunts = m_account->getAll();
|
|
||||||
//return _accocunts.size();
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int64_t *account_get_all()
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
std::vector<Monero::SubaddressAccountRow *> _accocunts = m_account->getAll();
|
|
||||||
size_t size = _accocunts.size();
|
|
||||||
int64_t *accocunts = (int64_t *)malloc(size * sizeof(int64_t));
|
|
||||||
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
Monero::SubaddressAccountRow *row = _accocunts[i];
|
|
||||||
AccountRow *_row = new AccountRow(row->getRowId(), strdup(row->getLabel().c_str()));
|
|
||||||
accocunts[i] = reinterpret_cast<int64_t>(_row);
|
|
||||||
}
|
|
||||||
|
|
||||||
return accocunts;
|
|
||||||
*/
|
|
||||||
// return nullptr;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void account_add_row(char *label)
|
|
||||||
//{
|
|
||||||
//m_account->addRow(std::string(label));
|
|
||||||
//}
|
|
||||||
//void account_set_label_row(uint32_t account_index, char *label)
|
|
||||||
//{
|
|
||||||
//m_account->setLabel(account_index, label);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void account_refresh()
|
|
||||||
//{
|
|
||||||
//m_account->refresh();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int64_t *transactions_get_all()
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
std::vector<Monero::TransactionInfo *> transactions = m_transaction_history->getAll();
|
|
||||||
size_t size = transactions.size();
|
|
||||||
int64_t *transactionAddresses = (int64_t *)malloc(size * sizeof(int64_t));
|
|
||||||
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
Monero::TransactionInfo *row = transactions[i];
|
|
||||||
TransactionInfoRow *tx = new TransactionInfoRow(row);
|
|
||||||
transactionAddresses[i] = reinterpret_cast<int64_t>(tx);
|
|
||||||
}
|
|
||||||
|
|
||||||
return transactionAddresses;
|
|
||||||
*/
|
|
||||||
// return nullptr;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void transactions_refresh()
|
|
||||||
//{
|
|
||||||
//m_transaction_history->refresh();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int64_t transactions_count()
|
|
||||||
//{
|
|
||||||
//return m_transaction_history->count();
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int LedgerExchange(
|
|
||||||
// unsigned char *command,
|
|
||||||
// unsigned int cmd_len,
|
|
||||||
// unsigned char *response,
|
|
||||||
// unsigned int max_resp_len)
|
|
||||||
//{
|
|
||||||
// return -1;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int LedgerFind(char *buffer, size_t len)
|
|
||||||
//{
|
|
||||||
// return -1;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void on_startup()
|
|
||||||
//{
|
|
||||||
//Monero::Utils::onStartup();
|
|
||||||
//Monero::WalletManagerFactory::setLogLevel(4);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//void rescan_blockchain()
|
|
||||||
//{
|
|
||||||
//m_wallet->rescanBlockchainAsync();
|
|
||||||
//}
|
|
||||||
|
|
||||||
char * get_tx_key(char * txId)
|
|
||||||
{
|
|
||||||
return strdup(""); //return strdup(m_wallet->getTxKey(std::string(txId)).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
//int32_t asset_types_size()
|
|
||||||
//{
|
|
||||||
// return 0; //return Monero::Assets::list().size();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//char **asset_types()
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
size_t size = Monero::Assets::list().size();
|
|
||||||
std::vector<std::string> assetList = Monero::Assets::list();
|
|
||||||
char **assetTypesPts;
|
|
||||||
assetTypesPts = (char **) malloc( size * sizeof(char*));
|
|
||||||
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
std::string asset = assetList[i];
|
|
||||||
//assetTypes[i] = (char *)malloc( 5 * sizeof(char));
|
|
||||||
assetTypesPts[i] = strdup(asset.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
return assetTypesPts;
|
|
||||||
*/
|
|
||||||
// return nullptr;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//std::map<std::string, uint64_t> rates;
|
|
||||||
|
|
||||||
//void update_rate()
|
|
||||||
//{
|
|
||||||
//rates = get_current_wallet()->oracleRates();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int64_t *get_rate()
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
size_t size = rates.size();
|
|
||||||
int64_t *havenRates = (int64_t *)malloc(size * sizeof(int64_t));
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
for (auto const& rate : rates)
|
|
||||||
{
|
|
||||||
char *assetType = strdup(rate.first.c_str());
|
|
||||||
HavenRate *havenRate = new HavenRate(assetType, rate.second);
|
|
||||||
havenRates[i] = reinterpret_cast<int64_t>(havenRate);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return havenRates;
|
|
||||||
*/
|
|
||||||
// return nullptr;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int32_t size_of_rate()
|
|
||||||
//{
|
|
||||||
// return 0; //return static_cast<int32_t>(rates.size());
|
|
||||||
//}
|
|
||||||
|
|
||||||
void set_trusted_daemon(bool arg)
|
|
||||||
{
|
|
||||||
//m_wallet->setTrustedDaemon(arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool trusted_daemon()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
//return m_wallet->trustedDaemon();
|
|
||||||
}
|
|
||||||
|
|
||||||
char* get_version()
|
|
||||||
{
|
|
||||||
return strdup(plain_wallet::get_version().c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
168
cw_zano/ios/External/CMakeLists.txt
vendored
168
cw_zano/ios/External/CMakeLists.txt
vendored
|
@ -1,168 +0,0 @@
|
||||||
# Portions Copyright (c) 2017-2022, The Monero Project
|
|
||||||
# This file is based off of the https://code.google.com/archive/p/ios-cmake/
|
|
||||||
# It has been altered for Monero iOS development
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Options:
|
|
||||||
#
|
|
||||||
# IOS_PLATFORM = OS (default) or SIMULATOR or SIMULATOR64
|
|
||||||
# This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders
|
|
||||||
# OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch.
|
|
||||||
# SIMULATOR - used to build for the Simulator platforms, which have an x86 arch.
|
|
||||||
#
|
|
||||||
# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder
|
|
||||||
# By default this location is automatcially chosen based on the IOS_PLATFORM value above.
|
|
||||||
# If set manually, it will override the default location and force the user of a particular Developer Platform
|
|
||||||
#
|
|
||||||
# CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder
|
|
||||||
# By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value.
|
|
||||||
# In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path.
|
|
||||||
# If set manually, this will force the use of a specific SDK version
|
|
||||||
|
|
||||||
message (STATUS "Running Zano IOS setup cmake file")
|
|
||||||
|
|
||||||
# Standard settings
|
|
||||||
set (CMAKE_SYSTEM_NAME iOS)
|
|
||||||
set (CMAKE_SYSTEM_VERSION 15)
|
|
||||||
#set (UNIX True)
|
|
||||||
set (APPLE True)
|
|
||||||
set (IOS True)
|
|
||||||
|
|
||||||
# Required as of cmake 2.8.10
|
|
||||||
set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE)
|
|
||||||
|
|
||||||
# Determine the cmake host system version so we know where to find the iOS SDKs
|
|
||||||
#find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
|
|
||||||
#if (CMAKE_UNAME)
|
|
||||||
# exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
|
|
||||||
# string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
|
|
||||||
#endif (CMAKE_UNAME)
|
|
||||||
# Force the compilers to gcc for iOS
|
|
||||||
# include (CMakeForceCompiler)
|
|
||||||
# set (MAKE_C_COMPILER "/usr/bin/gcc Apple")
|
|
||||||
# set (CMAKE_CXX_COMPILER "/usr/bin/g++ Apple")
|
|
||||||
#set(CMAKE_AR ar CACHE FILEPATH "" FORCE)
|
|
||||||
|
|
||||||
# Skip the platform compiler checks for cross compiling
|
|
||||||
# set (CMAKE_CXX_COMPILER_WORKS TRUE)
|
|
||||||
# set (CMAKE_C_COMPILER_WORKS TRUE)
|
|
||||||
|
|
||||||
# All iOS/Darwin specific settings - some may be redundant
|
|
||||||
set (CMAKE_SHARED_LIBRARY_PREFIX "lib")
|
|
||||||
set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
|
|
||||||
set (CMAKE_SHARED_MODULE_PREFIX "lib")
|
|
||||||
set (CMAKE_SHARED_MODULE_SUFFIX ".so")
|
|
||||||
# set (CMAKE_MODULE_EXISTS 1)
|
|
||||||
#set (CMAKE_DL_LIBS "")
|
|
||||||
|
|
||||||
#set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
|
|
||||||
#set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
|
|
||||||
#set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
|
|
||||||
#set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
|
|
||||||
|
|
||||||
# Hidden visibilty is required for cxx on iOS
|
|
||||||
# set (CMAKE_C_FLAGS_INIT "")
|
|
||||||
# set (CMAKE_CXX_FLAGS_INIT "-fvisibility=hidden -fvisibility-inlines-hidden")
|
|
||||||
|
|
||||||
#set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
|
|
||||||
#set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
|
|
||||||
|
|
||||||
#set (CMAKE_PLATFORM_HAS_INSTALLNAME 1)
|
|
||||||
#set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names")
|
|
||||||
#set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names")
|
|
||||||
#set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
|
|
||||||
#set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
|
|
||||||
#set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
|
|
||||||
|
|
||||||
# Setup iOS platform unless specified manually with IOS_PLATFORM
|
|
||||||
if (NOT DEFINED IOS_PLATFORM)
|
|
||||||
set (IOS_PLATFORM "OS")
|
|
||||||
endif (NOT DEFINED IOS_PLATFORM)
|
|
||||||
set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
|
|
||||||
|
|
||||||
# Setup building for arm64 or not
|
|
||||||
if (NOT DEFINED BUILD_ARM64)
|
|
||||||
set (BUILD_ARM64 true)
|
|
||||||
endif (NOT DEFINED BUILD_ARM64)
|
|
||||||
set (BUILD_ARM64 ${BUILD_ARM64} CACHE STRING "Build arm64 arch or not")
|
|
||||||
|
|
||||||
# Check the platform selection and setup for developer root
|
|
||||||
if (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
set (IOS_PLATFORM_LOCATION "iPhoneOS.platform")
|
|
||||||
|
|
||||||
# This causes the installers to properly locate the output libraries
|
|
||||||
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
|
|
||||||
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
|
|
||||||
set (SIMULATOR true)
|
|
||||||
set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
|
|
||||||
|
|
||||||
# This causes the installers to properly locate the output libraries
|
|
||||||
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
|
|
||||||
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
|
|
||||||
set (SIMULATOR true)
|
|
||||||
set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
|
|
||||||
|
|
||||||
# This causes the installers to properly locate the output libraries
|
|
||||||
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
|
|
||||||
else (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR")
|
|
||||||
endif (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
|
|
||||||
# Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT
|
|
||||||
# Note Xcode 4.3 changed the installation location, choose the most recent one available
|
|
||||||
# exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE CMAKE_XCODE_DEVELOPER_DIR)
|
|
||||||
# set (XCODE_POST_43_ROOT "${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
|
|
||||||
# set (XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
|
|
||||||
#if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
|
|
||||||
# if (EXISTS ${XCODE_POST_43_ROOT})
|
|
||||||
# set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
|
|
||||||
# elseif(EXISTS ${XCODE_PRE_43_ROOT})
|
|
||||||
# set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
|
|
||||||
# endif (EXISTS ${XCODE_POST_43_ROOT})
|
|
||||||
#endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
|
|
||||||
#set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform")
|
|
||||||
|
|
||||||
# Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT
|
|
||||||
#if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
|
|
||||||
# file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
|
|
||||||
# if (_CMAKE_IOS_SDKS)
|
|
||||||
# list (SORT _CMAKE_IOS_SDKS)
|
|
||||||
# list (REVERSE _CMAKE_IOS_SDKS)
|
|
||||||
# list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
|
|
||||||
# else (_CMAKE_IOS_SDKS)
|
|
||||||
# message (FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.")
|
|
||||||
# endif (_CMAKE_IOS_SDKS)
|
|
||||||
# message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
|
|
||||||
#endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
|
|
||||||
#set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK")
|
|
||||||
|
|
||||||
# Set the sysroot default to the most recent SDK
|
|
||||||
#set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support")
|
|
||||||
# set (CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT})
|
|
||||||
#set(CMAKE_OSX_SYSROOT "$(xcrun --sdk ${IOS_PLATFORM_LOCATION} --show-sdk-path)")
|
|
||||||
|
|
||||||
|
|
||||||
# set the architecture for iOS
|
|
||||||
#if (NOT DEFINED ARCH)
|
|
||||||
# set (ARCH armv7)
|
|
||||||
#endif()
|
|
||||||
set (IOS_ARCH ${ARCH})
|
|
||||||
|
|
||||||
#set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE STRING "Build architecture for iOS")
|
|
||||||
set(CMAKE_OSX_ARCHITECTURES arm64)
|
|
||||||
message(STATUS "ios arch: ${IOS_ARCH}")
|
|
||||||
|
|
||||||
# Set the find root to the iOS developer roots and to user defined paths
|
|
||||||
#set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE STRING "iOS find search path root")
|
|
||||||
|
|
||||||
# default to searching for frameworks first
|
|
||||||
# set (CMAKE_FIND_FRAMEWORK FIRST)
|
|
||||||
|
|
||||||
# set up the default search directories for frameworks
|
|
||||||
# set (CMAKE_SYSTEM_FRAMEWORK_PATH
|
|
||||||
# ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
|
|
||||||
# ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
|
|
||||||
# ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
|
|
||||||
#)
|
|
||||||
|
|
||||||
message(STATUS "IOS CMAKE conf finished")
|
|
1333
cw_zano/ios/External/include/wallet2_api.h
vendored
1333
cw_zano/ios/External/include/wallet2_api.h
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,43 +0,0 @@
|
||||||
#
|
|
||||||
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
|
|
||||||
# Run `pod lib lint cw_zano.podspec` to validate before publishing.
|
|
||||||
#
|
|
||||||
Pod::Spec.new do |s|
|
|
||||||
s.name = 'cw_zano'
|
|
||||||
s.version = '0.0.1'
|
|
||||||
s.summary = 'Cake Wallet Zano'
|
|
||||||
s.description = 'Cake Wallet wrapper over Zano project'
|
|
||||||
s.homepage = 'http://cakewallet.com'
|
|
||||||
s.license = { :file => '../LICENSE' }
|
|
||||||
s.author = { 'Cake Wallet' => 'support@cakewallet.com' }
|
|
||||||
s.source = { :path => '.' }
|
|
||||||
s.source_files = 'Classes/**/*'
|
|
||||||
s.public_header_files = 'Classes/**/*.h, Classes/*.h, ../shared_external/ios/libs/monero/include/src/**/*.h, ../shared_external/ios/libs/monero/include/contrib/**/*.h, ../shared_external/ios/libs/monero/include/../shared_external/ios/**/*.h'
|
|
||||||
s.dependency 'Flutter'
|
|
||||||
# s.dependency 'cw_shared_external'
|
|
||||||
s.platform = :ios, '10.0'
|
|
||||||
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS' => 'arm64', 'ENABLE_BITCODE' => 'NO' }
|
|
||||||
s.swift_version = '5.0'
|
|
||||||
s.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/Classes/*.h" }
|
|
||||||
|
|
||||||
s.subspec 'OpenSSL' do |openssl|
|
|
||||||
openssl.preserve_paths = 'External/ios/include/**/*.h'
|
|
||||||
openssl.vendored_libraries = 'External/ios/lib/libcrypto.a', 'External/ios/lib/libssl.a'
|
|
||||||
openssl.libraries = 'ssl', 'crypto'
|
|
||||||
openssl.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include/**" }
|
|
||||||
end
|
|
||||||
|
|
||||||
s.subspec 'Boost' do |boost|
|
|
||||||
boost.preserve_paths = 'External/ios/include/**/*.h',
|
|
||||||
boost.vendored_libraries = 'External/ios/lib/libboost.a',
|
|
||||||
boost.libraries = ''
|
|
||||||
boost.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include/**" }
|
|
||||||
end
|
|
||||||
|
|
||||||
s.subspec 'Zano' do |zano|
|
|
||||||
zano.preserve_paths = 'External/ios/include/**/*.h'
|
|
||||||
zano.vendored_libraries = 'External/ios/lib/libzano.a'
|
|
||||||
zano.libraries = ''
|
|
||||||
zano.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include" }
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -49,14 +49,6 @@ flutter:
|
||||||
# The 'pluginClass' and Android 'package' identifiers should not ordinarily
|
# The 'pluginClass' and Android 'package' identifiers should not ordinarily
|
||||||
# be modified. They are used by the tooling to maintain consistency when
|
# be modified. They are used by the tooling to maintain consistency when
|
||||||
# adding or updating assets for this project.
|
# adding or updating assets for this project.
|
||||||
plugin:
|
|
||||||
platforms:
|
|
||||||
android:
|
|
||||||
package: com.cakewallet.cw_zano
|
|
||||||
pluginClass: CwZanoPlugin
|
|
||||||
ios:
|
|
||||||
pluginClass: CwZanoPlugin
|
|
||||||
|
|
||||||
# To add assets to your plugin package, add an assets section, like this:
|
# To add assets to your plugin package, add an assets section, like this:
|
||||||
# assets:
|
# assets:
|
||||||
# - images/a_dot_burr.jpeg
|
# - images/a_dot_burr.jpeg
|
||||||
|
|
Loading…
Reference in a new issue