ブロックチェーン財布のQTUM量子チェーンアドレス生成

22098 ワード

この文章ではQTUM財布アドレスの生成方法についてお話ししましょう
ブロックチェーンで財布のアドレスを生成する方法についてお話ししましたが、どうやってコードで財布のアドレスを生成すればいいのでしょうか.前に私は財布を作る時、多くの資料を探して、どのように財布の住所を生成するかを書くことはめったにありません.もちろん英語の資料も多くありません.最后にやはりgayhubの中に行ってオープンソースの财布を见て、やっといくつかの方法を明らかにしました.ここではbitcoinjを用いて生成する.一般的には、いくつかのステップに分けられます.助数詞を生成し、助数詞に基づいてアドレスを生成します.
環境の設定
まずここで使用するAndroid studio 3.0は、app/build.gradleに依存を追加
implementation group: 'org.bitcoinj', name: 'bitcoinj-core', version: '0.14.6'

まずピットを埋め、助数詞を生成するにはMnemonicUtilsというクラスに使用する必要がありますが、ピットがあり、助数詞リストファイルをロードする方法はAndroid上ではまったくだめで、Crashを招きます
 private static List populateWordList() {
        URL url = Thread.currentThread().getContextClassLoader()
                .getResource("en-mnemonic-word-list.txt");
        try {
            return readAllLines(url.toURI().getSchemeSpecificPart());
        } catch (Exception e) {
            return Collections.emptyList();
        }
    }

知っている人はみんな見たでしょう.これはjavaのロードリソース方式ですが、アンドロイドはプラットフォームを作る必要があります.en-mnemonic-word-listをtxtこのファイルはassetsの下に置いて、アンドロイドに合った姿勢でロードします.グッド大丈夫
private fun populateWordList(): List {
        try {
            val fis = App.instance.assets?.open("en-mnemonic-word-list.txt")
            return readAllLines(fis!!)
        } catch (e: IOException) {
            e.printStackTrace()
        }

        return emptyList()
    }

助数詞の生成
助記語を生成するにはMnemonicUtilsというクラスを使う必要があります.助記語を生成するには簡単です.次のコードで助記語を生成する必要があります.助記語のフォーマットは12単語です.
//average green proud remember advance trick estate oblige trouble when cube person
private val secureRandom = MySecureRandomUtils.secureRandom()
fun makeMnemonic(): String {
        val initialEntropy = ByteArray(16)
        secureRandom.nextBytes(initialEntropy)
        return MyMnemonicUtils.generateMnemonic(initialEntropy)
    }

QTUMアドレスの生成
まず、生成された助記語に基づいて、いくつかの列の種を生成し、BIP 32確定財布アルゴリズム(deterministic wallet algorithm)を用い、QTUMのアドレスはQの先頭であり、例えば:
QiozLhNSHWi8f6NGxvgK6iJkZjCkoyJKvX

アドレスの作成方法を見てみましょう
private fun createQtumWalletFromWords(words: String): TianWallet {
        val wordsList = Arrays.asList(*words.split("\\s+".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray())
        val deterministicSeed = DeterministicSeed(wordsList, null, "", 0)
        val deterministicKeyChain = DeterministicKeyChain.builder().seed(deterministicSeed).build()
      TUM_PATH = "m/88'/0'/0'"
        val privKeyQtum isticKistiisiiiisticKeyChain.getKeyByPath(parsePath(QTUM_PATH), true).privKey
        val ecKey = ECKey.fromPrivate(privKeyQtum)

        val publickey = Numeric.toHexStringNoPrefixZeroPadded(BigInteger(ecKey.pubKey), 66)
        var privateKey = ecKey.getPrivateKeyEncoded(QtumMainNetParams.get()).toString()
        if (BuildConfig.DEBUG) {
            privateKey = ecKey.getPrivateKeyEncoded(QtumTestNetParams.get()).toString()
            return TianWallet(ecKey.toAddress(QtumMainNetParams.get()).toString(), publickey, privateKey, words)
        }
        return TianWallet(ecKey.toAddress(QtumMainNetParams.get()).toString(), publickey, privateKey, words)
    }

ここでQTUMアドレスの生成方法とBTCアドレスの生成方法が異なり、QtumMainNetParamsとQtumTestNetParamsが必要です
class QtumMainNetParams : AbstractBitcoinNetParams() {
    init {
        interval =NetworkParameters.INTERVAL
        targetTimespan = NetworkParammeters.TARGET_TIMESPAN
        maxTarget = Utils.decodeCompactBits(0x1d00ffffL)
        dumpedPrivateKeyHeader = 128
        addressHeader = 58
        p2shHeader = 50
        acceptableAddressCodes = intArrayOf(addressHeader, p2shHeader)
        port = 8333
        packetMagic = 0xf9beb4d9L
        bip32HeaderPub = 0x0488B21E //The 4 byte header that serializes in base58 to "xpub".
        bip      majorityEnforceBlockUpat seriaat serat at at serializes in base58 to "xprv"

        majorityEnforceBlockUpgrade = MAINNET_MAJORITY_ENFORCE_BLOCK_UPGRADE
        majorityRejectBlockOutdated = MAINNET_MAJORITY_REJECT_BLOCK_OUTDATED
        majorityWindow = MAINNET_MAJORITY_WINDOW

        genesisBlock.difficultyTt = 0x1d00ffffL
        genesisBlock.setTime(1231006505L)
            genesisBlock.nonce = 2083236893
        id = ID_QTUM_MAINNET
        subsidyDecreaseBlockCount = 210000
        spendableCoinbaseDepth = 100
        val genesisHash = genesisBlock.hashAsString
        checkState(genesisHash == "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
                genesisHash)

        // This contains (at a minimum) the blocks which are not BIP30 compliant. BIP30 changed how duplicate
        // transactions are handled. Duplicated transactions could occur in the case where a coinbase had the same
        // extraNonce and the same outputs but appeared at different heights, and greatly complicated re-org handling.
        // Having these here simplifies block connection logic considerably.
        checkpoints[91722] = Sha256Hash.wrap("00000000000271a2dc26e7667f8419f2e15416dc6955e5a6c6cdf3f2574dd08e")
        checkpoints[91812] = Sha256Hash.wrap("00000000000af0aed4792b1acee3d966af36cf5def14935db8de83d6f9306f2f")
        checkpoints[91842] = Sha256Hash.wrap("00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")
        checkpoints[91880] = Sha256Hash.wrap("0000000743f190a18c5200000] = Sha256Hash.wrap("000000000000034a7dedef       checkpoints[200000] = Sha256Hash.wrap("000000000000034a7dedef4a161fa058a2d67a173a90155f3a2fe6fc132e0ebf")

        dnsSeeds = arrayOf("seed.bitcoin.sipa.be", // Pieter Wuille
                "dnsseed.bluematt.me", // Matt Corallo
                "dnsseed.bitcoin.dashjr.org", // Luke Dashjr
                "seed.bitcoinstats.com", // Chris Decker
                "seed.bitnodes.io", // Addy Yeow
                "bitseed.xf2.org", // Jeff Garzik
                "seed.bitcoin.jonasschnelli.ch" // Jonas Schnelli
        )
        httpSeeds = arrayOf(
                // Andreas Schildbach
                HttpDiscovery.Details(
                        ECKey.fromPublicOnly(Utils.HEX.decode("0238746c59d46d5408bf8b1d0af5740fe1a6e1703fcb56b2953f0b965c740d256f")),
                        URI.create("http://httpseed.bitcoin.schildbach.de/peers")
                ))

        addrSeeds = intArrayOf(0x1ddb1032, 0x6242ce40, 0x52d6a445, 0x2dd7a445, -0x75ac32b9, 0x73263750, -0x25dc3da9, -0x132b12a9, 0x0a40ec59, 0x75dce160, 0x7df76791, -0x76c8f453, -0x5b0deb53, 0x767700ae, 0x638b0418, -0x7975efe8, -0x3260ccd2, 0x0129653e, -0x336d23c2, -0x6998e9c0, 0x56487e40, 0x5b66f440, -0x4e2fe0bf, -0xe239fbf, -0x3e2ed4be, -0x7945edbd, 0x6be4df43, 0x6d4cef43, -0x2e71f9bc, 0x1ab0b344, 0x6584a345, -0x183e5bbb, 0x58cea445, -0x3a255bbb, 0x21dda445, 0x3d3b5346, 0x13e55347, 0x1080d24a, -0x719ee1b5, -0x7eae71b5, 0x6c839e4b, -0x1d52f5b4, -0x443f5b4, 0x7f5b6e4c, 0x7244224e, 0x1300554e, 0x20690652, 0x5a48b652, 0x75c5c752, 0x4335cc54, 0x340fd154, -0x783f8bab, 0x087b2b56, -0x75ecc5a9, -0x53dc3da9, 0x70374959, -0x49c2ba5, -0x4c, 0x674f645d, 0x04d3495e, 0x1de44b5e,5e, 0x4ee8a362, 0362362362362, 0x0ded1b63, -0x3e4fb493, -0x726dea7f, -0x6848157e, 0x1cf83a8e, -0x6eb6f453, 0x09dc75ae, -0x65928652, -0x5d928652, 0x0fd08fae, 0x0f3e3fb2, 0x4f944fb2, -0x335bb748, 0x3ecd6ab8, -0x562a5a44, -0x72fee63f, 0x045997d5, -0x35fe6227, 0x0d526c4d, -0x540e45bc, 0x66b1ab55, 0x1165f462, 0x3ed7cbad, -0x5c705192, 0x3bd2cbad, -0x2c90fab9, 0x20df7840, 0x7a337742, 0x549f8e4b, -0x6f9dc9a4, -0x2c660a9e, 0x2b5274a1, -0x71205ead, 0x3bffb347, 0x7074bf58, -0x48b03453, 0x5b5a795b, 0x02fa29ce, 0x5a6738d4, -0x175e2dc2, -0x10673bbb, 0x4b0f494c, -0x5d43e1aa, 0x7694ad63, -0x5b57ff3d, 0x05fda6cd, -0x60dde8a2, 0x364a795b, 0x536285d5, -0x53bb362c, 0x0b06254d, 0x150c2fd4, 0x32a50dcc, -0x28631b8, -0xea305ad, 0x66c01e60, 0x6bc26661, -0x3fc4b852, 0x4dda1b81, 0x3285a4c1, -0x77c35693, 0x35d60a4c, -0x251f68bc, 0x2e314d61, -0x7b1db831, 0x6c814552, 0x3a1cc658, -0x67270c7e, -0x1a7b34a5, 0x15e86057, 0x7b01504e, -0x27ad22b8, 0x56382f56, 0x0a5df454, -0x5f2e72e8, 0x2e89b148, -0x5863eeb4, -0x34232fac, 0x5523bc43, -0x567cd9c0, -0x75f99ebc, 0x3894c3bc, -0x548940a8, 0x6a018ac1, -0x140b0bd, 0x2f26c658, 0x31102f4e, -0x7a16d62b, 0x2a1c175e, -0x393d32f, 0x27b04b6d, -0x20fdb9b0, 0x1617e6580, 0x57be6580, 0x1cee677a, -0x559448be444444448be, -0x65ac69b5, 0x0a5a2d4d, 0x2434c658, -0x65b6b0a9, 0x1ebb0e48, -0x9ef47a3, 0x077ecf44, 0x085128bc, 0x5ba17a18, 0x27ca1b42, -0x75ff4aa, -0x32b3da9, -0x30d03ea2, -0x27681fae, 0x4cada04f, 0x2f35f6d5, 0x382ce8c9, -0x1adc67b5, 0x3f946846, 0x60c8be43, 0x41da6257, -0x21f41ebe, -0x5175abb5, -0x100f3dac, 0x1e0f795b, -0x514d7770, -0x35e95327, 0x1e47ddd8, -0x7373b7d7, -0x2d8238b9, -0x2ac4e99d, 0x4096b163, -0x637226a8, -0x34ed07a0, -0x6186cfa4, 0x40c1a445, 0x4a90c2bc, 0x2c3a464d, 0x2727f23c, 0x30b04b6d, 0x59024cb8, -0x5f6e1953, 0x31b04b6d, -0x3d62b95a, 0x63934fb2, -0x26ddb242, -0x60a6ef28, 0x7f530a6b, 0x752e9c95, 0x65453548, -0x5b7b41ba, -0x31a5e4a7, 0x710e0718, 0x46a13d18, -0x2550ace8, -0x3b5700ad, -0x785455ae, -0x489b30af, -0x4dfda2b6, 0x6d351e41, -0x3fca3cc2, -0x5bcd3e9e, 0x61ef34ae, -0x2e902244, 0x0870e8c1, 0x3070e8c1, -0x638e173f, -0x5b66dc9d, -0x7a5e099d, 0x4184e559, 0x18d96ed8, 0x17b8dbd5, 0x60e7cd18, -0x1a11efb4, -0x54e8539e, 0x1e786e1b, 0x5d23b762, -0xdc77052, -0x77d8fca0, -0x61a4c280, 0x7da518b2, -0x4a9ec4bb, 0x1ad41f3e, -0x2aaf7ab6, -0x79e81657, -0x6da4dd64, -0xd16dabe, 0x47af0544, 0x73b5a843, -0x46485f53, 0x03a748d0, 0x0a6ff862, 0x6694df62, 0x3bfac948, -0x71f670b1, 0x746916c3, 0x02f38e4f, 0x40bb1243, 0x6a54d162, 0x6008414b, -0x5aec86b4, 0x514aa343, 0x63781747, -0x244986a5, -0x12f9afa8, 0x42d24b46, 0x1518794c, -0x64d8e97f, 0x73e4ffad, 0x0654784f, 0x438dc945, 0x641846a6, 0x2d1b0944, -0x6b4a6eb8, -0x72c96aa8, -0x5a56899e, -0x748fa4be, -0x316dfb52, -0x72a7bbb0, 0x2df61555, -0x114006bd, 0x2e75fb4d, 0x3ef8fc57, -0x66deeca2, -0x71cefbd2, -0x4a5052bd, -0x7613122f, -0x63033fb9, -0x7032f0b4, -0x41b60a53, 0x146a8d45, -0x67996548, -0x6726e8a2, -0x2e571b93, -0x7c65c548, 0x40a0016c, 0x6d27c257, -0x68800053, 0x7baa5d5d, 0x1213be43, -0x4e981a57, 0x640fe8ca, -0x436159ab, 0x0f820a4c, 0x0f097059, 0x69ac957c, 0x366d8453, -0x4e45d7bc, -0x77a80f7f, 0x70b5be63, -0x3ababab5, -0x50c9212f, -0x4a5b4fae, 0x21f062d1, 0x72ab89b2, 0x74a45318, -0x7ced1944, -0x46e969a1, -0x755837a8, -0x1810053)
    }

    override fun getPaymentProtocolId(): String {
        return NetworkParameters.PAYMENT_PROTOCOL_ID_MAINNET
    }

    companitum_mainnet"

        const val MAINNET_MAJORITY_WINDOW = 1000
        const val MAINNET_MAJORITY_REJECT_BLOCK_OUTDATED = 950
        const val MAINNET_MAJORITY_ENFORCE_BLOCK_UPGRADE = 750

        private var instance: QtumMainNetParams? = null

        @Synchronized
        fun get(): QtumMainNetParams {
            if (instance == null) {
                instance = QtumMainNetParams()
            }
            return instance as QtumMainNetParams
        }
    }
}
class QtumTestNetParams : AbstractBitcoinNetParams() {
    init {
        interval = NetworkParameters.INTERVAL
        targetTimespan = NetworkParameters.TARGET_TIMESPAN
        maxTarget = Utils.decodeCompactBits(0x1d00ffffL)
        dumpedPrivateKeyHeader = 239
        addressHeader = 120
        p2shHeader = 110
        acceptableAddressCodes = intArrayOf(addressHeader, p2shHeader)
        port = 8333
        packetMagic = 0xf9beb4d9L
        bip32HeaderPub = 0x0488B21E //The 4 byte header that serializes in base58 to "xpub".
        bip32HeaderPriv = 0x0488ADE4 //The 4 byte header thto "xprv"

        majorityEnforceBlockUpat seriaat serat at at at serializes in base58 to "xprv"

        majorityEnforceBlockUpgrade = MAINNET_MAJORITY_ENFORCE_BLOCK_UPGRADE
        majorityRejectBlockOutdated = MAINNET_MAJORITY_REJECT_BLOCK_OUTDATED
        majorityWindow = MAINNET_MAJORITY_WINDOW

        genesisBlock.difficultyTarget = 0x1d00ffffL
        genesisBlock.setTime(1231006505L)
        genesisBlock.nonce = 2083236893
        id      spendableCoinbaseDepth = 100
        val genesisHash = genesisBlock.hashAsString
        checkState(genesisHash == "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
                genesisHash)

        // This contains (at a minimum) the blocks which are not BIP30 compliant. BIP30 changed how duplicate
        // transactions are handled. Duplicated transactions could occur in the case where a coinbase had the same
        // extraNonce and the same outputs but appeared at different heights, and greatly complicated re-org handling.
        // Having these here simplifies block connection logic considerably.
        checkpoints[91722] = Sha256Hash.wrap("00000000000271a2dc26e7667f8419f2e15416dc6955e5a6c6cdf3f2574dd08e")
        checkpoints[91812] = Sha256Hash.wrap("00000000000af0aed4792b1acee3d966af36cf5def14935db8de83d6f9306f2f")
        checkpoints[91842] = Sha256Hash.wrap("00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")
        checkpoints[91880] = Sha256Hash.wrap("00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721")
    heckpoints[200000] = Sha256Hash.wrap("000000000000034a7dedef        checkpoints[200000] = Sha256Hash.wrap("000000000000034a7dedef4a161fa058a2d67a173a90155f3a2fe6fc132e0ebf")

        dnsSeeds = arrayOf("seed.bitcoin.sipa.be", // Pieter Wuille
                "dnsseed.bluematt.me", // Matt Corallo
                "dnsseed.bitcoin.dashjr.org", // Luke Dashjr
                "seed.bitcoinstats.com", // Chris Decker
                "seed.bitnodes.io", // Addy Yeow
                "bitseed.xf2.org", // Jeff Garzik
                "seed.bitcoin.jonasschnelli.ch" // Jonas Schnelli
        )
        httpSeeds = arrayOf(
                // Andreas Schildbach
                HttpDiscovery.Details(
                        ECKey.fromPublicOnly(Utils.HEX.decode("0238746c59d46d5408bf8b1d0af5740fe1a6e1703fcb56b2953f0b965c740d256f")),
                        URI.create("http://httpseed.bitcoin.schildbach.de/peers")
                ))

        addrSeeds = intArrayOf(0x1ddb1032, 0x6242ce40, 0x52d6a445, 0x2dd7a445, -0x75ac32b9, 0x73263750, -0x25dc3da9, -0x132b12a9, 0x0a40ec59, 0x75dce160, 0x7df76791, -0x76c8f453, -0x5b0deb53, 0x767700ae, 0x638b0418, -0x7975efe8, -0x3260ccd2, 0x0129653e, -0x336d23c2, -0x6998e9c0, 0x56487e40, 0x5b66f440, -0x4e2fe0bf, -0xe239fbf, -0x3e2ed4be, -0x7945edbd, 0x6be4df43, 0x6d4cef43, -0x2e71f9bc, 0x1ab0b344, 0x6584a345, -0x183e5bbb, 0x58cea445, -0x3a255bbb, 0x21dda445, 0x3d3b5346, 0x13e55347, 0x1080d24a, -0x719ee1b5, -0x7eae71b5, 0x6c839e4b, -0x1d52f5b4, -0x443f5b4, 0x7f5b6e4c, 0x7244224e, 0x1300554e, 0x20690652, 0x5a48b652, 0x75c5c752, 0x4335cc54, 0x340fd154, -0x783f8bab, 0x087b2b56, -0x75ecc5a9, -0x53dc3da9, 0x70374959, -0x495, -0x465e97a4, 0x180d765c, 0x674f645d, 0x04d3495e, 0x1de44b5e,55e, 0x4ee8a362, 0x0ded1b63, -0x3e4fb493, -0x726dea7f, -0x6848157e, 0x1cf83a8e, -0x6eb6f453, 0x09dc75ae, -0x65928652, -0x5d928652, 0x0fd08fae, 0x0f3e3fb2, 0x4f944fb2, -0x335bb748, 0x3ecd6ab8, -0x562a5a44, -0x72fee63f, 0x045997d5, -0x35fe6227, 0x0d526c4d, -0x540e45bc, 0x66b1ab55, 0x1165f462, 0x3ed7cbad, -0x5c705192, 0x3bd2cbad, -0x2c90fab9, 0x20df7840, 0x7a337742, 0x549f8e4b, -0x6f9dc9a4, -0x2c660a9e, 0x2b5274a1, -0x71205ead, 0x3bffb347, 0x7074bf58, -0x48b03453, 0x5b5a795b, 0x02fa29ce, 0x5a6738d4, -0x175e2dc2, -0x10673bbb, 0x4b0f494c, -0x5d43e1aa, 0x7694ad63, -0x5b57ff3d, 0x05fda6cd, -0x60dde8a2, 0x364a795b, 0x536285d5, -0x53bb362c, 0x0b06254d, 0x150c2fd4, 0x32a50dcc, -0x28631b8, -0xea305ad, 0x66c01e60, 0x6bc26661, -0x3fc4b852, 0x4dda1b81, 0x3285a4c1, -0x77c35693, 0x35d60a4c, -0x251f68bc, 0x2e314d61, -0x7b1db831, 0x6c814552, 0x3a1cc658, -0x67270c7e, -0x1a7b34a5, 0x15e86057, 0x7b01504e, -0x27ad22b8, 0x56382f56, 0x0a5df454, -0x5f2e72e8, 0x2e89b148, -0x5863eeb4, -0x34232fac, 0x5523bc43, -0x567cd9c0, -0x75f99ebc, 0x3894c3bc, -0x548940a8, 0x6a018ac1, -0x140b0bd, 0x2f26c658, 0x31102f4e, -0x7a16d62b, 0x2a1c175e, -0x393d32f, 0x27b04b6d, -0x61748b8, 0x28be6580, 0x57be6580, 0x1cee677a, -0x559448be44444444448be, -0x65ac69b5, 0x0a5a2d4d, 0x2434c658, -0x65b6b0a9, 0x1ebb0e48, -0x9ef47a3, 0x077ecf44, 0x085128bc, 0x5ba17a18, 0x27ca1b42, -0x75ff4aa, -0x32b3da9, -0x30d03ea2, -0x27681fae, 0x4cada04f, 0x2f35f6d5, 0x382ce8c9, -0x1adc67b5, 0x3f946846, 0x60c8be43, 0x41da6257, -0x21f41ebe, -0x5175abb5, -0x100f3dac, 0x1e0f795b, -0x514d7770, -0x35e95327, 0x1e47ddd8, -0x7373b7d7, -0x2d8238b9, -0x2ac4e99d, 0x4096b163, -0x637226a8, -0x34ed07a0, -0x6186cfa4, 0x40c1a445, 0x4a90c2bc, 0x2c3a464d, 0x2727f23c, 0x30b04b6d, 0x59024cb8, -0x5f6e1953, 0x31b04b6d, -0x3d62b95a, 0x63934fb2, -0x26ddb242, -0x60a6ef28, 0x7f530a6b, 0x752e9c95, 0x65453548, -0x5b7b41ba, -0x31a5e4a7, 0x710e0718, 0x46a13d18, -0x2550ace8, -0x3b5700ad, -0x785455ae, -0x489b30af, -0x4dfda2b6, 0x6d351e41, -0x3fca3cc2, -0x5bcd3e9e, 0x61ef34ae, -0x2e902244, 0x0870e8c1, 0x3070e8c1, -0x638e173f, -0x5b66dc9d, -0x7a5e099d, 0x4184e559, 0x18d96ed8, 0x17b8dbd5, 0x60e7cd18, -0x1a11efb4, -0x54e8539e, 0x1e786e1b, 0x5d23b762, -0xdc77052, -0x77d8fca0, -0x61a4c280, 0x7da518b2, -0x4a9ec4bb, 0x1ad41f3e, -0x2aaf7ab6, -0x79e81657, -0x6da4dd64, -0xd16dabe, 0x47af0544, 0x73b5a843, -0x46485f53, 0x03a748d0, 0x0a6ff862, 0x6694df62, 0x3bfac948, -0x71f670b1, 0x746916c3, 0x02f38e4f, 0x40bb1243, 0x6a54d162, 0x6008414b, -0x5aec86b4, 0x514aa343, 0x63781747, -0x244986a5, -0x12f9afa8, 0x42d24b46, 0x1518794c, -0x64d8e97f, 0x73e4ffad, 0x0654784f, 0x438dc945, 0x641846a6, 0x2d1b0944, -0x6b4a6eb8, -0x72c96aa8, -0x5a56899e, -0x748fa4be, -0x316dfb52, -0x72a7bbb0, 0x2df61555, -0x114006bd, 0x2e75fb4d, 0x3ef8fc57, -0x66deeca2, -0x71cefbd2, -0x4a5052bd, -0x7613122f, -0x63033fb9, -0x7032f0b4, -0x41b60a53, 0x146a8d45, -0x67996548, -0x6726e8a2, -0x2e571b93, -0x7c65c548, 0x40a0016c, 0x6d27c257, -0x68800053, 0x7baa5d5d, 0x1213be43, -0x4e981a57, 0x640fe8ca, -0x436159ab, 0x0f820a4c, 0x0f097059, 0x69ac957c, 0x366d8453, -0x4e45d7bc, -0x77a80f7f, 0x70b5be63, -0x3ababab5, -0x50c9212f, -0x4a5b4fae, 0x21f062d1, 0x72ab89b2, 0x74a45318, -0x7ced1944, -0x46e969a1, -0x755837a8, -0x1810053)
    }

    override fun getPaymentProtocolId(): String {
        return NetworkParameters.PAYMENT_PROTOCOL_ID_MAINNET
    }

    companion object {
        const val MAINNET_MAJORITY_WDATED = 950
        const val MAINNET_MAJORITY_ENFORCE_BLOCK_UPGRADE = 750
        const val ID_QTUM_TESTNET = "org.bitcoinj.qtum_testnet"

        private var instance: QtumTestNetParams? = null
        @Synchronized
        fun get(): QtumTestNetParams {
            if (instance == null) {
                instance = QtumTestNetParams()
            }
            return instance as QtumTestNetParams
        }
    }
}

その他のチュートリアルは、好きなコラムにアクセスしてください