Compare commits

...

5 Commits

Author SHA1 Message Date
sami7777 7c7e951adb Bump version to v5.1.4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 01:55:10 -07:00
sami7777 08b98a8775 Rebrand to Cryptographic Triangles v5.1.3
- Rename client from "Black Pharao" to "Cryptographic Triangles"
- Update CLIENT_VERSION from 4.2.1.0 to 5.1.3.0
- Update DISPLAY_VERSION from 5.0.0.0 to 5.1.3.0
- Update .pro VERSION to 5.1.3.0
- Fix RC file: copyright 2014-2026, fix OriginalFilename typo
- Update about dialog copyright to 2014-2026

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 01:28:52 -07:00
Sami Ahmed 0f307a498d Update client version to v5.1.3 2026-03-14 04:53:19 +01:00
sami7777 e54120108e Remove leftover diagnostic logging from messagemodel.cpp
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 17:11:22 -07:00
sami7777 50713cc87b Add smsgbroadcast RPC command for messaging all known peers
New command: smsgbroadcast <addrFrom> <message>
Iterates all public keys in smsgDB and sends an encrypted message to each.
Skips the sender's own address. Reports sent/failed counts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 17:03:51 -07:00
11 changed files with 111 additions and 20 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# Triangles (TRI) - v5.0.0.0 "Black Pharao"
# Cryptographic Triangles (TRI) - v5.1.4
Triangles is a privacy-focused cryptocurrency featuring Proof-of-Stake consensus, Tor v3 onion routing, and built-in encrypted messaging. Originally launched in July 2014, the chain was revived in March 2026 after being frozen since December 2022.
+3 -3
View File
@@ -6,9 +6,9 @@
//
// These need to be macros, as version.cpp's and triangles-qt.rc's voodoo requires it
#define CLIENT_VERSION_MAJOR 4
#define CLIENT_VERSION_MINOR 2
#define CLIENT_VERSION_REVISION 1
#define CLIENT_VERSION_MAJOR 5
#define CLIENT_VERSION_MINOR 1
#define CLIENT_VERSION_REVISION 4
#define CLIENT_VERSION_BUILD 0
// Converts the parameter X to a string after macro replacement on X has been performed.
+2 -2
View File
@@ -591,7 +591,7 @@ QDialog {
<number>2</number>
</property>
<property name="text">
<string>About Triangles</string>
<string>About Cryptographic Triangles</string>
</property>
</widget>
</item>
@@ -808,7 +808,7 @@ QPushButton:hover {
<cursorShape>IBeamCursor</cursorShape>
</property>
<property name="text">
<string notr="true">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Copyright © 2009-2015 The Bitcoin developers&lt;br/&gt;Copyright © 2014-2015 Triangles team&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string notr="true">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Copyright © 2009-2015 The Bitcoin developers&lt;br/&gt;Copyright © 2014-2026 Cryptographic Triangles team&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
+3 -3
View File
@@ -47,7 +47,7 @@ public:
void refreshMessageTable()
{
cachedMessageTable.clear();
if (parent->getWalletModel()->getEncryptionStatus() == WalletModel::Locked)
{
// -- messages are stored encrypted, can't load them without the private keys
@@ -84,7 +84,7 @@ public:
sent_datetime .setTime_t(msg.timestamp);
received_datetime.setTime_t(smsgStored.timeReceived);
memcpy(&vchKey[0], chKey, 18);
addMessageEntry(MessageTableEntry(vchKey,
@@ -112,7 +112,7 @@ public:
sent_datetime .setTime_t(msg.timestamp);
received_datetime.setTime_t(smsgStored.timeReceived);
memcpy(&vchKey[0], chKey, 18);
addMessageEntry(MessageTableEntry(vchKey,
+6 -6
View File
@@ -18,14 +18,14 @@ BEGIN
BEGIN
BLOCK "040904E4" // U.S. English - multilingual (hex)
BEGIN
VALUE "CompanyName", "Triangles"
VALUE "FileDescription", "Triangles-Qt (OSS GUI client for Triangles)"
VALUE "CompanyName", "Cryptographic Triangles"
VALUE "FileDescription", "Cryptographic Triangles Qt Wallet"
VALUE "FileVersion", VER_FILEVERSION_STR
VALUE "InternalName", "Triangles-qt"
VALUE "LegalCopyright", "2014-2015 Triangles Team, 2012-2015 PPCoin developers, 2009-2015 The Bitcoin developers"
VALUE "InternalName", "triangles-qt"
VALUE "LegalCopyright", "2014-2026 Cryptographic Triangles Team, 2012-2015 PPCoin developers, 2009-2015 The Bitcoin developers"
VALUE "LegalTrademarks1", "Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php."
VALUE "OriginalFilename", "triangled-qt.exe"
VALUE "ProductName", "Triangles-Qt"
VALUE "OriginalFilename", "triangles-qt.exe"
VALUE "ProductName", "Cryptographic Triangles"
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
END
END
+90 -1
View File
@@ -889,7 +889,96 @@ Value smsgbuckets(const Array& params, bool fHelp)
result.push_back(Pair("result", "Unknown Mode."));
result.push_back(Pair("expected", "[stats|dump]."));
};
return result;
};
Value smsgbroadcast(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 2)
throw runtime_error(
"smsgbroadcast <addrFrom> <message>\n"
"Send an encrypted message to all known public keys in the smsgDB.\n"
"Returns the number of recipients and any failures.");
if (!fSecMsgEnabled)
throw runtime_error("Secure messaging is disabled.");
if (pwalletMain->IsLocked())
throw runtime_error("Wallet is locked.");
std::string addrFrom = params[0].get_str();
std::string msg = params[1].get_str();
// Validate sender address
CTrianglesAddress coinAddrFrom(addrFrom);
if (!coinAddrFrom.IsValid())
throw runtime_error("Invalid from address.");
Object result;
uint32_t nSent = 0;
uint32_t nFailed = 0;
Array failures;
{
LOCK(cs_smsgDB);
SecMsgDB dbPub;
if (!dbPub.Open("r"))
throw runtime_error("Could not open smsgDB.");
// Iterate all "pk" entries
std::string sPrefix("pk");
leveldb::Iterator* it = dbPub.pdb->NewIterator(leveldb::ReadOptions());
for (it->Seek(sPrefix); it->Valid(); it->Next())
{
std::string key = it->key().ToString();
if (key.size() < 2 || key[0] != 'p' || key[1] != 'k')
break;
// Deserialize the CKeyID from the key (after "pk" prefix)
CDataStream ssKey(key.data(), key.data() + key.size(), SER_DISK, CLIENT_VERSION);
char prefix[2];
ssKey >> prefix[0];
ssKey >> prefix[1];
CKeyID ckidTo;
ssKey >> ckidTo;
// Convert CKeyID to address string
CTrianglesAddress addrTo(ckidTo);
if (!addrTo.IsValid())
continue;
std::string sAddrTo = addrTo.ToString();
// Skip sending to self
if (sAddrTo == addrFrom)
continue;
std::string sError;
if (SecureMsgSend(addrFrom, sAddrTo, msg, sError) != 0)
{
nFailed++;
Object objFail;
objFail.push_back(Pair("address", sAddrTo));
objFail.push_back(Pair("error", sError));
failures.push_back(objFail);
} else
{
nSent++;
}
}
delete it;
}
char cbuf[256];
snprintf(cbuf, sizeof(cbuf), "Broadcast sent to %u recipients, %u failed.", nSent, nFailed);
result.push_back(Pair("result", std::string(cbuf)));
result.push_back(Pair("sent", (int)nSent));
result.push_back(Pair("failed", (int)nFailed));
if (nFailed > 0)
result.push_back(Pair("failures", failures));
return result;
};
+1
View File
@@ -336,6 +336,7 @@ static const CRPCCommand vRPCCommands[] =
{ "smsginbox", &smsginbox, false, false},
{ "smsgoutbox", &smsgoutbox, false, false},
{ "smsgbuckets", &smsgbuckets, false, false},
{ "smsgbroadcast", &smsgbroadcast, false, false},
+1
View File
@@ -247,6 +247,7 @@ extern json_spirit::Value smsgsendanon(const json_spirit::Array& params, bool fH
extern json_spirit::Value smsginbox(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value smsgoutbox(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value smsgbuckets(const json_spirit::Array& params, bool fHelp);
extern json_spirit::Value smsgbroadcast(const json_spirit::Array& params, bool fHelp);
#endif
+1 -1
View File
@@ -8,7 +8,7 @@
// Name of client reported in the 'version' message. Report the same name
// for both trianglesd and triangles-qt, to make it harder for attackers to
// target servers or GUI users specifically.
const std::string CLIENT_NAME("Black Pharao");
const std::string CLIENT_NAME("Cryptographic Triangles");
// Client version number
#define CLIENT_VERSION_SUFFIX ""
+2 -2
View File
@@ -52,8 +52,8 @@ static const int BIP0031_VERSION = 60000;
static const int MEMPOOL_GD_VERSION = 60002;
#define DISPLAY_VERSION_MAJOR 5
#define DISPLAY_VERSION_MINOR 0
#define DISPLAY_VERSION_REVISION 0
#define DISPLAY_VERSION_MINOR 1
#define DISPLAY_VERSION_REVISION 4
#define DISPLAY_VERSION_BUILD 0
#endif
+1 -1
View File
@@ -1,7 +1,7 @@
TEMPLATE = app
TARGET = triangles-qt
VERSION = 5.0.0.0
VERSION = 5.1.4.0
INCLUDEPATH += src src/json src/qt src/qt/plugins/mrichtexteditor
DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN BOOST_BIND_GLOBAL_PLACEHOLDERS __NO_SYSTEM_INCLUDES
CONFIG += no_include_pwd