mirror of
https://github.com/GOSTSec/gostcoin
synced 2025-01-14 00:38:03 +00:00
update year, locales, fix tabulations
This commit is contained in:
parent
d1af2a2eb7
commit
e21f609ed3
2
COPYING
2
COPYING
@ -1,5 +1,5 @@
|
||||
Copyright (c) 2013-2015 The Anoncoin Developers
|
||||
Copyright (c) 2017 GOSTCoin Developers
|
||||
Copyright (c) 2017-2018 GOSTCoin Developers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -8,7 +8,7 @@ Why GOSTCoin?
|
||||
-------------
|
||||
|
||||
GOSTCoin uses Soviet and Russian government standard cryptography:
|
||||
GOST R 34.10-2012 for signature and GOST R 34.11-2012 for hash.
|
||||
[GOST R 34.10-2012](https://tools.ietf.org/html/rfc7091) for signature and [GOST R 34.11-2012](https://tools.ietf.org/html/rfc6986) for hash.
|
||||
[More info about crypto](https://github.com/GOSTSec/gostcoin/wiki/Cryptography).
|
||||
|
||||
GOSTCoin is using [Invisible Internet](https://github.com/PurpleI2P/i2pd) (I2P) as a secure network layer.
|
||||
|
74
src/Gost.cpp
74
src/Gost.cpp
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2016, The PurpleI2P Project
|
||||
* Copyright (c) 2013-2018, The PurpleI2P Project
|
||||
*
|
||||
* This file is part of Purple i2pd project and licensed under BSD3
|
||||
*
|
||||
@ -35,7 +35,7 @@ namespace crypto
|
||||
GOSTR3410Curve::~GOSTR3410Curve ()
|
||||
{
|
||||
EC_GROUP_free (m_Group);
|
||||
}
|
||||
}
|
||||
|
||||
EC_POINT * GOSTR3410Curve::MulP (const BIGNUM * n) const
|
||||
{
|
||||
@ -65,9 +65,9 @@ namespace crypto
|
||||
BIGNUM * q = BN_CTX_get (ctx);
|
||||
EC_GROUP_get_order(m_Group, q, ctx);
|
||||
BIGNUM * k = BN_CTX_get (ctx);
|
||||
BN_rand_range (k, q); // 0 < k < q
|
||||
BN_rand_range (k, q); // 0 < k < q
|
||||
EC_POINT * C = MulP (k); // C = k*P
|
||||
GetXY (C, r, nullptr); // r = Cx
|
||||
GetXY (C, r, nullptr); // r = Cx
|
||||
EC_POINT_free (C);
|
||||
BN_mod_mul (s, r, priv, q, ctx); // (r*priv)%q
|
||||
BIGNUM * tmp = BN_CTX_get (ctx);
|
||||
@ -84,26 +84,26 @@ namespace crypto
|
||||
BIGNUM * q = BN_CTX_get (ctx);
|
||||
EC_GROUP_get_order(m_Group, q, ctx);
|
||||
BIGNUM * h = BN_CTX_get (ctx);
|
||||
BN_mod (h, digest, q, ctx); // h = digest % q
|
||||
BN_mod_inverse (h, h, q, ctx); // 1/h mod q
|
||||
BN_mod (h, digest, q, ctx); // h = digest % q
|
||||
BN_mod_inverse (h, h, q, ctx); // 1/h mod q
|
||||
BIGNUM * z1 = BN_CTX_get (ctx);
|
||||
BN_mod_mul (z1, s, h, q, ctx); // z1 = s/h
|
||||
BIGNUM * z2 = BN_CTX_get (ctx);
|
||||
BN_sub (z2, q, r); // z2 = -r
|
||||
BN_mod_mul (z1, s, h, q, ctx); // z1 = s/h
|
||||
BIGNUM * z2 = BN_CTX_get (ctx);
|
||||
BN_sub (z2, q, r); // z2 = -r
|
||||
BN_mod_mul (z2, z2, h, q, ctx); // z2 = -r/h
|
||||
EC_POINT * C = EC_POINT_new (m_Group);
|
||||
EC_POINT_mul (m_Group, C, z1, pub, z2, ctx); // z1*P + z2*pub
|
||||
BIGNUM * x = BN_CTX_get (ctx);
|
||||
GetXY (C, x, nullptr); // Cx
|
||||
BN_mod (x, x, q, ctx); // Cx % q
|
||||
bool ret = !BN_cmp (x, r); // Cx = r ?
|
||||
BIGNUM * x = BN_CTX_get (ctx);
|
||||
GetXY (C, x, nullptr); // Cx
|
||||
BN_mod (x, x, q, ctx); // Cx % q
|
||||
bool ret = !BN_cmp (x, r); // Cx = r ?
|
||||
EC_POINT_free (C);
|
||||
BN_CTX_end (ctx);
|
||||
BN_CTX_free (ctx);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
EC_POINT * GOSTR3410Curve::RecoverPublicKey (const BIGNUM * digest, const BIGNUM * r, const BIGNUM * s, bool isNegativeY) const
|
||||
EC_POINT * GOSTR3410Curve::RecoverPublicKey (const BIGNUM * digest, const BIGNUM * r, const BIGNUM * s, bool isNegativeY) const
|
||||
{
|
||||
// s*P = r*Q + h*C
|
||||
BN_CTX * ctx = BN_CTX_new ();
|
||||
@ -111,36 +111,36 @@ namespace crypto
|
||||
EC_POINT * C = EC_POINT_new (m_Group); // C = k*P = (rx, ry)
|
||||
EC_POINT * Q = nullptr;
|
||||
if (EC_POINT_set_compressed_coordinates_GFp (m_Group, C, r, isNegativeY ? 1 : 0, ctx))
|
||||
{
|
||||
{
|
||||
EC_POINT * S = EC_POINT_new (m_Group); // S = s*P
|
||||
EC_POINT_mul (m_Group, S, s, nullptr, nullptr, ctx);
|
||||
BIGNUM * q = BN_CTX_get (ctx);
|
||||
EC_GROUP_get_order(m_Group, q, ctx);
|
||||
BIGNUM * h = BN_CTX_get (ctx);
|
||||
BN_mod (h, digest, q, ctx); // h = digest % q
|
||||
BN_sub (h, q, h); // h = -h
|
||||
EC_POINT * H = EC_POINT_new (m_Group);
|
||||
BN_sub (h, q, h); // h = -h
|
||||
EC_POINT * H = EC_POINT_new (m_Group);
|
||||
EC_POINT_mul (m_Group, H, nullptr, C, h, ctx); // -h*C
|
||||
EC_POINT_add (m_Group, C, S, H, ctx); // s*P - h*C
|
||||
EC_POINT_add (m_Group, C, S, H, ctx); // s*P - h*C
|
||||
EC_POINT_free (H);
|
||||
EC_POINT_free (S);
|
||||
BIGNUM * r1 = BN_CTX_get (ctx);
|
||||
BN_mod_inverse (r1, r, q, ctx);
|
||||
Q = EC_POINT_new (m_Group);
|
||||
EC_POINT_mul (m_Group, Q, nullptr, C, r1, ctx); // (s*P - h*C)/r
|
||||
}
|
||||
Q = EC_POINT_new (m_Group);
|
||||
EC_POINT_mul (m_Group, Q, nullptr, C, r1, ctx); // (s*P - h*C)/r
|
||||
}
|
||||
EC_POINT_free (C);
|
||||
BN_CTX_end (ctx);
|
||||
BN_CTX_free (ctx);
|
||||
return Q;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static GOSTR3410Curve * CreateGOSTR3410Curve (GOSTR3410ParamSet paramSet)
|
||||
{
|
||||
// a, b, p, q, x, y
|
||||
static const char * params[eGOSTR3410NumParamSets][6] =
|
||||
// a, b, p, q, x, y
|
||||
static const char * params[eGOSTR3410NumParamSets][6] =
|
||||
{
|
||||
{
|
||||
{
|
||||
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94",
|
||||
"A6",
|
||||
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97",
|
||||
@ -154,10 +154,10 @@ namespace crypto
|
||||
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7",
|
||||
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27E69532F48D89116FF22B8D4E0560609B4B38ABFAD2B85DCACDB1411F10B275",
|
||||
"3",
|
||||
"7503CFE87A836AE3A61B8816E25450E6CE5E1C93ACF1ABC1778064FDCBEFA921DF1626BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4"
|
||||
"7503CFE87A836AE3A61B8816E25450E6CE5E1C93ACF1ABC1778064FDCBEFA921DF1626BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4"
|
||||
} // tc26-2012-paramSetA-512
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
BIGNUM * a = nullptr, * b = nullptr, * p = nullptr, * q =nullptr, * x = nullptr, * y = nullptr;
|
||||
BN_hex2bn(&a, params[paramSet][0]);
|
||||
BN_hex2bn(&b, params[paramSet][1]);
|
||||
@ -168,20 +168,20 @@ namespace crypto
|
||||
auto curve = new GOSTR3410Curve (a, b, p, q, x, y);
|
||||
BN_free (a); BN_free (b); BN_free (p); BN_free (q); BN_free (x); BN_free (y);
|
||||
return curve;
|
||||
}
|
||||
}
|
||||
|
||||
static std::array<std::unique_ptr<GOSTR3410Curve>, eGOSTR3410NumParamSets> g_GOSTR3410Curves;
|
||||
std::unique_ptr<GOSTR3410Curve>& GetGOSTR3410Curve (GOSTR3410ParamSet paramSet)
|
||||
{
|
||||
if (!g_GOSTR3410Curves[paramSet])
|
||||
{
|
||||
auto c = CreateGOSTR3410Curve (paramSet);
|
||||
auto c = CreateGOSTR3410Curve (paramSet);
|
||||
if (!g_GOSTR3410Curves[paramSet]) // make sure it was not created already
|
||||
g_GOSTR3410Curves[paramSet].reset (c);
|
||||
else
|
||||
delete c;
|
||||
}
|
||||
return g_GOSTR3410Curves[paramSet];
|
||||
}
|
||||
return g_GOSTR3410Curves[paramSet];
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -193,7 +193,7 @@ namespace crypto
|
||||
* ==========================(LICENSE BEGIN)============================
|
||||
*
|
||||
* Copyright (c) 2007-2010 Projet RNRT SAPHIR
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
@ -201,10 +201,10 @@ namespace crypto
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
|
22
src/Gost.h
22
src/Gost.h
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2017, The PurpleI2P Project
|
||||
* Copyright (c) 2013-2018, The PurpleI2P Project
|
||||
*
|
||||
* This file is part of Purple i2pd project and licensed under BSD3
|
||||
*
|
||||
@ -18,25 +18,25 @@ namespace crypto
|
||||
{
|
||||
|
||||
// ГОСТ Р 34.10
|
||||
|
||||
|
||||
enum GOSTR3410ParamSet
|
||||
{
|
||||
eGOSTR3410CryptoProA = 0, // 1.2.643.2.2.35.1
|
||||
eGOSTR3410CryptoProA = 0, // 1.2.643.2.2.35.1
|
||||
// XchA = A, XchB = C
|
||||
//eGOSTR3410CryptoProXchA, // 1.2.643.2.2.36.0
|
||||
//eGOSTR3410CryptoProXchB, // 1.2.643.2.2.36.1
|
||||
eGOSTR3410TC26A512, // 1.2.643.7.1.2.1.2.1
|
||||
//eGOSTR3410CryptoProXchB, // 1.2.643.2.2.36.1
|
||||
eGOSTR3410TC26A512, // 1.2.643.7.1.2.1.2.1
|
||||
eGOSTR3410NumParamSets
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
class GOSTR3410Curve
|
||||
{
|
||||
public:
|
||||
|
||||
GOSTR3410Curve (BIGNUM * a, BIGNUM * b, BIGNUM * p, BIGNUM * q, BIGNUM * x, BIGNUM * y);
|
||||
~GOSTR3410Curve ();
|
||||
~GOSTR3410Curve ();
|
||||
|
||||
size_t GetKeyLen () const { return m_KeyLen; };
|
||||
size_t GetKeyLen () const { return m_KeyLen; };
|
||||
const EC_GROUP * GetGroup () const { return m_Group; };
|
||||
EC_POINT * MulP (const BIGNUM * n) const;
|
||||
bool GetXY (const EC_POINT * p, BIGNUM * x, BIGNUM * y) const;
|
||||
@ -44,7 +44,7 @@ namespace crypto
|
||||
void Sign (const BIGNUM * priv, const BIGNUM * digest, BIGNUM * r, BIGNUM * s);
|
||||
bool Verify (const EC_POINT * pub, const BIGNUM * digest, const BIGNUM * r, const BIGNUM * s);
|
||||
EC_POINT * RecoverPublicKey (const BIGNUM * digest, const BIGNUM * r, const BIGNUM * s, bool isNegativeY = false) const;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
EC_GROUP * m_Group;
|
||||
@ -55,7 +55,7 @@ namespace crypto
|
||||
|
||||
// Big Endian
|
||||
void GOSTR3411_2012_256 (const uint8_t * buf, size_t len, uint8_t * digest);
|
||||
void GOSTR3411_2012_512 (const uint8_t * buf, size_t len, uint8_t * digest);
|
||||
void GOSTR3411_2012_512 (const uint8_t * buf, size_t len, uint8_t * digest);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_BIGNUM_H
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef _BITCOIN_COMPAT_H
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Copyright (c) 2009-2012 The Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
// Copyright (c) 2017-2018 The Gostcoin developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include "hash.h"
|
||||
|
||||
uint256 Hash (const uint256& left, const uint256& right)
|
||||
|
102
src/hash.h
102
src/hash.h
@ -1,6 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017 The Gostcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_HASH_H
|
||||
@ -20,80 +20,80 @@ template<typename T1>
|
||||
inline uint256 Hash(const T1 pbegin, const T1 pend)
|
||||
{
|
||||
// GOST 34.11-256 (GOST 34.11-512 (...))
|
||||
static unsigned char pblank[1];
|
||||
uint8_t hash1[64];
|
||||
i2p::crypto::GOSTR3411_2012_512 ((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), hash1);
|
||||
static unsigned char pblank[1];
|
||||
uint8_t hash1[64];
|
||||
i2p::crypto::GOSTR3411_2012_512 ((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), hash1);
|
||||
uint32_t digest[8];
|
||||
i2p::crypto::GOSTR3411_2012_256 (hash1, 64, (uint8_t *)digest);
|
||||
i2p::crypto::GOSTR3411_2012_256 (hash1, 64, (uint8_t *)digest);
|
||||
// to little endian
|
||||
uint256 hash2;
|
||||
uint256 hash2;
|
||||
for (int i = 0; i < 8; i++)
|
||||
hash2.pn[i] = ByteReverse (digest[7-i]);
|
||||
return hash2;
|
||||
return hash2;
|
||||
}
|
||||
|
||||
class CHashWriter
|
||||
{
|
||||
private:
|
||||
std::stringstream ctx;
|
||||
std::stringstream ctx;
|
||||
|
||||
public:
|
||||
int nType;
|
||||
int nVersion;
|
||||
int nType;
|
||||
int nVersion;
|
||||
|
||||
void Init() {
|
||||
ctx.str("");
|
||||
}
|
||||
void Init() {
|
||||
ctx.str("");
|
||||
}
|
||||
|
||||
CHashWriter(int nTypeIn, int nVersionIn) : nType(nTypeIn), nVersion(nVersionIn) {
|
||||
Init();
|
||||
}
|
||||
CHashWriter(int nTypeIn, int nVersionIn) : nType(nTypeIn), nVersion(nVersionIn) {
|
||||
Init();
|
||||
}
|
||||
|
||||
CHashWriter& write(const char *pch, size_t size) {
|
||||
CHashWriter& write(const char *pch, size_t size) {
|
||||
ctx.write (pch, size);
|
||||
return (*this);
|
||||
}
|
||||
return (*this);
|
||||
}
|
||||
|
||||
// invalidates the object
|
||||
uint256 GetHash() { // shouldn't be called after hard fork 1
|
||||
// invalidates the object
|
||||
uint256 GetHash() { // shouldn't be called after hard fork 1
|
||||
uint8_t hash1[64];
|
||||
i2p::crypto::GOSTR3411_2012_512 ((uint8_t *)ctx.str ().c_str (), ctx.str ().length (), hash1);
|
||||
uint256 hash2;
|
||||
i2p::crypto::GOSTR3411_2012_256 (hash1, 64, (unsigned char*)&hash2);
|
||||
return hash2;
|
||||
}
|
||||
i2p::crypto::GOSTR3411_2012_512 ((uint8_t *)ctx.str ().c_str (), ctx.str ().length (), hash1);
|
||||
uint256 hash2;
|
||||
i2p::crypto::GOSTR3411_2012_256 (hash1, 64, (unsigned char*)&hash2);
|
||||
return hash2;
|
||||
}
|
||||
|
||||
uint256 GetHashHF1()
|
||||
{
|
||||
const uint8_t * buf = (const uint8_t *)ctx.str ().c_str ();
|
||||
return Hash (buf, buf + ctx.str ().length ());
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
CHashWriter& operator<<(const T& obj) {
|
||||
// Serialize to this stream
|
||||
::Serialize(*this, obj, nType, nVersion);
|
||||
return (*this);
|
||||
}
|
||||
template<typename T>
|
||||
CHashWriter& operator<<(const T& obj) {
|
||||
// Serialize to this stream
|
||||
::Serialize(*this, obj, nType, nVersion);
|
||||
return (*this);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T1, typename T2>
|
||||
inline uint256 Hash(const T1 p1begin, const T1 p1end,
|
||||
const T2 p2begin, const T2 p2end) // shouldn't be called after hard fork 1
|
||||
const T2 p2begin, const T2 p2end) // shouldn't be called after hard fork 1
|
||||
{
|
||||
static unsigned char pblank[1];
|
||||
size_t s1 = (p1end - p1begin) * sizeof(p1begin[0]),
|
||||
s2 = (p2end - p2begin) * sizeof(p2begin[0]);
|
||||
s2 = (p2end - p2begin) * sizeof(p2begin[0]);
|
||||
|
||||
uint8_t * buf = new uint8_t[s1+s2];
|
||||
memcpy (buf, (unsigned char*)&p1begin[0], s1);
|
||||
memcpy (buf + s1, (unsigned char*)&p1begin[0], s2);
|
||||
uint8_t hash1[64];
|
||||
i2p::crypto::GOSTR3411_2012_512 ((s1 + s2) ? buf : pblank, s1 + s2, hash1);
|
||||
delete[] buf;
|
||||
i2p::crypto::GOSTR3411_2012_512 ((s1 + s2) ? buf : pblank, s1 + s2, hash1);
|
||||
delete[] buf;
|
||||
uint256 hash2;
|
||||
i2p::crypto::GOSTR3411_2012_256 (hash1, 64, (unsigned char*)&hash2);
|
||||
return hash2;
|
||||
return hash2;
|
||||
}
|
||||
|
||||
uint256 Hash (const uint256& left, const uint256& right); // for Merkle tree
|
||||
@ -102,33 +102,33 @@ template<typename T>
|
||||
uint256 SerializeHash(const T& obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION)
|
||||
// shouldn't be called after hard fork 1
|
||||
{
|
||||
CHashWriter ss(nType, nVersion);
|
||||
ss << obj;
|
||||
return ss.GetHash();
|
||||
CHashWriter ss(nType, nVersion);
|
||||
ss << obj;
|
||||
return ss.GetHash();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
uint256 SerializeHashHF1(const T& obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION)
|
||||
{
|
||||
CHashWriter ss(nType, nVersion);
|
||||
ss << obj;
|
||||
return ss.GetHashHF1();
|
||||
CHashWriter ss(nType, nVersion);
|
||||
ss << obj;
|
||||
return ss.GetHashHF1();
|
||||
}
|
||||
|
||||
template<typename T1>
|
||||
inline uint160 Hash160(const T1 pbegin, const T1 pend)
|
||||
{
|
||||
static unsigned char pblank[1];
|
||||
uint8_t hash1[64];
|
||||
i2p::crypto::GOSTR3411_2012_512((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), hash1);
|
||||
uint160 hash2;
|
||||
RIPEMD160(hash1, 64, (unsigned char*)&hash2);
|
||||
return hash2;
|
||||
static unsigned char pblank[1];
|
||||
uint8_t hash1[64];
|
||||
i2p::crypto::GOSTR3411_2012_512((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), hash1);
|
||||
uint160 hash2;
|
||||
RIPEMD160(hash1, 64, (unsigned char*)&hash2);
|
||||
return hash2;
|
||||
}
|
||||
|
||||
inline uint160 Hash160(const std::vector<unsigned char>& vch)
|
||||
{
|
||||
return Hash160(vch.begin(), vch.end());
|
||||
return Hash160(vch.begin(), vch.end());
|
||||
}
|
||||
|
||||
unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector<unsigned char>& vDataToHash);
|
||||
|
152
src/i2p.cpp
152
src/i2p.cpp
@ -1,5 +1,5 @@
|
||||
// Copyright (c) 2012-2013 giv
|
||||
// Copyright (c) 2017 orignal
|
||||
// Copyright (c) 2017-2018 orignal
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -15,22 +15,22 @@ namespace SAM
|
||||
class StreamSessionAdapter::SessionHolder
|
||||
{
|
||||
public:
|
||||
explicit SessionHolder(std::shared_ptr<SAM::StreamSession> session);
|
||||
explicit SessionHolder(std::shared_ptr<SAM::StreamSession> session);
|
||||
~SessionHolder();
|
||||
|
||||
const SAM::StreamSession& getSession() const;
|
||||
SAM::StreamSession& getSession();
|
||||
const SAM::StreamSession& getSession() const;
|
||||
SAM::StreamSession& getSession();
|
||||
private:
|
||||
void heal() const;
|
||||
void reborn() const;
|
||||
void heal() const;
|
||||
void reborn() const;
|
||||
|
||||
mutable std::shared_ptr<SAM::StreamSession> session_;
|
||||
typedef boost::shared_mutex mutex_type;
|
||||
mutable mutex_type mtx_;
|
||||
mutable std::shared_ptr<SAM::StreamSession> session_;
|
||||
typedef boost::shared_mutex mutex_type;
|
||||
mutable mutex_type mtx_;
|
||||
};
|
||||
|
||||
StreamSessionAdapter::SessionHolder::SessionHolder(std::shared_ptr<SAM::StreamSession> session)
|
||||
: session_(session)
|
||||
: session_(session)
|
||||
{
|
||||
}
|
||||
|
||||
@ -40,38 +40,38 @@ StreamSessionAdapter::SessionHolder::~SessionHolder()
|
||||
|
||||
const SAM::StreamSession& StreamSessionAdapter::SessionHolder::getSession() const
|
||||
{
|
||||
boost::upgrade_lock<mutex_type> lock(mtx_);
|
||||
if (session_->isSick())
|
||||
{
|
||||
boost::upgrade_to_unique_lock<mutex_type> ulock(lock);
|
||||
heal();
|
||||
}
|
||||
return *session_;
|
||||
boost::upgrade_lock<mutex_type> lock(mtx_);
|
||||
if (session_->isSick())
|
||||
{
|
||||
boost::upgrade_to_unique_lock<mutex_type> ulock(lock);
|
||||
heal();
|
||||
}
|
||||
return *session_;
|
||||
}
|
||||
|
||||
SAM::StreamSession& StreamSessionAdapter::SessionHolder::getSession()
|
||||
{
|
||||
boost::upgrade_lock<mutex_type> lock(mtx_);
|
||||
if (session_->isSick())
|
||||
{
|
||||
boost::upgrade_to_unique_lock<mutex_type> ulock(lock);
|
||||
heal();
|
||||
}
|
||||
return *session_;
|
||||
boost::upgrade_lock<mutex_type> lock(mtx_);
|
||||
if (session_->isSick())
|
||||
{
|
||||
boost::upgrade_to_unique_lock<mutex_type> ulock(lock);
|
||||
heal();
|
||||
}
|
||||
return *session_;
|
||||
}
|
||||
|
||||
void StreamSessionAdapter::SessionHolder::heal() const
|
||||
{
|
||||
reborn(); // if we don't know how to heal it just reborn it
|
||||
reborn(); // if we don't know how to heal it just reborn it
|
||||
}
|
||||
|
||||
void StreamSessionAdapter::SessionHolder::reborn() const
|
||||
{
|
||||
if (!session_->isSick())
|
||||
return;
|
||||
std::shared_ptr<SAM::StreamSession> newSession(new SAM::StreamSession(*session_));
|
||||
if (!newSession->isSick() && session_->isSick())
|
||||
session_ = newSession;
|
||||
if (!session_->isSick())
|
||||
return;
|
||||
std::shared_ptr<SAM::StreamSession> newSession(new SAM::StreamSession(*session_));
|
||||
if (!newSession->isSick() && session_->isSick())
|
||||
session_ = newSession;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -87,13 +87,13 @@ StreamSessionAdapter::~StreamSessionAdapter()
|
||||
}
|
||||
|
||||
bool StreamSessionAdapter::StartSession (
|
||||
const std::string& nickname,
|
||||
const std::string& SAMHost /*= SAM_DEFAULT_ADDRESS*/,
|
||||
uint16_t SAMPort /*= SAM_DEFAULT_PORT*/,
|
||||
const std::string& myDestination /*= SAM_GENERATE_MY_DESTINATION*/,
|
||||
const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/,
|
||||
const std::string& minVer /*= SAM_DEFAULT_MIN_VER*/,
|
||||
const std::string& maxVer /*= SAM_DEFAULT_MAX_VER*/)
|
||||
const std::string& nickname,
|
||||
const std::string& SAMHost /*= SAM_DEFAULT_ADDRESS*/,
|
||||
uint16_t SAMPort /*= SAM_DEFAULT_PORT*/,
|
||||
const std::string& myDestination /*= SAM_GENERATE_MY_DESTINATION*/,
|
||||
const std::string& i2pOptions /*= SAM_DEFAULT_I2P_OPTIONS*/,
|
||||
const std::string& minVer /*= SAM_DEFAULT_MIN_VER*/,
|
||||
const std::string& maxVer /*= SAM_DEFAULT_MAX_VER*/)
|
||||
{
|
||||
std::cout << "Creating SAM session..." << std::endl;
|
||||
auto s = std::make_shared<SAM::StreamSession>(nickname, SAMHost, SAMPort, myDestination, i2pOptions, minVer, maxVer);
|
||||
@ -116,11 +116,11 @@ void StreamSessionAdapter::StopSession ()
|
||||
bool StreamSessionAdapter::Start ()
|
||||
{
|
||||
return StartSession(
|
||||
GetArg(I2P_SESSION_NAME_PARAM, I2P_SESSION_NAME_DEFAULT),
|
||||
GetArg(I2P_SAM_HOST_PARAM, I2P_SAM_HOST_DEFAULT),
|
||||
(uint16_t)GetArg(I2P_SAM_PORT_PARAM, I2P_SAM_PORT_DEFAULT),
|
||||
GetArg(I2P_SAM_MY_DESTINATION_PARAM, I2P_SAM_MY_DESTINATION_DEFAULT),
|
||||
GetArg(I2P_SAM_I2P_OPTIONS_PARAM, SAM_DEFAULT_I2P_OPTIONS));
|
||||
GetArg(I2P_SESSION_NAME_PARAM, I2P_SESSION_NAME_DEFAULT),
|
||||
GetArg(I2P_SAM_HOST_PARAM, I2P_SAM_HOST_DEFAULT),
|
||||
(uint16_t)GetArg(I2P_SAM_PORT_PARAM, I2P_SAM_PORT_DEFAULT),
|
||||
GetArg(I2P_SAM_MY_DESTINATION_PARAM, I2P_SAM_MY_DESTINATION_DEFAULT),
|
||||
GetArg(I2P_SAM_I2P_OPTIONS_PARAM, SAM_DEFAULT_I2P_OPTIONS));
|
||||
}
|
||||
|
||||
void StreamSessionAdapter::Stop ()
|
||||
@ -130,88 +130,88 @@ void StreamSessionAdapter::Stop ()
|
||||
|
||||
SAM::SOCKET StreamSessionAdapter::accept(bool silent)
|
||||
{
|
||||
SAM::RequestResult<std::shared_ptr<SAM::Socket> > result = sessionHolder_->getSession().accept(silent);
|
||||
// call Socket::release
|
||||
return result.isOk ? result.value->release() : SAM_INVALID_SOCKET;
|
||||
SAM::RequestResult<std::shared_ptr<SAM::Socket> > result = sessionHolder_->getSession().accept(silent);
|
||||
// call Socket::release
|
||||
return result.isOk ? result.value->release() : SAM_INVALID_SOCKET;
|
||||
}
|
||||
|
||||
SAM::SOCKET StreamSessionAdapter::connect(const std::string& destination, bool silent)
|
||||
{
|
||||
SAM::RequestResult<std::shared_ptr<SAM::Socket> > result = sessionHolder_->getSession().connect(destination, silent);
|
||||
// call Socket::release
|
||||
return result.isOk ? result.value->release() : SAM_INVALID_SOCKET;
|
||||
SAM::RequestResult<std::shared_ptr<SAM::Socket> > result = sessionHolder_->getSession().connect(destination, silent);
|
||||
// call Socket::release
|
||||
return result.isOk ? result.value->release() : SAM_INVALID_SOCKET;
|
||||
}
|
||||
|
||||
bool StreamSessionAdapter::forward(const std::string& host, uint16_t port, bool silent)
|
||||
{
|
||||
return sessionHolder_->getSession().forward(host, port, silent).isOk;
|
||||
return sessionHolder_->getSession().forward(host, port, silent).isOk;
|
||||
}
|
||||
|
||||
std::string StreamSessionAdapter::namingLookup(const std::string& name) const
|
||||
{
|
||||
SAM::RequestResult<const std::string> result = sessionHolder_->getSession().namingLookup(name);
|
||||
return result.isOk ? result.value : std::string();
|
||||
SAM::RequestResult<const std::string> result = sessionHolder_->getSession().namingLookup(name);
|
||||
return result.isOk ? result.value : std::string();
|
||||
}
|
||||
|
||||
SAM::FullDestination StreamSessionAdapter::destGenerate() const
|
||||
{
|
||||
SAM::RequestResult<const SAM::FullDestination> result = sessionHolder_->getSession().destGenerate();
|
||||
return result.isOk ? result.value : SAM::FullDestination();
|
||||
SAM::RequestResult<const SAM::FullDestination> result = sessionHolder_->getSession().destGenerate();
|
||||
return result.isOk ? result.value : SAM::FullDestination();
|
||||
}
|
||||
|
||||
void StreamSessionAdapter::stopForwarding(const std::string& host, uint16_t port)
|
||||
{
|
||||
sessionHolder_->getSession().stopForwarding(host, port);
|
||||
sessionHolder_->getSession().stopForwarding(host, port);
|
||||
}
|
||||
|
||||
void StreamSessionAdapter::stopForwardingAll()
|
||||
{
|
||||
sessionHolder_->getSession().stopForwardingAll();
|
||||
sessionHolder_->getSession().stopForwardingAll();
|
||||
}
|
||||
|
||||
const SAM::FullDestination& StreamSessionAdapter::getMyDestination() const
|
||||
{
|
||||
return sessionHolder_->getSession().getMyDestination();
|
||||
return sessionHolder_->getSession().getMyDestination();
|
||||
}
|
||||
|
||||
const sockaddr_in& StreamSessionAdapter::getSAMAddress() const
|
||||
{
|
||||
return sessionHolder_->getSession().getSAMAddress();
|
||||
return sessionHolder_->getSession().getSAMAddress();
|
||||
}
|
||||
|
||||
const std::string& StreamSessionAdapter::getSAMHost() const
|
||||
{
|
||||
return sessionHolder_->getSession().getSAMHost();
|
||||
return sessionHolder_->getSession().getSAMHost();
|
||||
}
|
||||
|
||||
uint16_t StreamSessionAdapter::getSAMPort() const
|
||||
{
|
||||
return sessionHolder_->getSession().getSAMPort();
|
||||
return sessionHolder_->getSession().getSAMPort();
|
||||
}
|
||||
|
||||
const std::string& StreamSessionAdapter::getNickname() const
|
||||
{
|
||||
return sessionHolder_->getSession().getNickname();
|
||||
return sessionHolder_->getSession().getNickname();
|
||||
}
|
||||
|
||||
const std::string& StreamSessionAdapter::getSAMMinVer() const
|
||||
{
|
||||
return sessionHolder_->getSession().getSAMMinVer();
|
||||
return sessionHolder_->getSession().getSAMMinVer();
|
||||
}
|
||||
|
||||
const std::string& StreamSessionAdapter::getSAMMaxVer() const
|
||||
{
|
||||
return sessionHolder_->getSession().getSAMMaxVer();
|
||||
return sessionHolder_->getSession().getSAMMaxVer();
|
||||
}
|
||||
|
||||
const std::string& StreamSessionAdapter::getSAMVersion() const
|
||||
{
|
||||
return sessionHolder_->getSession().getSAMVersion();
|
||||
return sessionHolder_->getSession().getSAMVersion();
|
||||
}
|
||||
|
||||
const std::string& StreamSessionAdapter::getOptions() const
|
||||
{
|
||||
return sessionHolder_->getSession().getOptions();
|
||||
return sessionHolder_->getSession().getOptions();
|
||||
}
|
||||
|
||||
} // namespace SAM
|
||||
@ -228,16 +228,16 @@ I2PSession::~I2PSession()
|
||||
/*static*/
|
||||
std::string I2PSession::GenerateB32AddressFromDestination(const std::string& destination)
|
||||
{
|
||||
std::string canonicalDest = destination;
|
||||
for (size_t pos = canonicalDest.find_first_of('-'); pos != std::string::npos; pos = canonicalDest.find_first_of('-', pos))
|
||||
canonicalDest[pos] = '+';
|
||||
for (size_t pos = canonicalDest.find_first_of('~'); pos != std::string::npos; pos = canonicalDest.find_first_of('~', pos))
|
||||
canonicalDest[pos] = '/';
|
||||
std::string rawHash = DecodeBase64(canonicalDest);
|
||||
uint256 hash;
|
||||
SHA256((const unsigned char*)rawHash.c_str(), rawHash.size(), (unsigned char*)&hash);
|
||||
std::string result = EncodeBase32(hash.begin(), hash.end() - hash.begin()) + ".b32.i2p";
|
||||
for (size_t pos = result.find_first_of('='); pos != std::string::npos; pos = result.find_first_of('=', pos-1))
|
||||
result.erase(pos, 1);
|
||||
return result;
|
||||
std::string canonicalDest = destination;
|
||||
for (size_t pos = canonicalDest.find_first_of('-'); pos != std::string::npos; pos = canonicalDest.find_first_of('-', pos))
|
||||
canonicalDest[pos] = '+';
|
||||
for (size_t pos = canonicalDest.find_first_of('~'); pos != std::string::npos; pos = canonicalDest.find_first_of('~', pos))
|
||||
canonicalDest[pos] = '/';
|
||||
std::string rawHash = DecodeBase64(canonicalDest);
|
||||
uint256 hash;
|
||||
SHA256((const unsigned char*)rawHash.c_str(), rawHash.size(), (unsigned char*)&hash);
|
||||
std::string result = EncodeBase32(hash.begin(), hash.end() - hash.begin()) + ".b32.i2p";
|
||||
for (size_t pos = result.find_first_of('='); pos != std::string::npos; pos = result.find_first_of('=', pos-1))
|
||||
result.erase(pos, 1);
|
||||
return result;
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Copyright (c) 2012-2013 giv
|
||||
// Copyright (c) 2017-2018 orignal
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Copyright (c) 2012-2013 giv
|
||||
// Copyright (c) 2017 orignal
|
||||
// Copyright (c) 2017-2018 orignal
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Copyright (c) 2012-2013 giv
|
||||
// Copyright (c) 2017 orignal
|
||||
// Copyright (c) 2017-2018 orignal
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
// I2P-patch
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_INIT_H
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2013 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_KEY_H
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_MAIN_H
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_NET_H
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_NETBASE_H
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -16,7 +16,7 @@ AboutDialog::AboutDialog(QWidget *parent) :
|
||||
tr("Copyright") + QString(" © 2011-%1 ").arg(COPYRIGHT_YEAR) + tr("The Litecoin developers") + QString("<br>") +
|
||||
tr("Copyright") + QString(" © 2013-%1 ").arg(COPYRIGHT_YEAR) + tr("The Anoncoin developers") + QString("<br>") +
|
||||
tr("Copyright") + QString(" © 2015-%1 ").arg(COPYRIGHT_YEAR) + tr("The i2pd developers") + QString("<br>") +
|
||||
tr("Copyright") + QString(" © %1 ").arg(COPYRIGHT_YEAR) + tr("The Gostcoin developers")
|
||||
tr("Copyright") + QString(" © 2017-%1 ").arg(COPYRIGHT_YEAR) + tr("The Gostcoin developers")
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,12 +1,14 @@
|
||||
/*
|
||||
* Qt4 bitcoin GUI.
|
||||
*
|
||||
* W.J. van der Laan 2011-2012
|
||||
* The Bitcoin Developers 2011-2012
|
||||
*/
|
||||
// Qt bitcoin GUI.
|
||||
//
|
||||
// Copyright (c) 2011-2012 W.J. van der Laan
|
||||
// Copyright (c) 2011-2012 The Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
//
|
||||
// I2P-patch
|
||||
// Copyright (c) 2012-2013 giv
|
||||
//
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
|
@ -1,6 +1,10 @@
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
//
|
||||
// I2P-patch
|
||||
// Copyright (c) 2012-2013 giv
|
||||
|
||||
#include "clientmodel.h"
|
||||
|
||||
#include "guiconstants.h"
|
||||
|
@ -1,3 +1,6 @@
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
//
|
||||
// I2P-patch
|
||||
// Copyright (c) 2012-2013 giv
|
||||
|
@ -48,7 +48,7 @@
|
||||
<item>
|
||||
<widget class="QValidatedLineEdit" name="addressIn_SM">
|
||||
<property name="toolTip">
|
||||
<string>The address to sign the message with (e.g. Ler4HNAEfwYhBmGXcFP2Po1NpRUEiK8km2)</string>
|
||||
<string>The address to sign the message with (e.g. GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG)</string>
|
||||
</property>
|
||||
<property name="maxLength">
|
||||
<number>34</number>
|
||||
@ -261,7 +261,7 @@
|
||||
<item>
|
||||
<widget class="QValidatedLineEdit" name="addressIn_VM">
|
||||
<property name="toolTip">
|
||||
<string>The address the message was signed with (e.g. Ler4HNAEfwYhBmGXcFP2Po1NpRUEiK8km2)</string>
|
||||
<string>The address the message was signed with (e.g. GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG)</string>
|
||||
</property>
|
||||
<property name="maxLength">
|
||||
<number>34</number>
|
||||
|
@ -1,8 +1,10 @@
|
||||
/*
|
||||
* W.J. van der Laan 2011-2012
|
||||
*/
|
||||
// Copyright 2013 The Anoncoin Developers
|
||||
// Copyright 2017 The Gostcoin Developers
|
||||
// Copyright (c) 2013 The Anoncoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
//
|
||||
// I2P-patch
|
||||
// Copyright (c) 2012-2013 giv
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="ru" version="2.0">
|
||||
|
||||
<!-- About Dialog -->
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1" language="ru" sourcelanguage="en">
|
||||
<context>
|
||||
<name>AboutDialog</name>
|
||||
<message>
|
||||
@ -17,46 +17,48 @@
|
||||
<location line="+57"/>
|
||||
<source>
|
||||
<p>This is experimental software.</p>
|
||||
<p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>.</p>
|
||||
<p>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/">http://www.openssl.org/</a>) and cryptographic software written by Eric Young (eay@cryptsoft.com).</p></source>
|
||||
<p>Distributed under the MIT/X11 software license, see the accompanying file COPYING or <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>.</p>
|
||||
<p>This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (<a href="http://www.openssl.org/">http://www.openssl.org/</a>) and cryptographic software written by Eric Young (eay@cryptsoft.com).</p></source>
|
||||
<translation>
|
||||
<p>Это экспериментальная программа.</p>
|
||||
<p>Распространяется на правах лицензии MIT/X11, см. файл COPYING или <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>.</p>
|
||||
<p>Этот продукт включает ПО, разработанное OpenSSL Project для использования в OpenSSL Toolkit (<a href="http://www.openssl.org/">http://www.openssl.org/</a>) и криптографическое ПО, написанное Eric Young (eay@cryptsoft.com).</p></translation>
|
||||
<p>Распространяется на правах лицензии MIT/X11, см. файл COPYING или <a href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>.</p>
|
||||
<p>Этот продукт включает ПО, разработанное OpenSSL Project для использования в OpenSSL Toolkit (<a href="http://www.openssl.org/">http://www.openssl.org/</a>) и криптографическое ПО, написанное Eric Young (eay@cryptsoft.com).</p></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../aboutdialog.cpp" line="+14"/>
|
||||
<location filename="../aboutdialog.cpp" line="+15"/>
|
||||
<location line="+1"/>
|
||||
<location line="+1"/>
|
||||
<location line="+1"/>
|
||||
<location line="+1"/>
|
||||
<source>Copyright</source>
|
||||
<translation>Все права защищены</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<location line="-4"/>
|
||||
<source>The Bitcoin developers</source>
|
||||
<translation>Разработчики Bitcoin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<location line="+1"/>
|
||||
<source>The Litecoin developers</source>
|
||||
<translation>Разработчики Litecoin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<location line="+1"/>
|
||||
<source>The Anoncoin developers</source>
|
||||
<translation>Разработчики Anoncoin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<location line="+1"/>
|
||||
<source>The i2pd developers</source>
|
||||
<translation>Разработчики I2Pd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<location line="+1"/>
|
||||
<source>The Gostcoin developers</source>
|
||||
<translation>Разработчики Gostcoin</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Address Book -->
|
||||
<context>
|
||||
<name>AddressBookPage</name>
|
||||
<message>
|
||||
@ -198,8 +200,6 @@
|
||||
<translation>[нет метки]</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Passphrase dialog -->
|
||||
<context>
|
||||
<name>AskPassphraseDialog</name>
|
||||
<message>
|
||||
@ -279,11 +279,12 @@
|
||||
</message>
|
||||
<message>
|
||||
<location line="+9"/>
|
||||
<location line="+58"/>
|
||||
<source>Wallet encrypted</source>
|
||||
<translation>Бумажник зашифрован</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<location line="-56"/>
|
||||
<source>Gostcoin will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gostcoins from being stolen by malware infecting your computer.</source>
|
||||
<translation>Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего бумажника не может полностью защитить ваши ГОСТкойны от кражи инфицированием вашего компьютера вредоносным ПО.</translation>
|
||||
</message>
|
||||
@ -293,7 +294,7 @@
|
||||
<translation>ВАЖНО: все предыдущие резервные копии вашего кошелька должны быть заменены новым зашифрованным файлом. В целях безопасности предыдущие резервные копии нешифрованного кошелька станут бесполезны, как только вы начнёте использовать новый шифрованный кошелёк.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+9"/>
|
||||
<location line="+7"/>
|
||||
<location line="+42"/>
|
||||
<location line="+6"/>
|
||||
@ -340,12 +341,10 @@
|
||||
<translation>Внимание: Caps Lock включен!</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- GUI -->
|
||||
<context>
|
||||
<name>BitcoinGUI</name>
|
||||
<message>
|
||||
<location filename="../bitcoingui.cpp" line="+77"/>
|
||||
<location filename="../bitcoingui.cpp" line="+79"/>
|
||||
<location line="+602"/>
|
||||
<source>Gostcoin</source>
|
||||
<translation>ГОСТкойн</translation>
|
||||
@ -426,7 +425,7 @@
|
||||
<translation>Показать информацию о ГОСТкойн'е</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<location line="+2"/>
|
||||
<source>About &Qt</source>
|
||||
<translation>О &Qt</translation>
|
||||
</message>
|
||||
@ -552,17 +551,17 @@
|
||||
<translation>[тестовая сеть]</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+22"/>
|
||||
<location line="+17"/>
|
||||
<source>Wallet is using I2P-network only</source>
|
||||
<translation>Кошелек работает только в I2P</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+7"/>
|
||||
<source>Wallet is using mixed or non-I2P (clear) network</source>
|
||||
<translation>Кошелек работает смешанном режиме, или без I2P</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<location line="+8"/>
|
||||
<source>Wallet is running with a random generated I2P-address</source>
|
||||
<translation>Кошелек работает со случайно сгенерированным I2P адресом</translation>
|
||||
</message>
|
||||
@ -579,12 +578,20 @@
|
||||
<message numerus="yes">
|
||||
<location line="+141"/>
|
||||
<source>%n active connection(s) to Gostcoin network</source>
|
||||
<translation><numerusform>%n активное соединение с сетью</numerusform><numerusform>%n активных соединения с сетью</numerusform><numerusform>%n активных соединений с сетью</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>%n активное соединение с сетью</numerusform>
|
||||
<numerusform>%n активных соединения с сетью</numerusform>
|
||||
<numerusform>%n активных соединений с сетью</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+15"/>
|
||||
<source>%n active connection(s) to I2P-Gostcoin network</source>
|
||||
<translation><numerusform>%n активное соединение с I2P сетью</numerusform><numerusform>%n активных соединения с I2P сетью</numerusform><numerusform>%n активных соединений с I2P сетью</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>%n активное соединение с I2P сетью</numerusform>
|
||||
<numerusform>%n активных соединения с I2P сетью</numerusform>
|
||||
<numerusform>%n активных соединений с I2P сетью</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+12"/>
|
||||
@ -624,17 +631,29 @@
|
||||
<message numerus="yes">
|
||||
<location line="+14"/>
|
||||
<source>%n hour(s)</source>
|
||||
<translation><numerusform>%n час</numerusform><numerusform>%n часа</numerusform><numerusform>%n часов</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>%n час</numerusform>
|
||||
<numerusform>%n часа</numerusform>
|
||||
<numerusform>%n часов</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+4"/>
|
||||
<source>%n day(s)</source>
|
||||
<translation><numerusform>%n день</numerusform><numerusform>%n дня</numerusform><numerusform>%n дней</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>%n день</numerusform>
|
||||
<numerusform>%n дня</numerusform>
|
||||
<numerusform>%n дней</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+4"/>
|
||||
<source>%n week(s)</source>
|
||||
<translation><numerusform>%n неделя</numerusform><numerusform>%n недели</numerusform><numerusform>%n недель</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>%n неделя</numerusform>
|
||||
<numerusform>%n недели</numerusform>
|
||||
<numerusform>%n недель</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
@ -727,7 +746,7 @@ Address: %4
|
||||
<translation>Бумажник <b>зашифрован</b> и в настоящее время <b>заблокирован</b></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../bitcoin.cpp" line="+164"/>
|
||||
<location filename="../gostcoin.cpp" line="+166"/>
|
||||
<source>A fatal error occurred. Gostcoin can no longer continue safely and will quit.</source>
|
||||
<translation>Произошла неисправимая ошибка. ГОСТкойн не может безопасно продолжать работу и будет закрыт.</translation>
|
||||
</message>
|
||||
@ -741,25 +760,71 @@ Address: %4
|
||||
<source>Failed to load the stylesheet provided.</source>
|
||||
<translation>Не удалось загрузить указанный файл стиля.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../setupdarknet.cpp" line="+15"/>
|
||||
<source>Do you run I2P on your computer?
|
||||
If so, press yes to let Gostcoin configure it's connection to the I2P</source>
|
||||
<translation>Используете ли вы I2P на своем компьютере?
|
||||
Если это так, то нажмите "Да" чтобы ГОСТкойн сконфигурировал подключение через I2P</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
<source>Gostcoin Wizard - Step #1</source>
|
||||
<translation>Конфигурирование ГОСТкойн - шаг #1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<source>Do you want to install I2P, and continue I2P setup?
|
||||
If you select yes Gostcoin will quit, so you can continue the wizard after installing I2P.
|
||||
If you select no, Gostcoin will write a default clearnet (regular internet) config file for you. (unsafe mode)
|
||||
</source>
|
||||
<translation>Вы хотите установить I2P и продолжить конфигурирование I2P?
|
||||
Если вы выберете "Да", ГОСТкойн будет закрыт, и вы сможете продолжить настройку после установки I2P.
|
||||
Если вы выберете "Нет", ГОСТкойн запишет стандатную конфигурацию работающую через интернет. (не безопасно)
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source>Gostcoin Wizard - Step #2</source>
|
||||
<translation>Конфигурирование ГОСТкойн - шаг #2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+17"/>
|
||||
<source>Shared</source>
|
||||
<translation>Смешанный</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>I2P only</source>
|
||||
<translation>Только I2P</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>Ok, last question!
|
||||
Do you want to run shared (which means you work as a bridge between the I2P and internet) or only I2P?</source>
|
||||
<translation>Хорошо, последний вопрос!
|
||||
Хотите ли вы запустить кошелек в смешанном (значит что вы будете работать в режиме моста между I2P и интернетом) или только-I2P режиме?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+9"/>
|
||||
<source>Thanks! That was all. Enjoy your wallet :)</source>
|
||||
<translation>Спасибо, это всё. Наслаждайтесь вашим кошельком :)</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Client Model -->
|
||||
<context>
|
||||
<name>ClientModel</name>
|
||||
<message>
|
||||
<location filename="../clientmodel.cpp" line="+104"/>
|
||||
<location filename="../clientmodel.cpp" line="+114"/>
|
||||
<source>Network Alert</source>
|
||||
<translation>Сетевое оповещение</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Coin control dialog -->
|
||||
<context>
|
||||
<name>CoinControlDialog</name>
|
||||
<message>
|
||||
<location filename="../forms/coincontroldialog.ui" line="+14"/>
|
||||
<source>Coin Control Address Selection</source>
|
||||
<translation>Выбор адреса контроля монет</translation>
|
||||
<source>Coin Control</source>
|
||||
<translation>Контроль монет</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+31"/>
|
||||
@ -923,12 +988,60 @@ Address: %4
|
||||
<translation>самый высокий</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>higher</source>
|
||||
<translation>выше</translation>
|
||||
<location line="+199"/>
|
||||
<source>DUST</source>
|
||||
<translation>ПЫЛЬ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>This label turns red, if the transaction size is bigger than 10000 bytes.
|
||||
|
||||
This means a fee of at least %1 per kb is required.
|
||||
|
||||
Can vary +/- 1 Byte per input.</source>
|
||||
<translation>Эта пометка становится красной, если размер транзакции больше 10000 байт.
|
||||
|
||||
Это значит, что требуется комиссия как минимум %1 на КБ.
|
||||
|
||||
Может отличаться на +/- 1 байт на вход.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>Transactions with higher priority get more likely into a block.
|
||||
|
||||
This label turns red, if the priority is smaller than "medium".
|
||||
|
||||
This means a fee of at least %1 per kb is required.</source>
|
||||
<translation>Транзакции с более высоким приоритетом будут вероятнее других включены в блок.
|
||||
|
||||
Эта пометка становится красной, если приоритет ниже, чем "средний".
|
||||
|
||||
Это значит, что требуется комиссия как минимум %1 на КБ.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>This label turns red, if any recipient receives an amount smaller than %1.
|
||||
|
||||
This means a fee of at least %2 is required.
|
||||
|
||||
Amounts below 0.546 times the minimum relay fee are shown as DUST.</source>
|
||||
<translation>Эта пометка становится красной, если какой-либо из адресатов получает сумму менее %1.
|
||||
|
||||
Это значит, что требуется комиссия как минимум %2.
|
||||
|
||||
Суммы ниже, чем 0.546 минимальных комиссий ретрансляции, показаны как пыль.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>This label turns red, if the change is smaller than %1.
|
||||
|
||||
This means a fee of at least %2 is required.</source>
|
||||
<translation>Эта пометка становится красной, если сдача меньше %1.
|
||||
|
||||
Это значит, что требуется комиссия как минимум %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-211"/>
|
||||
<source>high</source>
|
||||
<translation>высокий</translation>
|
||||
</message>
|
||||
@ -955,7 +1068,7 @@ Address: %4
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>lower</source>
|
||||
<translation>ниже</translation>
|
||||
<translation>наинизший</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
@ -963,47 +1076,24 @@ Address: %4
|
||||
<translation>самый низкий</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+11"/>
|
||||
<location filename="../forms/coincontroldialog.ui" line="-73"/>
|
||||
<location filename="../coincontroldialog.cpp" line="+11"/>
|
||||
<source>(%1 locked)</source>
|
||||
<translation>(%1 заблокировано)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+178"/>
|
||||
<source>Dust</source>
|
||||
<translation>Пыль</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<location filename="../coincontroldialog.cpp" line="+178"/>
|
||||
<source>yes</source>
|
||||
<translation>да</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+0"/>
|
||||
<location filename="../forms/coincontroldialog.ui" line="-169"/>
|
||||
<location filename="../coincontroldialog.cpp" line="+0"/>
|
||||
<source>no</source>
|
||||
<translation>нет</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>This label turns red, if the transaction size is bigger than 10000 bytes.\n\nThis means a fee of at least %1 per kb is required.\n\nCan vary +/- 1 Byte per input.</source>
|
||||
<translation>Эта пометка становится красной, если размер транзакции больше 1000 байт.\n\nЭто значит, что требуется комиссия как минимум %1 на КБ.Может отличаться на +/- 1 байт на вход.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Transactions with higher priority get more likely into a block.\n\nThis label turns red, if the priority is smaller than \"medium\".\n\nThis means a fee of at least %1 per kb is required.</source>
|
||||
<translation>Транзакции с более высоким приоритетом будут вероятнее других включены в блок.\n\nЭта пометка становится красной, если приоритет ниже, чем "средний".\n\nЭто значит, что требуется комиссия как минимум %1 на КБ.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>This label turns red, if any recipient receives an amount smaller than %1.\n\nThis means a fee of at least %2 is required. \n\nAmounts below 0.546 times the minimum relay fee are shown as DUST.</source>
|
||||
<translation>Эта пометка становится красной, если какой-либо из адресатов получает сумму менее %1.\n\nЭто значит, что требуется комиссия как минимум %2.\n\nСуммы ниже, чем 0.546 минимальных комиссий ретрансляции, показаны как пыль.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>This label turns red, if the change is smaller than %1.\n\nThis means a fee of at least %2 is required.</source>
|
||||
<translation>Эта пометка становится красной, если сдача меньше %1.\n\nЭто значит, что требуется комиссия как минимум %2.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+37"/>
|
||||
<location filename="../coincontroldialog.cpp" line="+50"/>
|
||||
<location line="+66"/>
|
||||
<source>(no label)</source>
|
||||
<translation>[нет метки]</translation>
|
||||
@ -1019,8 +1109,6 @@ Address: %4
|
||||
<translation>(размен)</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Address editing dialog -->
|
||||
<context>
|
||||
<name>EditAddressDialog</name>
|
||||
<message>
|
||||
@ -1089,8 +1177,6 @@ Address: %4
|
||||
<translation>Генерация нового ключа не удалась.</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Help Message box -->
|
||||
<context>
|
||||
<name>GUIUtil::HelpMessageBox</name>
|
||||
<message>
|
||||
@ -1135,8 +1221,6 @@ Address: %4
|
||||
<translation>Показывать сплэш при запуске (по умолчанию: 1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Options dialog -->
|
||||
<context>
|
||||
<name>OptionsDialog</name>
|
||||
<message>
|
||||
@ -1145,7 +1229,7 @@ Address: %4
|
||||
<translation>Настройки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+16"/>
|
||||
<location line="+19"/>
|
||||
<source>&Main</source>
|
||||
<translation>&Главная</translation>
|
||||
</message>
|
||||
@ -1275,7 +1359,7 @@ Address: %4
|
||||
<translation>Здесь можно выбрать язык интерфейса. Настройки вступят в силу после перезапуска ГОСТкойн.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+11"/>
|
||||
<location line="+14"/>
|
||||
<source>&Unit to show amounts in:</source>
|
||||
<translation>&Отображать суммы в единицах: </translation>
|
||||
</message>
|
||||
@ -1450,59 +1534,6 @@ Address: %4
|
||||
<translation>Адрес прокси неверен.</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Show I2P address window -->
|
||||
<context>
|
||||
<name>ShowI2PAddresses</name>
|
||||
<message>
|
||||
<location filename="../forms/showi2paddresses.ui" line="+40"/>
|
||||
<source>Dialog</source>
|
||||
<translation>Диалог</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source>If you want to use a permanent I2P-address you have to set a 'mydestination' option in the configuration file:</source>
|
||||
<translation>Если вы хотите использовать постоянный I2P адрес, добавьте параметр 'mydestination' в конфигурационный файл:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Ready to save parameter (If you want to use this address save this text in the configuration file and keep it secret):</source>
|
||||
<translation>Сохраните этот параметр (если вы хотите использовать данный адрес, сохраните этот текст в конфигурационный файл и держите его в сектрете):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+23"/>
|
||||
<source>Address (you can publish it):</source>
|
||||
<translation>Адрес (вы можете публиковать его):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Short base32-address:</source>
|
||||
<translation>Короткий base32 адрес:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+22"/>
|
||||
<source>Copy "mydestination" parameter
|
||||
to the clipboard</source>
|
||||
<translation>Скопировать параметр "mydestination"
|
||||
в буфер обмена</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Copy public address
|
||||
to the clipboard</source>
|
||||
<translation>Скопировать публичный адрес
|
||||
в буфер обмена</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Copy b32-address
|
||||
to the clipboard</source>
|
||||
<translation>Скопировать b32 адрес
|
||||
в буфер обмена</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Overview page -->
|
||||
<context>
|
||||
<name>OverviewPage</name>
|
||||
<message>
|
||||
@ -1537,7 +1568,7 @@ to the clipboard</source>
|
||||
<translation>Не подтверждено:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+17"/>
|
||||
<location line="+16"/>
|
||||
<source>Total of transactions that have yet to be confirmed, and do not yet count toward the current balance</source>
|
||||
<translation>Общая сумма всех транзакций, которые до сих пор не подтверждены, и до сих пор не учитываются в текущем балансе</translation>
|
||||
</message>
|
||||
@ -1563,18 +1594,14 @@ to the clipboard</source>
|
||||
<translation>не синхронизировано</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Payment server -->
|
||||
<context>
|
||||
<name>PaymentServer</name>
|
||||
<message>
|
||||
<location filename="../paymentserver.cpp" line="+109"/>
|
||||
<location filename="../paymentserver.cpp" line="+110"/>
|
||||
<source>Cannot start gostcoin: click-to-pay handler</source>
|
||||
<translation>Не удаётся запустить gostcoin: обработчик click-to-pay</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- QR Code dialog -->
|
||||
<context>
|
||||
<name>QRCodeDialog</name>
|
||||
<message>
|
||||
@ -1633,8 +1660,6 @@ to the clipboard</source>
|
||||
<translation>PNG Изображения (*.png)</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- RPC console -->
|
||||
<context>
|
||||
<name>RPCConsole</name>
|
||||
<message>
|
||||
@ -1660,7 +1685,7 @@ to the clipboard</source>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<location line="+23"/>
|
||||
<location line="+26"/>
|
||||
<location line="+23"/>
|
||||
<location line="+23"/>
|
||||
<location line="+23"/>
|
||||
<location line="+36"/>
|
||||
@ -1672,7 +1697,7 @@ to the clipboard</source>
|
||||
<translation>Н/Д</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+13"/>
|
||||
<location line="-214"/>
|
||||
<source>Client version</source>
|
||||
<translation>Версия клиента</translation>
|
||||
</message>
|
||||
@ -1686,7 +1711,7 @@ to the clipboard</source>
|
||||
<source>Build date</source>
|
||||
<translation>Дата сборки</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message>
|
||||
<location line="+23"/>
|
||||
<source>Startup time</source>
|
||||
<translation>Время запуска</translation>
|
||||
@ -1726,17 +1751,17 @@ to the clipboard</source>
|
||||
<source>Last block time</source>
|
||||
<translation>Время последнего блока</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message>
|
||||
<location line="+42"/>
|
||||
<source>Debug log file</source>
|
||||
<translation>Отладочный лог-файл</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message>
|
||||
<location line="+7"/>
|
||||
<source>Open the Gostcoin debug log file from the current data directory. This can take a few seconds for large log files.</source>
|
||||
<translation>Открыть отладочный лог-файл ГОСТкойн из текущего каталога данных. Это может занять несколько секунд для больших лог-файлов.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
<source>&Open</source>
|
||||
<translation>&Открыть</translation>
|
||||
@ -1782,8 +1807,6 @@ to the clipboard</source>
|
||||
<translation>Напишите <b>help</b> для просмотра доступных команд.</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- Send coins dialog -->
|
||||
<context>
|
||||
<name>SendCoinsDialog</name>
|
||||
<message>
|
||||
@ -1798,7 +1821,6 @@ to the clipboard</source>
|
||||
<source>Send Coins</source>
|
||||
<translation>Отправка</translation>
|
||||
</message>
|
||||
|
||||
<message>
|
||||
<location line="+76"/>
|
||||
<source>Coin Control Features</source>
|
||||
@ -1840,7 +1862,12 @@ to the clipboard</source>
|
||||
<translation>Приоритет:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<location line="+19"/>
|
||||
<source>medium</source>
|
||||
<translation>средний</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<source>Fee:</source>
|
||||
<translation>Комиссия:</translation>
|
||||
</message>
|
||||
@ -1850,7 +1877,12 @@ to the clipboard</source>
|
||||
<translation>Малый выход:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+51"/>
|
||||
<location line="+19"/>
|
||||
<source>no</source>
|
||||
<translation>нет</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+32"/>
|
||||
<source>After Fee:</source>
|
||||
<translation>После комиссии:</translation>
|
||||
</message>
|
||||
@ -1905,12 +1937,12 @@ to the clipboard</source>
|
||||
<translation>&Отправить</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../sendcoinsdialog.cpp" line="-170"/>
|
||||
<location filename="../sendcoinsdialog.cpp" line="-175"/>
|
||||
<source>Enter a Gostcoin address (e.g. GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG)</source>
|
||||
<translation>Введите адрес Gostcoin (напр. GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+14"/>
|
||||
<location line="+15"/>
|
||||
<source>Copy quantity</source>
|
||||
<translation>Копировать количество</translation>
|
||||
</message>
|
||||
@ -1950,12 +1982,13 @@ to the clipboard</source>
|
||||
<translation>Копировать размен</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+86"/>
|
||||
<location line="+87"/>
|
||||
<location line="+2"/>
|
||||
<source><b>%1</b> to %2 (%3)</source>
|
||||
<translation><b>%1</b> адресату %2 (%3)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
<location line="+6"/>
|
||||
<source>Confirm send coins</source>
|
||||
<translation>Подтвердите отправку монет</translation>
|
||||
</message>
|
||||
@ -2020,8 +2053,6 @@ to the clipboard</source>
|
||||
<translation>Внимание: неизвестный адрес для сдачи</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>SendCoinsEntry</name>
|
||||
<message>
|
||||
@ -2076,8 +2107,55 @@ to the clipboard</source>
|
||||
<translation>Введите ГОСТкойн-адрес (например GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG)</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>ShowI2PAddresses</name>
|
||||
<message>
|
||||
<location filename="../forms/showi2paddresses.ui" line="+20"/>
|
||||
<source>Dialog</source>
|
||||
<translation>Диалог</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+6"/>
|
||||
<source>If you want to use a permanent I2P-address you have to set a 'mydestination' option in the configuration file:</source>
|
||||
<translation>Если вы хотите использовать постоянный I2P адрес, добавьте параметр 'mydestination' в конфигурационный файл:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
<source>Ready to save parameter (If you want to use this address save this text in the configuration file and keep it secret):</source>
|
||||
<translation>Сохраните этот параметр (если вы хотите использовать данный адрес, сохраните этот текст в конфигурационный файл и держите его в сектрете):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+23"/>
|
||||
<source>Address (you can publish it):</source>
|
||||
<translation>Адрес (вы можете публиковать его):</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+20"/>
|
||||
<source>Short base32-address:</source>
|
||||
<translation>Короткий base32 адрес:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+22"/>
|
||||
<source>Copy "mydestination" parameter
|
||||
to the clipboard</source>
|
||||
<translation>Скопировать параметр "mydestination"
|
||||
в буфер обмена</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Copy public address
|
||||
to the clipboard</source>
|
||||
<translation>Скопировать публичный адрес
|
||||
в буфер обмена</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+8"/>
|
||||
<source>Copy b32-address
|
||||
to the clipboard</source>
|
||||
<translation>Скопировать b32 адрес
|
||||
в буфер обмена</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SignVerifyMessageDialog</name>
|
||||
<message>
|
||||
@ -2098,7 +2176,7 @@ to the clipboard</source>
|
||||
<message>
|
||||
<location line="+18"/>
|
||||
<source>The address to sign the message with (e.g. GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG)</source>
|
||||
<translation>Адрес, которым вы хотите подписать сообщение (напр. GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG)</translation>
|
||||
<translation>Адрес, которым вы хотите подписать сообщение (напр. GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+10"/>
|
||||
@ -2107,7 +2185,7 @@ to the clipboard</source>
|
||||
<translation>Выберите адрес из адресной книги</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="-194"/>
|
||||
<location line="-193"/>
|
||||
<source>Paste address from clipboard</source>
|
||||
<translation>Вставить адрес из буфера обмена</translation>
|
||||
</message>
|
||||
@ -2260,12 +2338,10 @@ to the clipboard</source>
|
||||
<translation>Сообщение проверено.</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>SplashScreen</name>
|
||||
<message>
|
||||
<location filename="../splashscreen.cpp" line="+25"/>
|
||||
<location filename="../splashscreen.cpp" line="+26"/>
|
||||
<source>Version %1</source>
|
||||
<translation>Версия %1 </translation>
|
||||
</message>
|
||||
@ -2295,14 +2371,16 @@ to the clipboard</source>
|
||||
<translation>Разработчики Gostcoin</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>TransactionDesc</name>
|
||||
<message numerus="yes">
|
||||
<location filename="../transactiondesc.cpp" line="+18"/>
|
||||
<source>Open for %n more block(s)</source>
|
||||
<translation><numerusform>Открыто для ещё %n блока</numerusform><numerusform>Открыто для ещё %n блоков</numerusform><numerusform>Открыто для ещё %n блоков</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>Открыто для ещё %n блока</numerusform>
|
||||
<numerusform>Открыто для ещё %n блоков</numerusform>
|
||||
<numerusform>Открыто для ещё %n блоков</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
@ -2337,7 +2415,11 @@ to the clipboard</source>
|
||||
<message numerus="yes">
|
||||
<location line="+2"/>
|
||||
<source>, broadcast through %n node(s)</source>
|
||||
<translation><numerusform>, разослано через %n узел</numerusform><numerusform>, разослано через %n узла</numerusform><numerusform>, разослано через %n узлов</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>, разослано через %n узел</numerusform>
|
||||
<numerusform>, разослано через %n узла</numerusform>
|
||||
<numerusform>, разослано через %n узлов</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+4"/>
|
||||
@ -2395,7 +2477,11 @@ to the clipboard</source>
|
||||
<message numerus="yes">
|
||||
<location line="-102"/>
|
||||
<source>matures in %n more block(s)</source>
|
||||
<translation><numerusform>будет доступно через %n блок</numerusform><numerusform>будет доступно через %n блока</numerusform><numerusform>будет доступно через %n блоков</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>будет доступно через %n блок</numerusform>
|
||||
<numerusform>будет доступно через %n блока</numerusform>
|
||||
<numerusform>будет доступно через %n блоков</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
@ -2471,8 +2557,6 @@ to the clipboard</source>
|
||||
<translation>ложь</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>TransactionDescDialog</name>
|
||||
<message>
|
||||
@ -2486,8 +2570,6 @@ to the clipboard</source>
|
||||
<translation>Данный диалог показывает детализированную статистику по выбранной транзакции</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>TransactionTableModel</name>
|
||||
<message>
|
||||
@ -2513,7 +2595,11 @@ to the clipboard</source>
|
||||
<message numerus="yes">
|
||||
<location line="+57"/>
|
||||
<source>Open for %n more block(s)</source>
|
||||
<translation><numerusform>Открыто для ещё %n блока</numerusform><numerusform>Открыто для ещё %n блоков</numerusform><numerusform>Открыто для ещё %n блоков</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>Открыто для ещё %n блока</numerusform>
|
||||
<numerusform>Открыто для ещё %n блоков</numerusform>
|
||||
<numerusform>Открыто для ещё %n блоков</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
@ -2523,7 +2609,11 @@ to the clipboard</source>
|
||||
<message numerus="yes">
|
||||
<location line="+3"/>
|
||||
<source>Offline (%n confirmations)</source>
|
||||
<translation><numerusform>Оффлайн (%n подтверждение)</numerusform><numerusform>Оффлайн (%n подтверждения)</numerusform><numerusform>Оффлайн (%n подтверждений)</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>Оффлайн (%n подтверждение)</numerusform>
|
||||
<numerusform>Оффлайн (%n подтверждения)</numerusform>
|
||||
<numerusform>Оффлайн (%n подтверждений)</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
@ -2533,12 +2623,20 @@ to the clipboard</source>
|
||||
<message numerus="yes">
|
||||
<location line="+3"/>
|
||||
<source>Confirmed (%n confirmations)</source>
|
||||
<translation><numerusform>Подтверждено (%n подтверждение)</numerusform><numerusform>Подтверждено (%n подтверждения)</numerusform><numerusform>Подтверждено (%n подтверждений)</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>Подтверждено (%n подтверждение)</numerusform>
|
||||
<numerusform>Подтверждено (%n подтверждения)</numerusform>
|
||||
<numerusform>Подтверждено (%n подтверждений)</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location line="+8"/>
|
||||
<source>Mined balance will be available when it matures in %n more block(s)</source>
|
||||
<translation><numerusform>Добытыми монетами можно будет воспользоваться через %n блок</numerusform><numerusform>Добытыми монетами можно будет воспользоваться через %n блока</numerusform><numerusform>Добытыми монетами можно будет воспользоваться через %n блоков</numerusform></translation>
|
||||
<translation>
|
||||
<numerusform>Добытыми монетами можно будет воспользоваться через %n блок</numerusform>
|
||||
<numerusform>Добытыми монетами можно будет воспользоваться через %n блока</numerusform>
|
||||
<numerusform>Добытыми монетами можно будет воспользоваться через %n блоков</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+5"/>
|
||||
@ -2606,8 +2704,6 @@ to the clipboard</source>
|
||||
<translation>Сумма, добавленная, или снятая с баланса.</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>TransactionView</name>
|
||||
<message>
|
||||
@ -2712,7 +2808,7 @@ to the clipboard</source>
|
||||
<translation>Показать подробности транзакции</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+139"/>
|
||||
<location line="+143"/>
|
||||
<source>Export Transaction Data</source>
|
||||
<translation>Экспортировать данные транзакций</translation>
|
||||
</message>
|
||||
@ -2777,22 +2873,26 @@ to the clipboard</source>
|
||||
<translation>до</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>WalletFrame</name>
|
||||
<message>
|
||||
<location filename="../walletframe.cpp" line="+31"/>
|
||||
<source>No wallet has been loaded.</source>
|
||||
<translation>Кошелек не был загружен.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WalletModel</name>
|
||||
<message>
|
||||
<location filename="../walletmodel.cpp" line="+193"/>
|
||||
<location filename="../walletmodel.cpp" line="+206"/>
|
||||
<source>Send Coins</source>
|
||||
<translation>Отправка</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>WalletView</name>
|
||||
<message>
|
||||
<location filename="../walletview.cpp" line="+46"/>
|
||||
<location filename="../walletview.cpp" line="+52"/>
|
||||
<source>&Export</source>
|
||||
<translation>&Экспорт</translation>
|
||||
</message>
|
||||
@ -2832,8 +2932,6 @@ to the clipboard</source>
|
||||
<translation>Данные бумажника успешно сохранены в новое место.</translation>
|
||||
</message>
|
||||
</context>
|
||||
|
||||
<!-- -->
|
||||
<context>
|
||||
<name>bitcoin-core</name>
|
||||
<message>
|
||||
@ -3083,7 +3181,7 @@ If the file does not exist, create it with owner-readable-only file permissions.
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>Enable I2P-only mode</source>
|
||||
<translation>Включить режим работы "только в I2P"</translation>
|
||||
<translation>Включить режим работы "только в I2P"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
@ -3642,7 +3740,7 @@ If the file does not exist, create it with owner-readable-only file permissions.
|
||||
</message>
|
||||
<message>
|
||||
<location line="+1"/>
|
||||
<source>You need to rebuild the databases using -reindex to change -txindex</source>
|
||||
<source>You need to rebuild the database using -reindex to change -txindex</source>
|
||||
<translation>Вам необходимо пересобрать базы данных с помощью -reindex, чтобы изменить -txindex</translation>
|
||||
</message>
|
||||
<message>
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -32,7 +32,7 @@ SendCoinsDialog::SendCoinsDialog(QWidget *parent) :
|
||||
#endif
|
||||
#if QT_VERSION >= 0x040700
|
||||
/* Do not move this to the XML file, Qt before 4.7 will choke on it */
|
||||
ui->lineEditCoinControlChange->setPlaceholderText(tr("Enter a Gostcoin address (e.g. GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG"));
|
||||
ui->lineEditCoinControlChange->setPlaceholderText(tr("Enter a Gostcoin address (e.g. GbD2JSQHBHCKLa9WTHmigJRpyFgmBj4woG)"));
|
||||
#endif
|
||||
|
||||
addEntry();
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Copyright 2013 The Anoncoin Developers
|
||||
// Copyright 2017 The Gostcoin Developers
|
||||
// Copyright 2017-2018 The Gostcoin Developers
|
||||
|
||||
#include <QApplication>
|
||||
#include <QMessageBox>
|
||||
|
@ -1,9 +1,11 @@
|
||||
/*
|
||||
* Qt4 bitcoin GUI.
|
||||
*
|
||||
* W.J. van der Laan 2011-2012
|
||||
* The Bitcoin Developers 2011-2013
|
||||
*/
|
||||
// Qt bitcoin GUI.
|
||||
//
|
||||
// Copyright (c) 2011-2012 W.J. van der Laan
|
||||
// Copyright (c) 2011-2012 The Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include "walletframe.h"
|
||||
#include "bitcoingui.h"
|
||||
#include "walletstack.h"
|
||||
|
@ -1,9 +1,11 @@
|
||||
/*
|
||||
* Qt4 bitcoin GUI.
|
||||
*
|
||||
* W.J. van der Laan 2011-2012
|
||||
* The Bitcoin Developers 2011-2013
|
||||
*/
|
||||
// Qt bitcoin GUI.
|
||||
//
|
||||
// Copyright (c) 2011-2012 W.J. van der Laan
|
||||
// Copyright (c) 2011-2012 The Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef WALLETFRAME_H
|
||||
#define WALLETFRAME_H
|
||||
|
||||
|
@ -1,9 +1,11 @@
|
||||
/*
|
||||
* Qt4 bitcoin GUI.
|
||||
*
|
||||
* W.J. van der Laan 2011-2012
|
||||
* The Bitcoin Developers 2011-2013
|
||||
*/
|
||||
// Qt bitcoin GUI.
|
||||
//
|
||||
// Copyright (c) 2011-2012 W.J. van der Laan
|
||||
// Copyright (c) 2011-2012 The Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include "walletstack.h"
|
||||
#include "walletview.h"
|
||||
#include "bitcoingui.h"
|
||||
|
@ -1,9 +1,11 @@
|
||||
/*
|
||||
* Qt4 bitcoin GUI.
|
||||
*
|
||||
* W.J. van der Laan 2011-2012
|
||||
* The Bitcoin Developers 2011-2013
|
||||
*/
|
||||
// Qt bitcoin GUI.
|
||||
//
|
||||
// Copyright (c) 2011-2012 W.J. van der Laan
|
||||
// Copyright (c) 2011-2012 The Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef WALLETSTACK_H
|
||||
#define WALLETSTACK_H
|
||||
|
||||
|
@ -1,9 +1,11 @@
|
||||
/*
|
||||
* Qt4 bitcoin GUI.
|
||||
*
|
||||
* W.J. van der Laan 2011-2012
|
||||
* The Bitcoin Developers 2011-2013
|
||||
*/
|
||||
// Qt bitcoin GUI.
|
||||
//
|
||||
// Copyright (c) 2011-2012 W.J. van der Laan
|
||||
// Copyright (c) 2011-2012 The Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include "walletview.h"
|
||||
#include "bitcoingui.h"
|
||||
#include "transactiontablemodel.h"
|
||||
|
@ -1,9 +1,11 @@
|
||||
/*
|
||||
* Qt4 bitcoin GUI.
|
||||
*
|
||||
* W.J. van der Laan 2011-2012
|
||||
* The Bitcoin Developers 2011-2013
|
||||
*/
|
||||
// Qt bitcoin GUI.
|
||||
//
|
||||
// Copyright (c) 2011-2012 W.J. van der Laan
|
||||
// Copyright (c) 2011-2012 The Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef WALLETVIEW_H
|
||||
#define WALLETVIEW_H
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Copyright (c) 2009-2012 Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Copyright (c) 2009-2012 Bitcoin Developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#include <boost/foreach.hpp>
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef H_BITCOIN_SCRIPT
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_UINT256_H
|
||||
|
36
src/util.cpp
36
src/util.cpp
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@ -143,13 +144,6 @@ public:
|
||||
}
|
||||
instance_of_cinit;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void RandAddSeed()
|
||||
{
|
||||
// Seed with CPU performance counter
|
||||
@ -212,12 +206,6 @@ uint256 GetRandHash()
|
||||
return hash;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// OutputDebugStringF (aka printf -- there is a #define that we really
|
||||
// should get rid of one day) has been broken a couple of times now
|
||||
@ -398,7 +386,6 @@ void ParseString(const string& str, char c, vector<string>& v)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
string FormatMoney(int64 n, bool fPlus)
|
||||
{
|
||||
// Note: not using straight sprintf here because we do NOT want
|
||||
@ -422,7 +409,6 @@ string FormatMoney(int64 n, bool fPlus)
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
bool ParseMoney(const string& str, int64& nRet)
|
||||
{
|
||||
return ParseMoney(str.c_str(), nRet);
|
||||
@ -468,7 +454,6 @@ bool ParseMoney(const char* pszIn, int64& nRet)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static const signed char phexdigit[256] =
|
||||
{ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
||||
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
|
||||
@ -624,7 +609,6 @@ bool SoftSetBoolArg(const std::string& strArg, bool fValue)
|
||||
return SoftSetArg(strArg, std::string("0"));
|
||||
}
|
||||
|
||||
|
||||
string EncodeBase64(const unsigned char* pch, size_t len)
|
||||
{
|
||||
static const char *pbase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
@ -952,7 +936,6 @@ string DecodeBase32(const string& str)
|
||||
return string((const char*)&vchRet[0], vchRet.size());
|
||||
}
|
||||
|
||||
|
||||
bool WildcardMatch(const char* psz, const char* mask)
|
||||
{
|
||||
loop
|
||||
@ -982,7 +965,6 @@ bool WildcardMatch(const string& str, const string& mask)
|
||||
return WildcardMatch(str.c_str(), mask.c_str());
|
||||
}
|
||||
|
||||
|
||||
// Anoncoin
|
||||
// Write config file
|
||||
|
||||
@ -1022,12 +1004,6 @@ bool writeFirstConfig(bool i2pOnlyEnabled, bool i2pEnabled)
|
||||
return writeConfig(GetConfigFile().string().c_str(), pt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static std::string FormatException(std::exception* pex, const char* pszThread)
|
||||
{
|
||||
#ifdef WIN32
|
||||
@ -1259,7 +1235,6 @@ bool TruncateFile(FILE *file, unsigned int length) {
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// this function tries to raise the file descriptor limit to the requested number.
|
||||
// It returns the actual file descriptor limit (which may be more or less than nMinFD)
|
||||
int RaiseFileDescriptorLimit(int nMinFD) {
|
||||
@ -1347,16 +1322,9 @@ void ShrinkDebugFile()
|
||||
}
|
||||
}
|
||||
else if(file != NULL)
|
||||
fclose(file);
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// "Never go to sea with two chronometers; take one or three."
|
||||
// Our three time sources are:
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_UTIL_H
|
||||
|
@ -1,4 +1,5 @@
|
||||
// Copyright (c) 2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#include <string>
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_WALLET_H
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2012 The Bitcoin developers
|
||||
// Copyright (c) 2017-2018 The Gostcoin Developers
|
||||
// Distributed under the MIT/X11 software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
#ifndef BITCOIN_WALLETDB_H
|
||||
|
Loading…
Reference in New Issue
Block a user