Bitcoin Forum
May 13, 2024, 07:10:02 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Последний фрагмент кода опубликованный Satosh  (Read 246 times)
twiki (OP)
Member
**
Offline Offline

Activity: 191
Merit: 55


View Profile
October 01, 2020, 10:03:51 PM
Merited by Coin-1 (1), Symmetrick (1)
 #1

   
После того как laanwj (Вова) раскрыл alert key, будет целесообразным поделиться им здесь.
Возможно кому то будет интересно поковыряться в этом фрагменте кода, вероятно последнем кусочке кода опубликованным Сатоши.

Можете просмотреть на github: https://gist.github.com/laanwj/0e689cfa37b52bcbbb44
Дополнительная информация: https://gist.github.com/jimmysong/4c72d098255b217b4c8c (для тестирования и исправления)


Code:
Compile Bitcoin with sendalert.cpp to make a CAlert broadcaster and run with -sendalert.

sendalert.cpp:

// *** CONFIDENTIAL - NOT FOR RELEASE ***
#include "headers.h"

static const int64 DAYS = 24 * 60 * 60;

void ThreadSendAlert();

class CSendAlert
{
public:
    CSendAlert()
    {
        boost::thread(bind(ThreadSendAlert));
    }
    ~CSendAlert()
    {
    }
}
instance_of_csendalert;


void ThreadSendAlert()
{
    Sleep(2000);
    if (!mapArgs.count("-sendalert") && !mapArgs.count("-printalert"))
        return;

    // Create alert -- set your parameters here
    CAlert alert;
    alert.nRelayUntil   = GetTime() + 15 * 60;
    alert.nExpiration   = GetTime() + 1 * DAY;
    alert.nID           = 1001;
    alert.nCancel       = 0;   // cancels previous messages up to this ID number
    alert.nMinVer       = 31600;
    alert.nMaxVer       = 31600;
    alert.nPriority     = 5000;
    alert.strComment    = "";
    alert.strStatusBar  = "a new version is available";

    // Sign
    const char* pszPrivKey = "30820113020101042053cdc1e0cfac07f7e1c312768886f4635f6bceebec0887f63a9d37a26a92e6b6a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a14403420004fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284";
    vector<unsigned char> vchTmp(ParseHex(pszPrivKey));
    CPrivKey vchPrivKey(vchTmp.begin(), vchTmp.end());

    CDataStream sMsg;
    sMsg << *(CUnsignedAlert*)&alert;
    alert.vchMsg = vector<unsigned char>(sMsg.begin(), sMsg.end());
    CKey key;
    if (!key.SetPrivKey(vchPrivKey))
    {
        printf("ThreadSendAlert() : key.SetPrivKey failed\n");
        return;
    }
    if (!key.Sign(Hash(alert.vchMsg.begin(), alert.vchMsg.end()), alert.vchSig))
    {
        printf("ThreadSendAlert() : key.Sign failed\n");
        return;
    }

    // Test
    CDataStream sBuffer;
    sBuffer << alert;
    CAlert alert2;
    sBuffer >> alert2;
    if (!alert2.CheckSignature())
    {
        printf("ThreadSendAlert() : CheckSignature failed\n");
        return;
    }
    assert(alert2.vchMsg == alert.vchMsg);
    assert(alert2.vchSig == alert.vchSig);
    alert.SetNull();
    printf("\nThreadSendAlert:\n");
    printf("hash=%s\n", alert2.GetHash().ToString().c_str());
    alert2.print();
    printf("vchMsg.size()=%d, vchSig.size()=%d\n", alert2.vchMsg.size(), alert2.vchSig.size());
    printf("vchMsg=%s\n", HexStr(alert2.vchMsg).c_str());
    printf("vchSig=%s\n", HexStr(alert2.vchSig).c_str());

    // Confirm
    if (!mapArgs.count("-sendalert"))
        return;
    while (vNodes.size() < 1 && !fShutdown)
        Sleep(500);
    if (fShutdown)
        return;
    if (ThreadSafeMessageBox("Send alert?", "ThreadSendAlert", wxYES_NO | wxNO_DEFAULT) != wxYES)
        return;
    if (ThreadSafeMessageBox("Send alert, are you sure?", "ThreadSendAlert", wxYES_NO | wxNO_DEFAULT) != wxYES)
    {
        ThreadSafeMessageBox("Nothing sent", "ThreadSendAlert", wxOK);
        return;
    }

    // Send
    printf("ThreadSendAlert() : Sending alert\n");
    int nSent = 0;
    CRITICAL_BLOCK(cs_vNodes)
    {
        foreach(CNode* pnode, vNodes)
        {
            if (alert2.RelayTo(pnode))
            {
                printf("ThreadSendAlert() : Sent alert to %s\n", pnode->addr.ToString().c_str());
                nSent++;
            }
        }
    }
    printf("ThreadSendAlert() : Alert sent to %d nodes\n", nSent);
    ThreadSafeMessageBox(strprintf("Alert sent to %d nodes", nSent), "ThreadSendAlert", wxOK);
}
Even if you use Bitcoin through Tor, the way transactions are handled by the network makes anonymity difficult to achieve. Do not expect your transactions to be anonymous unless you really know what you're doing.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1715627402
Hero Member
*
Offline Offline

Posts: 1715627402

View Profile Personal Message (Offline)

Ignore
1715627402
Reply with quote  #2

1715627402
Report to moderator
1715627402
Hero Member
*
Offline Offline

Posts: 1715627402

View Profile Personal Message (Offline)

Ignore
1715627402
Reply with quote  #2

1715627402
Report to moderator
1715627402
Hero Member
*
Offline Offline

Posts: 1715627402

View Profile Personal Message (Offline)

Ignore
1715627402
Reply with quote  #2

1715627402
Report to moderator
twiki (OP)
Member
**
Offline Offline

Activity: 191
Merit: 55


View Profile
October 09, 2020, 10:47:06 PM
 #2

ап
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!