Dogecoin Address Generator

Dogecoin
Address Generator
Powered by libdogecoin v0.1.2
 Public Key
 Private Key
C code used
// LibDogecoin 0.1.2
#include "libdogecoin.h"
#include 
#include 

//#define PRIVKEYWIFLEN 51 //WIF length for uncompressed keys is 51 and should start with Q. This can be 52 also for compressed keys. 53 internally to lib (+stringterm)
#define PRIVKEYWIFLEN 53 //Function takes 53 but needs to be fixed to take 51.

//#define MASTERKEYLEN 111 //should be chaincode + privkey; starts with dgpv51eADS3spNJh8 or dgpv51eADS3spNJh9 (112 internally including stringterm? often 128. check this.)
#define MASTERKEYLEN 128 // Function expects 128 but needs to be fixed to take 111.

//#define PUBKEYLEN 34 //our mainnet addresses are 34 chars if p2pkh and start with D.  Internally this is cited as 35 for strings that represent it because +stringterm.
#define PUBKEYLEN 35 // Function expects 35, but needs to be fixed to take 34.

// Example of how to use libdogecoin API functions:
// gcc ./libdogecoin-php/libdogecoin-json.c -I./include -L./lib -ldogecoin -o ./libdogecoin-php/libdogecoin-json-php

int main(int argc, char *argv[]) {
	dogecoin_ecc_start();

	char wif_privkey[PRIVKEYWIFLEN];
	char p2pkh_pubkey[PUBKEYLEN];
	char wif_master_privkey[MASTERKEYLEN];
	char p2pkh_master_pubkey[PUBKEYLEN];
	char p2pkh_child_pubkey[PUBKEYLEN];
	
	// JSON keypair generation
   if (strcmp(argv[1], "generatePrivPubKeypair") == 0){
		if (generatePrivPubKeypair(wif_privkey, p2pkh_pubkey, 0)) {
			printf("{\"private\":\"%s\",\"public\":\" %s\"}", wif_privkey, p2pkh_pubkey);
		} else {
			printf("{\"error\":\"1\"}");
			return -1;
		}
    };


    if (strcmp(argv[1], "generateHDMasterPubKeypair") == 0){
    	if (generateHDMasterPubKeypair(wif_master_privkey, p2pkh_master_pubkey, 0)) {
    		printf("{\"private\":\"%s\",\"public\":\" %s\"}", wif_master_privkey, p2pkh_master_pubkey);
		} else {
			printf("{\"error\":\"1\"}");
			return -1;
		}		
    }


    if (strcmp(argv[1], "generateDerivedHDPubkey") == 0){
    	if (generateDerivedHDPubkey((const char*)wif_master_privkey, (char*)p2pkh_child_pubkey)) {
    		printf("{\"private\":\"%s\",\"public\":\" %s\"}", wif_master_privkey, p2pkh_child_pubkey);
		} else {
			printf("{\"error\":\"1\"}");
			return -1;
		}		
    }


  // keypair verification

      //argv[1] = command
      //argv[2] = privat key
      //argv[3] = public key

    if (strcmp(argv[1], "verifyPrivPubKeypair") == 0){
    	if (verifyPrivPubKeypair(argv[2], argv[3], 0)) {
            printf("{\"valid\":\"true\"}");
    	}
    	else {
            printf("{\"valid\":\"false\"}");
			return -1;
    	}
    }

    if (strcmp(argv[1], "verifyHDMasterPubKeypair") == 0){
    	if (verifyHDMasterPubKeypair(argv[2], argv[3], 0)) {
            printf("{\"valid\":\"true\"}");
    	}
    	else {
            printf("{\"valid\":\"false\"}");
			return -1;			
    	}
    }

  	// address verification

    //argv[1] = command
    //argv[2] = dp2pkh public key

    if (strcmp(argv[1], "verifyP2pkhAddress") == 0){
    	if (verifyP2pkhAddress(argv[2], strlen(argv[2]))) {
            printf("{\"valid\":\"true\"}");
    	}
    	else {
            printf("{\"valid\":\"false\"}");
			return -1;			
    	}
    }

	// build transaction

    //argv[1] = command
    //argv[2] = hash_doge (tx hash with doge)
    //argv[3] = external_p2pkh_addr
    //argv[4] = 5.0 (doge to send)
    //argv[5] = 0.00226 (fees)
    //argv[6] = 12 (tx index)
    //argv[7] = mypubkey
    //argv[8] = myscriptpubkey
    //argv[9] = myprivkey

    if (strcmp(argv[1], "start_transaction") == 0){

    	int idx = start_transaction();
        add_utxo(idx, argv[2], 1);
        add_output(idx, argv[3], argv[4]);
        finalize_transaction(idx, argv[3], argv[5], argv[6], argv[7]);
        sign_transaction(idx, argv[8], argv[9]);
        printf("{\"rawtx\":\"%s\"}", get_raw_transaction(idx));
		remove_all();
    }

	// Get the moon
	if (strcmp(argv[1], "moon") == 0){
		printf("{\"moon\":\"%s\"}", moon());
	}

	dogecoin_ecc_stop();
}

PHP code used
<php
/**
*   File: Functions used on the Libdogecoin
*   Description: Bind Libdogecoin to PHP using c compiled that prints in JSON format
*
*   Available Commands:
*    moon
*    generatePrivPubKeypair
*    generateHDMasterPubKeypair
*    generateDerivedHDPubkey
*    verifyPrivPubKeypair
*    verifyHDMasterPubKeypair
*    verifyP2pkhAddress
*    start_transaction
*/

// class DogeBridge to be able to interact beetwin DB and Dogecoin Core RCP
class LibDogecoin {

    private function command ($commands){
      exec('./libdogecoin-php/libdogecoin-json-php '.implode(" ", $commands).' 2>&1', $output, $retval);
      return json_decode($output[0]);
    }

    // get moon
    public function moon(){
      $commands[] = "moon";  
      return $this->command($commands);
    }

    // keypair generation
    public function generatePrivPubKeypair(){
      $commands[] = "generatePrivPubKeypair";
      return $this->command($commands);
    }

    // keypair generation
    public function generateHDMasterPubKeypair(){
      $commands[] = "generateHDMasterPubKeypair";
      return $this->command($commands);
    }

    // keypair generation
    public function generateDerivedHDPubkey(){
      $commands[] = "generateDerivedHDPubkey";
      return $this->command($commands);
    }

    // keypair verification
    public function verifyPrivPubKeypair($privateKey,$publicKey){
      $commands[] = "generateDerivedHDPubkey";
      $commands[] = $privateKey;
      $commands[] = $publicKey;
      return $this->command($commands);
    }

    // keypair verification
    public function verifyHDMasterPubKeypair($privateKey,$publicKey){
      $commands[] = "verifyHDMasterPubKeypair";
      $commands[] = $privateKey;
      $commands[] = $publicKey;
      return $this->command($commands);
    }

    // address verification
    public function verifyP2pkhAddress($publicKey){
      $commands[] = "verifyP2pkhAddress";
      $commands[] = $publicKey;
      return $this->command($commands);
    }

    // build transaction
    public function start_transaction($hash_doge,$external_p2pkh_addr,$doge_amount,$fees,$tx_index,$mypubkey,$myscriptpubkey,$myprivkey){
      $commands[] = "start_transaction";
      $commands[] = $hash_doge;
      $commands[] = $external_p2pkh_addr;
      $commands[] = $doge_amount;
      $commands[] = $fees;
      $commands[] = $tx_index;
      $commands[] = $mypubkey;
      $commands[] = $myscriptpubkey;
      $commands[] = $myprivkey;
      return $this->command($commands);
    }
}

    $LibDogecoin = new LibDogecoin();
?>