Перейти к публикации
Cryptorussia.net

Alex

Профессионал
  • Публикации

    15
  • Зарегистрирован

  • Посещение

  • Лайтпоинт

    34,486 [ Лайтнуть ]

Репутация

0 Нормально

О Alex

  • Уровень
    Уровень 5

Посетители профиля

Блок посетителей профиля отключен и не будет отображаться другим пользователям

  1. Alex

    Надежен ли Ethereum?

    Кто-то поднял, кто-то потерял. Вопрос был в надежности. Крипта сильно волатильна, по сравнению с другими инвест инструментами, на которых также многие зарабатывают, но все равно далеко не каждый. О какой надежности может идти речь?
  2. Считаю, пока рано об этом говорить. С запуском TON должно будет выйти пользовательское соглашение по кошельку, там-то должны быть все примечания и т.п. Ну и я сомневаюсь, что просто так случайно вам могут заблокировать кошелек. Для этого должны быть весьма веские основания.
  3. Alex

    Надежен ли Ethereum?

    Считать любую крипту надежным источником дохода - безумие! Но вложить некоторые средства в нее определенно стоит. Вопрос: когда выгоднее? Точного ответа никто не даст. Цена сейчас вполне привлекательна (в районе $180-$185). Можете проверить по графикам.
  4. Читал, что это будет ETP, а тикер у него будет ABBA. Учитывая, что это будет корзина 2ух криптовалют (биткоин и эфир) в пропорции 9к1, то и цена будет идти отсюда же. К слову сказать, ETP - это обеспеченные инструменты, так что биржа будет где-то хранить эту крипту. Но больше всего радует, что это уже не первый крипто ETP для данной биржи, так что, думаю, он станет у них популярным. Более того, прямо сегодня эта же биржа запускает еще один ETP на токен BNB. Где купить прямо сейчас - нужно искать. Могу сказать, что площадка Just2Trade (наш финам, зарегистрированный на Кипре и имеющий доступ ко многим иностранным биржам), обещает в скором времени добавить биржу SIX, на которой и торгуются данные инструменты. Так что, по идее, после добавления биржи, можно будет купить на этой площадке.
  5. Все может быть, но с моим мануалом, считаю, вероятность ошибки сведена к минимуму. Главное, оперативки достаточно иметь. У меня 2 Гб для сборки не хватило, oom killer убивал сборку.
  6. Всем привет! Решил собрать в одном месте список аппаратных криптокошельков. Думаю, уже все в теме, что такое аппаратный кошелек, но если все-таки нет, то вот краткое описание: Аппаратный кошелек – это физическое электронное устройство, разработанное исключительно для хранения и защиты Ваших криптовалют. Суть аппаратного кошелька заключается в том, что для того, чтобы перевести ваши криптоактивы, вам нужно будет сначала подключить его к ПК, смартфону или планшету. Аппаратные кошельки – отличный вариант, если вам надежный и удобный кошелек. Итак, вот список: Ledger Nano S и Ledger Nano X Полный список поддерживаемых валют обоими кошельками Trezor One и Trezor Model T Полный список поддерживаемых валют обоими кошельками KeepKey Полный список поддерживаемых валют обоими кошельками Bitfi Полный список поддерживаемых валют обоими кошельками Archos Safe-T mini Opendime - поддерживает только bitcoin CoolWallet S BitLox BitBox01 и BitBox02 Secalot Ellipal Если кого-то забыл упомянуть, пишите в комментарии, будем дополнять список вместе!
  7. В этой части мы будем редактировать наши исходники. Итак, проехали: Начнем с файла chainparams.cpp Это чек-поинты. Открываем в Notepad++, убираем лишние и ставим наши генезис-блоки, а также timeStamp . В моем случае при генезис-блоках: Main 00000205a2b36c89d27547db95cdf4a3038662dd26cf21af8b9c8978a64b06a2 Testnet 00000416024caa7a7900f9a73c120660773ca4019d0671ee5d5bb528acbaa633 Regtest 17a08f326f61be14e0502edeb93d46013596a0bf1d8ddd9d5909f37dab7305a4 Т.о. из такого: static Checkpoints::MapCheckpoints mapCheckpoints = boost::assign::map_list_of ( 1500, uint256("0x000000aaf0300f59f49bc3e970bad15c11f961fe2347accffff19d96ec9778e3")) ( 4991, uint256("0x000000003b01809551952460744d5dbb8fcbd6cbae3c220267bf7fa43f837367")) ( 9918, uint256("0x00000000213e229f332c0ffbe34defdaa9e74de87f2d8d1f01af8d121c3c170b")) ( 16912, uint256("0x00000000075c0d10371d55a60634da70f197548dbbfa4123e12abfcbc5738af9")) ( 23912, uint256("0x0000000000335eac6703f3b1732ec8b2f89c3ba3a7889e5767b090556bb9a276")) ( 35457, uint256("0x0000000000b0ae211be59b048df14820475ad0dd53b9ff83b010f71a77342d9f")) ( 45479, uint256("0x000000000063d411655d590590e16960f15ceea4257122ac430c6fbe39fbf02d")) ( 55895, uint256("0x0000000000ae4c53a43639a4ca027282f69da9c67ba951768a20415b6439a2d7")) ( 68899, uint256("0x0000000000194ab4d3d9eeb1f2f792f21bb39ff767cb547fe977640f969d77b7")) ( 74619, uint256("0x000000000011d28f38f05d01650a502cc3f4d0e793fbc26e2a2ca71f07dc3842")) ( 75095, uint256("0x0000000000193d12f6ad352a9996ee58ef8bdc4946818a5fec5ce99c11b87f0d")) ( 88805, uint256("0x00000000001392f1652e9bf45cd8bc79dc60fe935277cd11538565b4a94fa85f")) ( 107996, uint256("0x00000000000a23840ac16115407488267aa3da2b9bc843e301185b7d17e4dc40")) ( 137993, uint256("0x00000000000cf69ce152b1bffdeddc59188d7a80879210d6e5c9503011929c3c")) ( 167996, uint256("0x000000000009486020a80f7f2cc065342b0c2fb59af5e090cd813dba68ab0fed")) ( 207992, uint256("0x00000000000d85c22be098f74576ef00b7aa00c05777e966aff68a270f1e01a5")) ( 312645, uint256("0x0000000000059dcb71ad35a9e40526c44e7aae6c99169a9e7017b7d84b1c2daf")) ; static const Checkpoints::CCheckpointData data = { &mapCheckpoints, 1423563332, // * UNIX timestamp of last checkpoint block 853742, // * total number of transactions between genesis and last checkpoint // (the tx=... number in the SetBestChain debug.log lines) 2800 // * estimated number of transactions per day after checkpoint }; static Checkpoints::MapCheckpoints mapCheckpointsTestnet = boost::assign::map_list_of ( 261, uint256("00000c26026d0815a7e2ce4fa270775f61403c040647ff2c3091f99e894a4618")) ( 77900, uint256("00000007e5ec67e2a626c07b7d66673c3dd8df0aed5018ca984b99fba2b71024")) ( 82313, uint256("000000156a313af1d69fe855609175b276996235e8f4f7da41b10e4a7a750a19")) ; static const Checkpoints::CCheckpointData dataTestnet = { &mapCheckpointsTestnet, 1405699509, 201, 500 }; static Checkpoints::MapCheckpoints mapCheckpointsRegtest = boost::assign::map_list_of ( 0, uint256("0x000008ca1832a4baf228eb1553c03d3a2c8e02399550dd6ea8d65cec3ef23d2e")) ; static const Checkpoints::CCheckpointData dataRegtest = { &mapCheckpointsRegtest, 0, 0, 0 }; Мы должны получить нечто такое: static Checkpoints::MapCheckpoints mapCheckpoints = boost::assign::map_list_of ( 0, uint256("0x00000205a2b36c89d27547db95cdf4a3038662dd26cf21af8b9c8978a64b06a2")) ; static const Checkpoints::CCheckpointData data = { &mapCheckpoints, 1449579900, // * UNIX timestamp of last checkpoint block 0, // * total number of transactions between genesis and last checkpoint // (the tx=... number in the SetBestChain debug.log lines) 2800 // * estimated number of transactions per day after checkpoint }; static Checkpoints::MapCheckpoints mapCheckpointsTestnet = boost::assign::map_list_of ( 0, uint256("00000416024caa7a7900f9a73c120660773ca4019d0671ee5d5bb528acbaa633")) ; static const Checkpoints::CCheckpointData dataTestnet = { &mapCheckpointsTestnet, 1449579901, 0, 500 }; static Checkpoints::MapCheckpoints mapCheckpointsRegtest = boost::assign::map_list_of ( 0, uint256("0x17a08f326f61be14e0502edeb93d46013596a0bf1d8ddd9d5909f37dab7305a4")) ; static const Checkpoints::CCheckpointData dataRegtest = { &mapCheckpointsRegtest, 0, 0, 0 }; Далее открываем main //вставляем любые hex-символы, например такие: pchMessageStart[0] = 0xbf; pchMessageStart[1] = 0x0c; pchMessageStart[2] = 0x6b; pchMessageStart[3] = 0xbd; //Сюда мы вписываем public key, который генерировали ранее – тот что mainalert vAlertPubKey = ParseHex("048240a8748a80a286b270ba126705ced4f2ce5a7847b3610ea3c06513150dade2a8512ed5ea86320824683fc0818f0ac019214973e677acd1244f6d0571fc5103"); //Это наш порт для связа сети , мы его будет изменять на свой я буду использовать для замены 9887 nDefaultPort = 9999; //это мы не трогаем bnProofOfWorkLimit = ~uint256(0) >> 20; // Owncoin starting difficulty is 1 / 2^12 //Это момент когда уменьшится награда в 2 раза за майнинг. nSubsidyHalvingInterval = 210000; //начало роста сложности nEnforceBlockUpgradeMajority = 750; nRejectBlockOutdatedMajority = 950; nToCheckBlockUpgradeMajority = 1000; //Майниг клиента сколько ядер процессора будет задействовано , 0= по все. nMinerThreads = 0; //Пересчет сложости раз в сутки. nTargetTimespan = 24 * 60 * 60; // Owncoin: 1 day //Время на генерацию блока nTargetSpacing = 2.5 * 60; // Owncoin: 2.5 minutes /** * Build the genesis block. Note that the output of the genesis coinbase cannot * be spent as it did not originally exist in the database. * * CBlock(hash=00000ffd590b14, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=e0028e, nTime=1390095618, nBits=1e0ffff0, nNonce=28917698, vtx=1) * CTransaction(hash=e0028e, ver=1, vin.size=1, vout.size=1, nLockTime=0) * CTxIn(COutPoint(000000, -1), coinbase 04ffff001d01044c5957697265642030392f4a616e2f3230313420546865204772616e64204578706572696d656e7420476f6573204c6976653a204f76657273746f636b2e636f6d204973204e6f7720416363657074696e6720426974636f696e73) * CTxOut(nValue=50.00000000, scriptPubKey=0xA9037BAC7050C479B121CF) * vMerkleTree: e0028e */ //pszTimestamp - наша фраза, которую мы придумывали в самом начале const char* pszTimestamp = "Wired 09/Jan/2014 The Grand Experiment Goes Live: Overstock.com Is Now Accepting Bitcoins"; CMutableTransaction txNew; txNew.vin.resize(1); txNew.vout.resize(1); //Это мы не трогаем txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); //Награда за блок txNew.vout[0].nValue = 50 * COIN; //Здесь в кавычках заменяем на наш public key генезис блока txNew.vout[0].scriptPubKey = CScript() << ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9") << OP_CHECKSIG; genesis.vtx.push_back(txNew); genesis.hashPrevBlock = 0; genesis.hashMerkleRoot = genesis.BuildMerkleTree(); genesis.nVersion = 1; //Временна метка в формате unix, которую мы вставляли при генерации генезис-блока для майнента genesis.nTime = 1390095618; //Nbits у нас это 0x1e0ffff0 genesis.nBits = 0x1e0ffff0; //nonce у нас он 2087222 genesis.nNonce = 28917698; //Это сам генезис блок hashGenesisBlock = genesis.GetHash(); assert(hashGenesisBlock == uint256("0x00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6")); //Это Merkleroot хэш assert(genesis.hashMerkleRoot == uint256("0xe0028eb9648db56b1ac77cf090b99048a8007e2bb64b68f092c03c7f56a662c7")); //ДНС сиды, все заменяем на vSeeds.clear(); vSeeds.push_back(CDNSSeedData("darkcoin.io", "dnsseed.darkcoin.io")); vSeeds.push_back(CDNSSeedData("darkcoin.qa", "dnsseed.darkcoin.qa")); vSeeds.push_back(CDNSSeedData("masternode.io", "dnsseed.masternode.io")); vSeeds.push_back(CDNSSeedData("mycointest.io", "dnsseed.mycointest.io")); //Это отвечает за адрес я его не менял . base58Prefixes[PUBKEY_ADDRESS] = list_of( 76); // Owncoin addresses start with 'X' base58Prefixes[SCRIPT_ADDRESS] = list_of( 16); // Owncoin script addresses start with '7' base58Prefixes[SECRET_KEY] = list_of(204); // Owncoin private keys start with '7' or 'X' base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x02)(0xFE)(0x52)(0xF8); // Owncoin BIP32 pubkeys start with 'drkv' base58Prefixes[EXT_SECRET_KEY] = list_of(0x02)(0xFE)(0x52)(0xCC); // Owncoin BIP32 prvkeys start with 'drkp' base58Prefixes[EXT_COIN_TYPE] = list_of(0x80000005); // Owncoin BIP44 coin type is '5' convertSeed6(vFixedSeeds, pnSeed6_main, ARRAYLEN(pnSeed6_main)); fRequireRPCPassword = true; fMiningRequiresPeers = true; fAllowMinDifficultyBlocks = false; fDefaultConsistencyChecks = false; fRequireStandard = true; fMineBlocksOnDemand = false; fSkipProofOfWorkCheck = false; fTestnetToBeDeprecatedFieldRPC = false; nPoolMaxTransactions = 3; /**Достаточно спорная часть, я думаю вполне возможно просто вставить ключ и после импортировать себе приват кей в кошелек для работы спорка, но могу ошибаться поправьте кто знает. ** В принципе, и без этого все работает. ** Ставим сюда mainspork ** 04594d9bcfd432ed21603c81dc6a2cbdc58ded77217ecd91c0420737f60a1948871a66bb84bff26e0f5dd447ee931b5213bca0d9de686c49f6f03545a03fd79b75 **/ strSporkKey = "04549ac134f694c0243f503e8c8a9a986f5de6610049c40b07816809b0d1d06a21b07be27b9bb555931773f62ba6cf35a25fd52f694d4e1106ccd237a7bb899fdd"; strMasternodePaymentsPubKey = "04549ac134f694c0243f503e8c8a9a986f5de6610049c40b07816809b0d1d06a21b07be27b9bb555931773f62ba6cf35a25fd52f694d4e1106ccd237a7bb899fdd"; strDarksendPoolDummyAddress = "Xq19GqFvajRrEdDHYRKGYjTsQfpV5jyipF"; //Ставим что ставили в генезис блок или делаем отдельный на будущею дату. nStartMasternodePayments = 1403728576; //Wed, 25 Jun 2014 20:36:16 GMT После редактирования это выглядит примерно так: class CMainParams : public CChainParams { public: CMainParams() { networkID = CBaseChainParams::MAIN; strNetworkID = "main"; /** * The message start string is designed to be unlikely to occur in normal data. * The characters are rarely used upper ASCII, not valid as UTF-8, and produce * a large 4-byte int at any alignment. */ pchMessageStart[0] = 0x1c; pchMessageStart[1] = 0xbd; pchMessageStart[2] = 0xcb; pchMessageStart[3] = 0x4f; vAlertPubKey = ParseHex("04f4ef416b8597cbadde2216eb0d4fc5137075a3fa3442b71b4ea97efca14e885aa75911b7ef3e6353281d2515a375e8a510455214031df1ac46e443e1ea9a9647"); nDefaultPort = 9887; bnProofOfWorkLimit = ~uint256(0) >> 20; // Owncoin starting difficulty is 1 / 2^12 nSubsidyHalvingInterval = 210000; nEnforceBlockUpgradeMajority = 750; nRejectBlockOutdatedMajority = 950; nToCheckBlockUpgradeMajority = 1000; nMinerThreads = 0; nTargetTimespan = 24 * 60 * 60; // Owncoin: 1 day nTargetSpacing = 2.5 * 60; // Owncoin: 2.5 minutes /** * Build the genesis block. Note that the output of the genesis coinbase cannot * be spent as it did not originally exist in the database. * * CBlock(hash=00000ffd590b14, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=e0028e, nTime=1390095618, nBits=1e0ffff0, nNonce=28917698, vtx=1) * CTransaction(hash=e0028e, ver=1, vin.size=1, vout.size=1, nLockTime=0) * CTxIn(COutPoint(000000, -1), coinbase 04ffff001d01044c5957697265642030392f4a616e2f3230313420546865204772616e64204578706572696d656e7420476f6573204c6976653a204f76657273746f636b2e636f6d204973204e6f7720416363657074696e6720426974636f696e73) * CTxOut(nValue=50.00000000, scriptPubKey=0xA9037BAC7050C479B121CF) * vMerkleTree: e0028e */ const char* pszTimestamp = "I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you"; CMutableTransaction txNew; txNew.vin.resize(1); txNew.vout.resize(1); txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector<unsigned char>((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); txNew.vout[0].nValue = 50 * COIN; txNew.vout[0].scriptPubKey = CScript() << ParseHex("0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177") << OP_CHECKSIG; genesis.vtx.push_back(txNew); genesis.hashPrevBlock = 0; genesis.hashMerkleRoot = genesis.BuildMerkleTree(); genesis.nVersion = 1; genesis.nTime = 1449579900; genesis.nBits = 0x1e0ffff0; genesis.nNonce = 2087222; hashGenesisBlock = genesis.GetHash(); assert(hashGenesisBlock == uint256("0x00000205a2b36c89d27547db95cdf4a3038662dd26cf21af8b9c8978a64b06a2")); assert(genesis.hashMerkleRoot == uint256("0xb7ba7a0616705a327d39f6bf791c7db48abe4c79a11b62c6d690816eddc4d730")); vSeeds.clear(); base58Prefixes[PUBKEY_ADDRESS] = list_of( 76); // Owncoin addresses start with 'X' base58Prefixes[SCRIPT_ADDRESS] = list_of( 16); // Owncoin script addresses start with '7' base58Prefixes[SECRET_KEY] = list_of(204); // Owncoin private keys start with '7' or 'X' base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x02)(0xFE)(0x52)(0xF8); // Owncoin BIP32 pubkeys start with 'drkv' base58Prefixes[EXT_SECRET_KEY] = list_of(0x02)(0xFE)(0x52)(0xCC); // Owncoin BIP32 prvkeys start with 'drkp' base58Prefixes[EXT_COIN_TYPE] = list_of(0x80000005); // Owncoin BIP44 coin type is '5' convertSeed6(vFixedSeeds, pnSeed6_main, ARRAYLEN(pnSeed6_main)); fRequireRPCPassword = true; fMiningRequiresPeers = true; fAllowMinDifficultyBlocks = false; fDefaultConsistencyChecks = false; fRequireStandard = true; fMineBlocksOnDemand = false; fSkipProofOfWorkCheck = false; fTestnetToBeDeprecatedFieldRPC = false; nPoolMaxTransactions = 3; strSporkKey = "04594d9bcfd432ed21603c81dc6a2cbdc58ded77217ecd91c0420737f60a1948871a66bb84bff26e0f5dd447ee931b5213bca0d9de686c49f6f03545a03fd79b75"; strMasternodePaymentsPubKey = "04594d9bcfd432ed21603c81dc6a2cbdc58ded77217ecd91c0420737f60a1948871a66bb84bff26e0f5dd447ee931b5213bca0d9de686c49f6f03545a03fd79b75"; strDarksendPoolDummyAddress = "Xq19GqFvajRrEdDHYRKGYjTsQfpV5jyipF"; nStartMasternodePayments = 1449579900; //Wed, 25 Jun 2014 20:36:16 GMT Проделываем то же самое для тестнета и регтеста. В регтесте обратите внимание: bits: 0x207fffff Также не забываем везде менять порты: main 9999 на 9887 testnet 19999 на 19887 regtest 19994 на 19883 Unite=test 18445 на 18334 Сохраняем main и открываем activemasternode.cpp Находим следующий кусок и заменяем порт на наш (9887): if(Params().NetworkID() == CBaseChainParams::MAIN) { if(service.GetPort() != 9999) { notCapableReason = strprintf("Invalid port: %u - only 9999 is supported on mainnet.", service.GetPort()); LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason); return; } } else if(service.GetPort() == 9999) { notCapableReason = strprintf("Invalid port: %u - 9999 is only supported on mainnet.", service.GetPort()); LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason); return; } И также в этом куске: CService service = CService(strService); if(Params().NetworkID() == CBaseChainParams::MAIN) { if(service.GetPort() != 9999) { errorMessage = strprintf("Invalid port %u for masternode %s - only 9999 is supported on mainnet.", service.GetPort(), strService); LogPrintf("CActiveMasternode::Register() - %s\n", errorMessage); return false; } } else if(service.GetPort() == 9999) { errorMessage = strprintf("Invalid port %u for masternode %s - 9999 is only supported on mainnet.", service.GetPort(), strService); LogPrintf("CActiveMasternode::Register() - %s\n", errorMessage); return false; } Открываем chainparamsbase.cpp и заменяем порты: * Main network */ class CBaseMainParams : public CBaseChainParams { public: CBaseMainParams() { networkID = CBaseChainParams::MAIN; nRPCPort = 9998; } }; static CBaseMainParams mainParams; /** * Testnet (v3) */ class CBaseTestNetParams : public CBaseMainParams { public: CBaseTestNetParams() { networkID = CBaseChainParams::TESTNET; nRPCPort = 19998; strDataDir = "testnet3"; } }; Открываем chainparamsseeds.h Тут прописываем вшитые seed-фразы. Переходим сюда или любой другой конвертер ip-адреса в hex-формат. Пишем там свой ip-адрес (например, 127.0.0.1 возвращает 0x7f000001). Отбрасываем 0х, и разделяем по два знака: 7f 00 00 01. Теперь заменяем после 0xff 0xff, не забываем про порт. Должно получиться что-то вроде: // ***TODO*** fix generate-seeds.py and REGENERATE static SeedSpec6 pnSeed6_main[] = { {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x7f,0x00,0x00,0x01}, 9887} }; static SeedSpec6 pnSeed6_test[] = { // {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x99,0xcb,0x26,0x31,0xba,0x48,0x51,0x31,0x39,0x0d}, 18333}, // {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x44,0xf4,0xf4,0xf0,0xbf,0xf7,0x7e,0x6d,0xc4,0xe8}, 18333} }; #endif // BITCOIN_CHAINPARAMSSEEDS_H Открываем clientversion.h Здесь указывается версия клиента. Чтобы сделать ее 1.0.0.1 нужно изменить так: //! These need to be macros, as clientversion.cpp's and owncoin*-res.rc's voodoo requires it #define CLIENT_VERSION_MAJOR 1 #define CLIENT_VERSION_MINOR 0 #define CLIENT_VERSION_REVISION 0 #define CLIENT_VERSION_BUILD 1 Управление сложностью майнига и наградами мастер нодам в main.cpp Тут я ничего не менял, но вы можете поэксперементировать! Открываем masternode.cpp Снова находим, где нужно заменить порты на 9887: if(Params().NetworkID() == CBaseChainParams::MAIN) { if(addr.GetPort() != 9999) return false; } else if(addr.GetPort() == 9999) return false; Открываем masternodeconfig.cpp и опять меняем порты на 9887: if(Params().NetworkID() == CBaseChainParams::MAIN) { if(CService(ip).GetPort() != 9999) { strErr = _("Invalid port detected in masternode.conf") + "\n" + strprintf(_("Line: %d"), linenumber) + "\n\"" + line + "\"" + "\n" + _("(must be 9999 for mainnet)"); streamConfig.close(); return false; } } else if(CService(ip).GetPort() == 9999) { strErr = _("Invalid port detected in masternode.conf") + "\n" + strprintf(_("Line: %d"), linenumber) + "\n\"" + line + "\"" + "\n" + _("(9999 could be used only on mainnet)"); streamConfig.close(); return false; } Открываем masternodeman.cpp и изменяем порты на 9887: if(Params().NetworkID() == CBaseChainParams::MAIN){ if(addr.GetPort() != 9999) return; } else if(addr.GetPort() == 9999) return; Сохраняем все исходники Переходим сюда: D:\owncoin\owncoin\contrib\linearize\linearize-hashes.py И снова изменяем все порты: if 'host' not in settings: settings['host'] = '127.0.0.1' if 'port' not in settings: settings['port'] = 9998 if 'min_height' not in settings: settings['min_height'] = 0 if 'max_height' not in settings: settings['max_height'] = 313000 if 'rpcuser' not in settings or 'rpcpassword' not in settings: print("Missing username and/or password in cfg file", file=stderr) sys.exit(1) Переходим сюда: D:\owncoin\owncoin\contrib\spendfrom\spendfrom.py Меняем порты: testnet = config.get('testnet', '0') testnet = (int(testnet) > 0) # 0/1 in config file, convert to True/False if not 'rpcport' in config: config['rpcport'] = 19998 if testnet else 9998 Переходим сюда: D:\owncoin\owncoin\contrib\bitrpc\bitrpc.py Меняем порты: if rpcpass == "": access = ServiceProxy("http://127.0.0.1:9998") else: access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:9998") cmd = sys.argv[1].lower() Идем сюда: D:\owncoin\owncoin\contrib\qos\tc.sh Меняем порты: # this filter sends the packages into the 1:11 class, and this class is limited to ${LIMIT} iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 9999 ! -d ${LOCALNET} -j MARK --set-mark 0x2 iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 9999 ! -d ${LOCALNET} -j MARK --set-mark 0x2 Идем сюда D:\owncoin\owncoin\src\test\netbase_tests.cpp Заменяем порты BOOST_CHECK(TestSplitHost("www.bitcoin.org", "www.bitcoin.org", -1)); BOOST_CHECK(TestSplitHost("[www.bitcoin.org]", "www.bitcoin.org", -1)); BOOST_CHECK(TestSplitHost("www.bitcoin.org:80", "www.bitcoin.org", 80)); BOOST_CHECK(TestSplitHost("[www.bitcoin.org]:80", "www.bitcoin.org", 80)); BOOST_CHECK(TestSplitHost("127.0.0.1", "127.0.0.1", -1)); BOOST_CHECK(TestSplitHost("127.0.0.1:9999", "127.0.0.1", 9999)); BOOST_CHECK(TestSplitHost("[127.0.0.1]", "127.0.0.1", -1)); BOOST_CHECK(TestSplitHost("[127.0.0.1]:9999", "127.0.0.1", 9999)); BOOST_CHECK(TestSplitHost("::ffff:127.0.0.1", "::ffff:127.0.0.1", -1)); BOOST_CHECK(TestSplitHost("[::ffff:127.0.0.1]:9999", "::ffff:127.0.0.1", 9999)); BOOST_CHECK(TestSplitHost("[::]:9999", "::", 9999)); BOOST_CHECK(TestSplitHost("::9999", "::9999", -1)); BOOST_CHECK(TestSplitHost(":9999", "", 9999)); BOOST_CHECK(TestSplitHost("[]:9999", "", 9999)); BOOST_CHECK(TestSplitHost("", "", -1)); Потом в поиске вбиваем "9999", прыгаем в конец документа и снова заменяем порты: BOOST_CHECK(TestParse("127.0.0.1", "127.0.0.1:65535")); BOOST_CHECK(TestParse("127.0.0.1:9999", "127.0.0.1:9999")); BOOST_CHECK(TestParse("::ffff:127.0.0.1", "127.0.0.1:65535")); BOOST_CHECK(TestParse("::", "[::]:65535")); BOOST_CHECK(TestParse("[::]:9999", "[::]:9999")); BOOST_CHECK(TestParse("[127.0.0.1]", "127.0.0.1:65535")); BOOST_CHECK(TestParse(":::", "")); Идем сюда D:\owncoin\owncoin\contrib\seeds\makeseeds.py И изменяем эту часть: SUSPICIOUS_HOSTS = set([ "130.211.129.106", "178.63.107.226", "83.81.130.26", "88.198.17.7", "148.251.238.178", "176.9.46.6", "54.173.72.127", "54.174.10.182", "54.183.64.54", "54.194.231.211", "54.66.214.167", "54.66.220.137", "54.67.33.14", "54.77.251.214", "54.94.195.96", "54.94.200.247" ]) import re import sys import dns.resolver PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):9999$") PATTERN_AGENT = re.compile(r"^(\/Satoshi:0.8.6\/|\/Satoshi:0.9.(2|3)\/|\/Core:0.1(0|1|2).\d{1,2}.\d{1,2}\/)$") На такое: SUSPICIOUS_HOSTS = set([ "127.0.0.1" # - наш ип основной ноды ]) import re import sys import dns.resolver PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):9887$") # тут изменяем порт PATTERN_AGENT = re.compile(r"^(\/Satoshi:0.8.6\/|\/Satoshi:0.9.(2|3)\/|\/Core:0.1(0|1|2).\d{1,2}.\d{1,2}\/)$") Идем сюда D:\owncoin\owncoin\share\seeds В обоих текстовых документах удаляем все ip-адреса и пишем свой. Открываем generate-seeds.py и заменяем порты здесь: with open(os.path.join(indir,'nodes_main.txt'),'r') as f: process_nodes(g, f, 'pnSeed6_main', 9999) g.write('\n') with open(os.path.join(indir,'nodes_test.txt'),'r') as f: process_nodes(g, f, 'pnSeed6_test', 19999) g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n') Переходим сюда D:\owncoin\owncoin\configure.ac И ставим версию, которую мы указывали ранее (1.0.0.1) define(_CLIENT_VERSION_MAJOR, 0) define(_CLIENT_VERSION_MINOR, 12) define(_CLIENT_VERSION_REVISION, 0) define(_CLIENT_VERSION_BUILD, 55) Переходим сюда D:\owncoin\owncoin\contrib\gitian-descriptors И в каждом файле изменяем name: "owncoin-win-0.12" enable_cache: true На name: "owncoin-win-1.0.0.1" enable_cache: true Не забываем все сохранить! Заходим в клиент гитхаба и снова все коммитим Идем в репозиторий нового коина на гитхабе https://github.com/username/owncoin Жмем на "Releases" и потом "Draft a new release". В таге пишем версию 1.0.0.1, жмем "Publish release" Идем в консоль Debian и убеждаемся, что мы в корневом каталоге пользователя debian Выполняем: git clone https://github.com/mycointest/owncoin Выполняем: cd gitian-builder Выполняем: cd ~debian/owncoin Выполняем: git pull Выполняем: cd ~debian/gitian-builder Снова качаем зависимости make -C ../owncoin/depends download SOURCES_PATH=`pwd`/cache/common Собираем ./bin/gbuild --commit owncoin=v1.0.0.1 ../owncoin/contrib/gitian-descriptors/gitian-win.yml Снова открываем параллельно 2 сессии по SSH, в них переходим: cd gitian-builder Смотрим сборку с помощью tail -f var/install.log tail -f var/build.log Дожидаемся компиляции, берем клиент с ftp, делаем вторую папку под data, запускам первый клиент и второй клиент с -datadir=owncoin2 –listen=0 –gen=1 В конфигурационном файл не забываем прописать addnode=127.0.0.1 Запускаем сначала тот что c –listen=1, а после уже тот что с 0, и наблюдаем генерацию монеток Поздравляю! Мы создали собственный форк Dash! Можно перекурить Другие части мануала: Первая часть Вторая часть Третья часть Четвертая часть Пятая часть
  8. В этой части мы настроим наши исходники. Итак, поехали: Для начала нам нужно сгенерировать public & private keys. Идем в Debian, в консоли пишем openssl ecparam -genkey -name secp256r1 -out out.pem После -out пишется название файла ключа. Будем их называть так: mainalert.pem testnetalert.pem main.pem mainspork.pem testnetspork.pem openssl ecparam -genkey -name secp256r1 -out mainalert.pem Вывод ключа осуществляем командой: openssl ec -in in.pem -noout –text Т.е. openssl ec -in mainalert.pem -noout -text Копируем полученные ключи и сохраняем в текстовый документ, убираем все двоеточия и приводим к одной строке. Делаем так 5 раз. Должны получить что-то вроде: Далее для каждого файла выполняем: openssl ec -in mainalert.pem -text > mainalert.hex openssl ec -in main.pem -text > main.hex И т.д. Далее так же для каждого файла выполняем: cat mainalert.hex Теперь открываем FTP клиент (Filezilla) и из /home/debian копируем все файлы с ключами на диск Проверим валидность ключей: Идем сюда Для каждой пары ключей, заполняем поля, далее жмем "sign message" и потом "verify it!". Если получаем алерт с надписью "valid ECDSA signature", значит все ок. Теперь генерируем генезиз-блоки Открываем консоль в нашей Debian Выполняем cd GenesisH0 Берем main public key Придумываем уникальную фразу pszTimestamp (это не seed-фраза) Придумываем дату старта, какую хотим и конвертируем ее в unix-формат (например, здесь) Выполняем такой запрос: python genesis.py -a X11 -z "придуманная фраза" -t unixTimestamp -p "main public key" В моем случае у меня было так: python genesis.py -a X11 -z "I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you" -t 1449579900 -p "0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177" Ждем, когда сгенерируется генезис-блок, результат сохраняем в текстовый файл. Для создания тестнета мы прибавим к unixTimestamp единицу (к дате старта прибавим 1 секунду) python genesis.py -a X11 -z "I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you" -t 1449579901 -p "0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177" А для регтестнета прибавим 2 и добавим в конце еще два параметра: python genesis.py -a X11 -z "I create my owncoin 07/12/2015 for test , End its work for me. I hope this guide help you" -t 1449579902 -p "0436b2d4b1a72bcad8a8f9b8d12048014bcbbb21df91d84ed172cbcfe8aa6f0e9da5e995fa3b8c63da129c247b73cdd55bac80abc2b67adfbf88381a9889e64177" -b 0x207fffff –n 2 Не забываем сохранять все в текстовый документ. В результате получим что-то вроде: На этом настройка исходников закончена. В следующей части разберем редактирование исходников. Другие части мануала: Первая часть Вторая часть Третья часть Четвертая часть Шестая часть
  9. В этой части мы будем редактировать исходники. Идем на гитхаб и переименовываем наш репозиторий на название новой монетки (Свой коин так свой коин - owncoin) Открываем клиент гитхаба на windows, логинимся и клонируем репозиторий монетки на диск Открываем Notepad++, в нем открываем поиск и переходим на вкладку "Найти в файлах". В поле "Найти" пишем: github.com/dashpay/dash В поле "Заменить на" пишем: github.com/username/owncoin Проверяем, что в поле "Папка" указана папка с исходниками нашей монетки, стоят галочки "Во всех подпапках" и "В скрытых папках", жмем "Заменить в файлах" Переходим в клиент гитхаба и видим запрос на коммит: в полях Summary и Description пишем любые сообщения и жмем Comit to master Теперь нужно переименовать DASHPAY, Dashpay и dashpay на наш username на гитхабе с аналогичным регистром, а также DASH, Dash и dash на название нашей монетки в таком же регистре. Также через поиск в Notepad++ заменим во всех файлах "Dashpay" на условный "Username" (ваш репозиторий на гитхабе) dashpay на username DASH на OWNCOIN Dash на Owncoin Тут находятся файлы с кракозябрами, у меня они были такими: D:\owncoin\owncoin\.git\objects\pack\pack-86e81c3d9a98b214df607081954f37e571a09fd6.pack D:\owncoin\owncoin\contrib\gitian-downloader\luke-jr-key.pgp D:\owncoin\owncoin\contrib\macdeploy\background.psd Просто копирую их в любое место, заменяю Dash на Owncoin и потом эти файлы копирую с заменой обратно. dash на owncoin Опять находятся файлы с кракозябрами, делаю все то же самое D:\owncoin\owncoin\.git\index D:\owncoin\owncoin\.git\objects\pack\pack-86e81c3d9a98b214df607081954f37e571a09fd6.pack D:\owncoin\owncoin\contrib\gitian-downloader\luke-jr-key.pgp Переходим в папку: D:\key\owncoin\src\qt\res\icons И везде в названиях, где встречается "dash" заменяем на "owncoin" (не полностью название, а только часть с dash) Переходим в клиент гитхаба и коммитим изменения В следующей части мы будем настраивать наши исходники. Другие части мануала: Первая часть Вторая часть Третья часть Пятая часть Шестая часть
  10. Эта часть будет коротенькой, но именно с нее начинается непосредственно сам процесс создания форка. Итак, поехали! Устанавливаем генератор Genesis-блока, как запустить конструктор там описано Клонируем модуль для монеток git clone https://github.com/lhartikk/xcoin-hash Переходим к исходнику модуля: cd xcoin-hash Выполняем сборку sudo python setup.py install Клонируем генератор генезиз-блока git clone https://github.com/lhartikk/GenesisH0 Переходим к нему cd GenesisH0 Проверяем его работоспособность python genesis.py -a X11 -z "Wired 09/Jan/2014 The Grand Experiment Goes Live: Overstock.com Is Now Accepting Bitcoins" -t 1317972665 -p "040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9" -n 28917698 -t 1390095618 -v 5000000000 Если на выходе имеем такое, значит все ок! Продолжение в следующей части. Другие части мануала: Первая часть Вторая часть Четвертая часть Пятая часть Шестая часть
  11. Продолжаем мануал о том, как форкнуть дэш. В этой части будет рассмотрена подготовка к самому процессу создания форка. Итак, поехали: Для начала нужно настроить механизм проброса портов (port forward) для подключения по SSH Заходим в VMware -> Правка -> Редактор виртуальной сети В открывшемся окне жмем "Изменить параметры" Выбираем сеть NAT, жмем "Параметры DHCP" и ставим как у меня , что бы ip не менялся после каждой перезагрузки Заходим в окно виртуальной машины и логинимся под нашим пользователем (которого мы создавали в 1ой части мануала) Пишем в терминале: su Потребуется ввести пароль пользователя, затем вводим в терминале: ipconfig Получаем что-то типа такого: Запоминаем ip-адрес (в данном случае 192.168.200.129) Переходим в редактор сети (повторяем шаги 1 и 2), снова выбираем сеть NAT, жмем "Параметры NAT", увидим такое окно: Жмем "Добавить" и прописываем ip-адрес и порты: Далее жмем "ОК" в обоих окнах Открываем клиент PuTTY и подключаемся по SSH: Если можете залогиниться, то значит все настроено правильно и можно двигаться дальше Кто еще не зареган да гитхабе, регистрируется, в ином случае форкаем репозиторий dash Настраиваем Debian в качестве сервера компиляции: Открываем терминал, пишем: su Вводим пароль Выполняем apt-get update, apt-get upgrade Выполняем apt-get install git ruby sudo apt-cacher-ng qemu-utils debootstrap lxc python-cheetah parted kpartx bridge-utils python-dev python-pip python2.7-dev libssl-dev Даем права sudo права пользователю debian и конфигурируем LXC adduser debian sudo echo "%sudo ALL=NOPASSWD: /usr/bin/lxc-start" > /etc/sudoers.d/gitian-lxc echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" >> /etc/fstab echo '#!/bin/sh -e' > /etc/rc.local echo 'brctl addbr br0' >> /etc/rc.local echo 'ifconfig br0 10.0.3.2/24 up' >> /etc/rc.local echo 'exit 0' >> /etc/rc.local # make sure that USE_LXC is always set when logging in as debian, # and configure LXC IP addresses echo 'export USE_LXC=1' >> /home/debian/.profile echo 'export GITIAN_HOST_IP=10.0.3.2' >> /home/debian/.profile echo 'export LXC_GUEST_IP=10.0.3.5' >> /home/debian/.profile reboot Переходим в PuTTY, подключаемся к серверу под пользователем Debian Качаем и устанавливаем python-vm-builder wget http://archive.ubuntu.com/ubuntu/pool/universe/v/vm-builder/vm-builder_0.12.4+bzr489.orig.tar.gz Проверяем контрольную сумму: echo "ec12e0070a007989561bfee5862c89a32c301992dd2771c4d5078ef1b3014f03 vm-builder_0.12.4+bzr489.orig.tar.gz" | sha256sum -c Должно вернуться ok Распаковываем архив: tar -zxvf vm-builder_0.12.4+bzr489.orig.tar.gz Переходим в папку, которую распаковали cd vm-builder-0.12.4+bzr489 Устанавливаем: sudo python setup.py install Возвращаемся в каталоге на уровень обратно: cd .. Клонируем репозиторий Gitian git clone https://github.com/devrandom/gitian-builder.git Клонируем наш репозиторий на гитхабе, что-то типа: git clone https://github.com/username/dash Собираем gitian Переходим в его поддиректорию: cd gitian-builder Собираем: bin/make-base-vm --lxc --arch amd64 --suite precise Возвращаемся: cd .. Пробуем собрать коин: Переходим в поддиректорию коина: cd ~debian/dash Обновляем: git pull Переходим в папку комилятора: cd ~debian/gitian-builder Качаем зависимости, можно перекурить make -C ../dash/depends download SOURCES_PATH=`pwd`/cache/common Собираем /bin/gbuild --commit dash=v0.12.0.x ../dash/contrib/gitian-descriptors/gitian-win.yml ПАРАЛЛЕЛЬНО открываем две сессии по SSH (напоминаю, через клиент PuTTY), переходим в поддиректорию: cd gitian-builder Дожидаемся в основной консоли, когда будут созданы логи install и build, открываем их через открытые клиенты PuTTY tail -f var/install.log tail -f var/build.log Процесс достаточно долгий, можно пойти перекусить. В итоге увидим что-то вроде такого: Подключаемся по ftp к нашему Debian по sftp://127.0.0.1 , пользователь debian, пароль от пользователя, порт 22222 на котором у нас SSH (в windows клиент Filezilla), переходим в следующие директорию: /home/debian/gitian-builder/build/out Видим наши бинарники: На этом вторая часть создания форка завершена. Читайте продолжение. Другие части мануала: Первая часть Третья часть Четвертая часть Пятая часть Шестая часть
  12. Всем привет! Хочу поделиться мануалом как сделать форк криптовалюты Dash. Мануал будет состоять из нескольких частей. Дабы избежать в дальнейшем вопросов а-ля "на какой х... делать форк дэша", отвечаю: делал его просто по фану. Небольшое отступление. Что мне понадобилось: ОС Windows 7 Виртуальная машина (я использовал VMware) Клиент github под Windows Notepad++ (можно скачать отсюда) SHH клиент Putty (скачать здесь) Образ Debian x64 (здесь) Любой редактор иконок Проверка и генератор public & private keys (например, здесь) Конвертер даты в unix-формат (например, этот) В первой части будет рассмотрено создание виртуальной машины с ОС Debian. Итак, поехали: Качаем, устанавливаем все необходимое Создаем виртуальною машину под Debian Файл -> Новая виртуальная машина Выбираем выборочный тип конфигурации, жмем Далее Выбираем версию виртуальной машины (я выбрал 12), жмем Далее Выбираем "Я установлю операционною систему позже", жмем Далее Выбираем Linux , Debian 8.x 64-bit, жмем Далее Выбираем название виртуальной машины и где будет находится её файл конфигурации, жмем Далее Выбираем количество процессор и ядер для виртуальной машины, жмем Далее Выбираем количество доступной памяти для виртуальной машины, жмем Далее Выбираем тип сети – NAT, жмем Далее Выбираем тип контролера диска LSI Logic, жмем Далее Выбираем тип диска SCSI, жмем Далее Выбираем создать виртуальный диск, жмем Далее Выбираем количество памяти которое будет выделено под диск, жмем Далее Выбираем место куда сохранить наш диск, жмем Далее Жмем Готово. Тут можно пойти покурить немного размяться, т.к. создание диска занимает некоторое время. Жмем "Изменить настройки" и выбираем наш файл образа Debian, ставим галочку "Подключить при включении питания", жмем ОК и включаем нашу виртуальною машину Далее выбираем Install, жмем Enter Выбираем язык, жмем Enter Выбираем страну, жмем Enter Выбираем раскладку клавиатуры, жмем Enter Задаем системе имя, жмем Enter Жмем Enter (поле Domain name остается пустым) Задаем пароль, жмем Enter Повторяем пароль, жмем Enter Вводим полное имя пользователя (можно какое угодно, я просто дублирую имя системы), жмем Enter Задаем никнейм для аккаунта (я задаю debian), жмем Enter Задаем пароль пользователя, жмем Enter Повторяем пароль, жмем Enter Выбираем временную зону, жмем Enter Делаем разметку диска, выбираем Guided - Use the entire disk, жмем Enter Жмем Enter Выбираем All files in one partition, жмем Enter Выбираем Finish partitioning and write changes to disk, жмем Enter Выбираем Yes, жмем Enter Выбираем зеркало репозитория, жмем Enter HTTP proxy information можно оставить пустым, жмем Enter Жмем Enter Выбираем только SSH server и Standard System Utilitits, со всего остального снимаем выбор (выбрать и снять выбор делаем пробелом), жмем Enter и на перекур Выбираем Yes, жмем Enter Выбираем /dev/sda, жмем Enter Жмем Enter На этом создание виртуальной машины завершено. Продолжение в следующей части. Другие части мануала: Вторая часть Третья часть Четвертая часть Пятая часть Шестая часть
  13. Всем привет! Начну с того, зачем я пишу очередной туториал по сборке Lite client'а TON, если их существует уже с десяток на русском языке. Главная причина: все туториалы, написанные весной-летом 2019 - не работают. Я ни капли ни умаляю заслуг авторов этих статей, т.к. все они мне в той или иной степени помогли, но в сентябрьском обновлении некоторые команды немного изменились (не критично, суть осталась та же, достаточно просто взять любой туториал и соединить его с тем, что находится на https://test.ton.org/ или дочитать до конца). Небольшое отступление о системных характеристиках. Я работаю с Ubuntu 18.04 на виртуальной машине. Сразу хочу сказать, что оперативки у вас должно быть достаточно. Достаточно - понятие растяжимое, но 2Гб мне не хватило, oom killer прерывал процесс сборки на 84%. Итак, начнем: При необходимости можно обновить систему до версии 18.04: sudo apt update && sudo apt upgrade -y Далее нужно установить make и cmake: sudo apt install ubuntu-make sudo apt install cmake Устанавливаем clang: sudo apt install clang Устанавливаем OpenSSL: sudo apt-get install libssl-dev После этого шага, как правило, требуется выполнить еще одну команду: sudo apt-get install gperf Также я столкнулся с тем, что cmake не могу найти некоторые библиотеки, ставим их: sudo apt-get install zlib1g-dev sudo apt-get install ccache sudo apt install libreadline-dev И в одном из туториалов я нашел, что нужно выполнить такую команду: sudo apt install build-essential На этом шаге я скачивал архив с клиентом с сайта https://test.ton.org/, распаковывал его на рабочий стол, и рядом на рабочем столе создавал папку liteclient-build Переходим в созданную папку: cd /home/USER/Desktop/liteclient-build Выполняем: cmake /home/USER/Desktop/lite-client cmake --build . --target lite-client При желании можно сразу собрать Fift: cmake --build . --target fift Теперь скачиваем с сайта файл конфигурации: wget https://test.ton.org/ton-lite-client-test1.config.json И подключаемся к тестнету: ./lite-client/lite-client -C ton-lite-client-test1.config.json Можно ввести команду help и увидеть список доступных команд. В силу того, что кран с тестовыми Grams уже пустой, то загрузить какой-либо смарт-контракт в блокчейн у меня не удалось. Позже, когда кран пополнят, напишу туториал по созданию смарт-контрактов.
×
×
  • Создать...

Важная информация

Для полноценной работы с порталом Cryptorussia.net необходимо принять следующие положения и правила:
1. Условия использования
2. Политика конфиденциальности
3. Правила

Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.