Bitcoin Forum
May 28, 2024, 06:32:29 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Android Wallet bug fix - Reward 0.3BTC (Dev is 98% done)  (Read 948 times)
theh1982 (OP)
Full Member
***
Offline Offline

Activity: 138
Merit: 100

Gaelcoin - Ireland's first Crypto Currency


View Profile WWW
April 26, 2014, 10:33:37 PM
 #1

Hi Guys,

I'm developing an android Gaelcoin wallet but stuck at the moment, must be something obvious

I've uploaded the code onto github

https://github.com/GaelCoin/bitcoin-wallet

https://github.com/GaelCoin/bitcoinj


I've got 0.3BTC reward for the person who can get it to run & connect to the Gaelcoin network (Generate addresses , send & receive etc) i'll take care of the rest in terms of layout images,text etc

Most of the work is already done in terms of the various parameters


The params
Code:

package org.litecoin;

import com.google.bitcoin.core.*;
import com.google.bitcoin.script.Script;
import com.google.bitcoin.script.ScriptOpCodes;
import com.lambdaworks.crypto.SCrypt;
import org.spongycastle.util.encoders.Hex;

import java.io.ByteArrayOutputStream;
import java.math.BigInteger;
import java.security.GeneralSecurityException;

import static com.google.common.base.Preconditions.checkState;

/**
 * Parameters for the testnet, a separate public instance of Bitcoin that has relaxed rules suitable for development
 * and testing of applications and new Bitcoin versions.
 */
public class LitecoinParams extends NetworkParameters {
    public LitecoinParams() {
        super();
        id = "org.litecoin.production";
        proofOfWorkLimit = Utils.decodeCompactBits(0x1e0fffffL);
        addressHeader = 15;
        acceptableAddressCodes = new int[] { 48 };
        port = 12622;
        packetMagic = 0xfbc0b6dbL;
        dumpedPrivateKeyHeader = 128 + addressHeader;

        targetTimespan = (int)(6 * 8 * 60);
        interval = targetTimespan/((int)(2 * 60));

        genesisBlock.setDifficultyTarget(0x1e0ffff0L);
        genesisBlock.setTime(1394208197L);
        genesisBlock.setNonce(2085670015);
        genesisBlock.removeTransaction(0);
        Transaction t = new Transaction(this);
        try {
            // A script containing the difficulty bits and the following message:
            //
            //   "Irish universities fail to make list of top 100 institutions"
            byte[] bytes = Hex.decode
                    ("04ffff001d010440497269736820756e69766572736974696573206661696c20746f206d616b65206c697374206f6620746f702031303020696e737469747574696f6e73");
            t.addInput(new TransactionInput(this, t, bytes));
            ByteArrayOutputStream scriptPubKeyBytes = new ByteArrayOutputStream();
            Script.writeBytes(scriptPubKeyBytes, Hex.decode
                    ("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9"));
            scriptPubKeyBytes.write(ScriptOpCodes.OP_CHECKSIG);
            t.addOutput(new TransactionOutput(this, t, Utils.toNanoCoins(50, 0), scriptPubKeyBytes.toByteArray()));
        } catch (Exception e) {
            // Cannot happen.
            throw new RuntimeException(e);
        }
        genesisBlock.addTransaction(t);
        String genesisHash = genesisBlock.getHashAsString();
        checkState(genesisHash.equals("3831a2c571523657ea6886293559c8751a9e8bc195a9f437febbb3df56bc55a1"),
                genesisBlock);

        subsidyDecreaseBlockCount = 450000;

        dnsSeeds = new String[] {
                "seed.gaelcoin.org",
                "pool.gaelcoin.org",

        };
    }

    private static BigInteger MAX_MONEY = Utils.COIN.multiply(BigInteger.valueOf(640000000));
    @Override
    public BigInteger getMaxMoney() { return MAX_MONEY; }

    private static LitecoinParams instance;
    public static synchronized LitecoinParams get() {
        if (instance == null) {
            instance = new LitecoinParams();
        }
        return instance;
    }

    /** The number of previous blocks to look at when calculating the next Block's difficulty */
    @Override
    public int getRetargetBlockCount(StoredBlock cursor) {
        if (cursor.getHeight() + 1 != getInterval()) {
            //Logger.getLogger("wallet_ltc").info("Normal LTC retarget");
            return getInterval();
        } else {
            //Logger.getLogger("wallet_ltc").info("Genesis LTC retarget");
            return getInterval() - 1;
        }
    }

    @Override public String getURIScheme() { return "litecoin:"; }

    /** Gets the hash of the given block for the purpose of checking its PoW */
    public Sha256Hash calculateBlockPoWHash(Block b) {
        byte[] blockHeader = b.cloneAsHeader().bitcoinSerialize();
        try {
            return new Sha256Hash(Utils.reverseBytes(SCrypt.scrypt(blockHeader, blockHeader, 1024, 1, 1, 32)));
        } catch (GeneralSecurityException e) {
            throw new RuntimeException(e);
        }
    }

    static {
        NetworkParameters.registerParams(get());
        NetworkParameters.PROTOCOL_VERSION = 70002;
    }
}


The error:

Code:
04-26 23:12:07.120  32461-32461/de.schildbach.wallet_ltc W/dalvikvm﹕ Exception Ljava/lang/IllegalStateException; thrown while initializing Lorg/litecoin/LitecoinParams;
04-26 23:12:07.120  32461-32461/de.schildbach.wallet_ltc W/dalvikvm﹕ Exception Ljava/lang/ExceptionInInitializerError; thrown while initializing Lde/schildbach/wallet/Constants;
04-26 23:12:07.120  32461-32461/de.schildbach.wallet_ltc W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41642e18)
04-26 23:12:07.130  32461-32461/de.schildbach.wallet_ltc E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: de.schildbach.wallet_ltc, PID: 32461
    java.lang.ExceptionInInitializerError
            at de.schildbach.wallet.Constants.<clinit>(Constants.java:42)
            at de.schildbach.wallet.WalletApplication.initLogging(WalletApplication.java:174)
            at de.schildbach.wallet.WalletApplication.onCreate(WalletApplication.java:109)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java)
            at android.app.ActivityThread.access$1500(ActivityThread.java)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
            at android.os.Handler.dispatchMessage(Handler.java)
            at android.os.Looper.loop(Looper.java)
            at android.app.ActivityThread.main(ActivityThread.java)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: v1 block:
    previous block: 0000000000000000000000000000000000000000000000000000000000000000
    merkle root: 2a9d0d840f9485dd422b7d58a5d92ede9590676e635d43a333f02fcdf1face6f
    time: [1394208197] Fri Mar 07 16:03:17 GMT+00:00 2014
    difficulty target (nBits): 504365040
    nonce: 2085670015
    with 1 transaction(s):
    2a9d0d840f9485dd422b7d58a5d92ede9590676e635d43a333f02fcdf1face6f: Unknown confidence level.
    == COINBASE TXN (scriptSig ???)  (scriptPubKey ???)
            at com.google.common.base.Preconditions.checkState(Preconditions.java:149)
            at org.litecoin.LitecoinParams.<init>(LitecoinParams.java:72)
            at org.litecoin.LitecoinParams.get(LitecoinParams.java:91)
            at org.litecoin.LitecoinParams.<clinit>(LitecoinParams.java:121)
            ... 15 more
04-26 23:12:18.151  32461-32461/de.schildbach.wallet_ltc D/Process﹕ killProcess, pid=32461
04-26 23:12:18.151  32461-32461/de.schildbach.wallet_ltc D/Process﹕ com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:-1 java.lang.ThreadGroup.uncaughtException:-1 java.lang.ThreadGroup.uncaughtException:-1

Visit Gaelcoin.org - Ireland's 1st CryptoCurrency
HashEngineering
Sr. Member
****
Offline Offline

Activity: 350
Merit: 250

Independent Cryptoveloper


View Profile WWW
April 27, 2014, 12:11:28 AM
Last edit: April 27, 2014, 12:30:12 AM by HashEngineering
 #2

I will take a look at this soon, as I have been able to fix many bugs in these apps.

The exception generated appears to be from the initialization of a static Property of the Constants class, which is probably because the genesis block is not configured correctly to match the hash.


GRS:  FrFpTbfEAni5Ruf8mNdwVQazJVJaQyEM2Y
BTC:  128Ptecsv4j6NoxdBxdvGzBtipfaAarZMJ
https://bitcointalk.org/index.php?topic=336215 - Android Wallet Creation Service
HashEngineering
Sr. Member
****
Offline Offline

Activity: 350
Merit: 250

Independent Cryptoveloper


View Profile WWW
April 27, 2014, 04:45:53 AM
 #3

Here are the changes to the LitecoinParams that will resolve the error in the OP:

Code:
diff --git a/core/src/main/java/org/litecoin/LitecoinParams.java b/core/src/main/java/org/litecoin/LitecoinParams.java
index c33b770..1bf631a 100644
--- a/core/src/main/java/org/litecoin/LitecoinParams.java
+++ b/core/src/main/java/org/litecoin/LitecoinParams.java
@@ -38,7 +38,7 @@ public class LitecoinParams extends NetworkParameters {
         id = "org.litecoin.production";
         proofOfWorkLimit = Utils.decodeCompactBits(0x1e0fffffL);
         addressHeader = 15;
-        acceptableAddressCodes = new int[] { 48 };
+        acceptableAddressCodes = new int[] { 15 };
         port = 12622;
         packetMagic = 0xfbc0b6dbL;
         dumpedPrivateKeyHeader = 128 + addressHeader;
@@ -54,15 +54,15 @@ public class LitecoinParams extends NetworkParameters {
         try {
             // A script containing the difficulty bits and the following message:
             //
-            //   "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"
+            //   "Irish universities fail to make list of top 100 institutions"
             byte[] bytes = Hex.decode
-                    ("0497269736820756e69766572736974696573206661696c20746f206d616b65206c697374206f6620746f702031303020696e737469747574696f6e73");
+                    ("04ffff001d01043c497269736820756e69766572736974696573206661696c20746f206d616b65206c697374206f6620746f702031303020696e737469747574696f6e73");
             t.addInput(new TransactionInput(this, t, bytes));
             ByteArrayOutputStream scriptPubKeyBytes = new ByteArrayOutputStream();
             Script.writeBytes(scriptPubKeyBytes, Hex.decode
                     ("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9"));
             scriptPubKeyBytes.write(ScriptOpCodes.OP_CHECKSIG);
-            t.addOutput(new TransactionOutput(this, t, Utils.toNanoCoins(50, 0), scriptPubKeyBytes.toByteArray()));
+            t.addOutput(new TransactionOutput(this, t, Utils.toNanoCoins(25, 0), scriptPubKeyBytes.toByteArray()));
         } catch (Exception e) {
             // Cannot happen.
             throw new RuntimeException(e);

However, there is still another exception:

Code:
04-26 21:17:53.514    2633-2692/de.schildbach.wallet_ltc E/AndroidRuntime﹕ FATAL EXCEPTION: PeerGroup
    java.lang.RuntimeException: java.io.IOException: pipe failed: EMFILE (Too many open files)
            at com.google.bitcoin.net.NioClientManager.<init>(NioClientManager.java:85)
            at com.google.bitcoin.core.PeerGroup.<init>(PeerGroup.java:207)
            at com.google.bitcoin.core.PeerGroup.<init>(PeerGroup.java:199)
            at org.litecoin.LitcoinPeerDBDiscovery$PeerGroupWrapper.<init>(LitcoinPeerDBDiscovery.java:75)
            at org.litecoin.LitcoinPeerDBDiscovery$PeerGroupWrapper.<init>(LitcoinPeerDBDiscovery.java:71)
            at org.litecoin.LitcoinPeerDBDiscovery.<init>(LitcoinPeerDBDiscovery.java:86)
            at de.schildbach.wallet.service.BlockchainServiceImpl$3$1.getPeers(BlockchainServiceImpl.java:425)
            at com.google.bitcoin.core.PeerGroup.discoverPeers(PeerGroup.java:502)
            at com.google.bitcoin.core.PeerGroup.connectToAnyPeer(PeerGroup.java:556)
            at com.google.bitcoin.core.PeerGroup.run(PeerGroup.java:534)
            at com.google.common.util.concurrent.AbstractExecutionThreadService$1$1.run(AbstractExecutionThreadService.java:52)
            at java.lang.Thread.run(Thread.java:856)
     Caused by: java.io.IOException: pipe failed: EMFILE (Too many open files)
            at java.nio.SelectorImpl.<init>(SelectorImpl.java:99)
            at java.nio.SelectorProviderImpl.openSelector(SelectorProviderImpl.java:41)
            at com.google.bitcoin.net.NioClientManager.<init>(NioClientManager.java:83)
            at com.google.bitcoin.core.PeerGroup.<init>(PeerGroup.java:207)
            at com.google.bitcoin.core.PeerGroup.<init>(PeerGroup.java:199)
            at org.litecoin.LitcoinPeerDBDiscovery$PeerGroupWrapper.<init>(LitcoinPeerDBDiscovery.java:75)
            at org.litecoin.LitcoinPeerDBDiscovery$PeerGroupWrapper.<init>(LitcoinPeerDBDiscovery.java:71)
            at org.litecoin.LitcoinPeerDBDiscovery.<init>(LitcoinPeerDBDiscovery.java:86)
            at de.schildbach.wallet.service.BlockchainServiceImpl$3$1.getPeers(BlockchainServiceImpl.java:425)
            at com.google.bitcoin.core.PeerGroup.discoverPeers(PeerGroup.java:502)
            at com.google.bitcoin.core.PeerGroup.connectToAnyPeer(PeerGroup.java:556)
            at com.google.bitcoin.core.PeerGroup.run(PeerGroup.java:534)
            at com.google.common.util.concurrent.AbstractExecutionThreadService$1$1.run(AbstractExecutionThreadService.java:52)
            at java.lang.Thread.run(Thread.java:856)
     Caused by: libcore.io.ErrnoException: pipe failed: EMFILE (Too many open files)
            at libcore.io.Posix.pipe(Native Method)
            at libcore.io.ForwardingOs.pipe(ForwardingOs.java:94)
            at java.nio.SelectorImpl.<init>(SelectorImpl.java:92)
            at java.nio.SelectorProviderImpl.openSelector(SelectorProviderImpl.java:41)
            at com.google.bitcoin.net.NioClientManager.<init>(NioClientManager.java:83)
            at com.google.bitcoin.core.PeerGroup.<init>(PeerGroup.java:207)
            at com.google.bitcoin.core.PeerGroup.<init>(PeerGroup.java:199)
            at org.litecoin.LitcoinPeerDBDiscovery$PeerGroupWrapper.<init>(LitcoinPeerDBDiscovery.java:75)
            at org.litecoin.LitcoinPeerDBDiscovery$PeerGroupWrapper.<init>(LitcoinPeerDBDiscovery.java:71)
            at org.litecoin.LitcoinPeerDBDiscovery.<init>(LitcoinPeerDBDiscovery.java:86)
            at de.schildbach.wallet.service.BlockchainServiceImpl$3$1.getPeers(BlockchainServiceImpl.java:425)
            at com.google.bitcoin.core.PeerGroup.discoverPeers(PeerGroup.java:502)
            at com.google.bitcoin.core.PeerGroup.connectToAnyPeer(PeerGroup.java:556)
            at com.google.bitcoin.core.PeerGroup.run(PeerGroup.java:534)
            at com.google.common.util.concurrent.AbstractExecutionThreadService$1$1.run(AbstractExecutionThreadService.java:52)
            at java.lang.Thread.run(Thread.java:856)

This error is a result of some changes the Litecoin Dev Team made to the bitcoin code.  I also had this problem when I imported their PeerDBDiscovery class into one of my android apps.  Catching this RuntimeException does not solve the problem, but locks up the app.  This error does not happen immediately, but after a period of time.  Perhaps the pipes are not being closed?

At this time, I don't have a solution for it, except to remove it and use DnsDiscovery instead.

GRS:  FrFpTbfEAni5Ruf8mNdwVQazJVJaQyEM2Y
BTC:  128Ptecsv4j6NoxdBxdvGzBtipfaAarZMJ
https://bitcointalk.org/index.php?topic=336215 - Android Wallet Creation Service
theh1982 (OP)
Full Member
***
Offline Offline

Activity: 138
Merit: 100

Gaelcoin - Ireland's first Crypto Currency


View Profile WWW
April 27, 2014, 01:01:09 PM
 #4

Thanks for that ! I changed the parameters and it works now but crashes after due to the Peer lookup.. Trying to find a way to void it

Visit Gaelcoin.org - Ireland's 1st CryptoCurrency
theh1982 (OP)
Full Member
***
Offline Offline

Activity: 138
Merit: 100

Gaelcoin - Ireland's first Crypto Currency


View Profile WWW
April 27, 2014, 02:32:00 PM
 #5

Hey I got it working with a bit of hacking and slashing but it's start !

Thank you for your help guys, the latest version is up on Git

Visit Gaelcoin.org - Ireland's 1st CryptoCurrency
HashEngineering
Sr. Member
****
Offline Offline

Activity: 350
Merit: 250

Independent Cryptoveloper


View Profile WWW
April 27, 2014, 03:59:31 PM
 #6

After looking at the github, it appears that you have commented out the lines for PeerDBDiscovery.  It should be working now.

Ideally that should be working as the Litecoin team has it working in their app.  I wanted to add it to my apps as well.

GRS:  FrFpTbfEAni5Ruf8mNdwVQazJVJaQyEM2Y
BTC:  128Ptecsv4j6NoxdBxdvGzBtipfaAarZMJ
https://bitcointalk.org/index.php?topic=336215 - Android Wallet Creation Service
temple
Hero Member
*****
Offline Offline

Activity: 1414
Merit: 538


Crypto Casino & Sportsbook


View Profile
April 29, 2014, 11:59:11 PM
 #7

After looking at the github, it appears that you have commented out the lines for PeerDBDiscovery.  It should be working now.

Ideally that should be working as the Litecoin team has it working in their app.  I wanted to add it to my apps as well.

do you know what's the major different betwee the current megacoin and litecoin resp?
I am also trying to make the android wallet. but seems litecoin wallet has no KGW impl.




..Stake.com..   ▄████████████████████████████████████▄
   ██ ▄▄▄▄▄▄▄▄▄▄            ▄▄▄▄▄▄▄▄▄▄ ██  ▄████▄
   ██ ▀▀▀▀▀▀▀▀▀▀ ██████████ ▀▀▀▀▀▀▀▀▀▀ ██  ██████
   ██ ██████████ ██      ██ ██████████ ██   ▀██▀
   ██ ██      ██ ██████  ██ ██      ██ ██    ██
   ██ ██████  ██ █████  ███ ██████  ██ ████▄ ██
   ██ █████  ███ ████  ████ █████  ███ ████████
   ██ ████  ████ ██████████ ████  ████ ████▀
   ██ ██████████ ▄▄▄▄▄▄▄▄▄▄ ██████████ ██
   ██            ▀▀▀▀▀▀▀▀▀▀            ██ 
   ▀█████████▀ ▄████████████▄ ▀█████████▀
  ▄▄▄▄▄▄▄▄▄▄▄▄███  ██  ██  ███▄▄▄▄▄▄▄▄▄▄▄▄
 ██████████████████████████████████████████
▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄
█  ▄▀▄             █▀▀█▀▄▄
█  █▀█             █  ▐  ▐▌
█       ▄██▄       █  ▌  █
█     ▄██████▄     █  ▌ ▐▌
█    ██████████    █ ▐  █
█   ▐██████████▌   █ ▐ ▐▌
█    ▀▀██████▀▀    █ ▌ █
█     ▄▄▄██▄▄▄     █ ▌▐▌
█                  █▐ █
█                  █▐▐▌
█                  █▐█
▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀█
▄▄█████████▄▄
▄██▀▀▀▀█████▀▀▀▀██▄
▄█▀       ▐█▌       ▀█▄
██         ▐█▌         ██
████▄     ▄█████▄     ▄████
████████▄███████████▄████████
███▀    █████████████    ▀███
██       ███████████       ██
▀█▄       █████████       ▄█▀
▀█▄    ▄██▀▀▀▀▀▀▀██▄  ▄▄▄█▀
▀███████         ███████▀
▀█████▄       ▄█████▀
▀▀▀███▄▄▄███▀▀▀
..PLAY NOW..
HashEngineering
Sr. Member
****
Offline Offline

Activity: 350
Merit: 250

Independent Cryptoveloper


View Profile WWW
April 30, 2014, 12:49:13 AM
 #8

After looking at the github, it appears that you have commented out the lines for PeerDBDiscovery.  It should be working now.

Ideally that should be working as the Litecoin team has it working in their app.  I wanted to add it to my apps as well.

do you know what's the major different betwee the current megacoin and litecoin resp?
I am also trying to make the android wallet. but seems litecoin wallet has no KGW impl.

The current litecoin app is forked from the bitcoin wallet.  The megacoin app is a fork of the digitalcoin app which is a fork of the bitcoin wallet.

The code base is very similar.  You could take the KGW code from the Megacoinj library and place it into the Litecoin bitcoinj module.  I even wrote a native implementation of KGW.

you can PM me if you have further questions as I wrote the java code for KGW.


GRS:  FrFpTbfEAni5Ruf8mNdwVQazJVJaQyEM2Y
BTC:  128Ptecsv4j6NoxdBxdvGzBtipfaAarZMJ
https://bitcointalk.org/index.php?topic=336215 - Android Wallet Creation Service
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!