From 737b9cfd980d4f0ab4ad956d844a34d13938829b Mon Sep 17 00:00:00 2001 From: Max Wittal Date: Wed, 16 Jun 2021 23:12:55 +0200 Subject: [PATCH 01/11] added puzzle hash option --- src/chia_plot.cpp | 77 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 18 deletions(-) diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index a5669351..90ededd7 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -58,12 +58,14 @@ inline phase4::output_t create_plot( const int num_threads, const int log_num_buckets, const vector& pool_key_bytes, + const vector& puzzle_hash_bytes, const vector& farmer_key_bytes, const std::string& tmp_dir, const std::string& tmp_dir_2) { const auto total_begin = get_wall_time_micros(); - + const bool have_puzzle = !puzzle_hash_bytes.empty(); + std::cout << "Process ID: " << GETPID() << std::endl; std::cout << "Number of Threads: " << num_threads << std::endl; std::cout << "Number of Buckets: 2^" << log_num_buckets @@ -71,11 +73,13 @@ phase4::output_t create_plot( const int num_threads, bls::G1Element pool_key; bls::G1Element farmer_key; - try { - pool_key = bls::G1Element::FromByteVector(pool_key_bytes); - } catch(std::exception& ex) { - std::cout << "Invalid poolkey: " << bls::Util::HexStr(pool_key_bytes) << std::endl; - throw; + if(!have_puzzle) { + try { + pool_key = bls::G1Element::FromByteVector(pool_key_bytes); + } catch(std::exception& ex) { + std::cout << "Invalid poolkey: " << bls::Util::HexStr(pool_key_bytes) << std::endl; + throw; + } } try { farmer_key = bls::G1Element::FromByteVector(farmer_key_bytes); @@ -83,7 +87,11 @@ phase4::output_t create_plot( const int num_threads, std::cout << "Invalid farmerkey: " << bls::Util::HexStr(farmer_key_bytes) << std::endl; throw; } - std::cout << "Pool Public Key: " << bls::Util::HexStr(pool_key.Serialize()) << std::endl; + if(have_puzzle) { + std::cout << "Pool Puzzle Hash: " << bls::Util::HexStr(puzzle_hash_bytes) << std::endl; + } else { + std::cout << "Pool Public Key: " << bls::Util::HexStr(pool_key.Serialize()) << std::endl; + } std::cout << "Farmer Public Key: " << bls::Util::HexStr(farmer_key.Serialize()) << std::endl; vector seed(32); @@ -97,11 +105,31 @@ phase4::output_t create_plot( const int num_threads, local_sk = MPL.DeriveChildSk(local_sk, i); } const bls::G1Element local_key = local_sk.GetG1Element(); - const bls::G1Element plot_key = local_key + farmer_key; + + bls::G1Element plot_key; + if(have_puzzle) { + vector bytes = (local_key + farmer_key).Serialize(); + { + const auto more_bytes = local_key.Serialize(); + bytes.insert(bytes.end(), more_bytes.begin(), more_bytes.end()); + } + { + const auto more_bytes = farmer_key.Serialize(); + bytes.insert(bytes.end(), more_bytes.begin(), more_bytes.end()); + } + std::vector hash(32); + bls::Util::Hash256(hash.data(), bytes.data(), bytes.size()); + + const auto taproot_sk = MPL.KeyGen(hash); + plot_key = local_key + farmer_key + taproot_sk.GetG1Element(); + } + else { + plot_key = local_key + farmer_key; + } phase1::input_t params; { - vector bytes = pool_key.Serialize(); + vector bytes = have_puzzle ? puzzle_hash_bytes : pool_key.Serialize(); { const auto plot_bytes = plot_key.Serialize(); bytes.insert(bytes.end(), plot_bytes.begin(), plot_bytes.end()); @@ -115,8 +143,11 @@ phase4::output_t create_plot( const int num_threads, std::cout << "Working Directory 2: " << (tmp_dir_2.empty() ? "$PWD" : tmp_dir_2) << std::endl; std::cout << "Plot Name: " << plot_name << std::endl; - // memo = bytes(pool_public_key) + bytes(farmer_public_key) + bytes(local_master_sk) - params.memo.insert(params.memo.end(), pool_key_bytes.begin(), pool_key_bytes.end()); + if(have_puzzle) { + params.memo.insert(params.memo.end(), puzzle_hash_bytes.begin(), puzzle_hash_bytes.end()); + } else { + params.memo.insert(params.memo.end(), pool_key_bytes.begin(), pool_key_bytes.end()); + } params.memo.insert(params.memo.end(), farmer_key_bytes.begin(), farmer_key_bytes.end()); { const auto bytes = master_sk.Serialize(); @@ -161,6 +192,7 @@ int main(int argc, char** argv) ); std::string pool_key_str; + std::string puzzle_hash_str; std::string farmer_key_str; std::string tmp_dir; std::string tmp_dir2; @@ -177,6 +209,7 @@ int main(int argc, char** argv) "2, tmpdir2", "Temporary directory 2, needs ~110 GiB [RAM] (default = )", cxxopts::value(tmp_dir2))( "d, finaldir", "Final directory (default = )", cxxopts::value(final_dir))( "p, poolkey", "Pool Public Key (48 bytes)", cxxopts::value(pool_key_str))( + "z, puzzle", "Pool Puzzle Hash (32 bytes)", cxxopts::value(puzzle_hash_str))( "f, farmerkey", "Farmer Public Key (48 bytes)", cxxopts::value(farmer_key_str))( "help", "Print help"); @@ -190,12 +223,12 @@ int main(int argc, char** argv) std::cout << options.help({""}) << std::endl; return 0; } - if(pool_key_str.empty()) { - std::cout << "Pool Public Key (48 bytes) needs to be specified via -p , see `chia keys show`." << std::endl; + if(puzzle_hash_str.empty() && pool_key_str.empty()) { + std::cout << "Pool Public Key (48 bytes) or Pool Puzzle Hash (32 bytes) needs to be specified via -p or -z, see `chia_plot --help`." << std::endl; return -2; } if(farmer_key_str.empty()) { - std::cout << "Farmer Public Key (48 bytes) needs to be specified via -f , see `chia keys show`." << std::endl; + std::cout << "Farmer Public Key (48 bytes) needs to be specified via -f, see `chia keys show`." << std::endl; return -2; } if(tmp_dir.empty()) { @@ -209,12 +242,20 @@ int main(int argc, char** argv) final_dir = tmp_dir; } const auto pool_key = hex_to_bytes(pool_key_str); + const auto puzzle_hash = hex_to_bytes(puzzle_hash_str); const auto farmer_key = hex_to_bytes(farmer_key_str); const int log_num_buckets = num_buckets >= 16 ? int(log2(num_buckets)) : num_buckets; - if(pool_key.size() != bls::G1Element::SIZE) { - std::cout << "Invalid poolkey: " << bls::Util::HexStr(pool_key) << ", '" << pool_key_str - << "' (needs to be " << bls::G1Element::SIZE << " bytes, see `chia keys show`)" << std::endl; + if(puzzle_hash.empty()) { + if(pool_key.size() != bls::G1Element::SIZE) { + std::cout << "Invalid poolkey: " << bls::Util::HexStr(pool_key) << ", '" << pool_key_str + << "' (needs to be " << bls::G1Element::SIZE << " bytes, see `chia keys show`)" << std::endl; + return -2; + } + } + else if(puzzle_hash.size() != 32) { + std::cout << "Invalid puzzle: " << bls::Util::HexStr(puzzle_hash) << ", '" << pool_key_str + << "' (needs to be 32 bytes, see ?)" << std::endl; return -2; } if(farmer_key.size() != bls::G1Element::SIZE) { @@ -347,7 +388,7 @@ int main(int argc, char** argv) break; } std::cout << "Crafting plot " << i+1 << " out of " << num_plots << std::endl; - const auto out = create_plot(num_threads, log_num_buckets, pool_key, farmer_key, tmp_dir, tmp_dir2); + const auto out = create_plot(num_threads, log_num_buckets, pool_key, puzzle_hash, farmer_key, tmp_dir, tmp_dir2); if(final_dir != tmp_dir) { From 381631b333f3b2bb7cdde4750fbb8930c66ddf3c Mon Sep 17 00:00:00 2001 From: Max Wittal Date: Wed, 16 Jun 2021 23:19:56 +0200 Subject: [PATCH 02/11] quick fix --- src/chia_plot.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index 90ededd7..d145cd74 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -254,7 +254,7 @@ int main(int argc, char** argv) } } else if(puzzle_hash.size() != 32) { - std::cout << "Invalid puzzle: " << bls::Util::HexStr(puzzle_hash) << ", '" << pool_key_str + std::cout << "Invalid puzzle: " << bls::Util::HexStr(puzzle_hash) << ", '" << puzzle_hash_str << "' (needs to be 32 bytes, see ?)" << std::endl; return -2; } From f1a1d6f4d019627816c6b8405d896c16a725bf82 Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 18 Jun 2021 10:40:23 +0200 Subject: [PATCH 03/11] usage info --- src/chia_plot.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index d145cd74..ba7ae204 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -184,6 +184,7 @@ int main(int argc, char** argv) #endif "\n\n" "For and see output of `chia keys show`.\n" + "To plot for pools, specify hash instead of , see `chia plotnft show`.\n" " needs about 220 GiB space, it will handle about 25% of all writes. (Examples: './', '/mnt/tmp/')\n" " needs about 110 GiB space and ideally is a RAM drive, it will handle about 75% of all writes.\n" "Combined (tmpdir + tmpdir2) peak disk usage is less than 256 GiB.\n" From 2b48ad96805a59b2ccb81cbe8c0fa116c432c3b3 Mon Sep 17 00:00:00 2001 From: Max Wittal Date: Wed, 30 Jun 2021 12:28:09 +0200 Subject: [PATCH 04/11] taking pool contract address now (via -c) --- .gitmodules | 3 +++ CMakeLists.txt | 5 ++++- lib/libbech32 | 1 + src/chia_plot.cpp | 37 ++++++++++++++++++++++++++++++------- 4 files changed, 38 insertions(+), 8 deletions(-) create mode 160000 lib/libbech32 diff --git a/.gitmodules b/.gitmodules index c3c126e5..1cb620cc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "lib/BLAKE3"] path = lib/BLAKE3 url = https://github.com/BLAKE3-team/BLAKE3.git +[submodule "lib/libbech32"] + path = lib/libbech32 + url = https://github.com/dcdpr/libbech32.git diff --git a/CMakeLists.txt b/CMakeLists.txt index f02bad0d..ca773dfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,8 @@ message(STATUS "Architecture: ${TARGET_ARCH}") add_subdirectory(lib/bls-signatures) +add_subdirectory(lib/libbech32) + find_package(Threads REQUIRED) if(APPLE) @@ -31,6 +33,7 @@ include_directories( lib include lib/bls-signatures/src + lib/libbech32/include/libbech32 ${BLAKE3_PATH} ${CMAKE_BINARY_DIR}/_deps/relic-src/include ${CMAKE_BINARY_DIR}/_deps/relic-build/include @@ -78,7 +81,7 @@ add_library(chia_plotter STATIC src/settings.cpp ) -target_link_libraries(chia_plotter blake3 fse Threads::Threads) +target_link_libraries(chia_plotter blake3 fse bech32 Threads::Threads) add_executable(test_copy test/test_copy.cpp) add_executable(test_disk_sort test/test_disk_sort.cpp) diff --git a/lib/libbech32 b/lib/libbech32 new file mode 160000 index 00000000..954b14fe --- /dev/null +++ b/lib/libbech32 @@ -0,0 +1 @@ +Subproject commit 954b14fe81602dde0cf5cb6d45208403160fb76c diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index d145cd74..a600e877 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -54,6 +55,27 @@ static void interrupt_handler(int sig) } } +std::vector bech32_address_decode(const std::string& addr) { + const auto res = bech32::decode(addr); + if(res.hrp != "xch") { + throw std::logic_error("invalid contract address (!xch): " + addr); + } + if(res.dp.size() != 52) { + throw std::logic_error("invalid contract address (size != 52): " + addr); + } + Bits bits; + for(int i = 0; i < 51; ++i) { + bits.AppendValue(res.dp[i], 5); + } + bits.AppendValue(res.dp[51] >> 4, 1); + if(bits.GetSize() != 32 * 8) { + throw std::logic_error("invalid contract address (bits != 256): " + addr); + } + std::vector hash(32); + bits.ToBytes(hash.data()); + return hash; +} + inline phase4::output_t create_plot( const int num_threads, const int log_num_buckets, @@ -192,7 +214,7 @@ int main(int argc, char** argv) ); std::string pool_key_str; - std::string puzzle_hash_str; + std::string contract_addr_str; std::string farmer_key_str; std::string tmp_dir; std::string tmp_dir2; @@ -209,7 +231,7 @@ int main(int argc, char** argv) "2, tmpdir2", "Temporary directory 2, needs ~110 GiB [RAM] (default = )", cxxopts::value(tmp_dir2))( "d, finaldir", "Final directory (default = )", cxxopts::value(final_dir))( "p, poolkey", "Pool Public Key (48 bytes)", cxxopts::value(pool_key_str))( - "z, puzzle", "Pool Puzzle Hash (32 bytes)", cxxopts::value(puzzle_hash_str))( + "c, contract", "Pool Contract Address (64 chars)", cxxopts::value(contract_addr_str))( "f, farmerkey", "Farmer Public Key (48 bytes)", cxxopts::value(farmer_key_str))( "help", "Print help"); @@ -223,8 +245,8 @@ int main(int argc, char** argv) std::cout << options.help({""}) << std::endl; return 0; } - if(puzzle_hash_str.empty() && pool_key_str.empty()) { - std::cout << "Pool Public Key (48 bytes) or Pool Puzzle Hash (32 bytes) needs to be specified via -p or -z, see `chia_plot --help`." << std::endl; + if(contract_addr_str.empty() && pool_key_str.empty()) { + std::cout << "Pool Contract Address (64 chars) or Pool Puzzle Hash (32 bytes) needs to be specified via -p or -c, see `chia_plot --help`." << std::endl; return -2; } if(farmer_key_str.empty()) { @@ -242,7 +264,7 @@ int main(int argc, char** argv) final_dir = tmp_dir; } const auto pool_key = hex_to_bytes(pool_key_str); - const auto puzzle_hash = hex_to_bytes(puzzle_hash_str); + const auto puzzle_hash = bech32_address_decode(contract_addr_str); const auto farmer_key = hex_to_bytes(farmer_key_str); const int log_num_buckets = num_buckets >= 16 ? int(log2(num_buckets)) : num_buckets; @@ -254,8 +276,9 @@ int main(int argc, char** argv) } } else if(puzzle_hash.size() != 32) { - std::cout << "Invalid puzzle: " << bls::Util::HexStr(puzzle_hash) << ", '" << puzzle_hash_str - << "' (needs to be 32 bytes, see ?)" << std::endl; + std::cout << "Invalid puzzle hash (pool contract address): " + << bls::Util::HexStr(puzzle_hash) << ", '" << contract_addr_str + << "' (needs to be 32 bytes, see `chia plotnft show`)" << std::endl; return -2; } if(farmer_key.size() != bls::G1Element::SIZE) { From fd45ca0e9dff8b5cb1318d7ee7a5199bf0abebe1 Mon Sep 17 00:00:00 2001 From: Max Wittal Date: Wed, 30 Jun 2021 12:36:54 +0200 Subject: [PATCH 05/11] pool key fix --- src/chia_plot.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index c18c3cfa..8fbba70d 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -276,24 +276,28 @@ int main(int argc, char** argv) if(num_buckets_3 <= 0) { num_buckets_3 = num_buckets; } - const auto pool_key = hex_to_bytes(pool_key_str); - const auto puzzle_hash = bech32_address_decode(contract_addr_str); + std::vector pool_key; + std::vector puzzle_hash; const auto farmer_key = hex_to_bytes(farmer_key_str); const int log_num_buckets = num_buckets >= 16 ? int(log2(num_buckets)) : num_buckets; const int log_num_buckets_3 = num_buckets_3 >= 16 ? int(log2(num_buckets_3)) : num_buckets_3; - if(puzzle_hash.empty()) { + if(contract_addr_str.empty()) { + pool_key = hex_to_bytes(pool_key_str); if(pool_key.size() != bls::G1Element::SIZE) { std::cout << "Invalid poolkey: " << bls::Util::HexStr(pool_key) << ", '" << pool_key_str << "' (needs to be " << bls::G1Element::SIZE << " bytes, see `chia keys show`)" << std::endl; return -2; } } - else if(puzzle_hash.size() != 32) { - std::cout << "Invalid puzzle hash (pool contract address): " - << bls::Util::HexStr(puzzle_hash) << ", '" << contract_addr_str - << "' (needs to be 32 bytes, see `chia plotnft show`)" << std::endl; - return -2; + else { + puzzle_hash = bech32_address_decode(contract_addr_str); + if(puzzle_hash.size() != 32) { + std::cout << "Invalid puzzle hash (pool contract address): " + << bls::Util::HexStr(puzzle_hash) << ", '" << contract_addr_str + << "' (needs to be 32 bytes, see `chia plotnft show`)" << std::endl; + return -2; + } } if(farmer_key.size() != bls::G1Element::SIZE) { std::cout << "Invalid farmerkey: " << bls::Util::HexStr(farmer_key) << ", '" << farmer_key_str From ea04f7bd40a590a01285d5f695e29d66d098e92e Mon Sep 17 00:00:00 2001 From: Max Wittal Date: Wed, 30 Jun 2021 12:51:09 +0200 Subject: [PATCH 06/11] error msg fix --- src/chia_plot.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index 8fbba70d..8a21c3a9 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -256,7 +256,7 @@ int main(int argc, char** argv) return 0; } if(contract_addr_str.empty() && pool_key_str.empty()) { - std::cout << "Pool Contract Address (64 chars) or Pool Puzzle Hash (32 bytes) needs to be specified via -p or -c, see `chia_plot --help`." << std::endl; + std::cout << "Pool Public Key or Pool Contract Address needs to be specified via -p or -c, see `chia_plot --help`." << std::endl; return -2; } if(farmer_key_str.empty()) { From b722db9d1a75120c985af0efe8f0c09ad9649365 Mon Sep 17 00:00:00 2001 From: Max Wittal Date: Wed, 30 Jun 2021 13:52:32 +0200 Subject: [PATCH 07/11] fix for contract addr, begins with txch --- src/chia_plot.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index 8a21c3a9..5cd002b8 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -55,10 +55,14 @@ static void interrupt_handler(int sig) } } -std::vector bech32_address_decode(const std::string& addr) { +std::vector bech32_address_decode(const std::string& addr) +{ const auto res = bech32::decode(addr); - if(res.hrp != "xch") { - throw std::logic_error("invalid contract address (!xch): " + addr); + if(res.encoding != bech32::Bech32m) { + throw std::logic_error("invalid contract address (!Bech32m): " + addr); + } + if(res.hrp != "txch") { + throw std::logic_error("invalid contract address (" + res.hrp + " != txch): " + addr); } if(res.dp.size() != 52) { throw std::logic_error("invalid contract address (size != 52): " + addr); From dcaebfaae9c244f2862f70c5a9844ef1ce08dcb8 Mon Sep 17 00:00:00 2001 From: Max Wittal Date: Wed, 30 Jun 2021 14:37:06 +0200 Subject: [PATCH 08/11] accept both xch and txch for now --- src/chia_plot.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index 5cd002b8..345b0c70 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -61,8 +61,8 @@ std::vector bech32_address_decode(const std::string& addr) if(res.encoding != bech32::Bech32m) { throw std::logic_error("invalid contract address (!Bech32m): " + addr); } - if(res.hrp != "txch") { - throw std::logic_error("invalid contract address (" + res.hrp + " != txch): " + addr); + if(res.hrp != "xch" && res.hrp != "txch") { + throw std::logic_error("invalid contract address (" + res.hrp + " != xch): " + addr); } if(res.dp.size() != 52) { throw std::logic_error("invalid contract address (size != 52): " + addr); From e55f948388713c24f9e3d76e9bd95260ea684272 Mon Sep 17 00:00:00 2001 From: Max Wittal Date: Wed, 30 Jun 2021 18:58:23 +0200 Subject: [PATCH 09/11] better error checking --- src/chia_plot.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index 345b0c70..3dadd2a2 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -260,7 +260,11 @@ int main(int argc, char** argv) return 0; } if(contract_addr_str.empty() && pool_key_str.empty()) { - std::cout << "Pool Public Key or Pool Contract Address needs to be specified via -p or -c, see `chia_plot --help`." << std::endl; + std::cout << "Pool Public Key (for solo farming) or Pool Contract Address (for pool farming) needs to be specified via -p or -c, see `chia_plot --help`." << std::endl; + return -2; + } + if(!contract_addr_str.empty() && !pool_key_str.empty()) { + std::cout << "Choose either Pool Public Key (for solo farming) or Pool Contract Address (for pool farming), see `chia_plot --help`." << std::endl; return -2; } if(farmer_key_str.empty()) { @@ -295,11 +299,16 @@ int main(int argc, char** argv) } } else { - puzzle_hash = bech32_address_decode(contract_addr_str); - if(puzzle_hash.size() != 32) { - std::cout << "Invalid puzzle hash (pool contract address): " + try { + puzzle_hash = bech32_address_decode(contract_addr_str); + if(puzzle_hash.size() != 32) { + throw std::logic_error("pool puzzle hash needs to be 32 bytes"); + } + } + catch(std::exception& ex) { + std::cout << "Invalid contract (address): 0x" << bls::Util::HexStr(puzzle_hash) << ", '" << contract_addr_str - << "' (needs to be 32 bytes, see `chia plotnft show`)" << std::endl; + << "' (" << ex.what() << ", see `chia plotnft show`)" << std::endl; return -2; } } From 6ace7f6a169cb87ef8eabb50a93ea4aa4da9084b Mon Sep 17 00:00:00 2001 From: Max Wittal Date: Wed, 30 Jun 2021 18:58:33 +0200 Subject: [PATCH 10/11] usage update --- src/chia_plot.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/chia_plot.cpp b/src/chia_plot.cpp index 3dadd2a2..f89b48de 100644 --- a/src/chia_plot.cpp +++ b/src/chia_plot.cpp @@ -213,7 +213,7 @@ int main(int argc, char** argv) #endif "\n\n" "For and see output of `chia keys show`.\n" - "To plot for pools, specify hash instead of , see `chia plotnft show`.\n" + "To plot for pools, specify address instead of , see `chia plotnft show`.\n" " needs about 220 GiB space, it will handle about 25% of all writes. (Examples: './', '/mnt/tmp/')\n" " needs about 110 GiB space and ideally is a RAM drive, it will handle about 75% of all writes.\n" "Combined (tmpdir + tmpdir2) peak disk usage is less than 256 GiB.\n" From f63ed3f365e8d45c53dcb26ce5f138464824e319 Mon Sep 17 00:00:00 2001 From: Maxim Bolduc Date: Thu, 1 Jul 2021 10:26:16 -0400 Subject: [PATCH 11/11] Added -c option to readme Simply to prevent confusion about which options are available --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e81ae7af..7d796111 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Usage: -d, --finaldir arg Final directory (default = ) -w, --waitforcopy Wait for copy to start next plot -p, --poolkey arg Pool Public Key (48 bytes) + -c, --contract arg Pool Contract Address (64 chars) -f, --farmerkey arg Farmer Public Key (48 bytes) -G, --tmptoggle Alternate tmpdir/tmpdir2 (default = false) --help Print help