-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
191 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# monero.c# | ||
|
||
> C# port for monero | ||
This is not a ready-to-use package (as opposed to monero.dart and monero.ts), but it works. You can check the `monero_wrapper.cs`. | ||
|
||
Currently C# code is optimized to be used in Godot.., if you are not planning to use it there - simply do not extend Node class and remove Godot import, if you are planning to use it in production, please let me know - we can work on a better approach to using monero with proper package code in here. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,184 @@ | ||
using Godot; | ||
using System; | ||
using System.Runtime.InteropServices; | ||
|
||
public partial class monero_wrapper : Node | ||
{ | ||
public static IntPtr wmPtr = MONERO_WalletManagerFactory_getWalletManager(); | ||
public static IntPtr wPtr; | ||
public static IntPtr pendingTx; | ||
public static IntPtr txHistory; | ||
public string path = ""; | ||
|
||
// Called when the node enters the scene tree for the first time. | ||
public override void _Ready() | ||
{ | ||
} | ||
|
||
// Called every frame. 'delta' is the elapsed time since the previous frame. | ||
public override void _Process(double delta) | ||
{ | ||
} | ||
|
||
public static bool openWallet(string path, string password) { | ||
MONERO_WalletManager_createWallet(wmPtr, path, password, "English", 0); | ||
wPtr = MONERO_WalletManager_openWallet(wmPtr, path, password, 0); | ||
return MONERO_Wallet_status(wPtr) == 0; | ||
} | ||
|
||
public static void initWallet(string daemonAddress, bool useSsl, String proxyString) { | ||
//MONERO_Wallet_init(string daemon_password, bool use_ssl, bool lightWallet, string proxy_address); | ||
MONERO_Wallet_init(wPtr, daemonAddress, 0, "", "", useSsl, false, proxyString); | ||
GD.Print(lastError()); | ||
MONERO_Wallet_init3(wPtr, "", "", "/dev/shm/godot_moneroc.log", false); | ||
GD.Print(lastError()); | ||
MONERO_Wallet_setTrustedDaemon(wPtr, true); | ||
GD.Print(lastError()); | ||
MONERO_Wallet_refreshAsync(wPtr); | ||
GD.Print(lastError()); | ||
MONERO_Wallet_startRefresh(wPtr); | ||
GD.Print(lastError()); | ||
} | ||
|
||
public static void storeWallet() { | ||
MONERO_Wallet_store(wPtr); | ||
} | ||
|
||
public static string lastError() { | ||
IntPtr resultPtr = MONERO_Wallet_errorString(wPtr); | ||
string result = Marshal.PtrToStringAnsi(resultPtr); | ||
return result; | ||
} | ||
|
||
public static int lastErrorCode() { | ||
return MONERO_Wallet_status(wPtr); | ||
} | ||
|
||
public static string lastTxError() { | ||
IntPtr resultPtr = MONERO_PendingTransaction_errorString(pendingTx); | ||
string result = Marshal.PtrToStringAnsi(resultPtr); | ||
return result; | ||
} | ||
|
||
public static int lastTxErrorCode() { | ||
return MONERO_PendingTransaction_status(pendingTx); | ||
} | ||
|
||
public static string getAddress(ulong accountIndex, ulong addressIndex) { | ||
IntPtr resultPtr = MONERO_Wallet_address(wPtr, accountIndex, addressIndex); | ||
string result = Marshal.PtrToStringAnsi(resultPtr); | ||
return result; | ||
} | ||
|
||
public static ulong getBalance(uint accountIndex) { | ||
return MONERO_Wallet_balance(wPtr, accountIndex); | ||
} | ||
|
||
public static void createTransaction(string address, ulong amount) { | ||
pendingTx = MONERO_Wallet_createTransaction(wPtr, address, "", amount, 0, 0, 0, "", ""); | ||
MONERO_PendingTransaction_commit(pendingTx, "", false); | ||
} | ||
|
||
public static int getTransactionCount() { | ||
txHistory = MONERO_Wallet_history(wPtr); | ||
MONERO_TransactionHistory_refresh(txHistory); | ||
return MONERO_TransactionHistory_count(txHistory); | ||
} | ||
|
||
public static int getTransactionDirection(int index) { | ||
txHistory = MONERO_Wallet_history(wPtr); | ||
IntPtr txPtr = MONERO_TransactionHistory_transaction(txHistory, index); | ||
return MONERO_TransactionInfo_direction(txPtr); | ||
} | ||
|
||
public static ulong getTransactionAmount(int index) { | ||
txHistory = MONERO_Wallet_history(wPtr); | ||
IntPtr txPtr = MONERO_TransactionHistory_transaction(txHistory, index); | ||
return MONERO_TransactionInfo_amount(txPtr); | ||
} | ||
|
||
public static ulong getTransactionTimestamp(int index) { | ||
txHistory = MONERO_Wallet_history(wPtr); | ||
IntPtr txPtr = MONERO_TransactionHistory_transaction(txHistory, index); | ||
return MONERO_TransactionInfo_timestamp(txPtr); | ||
} | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern ulong MONERO_TransactionInfo_timestamp(IntPtr txPtr); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_TransactionHistory_transaction(IntPtr txHistory, int index); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern int MONERO_TransactionInfo_direction(IntPtr txPtr); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern int MONERO_TransactionHistory_count(IntPtr txHistory); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern ulong MONERO_TransactionInfo_amount(IntPtr txPtr); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_Wallet_history(IntPtr wm_ptr); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_TransactionHistory_refresh(IntPtr txHistory); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_WalletManager_createWallet(IntPtr wm_ptr, string path, string password, string language, int networkType); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_WalletManager_openWallet(IntPtr wm_ptr, string path, string password, int networkType); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_WalletManagerFactory_getWalletManager(); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern int MONERO_Wallet_status(IntPtr wPtr); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern int MONERO_PendingTransaction_status(IntPtr wPtr); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern bool MONERO_WalletManager_walletExists(IntPtr wmPtr, string path); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_Wallet_errorString(IntPtr wPtr); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_PendingTransaction_errorString(IntPtr pendingTx); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern ulong MONERO_Wallet_balance(IntPtr wPtr, uint accountIndex); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_Wallet_address(IntPtr wPtr, ulong accountIndex, ulong addressIndex); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern IntPtr MONERO_Wallet_createTransaction(IntPtr wallet_ptr, string dst_addr, string payment_id, | ||
ulong amount, uint mixin_count, | ||
int pendingTransactionPriority, | ||
uint subaddr_account, | ||
string preferredInputs, string separator); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern bool MONERO_PendingTransaction_commit(IntPtr pendingTx_ptr, string filename, bool overwrite); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern bool MONERO_Wallet_init(IntPtr wallet_ptr, string daemon_address, ulong upper_transaction_size_limit, string daemon_username, string daemon_password, bool use_ssl, bool lightWallet, string proxy_address); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern bool MONERO_Wallet_init3(IntPtr wallet_ptr, string argv0, string default_log_base_name, string log_path, bool console); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern void MONERO_Wallet_setTrustedDaemon(IntPtr wallet_ptr, bool arg); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern void MONERO_Wallet_startRefresh(IntPtr wallet_ptr); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern void MONERO_Wallet_refreshAsync(IntPtr wallet_ptr); | ||
|
||
[DllImport("/usr/lib/monero_libwallet2_api_c.so")] | ||
public static extern bool MONERO_Wallet_store(IntPtr wallet_ptr); | ||
} |