Why does bitcoin uses INIT_PROTO_VERSION (209) for addrme and addryou in the Version Message

Why does Bitcoin use INIT_PROTO_VERSION (209) in the addrme and addryou message of the Version Message? Why is it not using the nodes protocolVersion which had been advertised in the same Message.

This is part why the nTime from the node in the Version Message will be ignored

Code used for Debug in protocol.h

   SERIALIZE_METHODS(CAddress, obj)
    {
        SER_READ(obj, obj.nTime = TIME_INIT);
        int nVersion = s.GetVersion();
        if (s.GetType() & SER_DISK) {
            printf("nVersion %dn", nVersion);
            READWRITE(nVersion);
        } else {
            printf("Not evaluated nVersion %d Type %dn", nVersion, s.GetType());
        }
        if ((s.GetType() & SER_DISK) ||
            (nVersion >= CADDR_TIME_VERSION && !(s.GetType() & SER_GETHASH))) {
            READWRITE(obj.nTime);
            printf("nTime %dn", obj.nTime);
        } else {
            printf("Not evaluated nTime %dn", obj.nTime);
        }
        READWRITE(Using<CustomUintFormatter<8>>(obj.nServices));
        printf("nServicesInt %dn", obj.nServices);
        READWRITEAS(CService, obj);
    }

See below the Output

BTC’s

Receive addrMe
Not evaluated nVersion 209 Type 1
Not evaluated nTime 100000000
nServicesInt 0
Receive addrFrom
Not evaluated nVersion 209 Type 1
Not evaluated nTime 100000000
nServicesInt 1033
2020-07-07T01:35:08Z New outbound peer connected: version: 70015, blocks=638069, peer=1 (full-relay)

Is this a wanted behavior?

Bitcoin Version Message Addrme/addryou Time Field missing + wrong protocol version

i was doing some research on the Bitcoin addrme / addryou I came across a coin which wanted 8 byte more as a Message. After quite some time looking at 3 wallets ZeroCoin/Raven/Bitcoin i got some results but i cannot understand the issue.

  1. I looked at the Bitcoin Documentation at https://en.bitcoin.it/wiki/Protocol_documentation#Network_address they mentioned there for the time field follwoing:
    4 time uint32 the Time (version >= 31402). Not present in version message.
    With the not present i was a little confused it is as desribed not present but if you lock at the logic you would think it should be present it compares the protocol Version to be greater than 31402.

Here is the ZeroCoin Wallet where i first saw the issue:

AE 5F 01 00 0D 00 00 00 00 00 00 00 B2 42 04 5F
00 00 00 00 00 E1 F5 05 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 FF FF 61 57 43 87
DC 76 00 E1 F5 05 0D 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
22 48 CA CC 0C 98 49 22 12 2F 53 61 74 6F 73 68
69 3A 30 2E 31 34 2E 30 2E 31 2F 9E 4F 04 00 01

See Here Decoding:
enter image description here

As you can see i needed to add the Timestamp into the message to make of for the 8 byte total longer message

Here is Ravencoin:

8C 11 01 00 0D 00 00 00 00 00 00 00 28 BA 03 5F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 FF FF 61 57 43 87 ED A6 0D 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 0A 3D C3 23 3F B8 4D 38
25 2F 52 61 76 65 6E 63 6F 69 6E 3A 34 2E 32 2E
30 28 73 65 65 64 2E 72 61 76 65 6E 63 6F 69 6E
2E 6F 72 67 29 2F C9 F4 13 00 01

Ignore the fact that the strmessage is different it just cosmetic.
enter image description here

Here is Bitcoin

7F 11 01 00 09 04 00 00 00 00 00 00 27 44 04 5F
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 FF FF 61 57 43 87 DC A9 09 04
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 62 22 8D A8 33 26 00 47
10 2F 53 61 74 6F 73 68 69 3A 30 2E 32 30 2E 30
2F AC BC 09 00 01

Decodes to
enter image description here

So knowing all that information i added debug Code in 3 wallets:
into the Protocol.h (keep in mind that the syntax on raven and zerocoin is slightly different but the prints where at the same spots)

   SERIALIZE_METHODS(CAddress, obj)
    {
        SER_READ(obj, obj.nTime = TIME_INIT);
        int nVersion = s.GetVersion();
        if (s.GetType() & SER_DISK) {
            printf("nVersion %dn", nVersion);
            READWRITE(nVersion);
        } else {
            printf("Not evaluated nVersion %d Type %dn", nVersion, s.GetType());
        }
        if ((s.GetType() & SER_DISK) ||
            (nVersion >= CADDR_TIME_VERSION && !(s.GetType() & SER_GETHASH))) {
            READWRITE(obj.nTime);
            printf("nTime %dn", obj.nTime);
        } else {
            printf("Not evaluated nTime %dn", obj.nTime);
        }
        READWRITE(Using<CustomUintFormatter<8>>(obj.nServices));
        printf("nServicesInt %dn", obj.nServices);
        READWRITEAS(CService, obj);
    }

Ravencoins Output:

Receive addrMe
Not evaluated nVersion 209 Type 1
Not evaluated nTime 100000000
nServicesInt 0
Receive addrFrom
Not evaluated nVersion 209 Type 1
Not evaluated nTime 100000000
nServicesInt 13
IP:2020-07-07 09:55:24 receive version message: /Ravencoin:4.2.0(seed.ravencoin.org)/: version 70028, blocks=1308436, us=97.87.67.135:56651, peer=0

It skips Version and Time Reading

BTC’s

Receive addrMe
Not evaluated nVersion 209 Type 1
Not evaluated nTime 100000000
nServicesInt 0
Receive addrFrom
Not evaluated nVersion 209 Type 1
Not evaluated nTime 100000000
nServicesInt 1033
2020-07-07T01:35:08Z New outbound peer connected: version: 70015, blocks=638069, peer=1 (full-relay)

Same thing skip nVersion and nTime

ZeroCoin

Receive addrMe
Not evaluated nVersion 90013 Type 1
nTime 100000000
nServicesInt 0
Receive addrFrom
Not evaluated nVersion 90013 Type 1
nTime 100000000
nServicesInt 13
2020-07-07 10:01:38 receive version message: /Satoshi:0.14.0.2/: version 90030, blocks=282531, us=97.87.67.135:56726, peer=0

This one skips the nVersion cause the type doe not match however it reads the ntime cause it actual holds its protocol Version 90030.

Here are my Questions:

  1. Why does Bitcoin and ravencoin evaluates 209 as nVersion and not their protocol Version as seen with Zerocoin?
  2. Where is nVersion written the 209 i guess its part of the serialisation (i am not a c++ guy)
  3. Is that behaviour wanted that nTime is missing or is this a bug related to not checking against the corrent Protocol Number?

Thank you for your help
Sascha

hi, I have installed Version 2.3.5-p1 Installation is incomplete

I have installed Version 2.3.5-p1 community edition

now I am getting the following error

Installation is incomplete.
Check the console log for errors before trying again.

applications – Whatsapp for Android 2.2.1 (old version)

You can find old versions of WhatsApp here. Just navigate to the last (around the last) page to find versions compatible with Android 2.2.1.

BUT because those versions are too old, I am sure after you will be asked to update to a newer version. You should know that WhatsApp has stopped working on some versions of Android as stated here:

Come Saturday, February 1, 2020 (tomorrow), WhatsApp will no longer work on devices running Android 2.3.7 Gingerbread and older or iPhones running iOS 8 and older.

Specifically, as of February 1, 2020, WhatsApp will no longer support devices running Android 2.3.7 Gingerbread and older. After February 1, users will no longer be able to create new accounts or reverify existing accounts on these older Android versions.

As stated above, even if you install the old version, you will not be able to create an account or re-verify it.

bitcoin core – Since which version the mining functionality removed from wallet?

As I’m starting to learn to create a new altcoin, I found there is a remarkable difference between old and new Bitcoin/Litecoin Core wallet is that old versions (0.6.9 of Litecoin) have mining functionality integrated in the wallet with a tab and a button for it while new versions (from 0.7.0.1 of Bitcoin) don’t.

So my question is from which version the mining functionality removed from wallet? Is there any change logs/release notes/statements that say about this change? And can someone tell me why we should separate it from the wallet?

I really want to see if I can re-integrate this functionality back to the wallet as most of my clients are low-tech and a button “Mining” will be definitely much visually easier then running bunch of lines of command in the terminal.

I guess some of you may then start to tell me to stop creating new altcoins but my clients really want to have a new bitcoin-like currency for their private business so I think you will unlikely to see it public elsewhere if you’re not part of the business so never mind. 🙂

Any reference links or articles or kinds of help will be highly appreciated. Thank you!

version control – Continuous Integration practices for forked repository

We have an on-premises BitBucket server with a git repo for an embedded device. We use a multi-branch pipeline in Jenkins to:

  • Build and run tests
  • Build the firmware (and a little supporting PC tool)
  • (In the near future) run hardware-in-the-loop integration tests
  • Upload artifacts to Artifactory (if the branch name meets certain requirements)

Now, for a spin-off project which uses the same hardware, I have created a fork of the repository in BitBucket, of which I start to doubt the added value now (elaboration at the end of my post). I will be the main contributor of this, just like in the other repo.

To have good CI practices in the spin-off too, I cloned the VM which contains the Jenkins instance and changed its pipeline to use the fork. To not have duplicated build time of the main branches of the original project, I configured some branch name filters. I created a secondary develop branch (let’s call it spinoff-develop) in the fork and set this as default, to allow integrating the spin-off features together, while keeping develop clean, allowing receiving upstream updates (which are automatically synced from the original by BitBucket, this would otherwise break). So far so good, the Jenkins clone now runs builds for any branch not named master or develop.

Now I run into the issue that there is some logic in my Jenkinsfile to determine when to upload a build to Artifactory. Of course I can change that logic in the fork, but when I eventually decide to merge useful changes from the fork into the original project, those will be changes which I can’t accept there. Should I start playing around with Jenkins environment variables to get around this? I don’t prefer that, as I want to keep as little configuration as possible in Jenkins, because I regard it “volatile” and it should not take too much time to set it up again if anything bad happens to it (there are also initiatives in the company to automate this more with a kind of “Infrastructure as code” approach but I don’t use them yet).

As mentioned above, I doubt the direction where I am going with this, because of the increased complexity. The reason for the fork is that I am not 100% certain yet whether the spin-off contributions will be eventually merged back into the original project, but I want easy integration of upstream changes into the spin-off. Also, if another team would ever take over the spin-off, it’s easy to just grant them full access to the fork in BitBucket and give them the VM.

What are your thoughts about this?

EDIT: I could add Jenkinsfile-spinoff and have the clone use that. But my main concerns do still apply, and is this a good solution in the end? Suppose there were 100 forks, would there need to be 101 Jenkinsfiles?

8 – Why does “drush status” report a version but /admin/reports/updates reports updates for a previous version?

When I run drush status, I get the following output.

 Drupal version   : 8.9.1
 Site URI         : http://default
 DB driver        : mysql
 DB hostname      : localhost
 DB port          : 3306
 DB username      : RonRan
 DB name          : dev-rr
 Database         : Connected
 Drupal bootstrap : Successful
 Default theme    : ronland
 Admin theme      : seven
 PHP binary       : /usr/bin/php7.3
 PHP config       : /tmp/N7wavz
 PHP OS           : Linux
 Drush script     : /usr/local/bin/drush
 Drush version    : 9.7.0
 Drush temp       : /tmp
 Drush configs    : /var/www/dev-rr/vendor/drush/drush/drush.yml
 Install profile  : standard
 Drupal root      : /var/www/dev-rr/web
 Site path        : sites/default
 Files, Public    : sites/default/files
 Files, Temp      : /tmp

/admin/reports/updates shows the following.

Available updates
Drupal core 8.8.5

Why?

I have run cron tasks and rebuild the cache more than once, but the result is still the same.

Liquidweb cannot install the PHP driver PDO DBLIB in my PHP 7.2 version of cPanel

Liquidweb cannot install the PHP driver PDO DBLIB in my PHP 7.2 version of cPanel.

What is going on with their technicians? It had been alr… | Read the rest of https://www.webhostingtalk.com/showthread.php?t=1814377&goto=newpost

version control – Questions about cloud hosting for a solo dev

So basically I’m shopping around for the right version control software. Whether free/open-source like SVN, or paid like Plastic, I keep seeing references to cloud hosting, which pretty much always requires some kind of extra subscription.

As someone with a non-technical background, I don’t feel like I have a good grasp on whether or not cloud hosting is even something that I would benefit from as a solo developer. What are the pros and cons?

And even if it’s something I do need, is there a “free” way to go about it?

For example, would it be a valid workflow to install SVN for maintaining a local repository on my computer, and then just manually upload my current project version to GitHub periodically to serve as a sort of “offsite backup”?

licensing – Can choices of version control software control how you can sell or distribute your project?

Basically I’m doing a lot of research lately on the various version control options available to a solo indie dev — Git, Plastic SCM, SVN, and so forth.

As someone without a strong CS/technical background, I don’t feel like I have the best handle on all the implications of using open source software. Additionally, sometimes the paid products’ licensing sections, like this one for Plastic SCM, aren’t fully clear (e.g. they don’t define what makes someone a “hobbyist” — can a “hobbyist” still sell their work, or would that, legally speaking, make you a “professional”?)

Basically I’m wondering if there’s a handy explainer somewhere for important things to know when choosing VCS based on what you plan to do with your eventual finished project, so I don’t have to exhaustively research each program one by one. Or alternatively, if this is a non-issue and I can just move forward without worrying about the legalese :).