0 Members and 1 Guest are viewing this topic.
void chain_database_impl::update_active_delegate_list( const full_block& block_data, const pending_chain_state_ptr& pending_state ) { std::vector<account_id_type> active_del; if( block_data.block_num % BTS_BLOCKCHAIN_NUM_DELEGATES == 0 ) { // perform a random shuffle of the sorted delegate list. active_del = self->next_round_active_delegates(); } else { active_del = self->get_active_delegates(); } auto rand_seed = fc::sha256::hash(self->get_current_random_seed()); uint32_t block_index = block_data.block_num % BTS_BLOCKCHAIN_NUM_DELEGATES; size_t num_del = active_del.size();uint32_t signee_delegate_index = -1;if (block_index!=0) { //from 0 to where the block signee, we need to swap them to tail to ensure they can only particapant once in a round. public_key_type block_signee; block_signee = block_data.signee(); //get delegate's active key for (uint32_t i=0;i<num_del;++i) { auto delegate_record = pending_state->get_account_record( active_del[i] ); FC_ASSERT( delegate_record.valid() && delegate_record->is_delegate() ); if (delegate_record->active_key()==block_signee) { signee_delegate_index = i; break; } }} for( uint32_t i = signee_delegate_index+1; i < num_del; ++i ) { for( uint32_t x = 0; x < 4 && i < num_del; ++x, ++i ) std::swap( active_del[i], active_del[[b]i+(rand_seed._hash[x]%(num_del-i))[/b]] ); rand_seed = fc::sha256::hash(rand_seed); } pending_state->set_property( chain_property_enum::active_delegate_list_id, fc::variant(active_del) ); }
You are making sure that a delegate can only participate in a round once on average. This means that a delegate does not know in advance when he will go...but when he does get to go he can mine his secrets to make sure he gets to go next.... So you have to wait until at least N delegates have gone before you can be secure. You gain nothing by shuffling every time. If you want to gain something then you need delegates to commit in advance to 101 secrets to be revealed in time and then shuffle every turn. A delegate would not be able to mine their secret on their turn because they have pre-committed to the next 101 secrets.
We have already established that you cannot shuffle after each block.
void chain_database_impl::update_active_delegate_list( const full_block& block_data, const pending_chain_state_ptr& pending_state ) { std::vector<account_id_type> active_del; if( block_data.block_num % BTS_BLOCKCHAIN_NUM_DELEGATES == 0 ) { // perform a random shuffle of the sorted delegate list. active_del = self->next_round_active_delegates(); } else { active_del = self->get_active_delegates(); } auto rand_seed = fc::sha256::hash(self->get_current_random_seed()); uint32_t block_index = block_data.block_num % BTS_BLOCKCHAIN_NUM_DELEGATES; size_t num_del = active_del.size();uint32_t signee_delegate_index = -1;if (block_index!=0) { //from 0 to where the block signee, we need to swap them to tail to ensure they can only particapant once in a round. public_key_type block_signee; block_signee = block_data.signee(); //get delegate's active key for (uint32_t i=0;i<num_del;++i) { auto delegate_record = pending_state->get_account_record( active_del[i] ); FC_ASSERT( delegate_record.valid() && delegate_record->is_delegate() ); if (delegate_record->active_key()==block_signee) { signee_delegate_index = i; break; } }} for( uint32_t i = signee_delegate_index+1; i < num_del; ++i ) { for( uint32_t x = 0; x < 4 && i < num_del; ++x, ++i ) std::swap( active_del[i], active_del[rand_seed._hash[x]%num_del] ); rand_seed = fc::sha256::hash(rand_seed); } pending_state->set_property( chain_property_enum::active_delegate_list_id, fc::variant(active_del) ); }
Changes:Improved UI:It shows progress and how many blocks to get result for each dice in progress.Improved security against delegates collusion: The more amount you dice, the more blocks you have to wait for the jackpot. The block count calculation is roughly like below:jackpot blocks = min(MAX_WAIT_BLOCKS,payout / delegate income)MAX_WAIT_BLOCKS is currently set to 50.Say, if you dice 100JDS with payout 20, and the delegate's income of the current block is 200, you'll need to wait for 10 blocks for the result. All the dices in the same block are sorted by payout and accumulated for the calculation of packout blocks.Say we have 3 dices:[50@10, 100@2, 500@2].We get payouts [500, 200, 1000] and they're sorted as [200,500,1000].For 100@2, the accumulated amount is 200 and jackpot is 2 blocks.For 50@10, the accumulated amount is 200+500=700 and jackpot is 4 blocks.For 500@2, the accumulated amount is 200+500+1000=1700 and jackpot is 9 blocks.The plan is to shuffle delegates after each block to improve security.Original dry run info.:
Quote from: Riverhead on October 11, 2014, 12:05:11 pmQuote from: zhangweis on October 11, 2014, 05:04:52 amDice competition draft plan:To encourage the participation of dry run testing, I'd like to host a dice competition for each dry run from dry run 03.Very cool!!One hole is that you can apply for many accounts, and dice all money with each of them. Any idea how to avoid this? Should we limit the participant number to something like 50? Or should we limit 1 account every forum account? Neither can prevent this.
Quote from: zhangweis on October 11, 2014, 05:04:52 amDice competition draft plan:To encourage the participation of dry run testing, I'd like to host a dice competition for each dry run from dry run 03.Very cool!!
Dice competition draft plan:To encourage the participation of dry run testing, I'd like to host a dice competition for each dry run from dry run 03.
Quote from: Gentso1 on October 11, 2014, 02:22:11 pmAGS funds come a donation address and thus can't be moved. We are trying to come up with a way to claim AGS stakes without importing the private key, into a DAC.https://bitsharestalk.org/index.php?topic=9318.0
AGS funds come a donation address and thus can't be moved. We are trying to come up with a way to claim AGS stakes without importing the private key, into a DAC.
Quote from: Riverhead on October 09, 2014, 12:57:56 pmCan you also comment on this thread? https://bitsharestalk.org/index.php?topic=8916.new#newA lot of concern about putting private keys into new DACs to claim distribution. Since this thread is about the previous lotto DAC you may already be following.Sorry I don't follow much about this DAC. The last time I checked it, it seemed not based on BTS code but some POW code.I can understand the concern about putting private keys to claim distribution. I think the cold storage solution can solve this elegantly but as it's not fully ready I have the idea that we can have the private keys to sign something like "claim JDS to JDSxxxxx" to move the fund to another (newly created) account.
Can you also comment on this thread? https://bitsharestalk.org/index.php?topic=8916.new#newA lot of concern about putting private keys into new DACs to claim distribution. Since this thread is about the previous lotto DAC you may already be following.
i just wanted to make the same/similar proposal.could you say something to the amount of shares of the initial genesis distribution? You wrote you wanted a similar allocation then DNS is this still in effect?so 5 Bn with starting and 5 Bn through delegate dilution?i will try to help on the dry run, but never did before something to build the sources from github.
Eh, won't compile. It's late, I'll mess with it tomorrow.
Quote from: Riverhead on October 10, 2014, 10:37:23 amI'm running Ubuntu 14.04. I used the url from github itself if that helps anyone.Thanks for the JDST .I'm not seeing the GUI in your screen shots. Just the stock Bitshares X wallet with JDST currency. I'll re-read the .ad's to see if I missed a step. To be honest I didn't read them and built it like Bitshares X.Thanks for pointing out. It's my fault as I didn't know git submodule thing. Seems the submodule is still on a branch. I tried fixing that with "git submodule add -b master [URL to Git repo]" and hope it will work. Please do submodule init and update and let me know if it works or not.
I'm running Ubuntu 14.04. I used the url from github itself if that helps anyone.Thanks for the JDST .I'm not seeing the GUI in your screen shots. Just the stock Bitshares X wallet with JDST currency. I'll re-read the .ad's to see if I missed a step. To be honest I didn't read them and built it like Bitshares X.
Quote from: zhangweis on October 10, 2014, 07:27:05 amQuote from: xeroc on October 10, 2014, 07:08:42 amit has been a fresh checkout .. I am running on boost 1.56.0Are you on master?*confirmed*
Quote from: xeroc on October 10, 2014, 07:08:42 amit has been a fresh checkout .. I am running on boost 1.56.0Are you on master?
it has been a fresh checkout .. I am running on boost 1.56.0
Built here without issue.riverdice - JDST6t2MrADeGpACfRm5Nm3unEkH82dvdvxwKCECNV8coVoywuWuJ9Also, is this the right blockchain?Code: [Select] "blockchain_id": "9329bb6fbb5d6fbc0e0872dd306536f66ea53250ee1e00602cb36bff05eff842", "symbol": "JDST", "name": "BitShares JDST", "version": 109, "db_version": 133, "genesis_timestamp": "2014-06-20T14:40:27",
"blockchain_id": "9329bb6fbb5d6fbc0e0872dd306536f66ea53250ee1e00602cb36bff05eff842", "symbol": "JDST", "name": "BitShares JDST", "version": 109, "db_version": 133, "genesis_timestamp": "2014-06-20T14:40:27",
Can you try from a fresh start? like removing the jds folder and git clone, git submodule init, git submodule update, cmake ., make.
Quote from: xeroc on October 09, 2014, 04:55:58 pmI am still getting a compile error:Code: [Select][ 30%] Building CXX object libraries/fc/CMakeFiles/fc.dir/src/thread/thread.cpp.oIn file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:In file included from /tmp/jds/libraries/fc/src/thread/thread_d.hpp:4:In file included from /usr/include/boost/thread.hpp:17:In file included from /usr/include/boost/thread/once.hpp:20:In file included from /usr/include/boost/thread/pthread/once_atomic.hpp:20:In file included from /usr/include/boost/atomic.hpp:12:/usr/include/boost/atomic/atomic.hpp:31:16: error: target of using declaration conflicts with declaration already in scopeusing atomics::atomic; ^/usr/include/boost/atomic/detail/atomic_template.hpp:668:7: note: target of using declarationclass atomic : ^/tmp/jds/libraries/fc/include/fc/thread/spin_yield_lock.hpp:4:30: note: conflicting declaration template<typename T> class atomic; ^In file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:In file included from /tmp/jds/libraries/fc/src/thread/thread_d.hpp:5:/tmp/jds/libraries/fc/src/thread/context.hpp:58:49: error: no member named 'default_stacksize' in 'boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>' size_t stack_size = bco::stack_allocator::default_stacksize() * 4; ~~~~~~~~~~~~~~~~~~~~~~^/tmp/jds/libraries/fc/src/thread/context.hpp:60:17: error: assigning to 'bc::fcontext_t *' (aka 'void **') from incompatible type 'fcontext_t' (aka 'void *') my_context = bc::make_fcontext( stack_ctx.sp, stack_ctx.size, sf); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~In file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:/tmp/jds/libraries/fc/src/thread/thread_d.hpp:74:44: error: implicit instantiation of undefined template 'boost::atomic<fc::task_base *>' boost::atomic<task_base*> task_in_queue; ^/tmp/jds/libraries/fc/include/fc/thread/spin_yield_lock.hpp:4:30: note: template is declared here template<typename T> class atomic; ^In file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:/tmp/jds/libraries/fc/src/thread/thread_d.hpp:34:41: error: implicit instantiation of undefined template 'boost::atomic<int>' static boost::atomic<int> cnt(0); ^/tmp/jds/libraries/fc/include/fc/thread/spin_yield_lock.hpp:4:30: note: template is declared here template<typename T> class atomic; ^5 errors generated.libraries/fc/CMakeFiles/fc.dir/build.make:146: recipe for target 'libraries/fc/CMakeFiles/fc.dir/src/thread/thread.cpp.o' failedmake[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/thread/thread.cpp.o] Error 1CMakeFiles/Makefile2:196: recipe for target 'libraries/fc/CMakeFiles/fc.dir/all' failedmake[1]: *** [libraries/fc/CMakeFiles/fc.dir/all] Error 2Makefile:76: recipe for target 'all' failedmake: *** [all] Error 2Can you try from a fresh start? like removing the jds folder and git clone, git submodule init, git submodule update, cmake ., make.
I am still getting a compile error:Code: [Select][ 30%] Building CXX object libraries/fc/CMakeFiles/fc.dir/src/thread/thread.cpp.oIn file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:In file included from /tmp/jds/libraries/fc/src/thread/thread_d.hpp:4:In file included from /usr/include/boost/thread.hpp:17:In file included from /usr/include/boost/thread/once.hpp:20:In file included from /usr/include/boost/thread/pthread/once_atomic.hpp:20:In file included from /usr/include/boost/atomic.hpp:12:/usr/include/boost/atomic/atomic.hpp:31:16: error: target of using declaration conflicts with declaration already in scopeusing atomics::atomic; ^/usr/include/boost/atomic/detail/atomic_template.hpp:668:7: note: target of using declarationclass atomic : ^/tmp/jds/libraries/fc/include/fc/thread/spin_yield_lock.hpp:4:30: note: conflicting declaration template<typename T> class atomic; ^In file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:In file included from /tmp/jds/libraries/fc/src/thread/thread_d.hpp:5:/tmp/jds/libraries/fc/src/thread/context.hpp:58:49: error: no member named 'default_stacksize' in 'boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>' size_t stack_size = bco::stack_allocator::default_stacksize() * 4; ~~~~~~~~~~~~~~~~~~~~~~^/tmp/jds/libraries/fc/src/thread/context.hpp:60:17: error: assigning to 'bc::fcontext_t *' (aka 'void **') from incompatible type 'fcontext_t' (aka 'void *') my_context = bc::make_fcontext( stack_ctx.sp, stack_ctx.size, sf); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~In file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:/tmp/jds/libraries/fc/src/thread/thread_d.hpp:74:44: error: implicit instantiation of undefined template 'boost::atomic<fc::task_base *>' boost::atomic<task_base*> task_in_queue; ^/tmp/jds/libraries/fc/include/fc/thread/spin_yield_lock.hpp:4:30: note: template is declared here template<typename T> class atomic; ^In file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:/tmp/jds/libraries/fc/src/thread/thread_d.hpp:34:41: error: implicit instantiation of undefined template 'boost::atomic<int>' static boost::atomic<int> cnt(0); ^/tmp/jds/libraries/fc/include/fc/thread/spin_yield_lock.hpp:4:30: note: template is declared here template<typename T> class atomic; ^5 errors generated.libraries/fc/CMakeFiles/fc.dir/build.make:146: recipe for target 'libraries/fc/CMakeFiles/fc.dir/src/thread/thread.cpp.o' failedmake[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/thread/thread.cpp.o] Error 1CMakeFiles/Makefile2:196: recipe for target 'libraries/fc/CMakeFiles/fc.dir/all' failedmake[1]: *** [libraries/fc/CMakeFiles/fc.dir/all] Error 2Makefile:76: recipe for target 'all' failedmake: *** [all] Error 2
[ 30%] Building CXX object libraries/fc/CMakeFiles/fc.dir/src/thread/thread.cpp.oIn file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:In file included from /tmp/jds/libraries/fc/src/thread/thread_d.hpp:4:In file included from /usr/include/boost/thread.hpp:17:In file included from /usr/include/boost/thread/once.hpp:20:In file included from /usr/include/boost/thread/pthread/once_atomic.hpp:20:In file included from /usr/include/boost/atomic.hpp:12:/usr/include/boost/atomic/atomic.hpp:31:16: error: target of using declaration conflicts with declaration already in scopeusing atomics::atomic; ^/usr/include/boost/atomic/detail/atomic_template.hpp:668:7: note: target of using declarationclass atomic : ^/tmp/jds/libraries/fc/include/fc/thread/spin_yield_lock.hpp:4:30: note: conflicting declaration template<typename T> class atomic; ^In file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:In file included from /tmp/jds/libraries/fc/src/thread/thread_d.hpp:5:/tmp/jds/libraries/fc/src/thread/context.hpp:58:49: error: no member named 'default_stacksize' in 'boost::coroutines::basic_standard_stack_allocator<boost::coroutines::stack_traits>' size_t stack_size = bco::stack_allocator::default_stacksize() * 4; ~~~~~~~~~~~~~~~~~~~~~~^/tmp/jds/libraries/fc/src/thread/context.hpp:60:17: error: assigning to 'bc::fcontext_t *' (aka 'void **') from incompatible type 'fcontext_t' (aka 'void *') my_context = bc::make_fcontext( stack_ctx.sp, stack_ctx.size, sf); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~In file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:/tmp/jds/libraries/fc/src/thread/thread_d.hpp:74:44: error: implicit instantiation of undefined template 'boost::atomic<fc::task_base *>' boost::atomic<task_base*> task_in_queue; ^/tmp/jds/libraries/fc/include/fc/thread/spin_yield_lock.hpp:4:30: note: template is declared here template<typename T> class atomic; ^In file included from /tmp/jds/libraries/fc/src/thread/thread.cpp:5:/tmp/jds/libraries/fc/src/thread/thread_d.hpp:34:41: error: implicit instantiation of undefined template 'boost::atomic<int>' static boost::atomic<int> cnt(0); ^/tmp/jds/libraries/fc/include/fc/thread/spin_yield_lock.hpp:4:30: note: template is declared here template<typename T> class atomic; ^5 errors generated.libraries/fc/CMakeFiles/fc.dir/build.make:146: recipe for target 'libraries/fc/CMakeFiles/fc.dir/src/thread/thread.cpp.o' failedmake[2]: *** [libraries/fc/CMakeFiles/fc.dir/src/thread/thread.cpp.o] Error 1CMakeFiles/Makefile2:196: recipe for target 'libraries/fc/CMakeFiles/fc.dir/all' failedmake[1]: *** [libraries/fc/CMakeFiles/fc.dir/all] Error 2Makefile:76: recipe for target 'all' failedmake: *** [all] Error 2
[ 75%] Building CXX object libraries/blockchain/CMakeFiles/bts_blockchain.dir/time.cpp.o[ 75%] Building CXX object libraries/blockchain/CMakeFiles/bts_blockchain.dir/extended_address.cpp.o[ 76%] Building CXX object libraries/blockchain/CMakeFiles/bts_blockchain.dir/address.cpp.o[ 76%] Building CXX object libraries/blockchain/CMakeFiles/bts_blockchain.dir/pts_address.cpp.o[ 77%] Building CXX object libraries/blockchain/CMakeFiles/bts_blockchain.dir/asset.cpp.o/home/liondani/bitshares_toolkit/libraries/blockchain/asset.cpp: In function ‘bts::blockchain::asset bts::blockchain::operator*(const bts::blockchain::asset&, const bts::blockchain::price&)’:/home/liondani/bitshares_toolkit/libraries/blockchain/asset.cpp:216:24: error: cannot convert ‘fc::bigint’ to ‘bts::blockchain::share_type {aka long int}’ in assignment rtn.amount = amnt; ^/home/liondani/bitshares_toolkit/libraries/blockchain/asset.cpp:241:25: error: cannot convert ‘fc::bigint’ to ‘bts::blockchain::share_type {aka long int}’ in assignment r.amount = result; ^make[2]: *** [libraries/blockchain/CMakeFiles/bts_blockchain.dir/asset.cpp.o] Error 1make[1]: *** [libraries/blockchain/CMakeFiles/bts_blockchain.dir/all] Error 2make: *** [all] Error 2liondani@liondani-GA-770T-D3L ~/bitshares_toolkit $
Are you on master? Have you tried "git submodule init" and "git submodule update"?
Build fails for me:Code: [Select][ 73%] Building CXX object libraries/net/CMakeFiles/bts_net.dir/message_oriented_connection.cpp.o/home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp:31:19: error: cannot declare field 'bts::net::detail::message_oriented_connection_impl::_sock' to be of abstract type 'bts::net::stcp_socket'In file included from /home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp:9:0:/home/peter/rpmbuild/BUILD/jds-master/libraries/net/include/bts/net/stcp_socket.hpp:12:7: note: because the following virtual functions are pure within 'bts::net::stcp_socket':In file included from /usr/include/fc/network/tcp_socket.hpp:4:0, from /home/peter/rpmbuild/BUILD/jds-master/libraries/net/include/bts/net/message_oriented_connection.hpp:2, from /home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp:8:/usr/include/fc/io/iostream.hpp:24:26: note: virtual std::size_t fc::istream::readsome(const std::shared_ptr<char>&, std::size_t, std::size_t)/usr/include/fc/io/iostream.hpp:46:27: note: virtual std::size_t fc::ostream::writesome(const std::shared_ptr<const char>&, std::size_t, std::size_t)/home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp: In member function 'void bts::net::detail::message_oriented_connection_impl::read_loop()':/home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp:143:57: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
[ 73%] Building CXX object libraries/net/CMakeFiles/bts_net.dir/message_oriented_connection.cpp.o/home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp:31:19: error: cannot declare field 'bts::net::detail::message_oriented_connection_impl::_sock' to be of abstract type 'bts::net::stcp_socket'In file included from /home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp:9:0:/home/peter/rpmbuild/BUILD/jds-master/libraries/net/include/bts/net/stcp_socket.hpp:12:7: note: because the following virtual functions are pure within 'bts::net::stcp_socket':In file included from /usr/include/fc/network/tcp_socket.hpp:4:0, from /home/peter/rpmbuild/BUILD/jds-master/libraries/net/include/bts/net/message_oriented_connection.hpp:2, from /home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp:8:/usr/include/fc/io/iostream.hpp:24:26: note: virtual std::size_t fc::istream::readsome(const std::shared_ptr<char>&, std::size_t, std::size_t)/usr/include/fc/io/iostream.hpp:46:27: note: virtual std::size_t fc::ostream::writesome(const std::shared_ptr<const char>&, std::size_t, std::size_t)/home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp: In member function 'void bts::net::detail::message_oriented_connection_impl::read_loop()':/home/peter/rpmbuild/BUILD/jds-master/libraries/net/message_oriented_connection.cpp:143:57: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
No time like the first time .Here are the instructions for BitSharesX. Since JDS is based on the bitshares_toolkit the steps will be nearly if not completely the same.http://wiki.bitshares.org/index.php/BuildInstructionsBitSharesX
how can i help?where can i find the client?maybe start with 1 official thread with links. i couldn't find something to download the client
Do you want me to bring it up at Friday's "State of the Blockchain" Mumble session? We can get you testers if that's what you need.
Thank you. Sorry if I jumped the gun. Just excited to see this in action.
Quote from: Riverhead on October 09, 2014, 04:31:31 amI see there are 17 dry runs. Are they place holders? Do you want any testing done? I build the source but the blockchain wasn't active. I did DR17 since it was the biggest number haha. Looking forward to this DAC.I cloned it from btsx and I'm using master.
I see there are 17 dry runs. Are they place holders? Do you want any testing done? I build the source but the blockchain wasn't active. I did DR17 since it was the biggest number haha. Looking forward to this DAC.