mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Merge branch 'master' of github.com:jedmccaleb/NewCoin
This commit is contained in:
@@ -119,38 +119,6 @@ void Application::run()
|
||||
std::cerr << "Master seed: " << rootSeedMaster.humanFamilySeed() << std::endl;
|
||||
std::cerr << "Master generator: " << rootGeneratorMaster.humanFamilyGenerator() << std::endl;
|
||||
std::cerr << "Root address: " << rootAddress.humanAccountPublic() << std::endl;
|
||||
#if 0
|
||||
NewcoinAddress rootSeedRegular;
|
||||
NewcoinAddress rootGeneratorRegular;
|
||||
NewcoinAddress reservedPublicRegular;
|
||||
NewcoinAddress reservedPrivateRegular;
|
||||
|
||||
rootSeedRegular.setFamilySeed(CKey::PassPhraseToKey("Regular passphrase."));
|
||||
rootGeneratorRegular.setFamilyGenerator(rootSeedRegular);
|
||||
|
||||
reservedPublicRegular.setAccountPublic(rootGeneratorRegular, -1);
|
||||
reservedPrivateRegular.setAccountPrivate(rootGeneratorRegular, rootSeedRegular, -1);
|
||||
|
||||
// hash of regular account #reserved public key.
|
||||
uint160 uiGeneratorID = reservedPublicRegular.getAccountID();
|
||||
|
||||
// std::cerr << "uiGeneratorID: " << uiGeneratorID << std::endl;
|
||||
|
||||
// Encrypt with regular account #reserved private key.
|
||||
std::vector<unsigned char> vucGeneratorCipher = reservedPrivateRegular.accountPrivateEncrypt(reservedPublicRegular, rootGeneratorMaster.getFamilyGenerator());
|
||||
|
||||
std::cerr << "Plain: " << strHex(rootGeneratorMaster.getFamilyGenerator()) << std::endl;
|
||||
|
||||
std::cerr << "Cipher: " << strHex(vucGeneratorCipher) << std::endl;
|
||||
|
||||
std::vector<unsigned char> vucGeneratorText = reservedPrivateRegular.accountPrivateDecrypt(reservedPublicRegular, vucGeneratorCipher);
|
||||
|
||||
std::cerr << "Plain: " << strHex(vucGeneratorText) << std::endl;
|
||||
std::cerr << "Regular seed: " << rootSeedRegular.humanFamilySeed() << std::endl;
|
||||
std::cerr << "Regular generator: " << rootGeneratorRegular.humanFamilyGenerator() << std::endl;
|
||||
std::cerr << "Reserved public regular: " << reservedPublicRegular.humanAccountPublic() << std::endl;
|
||||
std::cerr << "Reserved private regular: " << reservedPrivateRegular.humanAccountPrivate() << std::endl;
|
||||
#endif
|
||||
|
||||
// Temporary root account will be ["This is my payphrase."]:0
|
||||
NewcoinAddress rootFamilySeed; // Hold the 128 password.
|
||||
|
||||
@@ -562,6 +562,24 @@ bool NewcoinAddress::setFamilySeed(const std::string& strSeed)
|
||||
return SetString(strSeed.c_str(), VER_FAMILY_SEED);
|
||||
}
|
||||
|
||||
void NewcoinAddress::setFamilySeedGeneric(const std::string& strText)
|
||||
{
|
||||
if (setFamilySeed(strText))
|
||||
{
|
||||
std::cerr << "Recognized seed." << std::endl;
|
||||
}
|
||||
else if (1 == setFamilySeed1751(strText))
|
||||
{
|
||||
std::cerr << "Recognized 1751 seed." << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "Creating seed from pass phrase." << std::endl;
|
||||
|
||||
setFamilySeed(CKey::PassPhraseToKey(strText));
|
||||
}
|
||||
}
|
||||
|
||||
void NewcoinAddress::setFamilySeed(uint128 hash128) {
|
||||
SetData(VER_FAMILY_SEED, hash128.begin(), 16);
|
||||
}
|
||||
|
||||
@@ -117,6 +117,7 @@ public:
|
||||
|
||||
bool setFamilySeed(const std::string& strSeed);
|
||||
int setFamilySeed1751(const std::string& strHuman1751);
|
||||
void setFamilySeedGeneric(const std::string& strText);
|
||||
void setFamilySeed(uint128 hash128);
|
||||
void setFamilySeedRandom();
|
||||
};
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "LocalTransaction.h"
|
||||
#include "NewcoinAddress.h"
|
||||
#include "AccountState.h"
|
||||
#include "utils.h"
|
||||
|
||||
#define VALIDATORS_FETCH_SECONDS 30
|
||||
#define VALIDATORS_FILE_PATH "/" VALIDATORS_FILE_NAME
|
||||
@@ -568,20 +569,7 @@ Json::Value RPCServer::doValidatorCreate(Json::Value& params) {
|
||||
}
|
||||
else if (1 == params.size())
|
||||
{
|
||||
if (familySeed.setFamilySeed(params[0u].asString()))
|
||||
{
|
||||
std::cerr << "Recognized validation seed." << std::endl;
|
||||
}
|
||||
else if (1 == familySeed.setFamilySeed1751(params[0u].asString()))
|
||||
{
|
||||
std::cerr << "Recognized 1751 validation seed." << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "Creating validation seed from pass phrase." << std::endl;
|
||||
|
||||
familySeed.setFamilySeed(CKey::PassPhraseToKey(params[0u].asString()));
|
||||
}
|
||||
familySeed.setFamilySeedGeneric(params[0u].asString());
|
||||
}
|
||||
else return "invalid params";
|
||||
|
||||
@@ -597,13 +585,101 @@ Json::Value RPCServer::doValidatorCreate(Json::Value& params) {
|
||||
|
||||
Json::Value obj(Json::objectValue);
|
||||
|
||||
obj["validation_public_key"] = nodePublicKey.humanNodePublic().c_str();
|
||||
obj["validation_seed"] = familySeed.humanFamilySeed().c_str();
|
||||
obj["validation_key"] = familySeed.humanFamilySeed1751().c_str();
|
||||
obj["validation_public_key"] = nodePublicKey.humanNodePublic();
|
||||
obj["validation_seed"] = familySeed.humanFamilySeed();
|
||||
obj["validation_key"] = familySeed.humanFamilySeed1751();
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
// wallet_claim <master_seed> <regular_seed> [<account_annotation>]
|
||||
//
|
||||
// To provide an example to client writers, we do everything we expect a client to do here.
|
||||
Json::Value RPCServer::doWalletClaim(Json::Value& params)
|
||||
{
|
||||
if (2 != params.size() && 3 != params.size())
|
||||
{
|
||||
return "invalid params";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Trying to build:
|
||||
// peer_wallet_claim <account_id> <generator_id> <encrypted_master_public_generator> <account_id_signature> [<annotation>]
|
||||
//
|
||||
// Which has no confidential information.
|
||||
|
||||
// XXX Annotation is ignored.
|
||||
std::string strAnnotation = (params.size() == 2) ? "" : params[2u].asString();
|
||||
|
||||
NewcoinAddress naMasterSeed;
|
||||
NewcoinAddress naMasterGenerator;
|
||||
|
||||
NewcoinAddress naRegularSeed;
|
||||
NewcoinAddress naRegularGenerator;
|
||||
NewcoinAddress naRegularReservedPublic;
|
||||
NewcoinAddress naRegularReservedPrivate;
|
||||
|
||||
NewcoinAddress naAccount;
|
||||
|
||||
naMasterSeed.setFamilySeedGeneric(params[0u].asString());
|
||||
naRegularSeed.setFamilySeedGeneric(params[1u].asString());
|
||||
|
||||
naMasterGenerator.setFamilyGenerator(naMasterSeed);
|
||||
naAccount.setAccountPublic(naMasterGenerator, 0);
|
||||
|
||||
naRegularGenerator.setFamilyGenerator(naRegularSeed);
|
||||
|
||||
naRegularReservedPublic.setAccountPublic(naRegularGenerator, -1);
|
||||
naRegularReservedPrivate.setAccountPrivate(naRegularGenerator, naRegularSeed, -1);
|
||||
|
||||
// hash of regular account #reserved public key.
|
||||
uint160 uGeneratorID = naRegularReservedPublic.getAccountID();
|
||||
std::vector<unsigned char> vucGeneratorCipher = naRegularReservedPrivate.accountPrivateEncrypt(naRegularReservedPublic, naMasterGenerator.getFamilyGenerator());
|
||||
|
||||
Json::Value obj(Json::objectValue);
|
||||
|
||||
// We "echo" the seeds so they can be checked.
|
||||
obj["master_seed"] = naMasterSeed.humanFamilySeed();
|
||||
obj["master_key"] = naMasterSeed.humanFamilySeed1751();
|
||||
obj["regular_seed"] = naRegularSeed.humanFamilySeed();
|
||||
obj["regular_key"] = naRegularSeed.humanFamilySeed1751();
|
||||
|
||||
obj["account_id"] = naAccount.humanAccountID();
|
||||
obj["generator_id"] = strHex(uGeneratorID);
|
||||
obj["generator"] = strHex(vucGeneratorCipher);
|
||||
obj["annotation"] = strAnnotation;
|
||||
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
// wallet_propose
|
||||
Json::Value RPCServer::doWalletPropose(Json::Value& params)
|
||||
{
|
||||
if (params.size())
|
||||
{
|
||||
return "invalid params";
|
||||
}
|
||||
else
|
||||
{
|
||||
NewcoinAddress naSeed;
|
||||
NewcoinAddress naGenerator;
|
||||
NewcoinAddress naAccount;
|
||||
|
||||
naSeed.setFamilySeedRandom();
|
||||
naGenerator.setFamilyGenerator(naSeed);
|
||||
naAccount.setAccountPublic(naGenerator, 0);
|
||||
|
||||
Json::Value obj(Json::objectValue);
|
||||
|
||||
obj["master_seed"] = naSeed.humanFamilySeed();
|
||||
obj["master_key"] = naSeed.humanFamilySeed1751();
|
||||
obj["account_id"] = naAccount.humanAccountID();
|
||||
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
void RPCServer::validatorsResponse(const boost::system::error_code& err, std::string strResponse)
|
||||
{
|
||||
std::cerr << "Fetch '" VALIDATORS_FILE_NAME "' complete." << std::endl;
|
||||
@@ -740,6 +816,9 @@ Json::Value RPCServer::doCommand(const std::string& command, Json::Value& params
|
||||
|
||||
if (command=="validation_create") return doValidatorCreate(params);
|
||||
|
||||
if (command=="wallet_claim") return doWalletClaim(params);
|
||||
if (command=="wallet_propose") return doWalletPropose(params);
|
||||
|
||||
if (command=="createfamily") return doCreateFamily(params);
|
||||
if (command=="familyinfo") return doFamilyInfo(params);
|
||||
if (command=="accountinfo") return doAccountInfo(params);
|
||||
|
||||
@@ -56,6 +56,9 @@ class RPCServer : public boost::enable_shared_from_this<RPCServer>
|
||||
|
||||
Json::Value doValidatorCreate(Json::Value& params);
|
||||
|
||||
Json::Value doWalletClaim(Json::Value& params);
|
||||
Json::Value doWalletPropose(Json::Value& params);
|
||||
|
||||
// Parses a string account name into a local or remote NewcoinAddress.
|
||||
NewcoinAddress parseAccount(const std::string& account);
|
||||
void validatorsResponse(const boost::system::error_code& err, std::string strResponse);
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
|
||||
#include <openssl/dh.h>
|
||||
|
||||
#include "uint256.h"
|
||||
|
||||
#define nothing() do {} while (0)
|
||||
|
||||
#ifndef MAX
|
||||
@@ -60,6 +62,10 @@ inline std::string strHex(const std::vector<unsigned char> vchData) {
|
||||
return strHex(vchData.begin(), vchData.size());
|
||||
}
|
||||
|
||||
inline const std::string strHex(const uint160& ui) {
|
||||
return strHex(ui.begin(), ui.size());
|
||||
}
|
||||
|
||||
int charUnHex(char cDigit);
|
||||
void strUnHex(std::string& strDst, const std::string& strSrc);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user