The developer has reached the first step we've agreed with him upon and released the document in which he is analyzing SLM code. Please let me know what do you think.
Here is the document.
It seems Slimcolin derived from Peercoin v0.4.0ppc and partially patched from v0.5Xppc.
Slimcoin is originally derived from Peercoin 3.0, here is the specific repos commit from which it was cloned:
https://github.com/peercoin/peercoin/tree/154b52acaad8acb37a6f5e6f107ce0bfeca68229, as evidenced here:
https://github.com/slimcoin/slimcoin/blob/master/src/version.cpp#L39Protocol switch time ... These values are using to check whether the given transaction is subject to the specified protocol.
This is Peercoin-only code and refers to switches in Peercoin protocol for 0.4/0.5, these were changes not considered appropriate for Slimcoin but the switch was retained in case the community changed its collective mind on the relevance of the changes.
One change that doesn't seem to have been covered is the addition of running totals of moneysupply and totalburnt to the index -
https://github.com/slimcoin-project/Slimcoin/commit/43e7af0a84f419ab1a1168189f95e193bb26be7#diff-e8db9b851adc2422aadfffca88f14c91 (something of a scrappy commit but I was still getting to grips with it all at that point) - this was implemented to satisfy exchange requirements of the time.
The RPC commands
dumpbootstrap,
linearizehashes,
getinscription,
importpassphrase,
encryptmessage,
decryptmessage,
encryptdata,
decryptdata and
makekeypair were all added by me and are not relevant to Slimcoin core functionality, the same holds true for the GUI additions of block browser, chat window, mining page and inscription page.
fwiw, I made a diff of the first changes:
diff -uNr peercoin-0.3.2/src/base58.h slimcoin-0.3.2/src/base58.h
--- peercoin-0.3.2/src/base58.h 2020-04-10 16:58:34.017203905 +0100
+++ slimcoin-0.3.2/src/base58.h 2020-04-19 10:56:57.319392515 +0100
@@ -264,8 +264,8 @@
public:
enum
{
- PUBKEY_ADDRESS = 55, // ppcoin: addresses begin with 'P'
- SCRIPT_ADDRESS = 117, // ppcoin: addresses begin with 'p'
+ PUBKEY_ADDRESS = 63, // slimcoin: addresses begin with 'S'
+ SCRIPT_ADDRESS = 125, // slimcoin: addresses begin with 's'
PUBKEY_ADDRESS_TEST = 111,
SCRIPT_ADDRESS_TEST = 196,
};
diff -uNr peercoin-0.3.2/src/main.cpp slimcoin-0.3.2/src/main.cpp
--- peercoin-0.3.2/src/main.cpp 2020-04-19 11:31:32.605751015 +0100
+++ slimcoin-0.3.2/src/main.cpp 2020-04-19 12:04:09.529593253 +0100
@@ -868,8 +868,8 @@
return nSubsidy;
}
-static const int64 nTargetTimespan = 7 * 24 * 60 * 60; // one week
-static const int64 nTargetSpacingWorkMax = 12 * STAKE_TARGET_SPACING; // 2-hour
+static const int64 nTargetTimespan = 30 * 60; // retargets every 30 minutes
+static const int64 nTargetSpacingWorkMax = 10 * STAKE_TARGET_SPACING; // 15 minutes
//
// minimum amount of work that could possibly be required nTime after
@@ -2241,9 +2241,9 @@
// vMerkleTree: 4a5e1e
// Genesis block
- const char* pszTimestamp = "Matonis 07-AUG-2012 Parallel Currencies And The Roadmap To Monetary Freedom";
+ const char* pszTimestamp = "RT: Non-denying denial? RSA aims to distance itself from NSA scandal";
CTransaction txNew;
- txNew.nTime = 1345083810;
+ txNew.nTime = 1388098028;
txNew.vin.resize(1);
txNew.vout.resize(1);
txNew.vin[0].scriptSig = CScript() << 486604799 << CBigNum(9999) << vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp));
@@ -2259,15 +2259,15 @@
if (fTestNet)
{
- block.nTime = 1345090000;
- block.nNonce = 122894938;
+ block.nTime = 1388098028;
+ block.nNonce = 865766467;
}
//// debug print
printf("%s\n", block.GetHash().ToString().c_str());
printf("%s\n", hashGenesisBlock.ToString().c_str());
printf("%s\n", block.hashMerkleRoot.ToString().c_str());
- assert(block.hashMerkleRoot == uint256("0x3c2d8f85fab4d17aac558cc648a1a58acff0de6deb890c29985690052c5993c2"));
+ assert(block.hashMerkleRoot == uint256("0x6561fdf42da044631a835cad31128929d8b95fde6ce3e4f89cff8d710d8af927"));
block.print();
assert(block.GetHash() == hashGenesisBlock);
assert(block.CheckBlock());
diff -uNr peercoin-0.3.2/src/main.h slimcoin-0.3.2/src/main.h
--- peercoin-0.3.2/src/main.h 2020-04-19 11:09:01.953785469 +0100
+++ slimcoin-0.3.2/src/main.h 2020-04-19 11:35:48.904010014 +0100
@@ -41,7 +41,7 @@
static const int COINBASE_MATURITY = 500;
// Threshold for nLockTime: below this value it is interpreted as block number, otherwise as UNIX timestamp.
static const int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC
-static const int STAKE_TARGET_SPACING = 10 * 60; // 10-minute block spacing
+static const int STAKE_TARGET_SPACING = 90; // 90 second block spacing
static const int STAKE_MIN_AGE = 60 * 60 * 24 * 30; // minimum age for coin age
static const int STAKE_MAX_AGE = 60 * 60 * 24 * 90; // stake age of full weight
@@ -52,7 +52,7 @@
#endif
static const uint256 hashGenesisBlockOfficial("0x0000000032fe677166d54963b62a4677d8957e87c508eaa4fd7eb1c880cd27e3");
-static const uint256 hashGenesisBlockTestNet("0x00000001f757bb737f6596503e17cd17b0658ce630cc727c0cca81aec47c9f06");
+static const uint256 hashGenesisBlockTestNet("0x0000000a8ecef22cc3af763a952750f70c958e7812b4df332a13ea18aa478bb1");
static const int64 nMaxClockDrift = 2 * 60 * 60; // two hours
@@ -586,7 +586,7 @@
{
// Large (in bytes) low-priority (new, small-coin) transactions
// need a fee.
- return dPriority > COIN * 144 / 250;
+ return dPriority > COIN * 960 / 250; //960 blocks per day
}
int64 GetMinFee(unsigned int nBlockSize=1, bool fAllowFree=false, enum GetMinFee_mode mode=GMF_BLOCK) const
diff -uNr peercoin-0.3.2/src/protocol.cpp slimcoin-0.3.2/src/protocol.cpp
--- peercoin-0.3.2/src/protocol.cpp 2020-04-19 11:40:42.762597925 +0100
+++ slimcoin-0.3.2/src/protocol.cpp 2020-04-19 11:40:39.782571688 +0100
@@ -17,14 +17,14 @@
// Public testnet message start
// unsigned char pchMessageStartTestBitcoin[4] = { 0xfa, 0xbf, 0xb5, 0xda };
-static unsigned char pchMessageStartTestOld[4] = { 0xdb, 0xe1, 0xf2, 0xf6 };
-static unsigned char pchMessageStartTestNew[4] = { 0xcb, 0xf2, 0xc0, 0xef };
-static unsigned int nMessageStartTestSwitchTime = 1346200000;
+static unsigned char pchMessageStartTestOld[4] = { 0xbd, 0x1e, 0x2f, 0xa3 };
+static unsigned char pchMessageStartTestNew[4] = { 0x4d, 0x2a, 0xe1, 0xab };
+static unsigned int nMessageStartTestSwitchTime = 1389000000;
// Message start (switch from Bitcoin's in v0.2)
-static unsigned char pchMessageStartBitcoin[4] = { 0xf9, 0xbe, 0xb4, 0xd9 };
-static unsigned char pchMessageStartCoin[4] = { 0xe6, 0xe8, 0xe9, 0xe5 };
-static unsigned int nMessageStartSwitchTime = 1347300000;
+static unsigned char pchMessageStartBitcoin[4] = { 0x9f, 0xeb, 0x1b, 0x8a };
+static unsigned char pchMessageStartCoin[4] = { 0x6e, 0x8b, 0x92, 0xa5 };
+static unsigned int nMessageStartSwitchTime = 1400000000;
void GetMessageStart(unsigned char pchMessageStart[], bool fPersistent)
{
diff -uNr peercoin-0.3.2/src/protocol.h slimcoin-0.3.2/src/protocol.h
--- peercoin-0.3.2/src/protocol.h 2020-04-19 11:41:10.118838763 +0100
+++ slimcoin-0.3.2/src/protocol.h 2020-04-19 11:41:12.642860983 +0100
@@ -15,9 +15,9 @@
#include
#include "uint256.h"
-#define COIN_PORT 9901
-#define RPC_PORT 9902
-#define TESTNET_PORT 9903
+#define COIN_PORT 41682
+#define RPC_PORT 41683
+#define TESTNET_PORT 41684
extern bool fTestNet;
diff -uNr peercoin-0.3.2/src/version.cpp slimcoin-0.3.2/src/version.cpp
--- peercoin-0.3.2/src/version.cpp 2020-04-10 16:58:34.033204087 +0100
+++ slimcoin-0.3.2/src/version.cpp 2020-04-19 11:47:33.806259732 +0100
@@ -33,9 +33,10 @@
# include "build.h"
#endif
-// git will put "#define GIT_ARCHIVE 1" on the next line inside archives. $Format:%n#define GIT_ARCHIVE 1$
+// git will put "#define GIT_ARCHIVE 1" on the next line inside archives.
+#define GIT_ARCHIVE 1
#ifdef GIT_ARCHIVE
-# define GIT_COMMIT_ID "$Format:%h$"
+# define GIT_COMMIT_ID "154b52a"
# define GIT_COMMIT_DATE "$Format:%cD"
#endif
Cheers
Graham