1. 22 6月, 2017 2 次提交
    • N
      Ref #19: Update round in generate_block · 0688238c
      Nathan Hourt 提交于
      Now we calculate the round changes and store them in generate_block.
      0688238c
    • N
      Ref #19: Progress, tests · 37e32542
      Nathan Hourt 提交于
      Progress:
      - When an account adds/removes stake, we now update votes for its
      approved producers
      - Name map<AccountName, AccountName> as RoundChanges, and define
      operator- such that RoundChanges = ProducerRound - ProducerRound
      
      Test the vote updates, making sure that producer votes are updated when
      an account adds stake
      
      TODO: Calculate the producer round changes in generate_block and add to
      block header
      37e32542
  2. 17 6月, 2017 1 次提交
  3. 16 6月, 2017 2 次提交
  4. 15 6月, 2017 2 次提交
    • N
      Ref #19: Implement producer scheduling · 566c1da9
      Nathan Hourt 提交于
      Calculating the new producer schedule based on votes is now implemented;
      however, the voting itself is not. :D But the code builds, and the tests
      pass. It's good progress, it's been a good day.
      
      Note that "the tests pass" means little at this stage, since I haven't
      written any new tests to exercise the new code. In other words, NEEDS
      TESTING!
      566c1da9
    • N
      Small Refactors · cb13ff0d
      Nathan Hourt 提交于
      - Rename config::ProducerCount -> config::BlocksPerRound
      - Add new config::VotedProducersPerRound = 20
      - Split up staked_balance_objects.hpp moving ProducerVotesObject to
      producer_objects.hpp
      cb13ff0d
  5. 14 6月, 2017 5 次提交
    • N
      Ref #19: Progress towards producer scheduling · 67114624
      Nathan Hourt 提交于
      Add producer schedule changes to block_header, so light clients can see
      the round changes by just watching block headers.
      
      Implement changing the producer schedule at round changes, first checking
      that the schedule changes in the block_header are correct, then applying
      them.
      
      TODO: Actually calculating the new round (right not it never changes)
      67114624
    • N
      Change block_header::producer from id_type to AccountName · 925be47f
      Nathan Hourt 提交于
      Wire protocol specs say never to put an id_type on the wire, but
      block_header contained the id_type for the producer which created it.
      Fix this by using the AccountName of the producer's owner instead.
      925be47f
    • N
      Resolve #17: Update blockchain configuration on round change · d0e2c256
      Nathan Hourt 提交于
      The producer-median-voted blockchain configuration parameters are now
      updated when the round changes. The previously expected-failing test
      case for this now passes
      d0e2c256
    • N
      Add chain_administration_interface · dc91c3ca
      Nathan Hourt 提交于
      This new interface allows the chain_controller to request a fresh round
      of producers and request the producers' median voted blockchain
      configuration.
      
      Net yet complete, but integrated sufficiently to get the tests to pass.
      dc91c3ca
    • N
      Move chain_initializer to its own header · 37f2b650
      Nathan Hourt 提交于
      And rename it to chain_initializer_interface
      37f2b650
  6. 13 6月, 2017 1 次提交
    • N
      Create initial producers with messages · 411da9d8
      Nathan Hourt 提交于
      Previously, we created the initial producers by manually making the
      producer_object's in prepare_database. Now we create them by creating
      Messages directing their creation, and invoking the normal
      CreateProducer infrastructure.
      411da9d8
  7. 09 6月, 2017 2 次提交
    • N
      Rename context.recipient->context.scope · e1691416
      Nathan Hourt 提交于
      Ohh, my life would've been easier during my last commit if that rename
      had actually been done rather than just commented about.
      e1691416
    • N
      Exodus of Genesis · 55a84709
      Nathan Hourt 提交于
      OK, so this turned out to be a **massive** refactor that I thought I'd
      never finish, and no, I don't remember everything that changed here, but
      I think it all worked out to be better than before, and almost all of it
      was fairly necessary/the best of available options. Whew. I am SO glad
      this is finally done.
      
      High level goal: Continue refining the native contracts (ref #15),
      specifically
      walling off their state into their own contract DBs rather than globally
      shared (read: stuff that race conditions are made of) general blockchain
      state.
      
      The first real change I made in this commit, which precipitated the
      avalanche of changes that followed before the project became consistent
      again, was to move the account balance out of account_object (globally
      shared) to an object known only to the Eos Contract, thus eliminating
      the possibility of race conditions/nondeterministic behavior.
      
      The trouble is, balances are set at genesis. Genesis is processed by
      chain_controller. chain_controller cannot know about balances, since
      those are an abstraction defined on top of the Eos contract, which is an
      abstraction defined on top of chain_controller. So all of genesis had to
      be reimagined, and quite a lot of architectural changes had to be made
      in order to create a logically consistent solution.
      
      Changes (probably incomplete):
       - Fix up notifications within the native contract to support
      precondition validation as well as application
      
       - Add notify handlers for CreateAccount to Eos and Staked Balance
      contracts
      
       - Move account's liquid balance of EOS from account_object to
      BalanceObject
      
       - Replace {producer,account}_object::id_type with AccountName most
      everywhere except block_header, which still contains a
      producer_object::id_type (potentially in violation of protocol
      standards, but I want to confirm that before fixing it)
         - Reason: The name is not significantly slower, as it's fixed length so
      no heap allocs, and it simplifies the code in quite a few places by
      allowing us to look up objects directly rather than indirectly by
      looking up an ID to get an intermediate object to get a handle for the
      object we really wanted
      
       - Replace native_system_contract_plugin with native_contract library
         - Reason: The plugin was getting in the way. The native system
      contract C++ implementation is simply too fundamental unless/until we
      have a scripted implementation that works until the native
      implementation gets installed
      
       - Completely reimagine genesis initialization, taking it largely out of
      the hands of chain_controller and putting it in the hands of
      native_contract
         - Reason: chain_controller understands relatively little about
      genesis. It understands global_property_object and producer_object, but
      not BalanceObject or StakedBalanceObject, etc... It also doesn't
      understand the native_contract, and things like installing the native
      contract, setting up accounts/balances, etc. all need to be handled by
      something... native_contract is the most logical place to put it.
      
      Sorry for the enormous commit... alas, this was the first time I got it
      all building again and passing tests in days.
      55a84709
  8. 06 6月, 2017 1 次提交
  9. 01 6月, 2017 1 次提交
    • D
      Removing Dependencies on Old Boost · a431618e
      Daniel Larimer 提交于
      - remove BTS P2P code which depended on fc threads which depended on
      deprecated boost::context API
      
      - remove fc submodule and making fc part of eos repository
      a431618e
  10. 30 5月, 2017 2 次提交
  11. 29 5月, 2017 1 次提交
    • N
      Refactor Complete · 842ef395
      Nathan Hourt 提交于
      This completes the refactor (to a buildable/tests passing state) from my
      last commit.
      842ef395
  12. 28 5月, 2017 1 次提交
    • N
      [INCOMPLETE] [NO BUILD] Refactor in progress · 750da775
      Nathan Hourt 提交于
      - Break apart chain_controller, so it doesn't inherit
      chainbase::database
      - Reorganize chain_controller, database (and whatever else) towards
      dependency injection
      - Reorganize chain_controller, database (and whatever else) towards RAII
      750da775
  13. 26 5月, 2017 1 次提交
    • N
      Rename: database->chain_controller · 1c6d3f7b
      Nathan Hourt 提交于
      Rename database class to chain_controller, as this class manages
      blockchain state and operations. Database was a misnomer.
      
      Next step: make chain_controller a free-standing class, rather than
      having it inherit from chainbase::database. This should give us a better
      architecture, especially for testing, going forward.
      1c6d3f7b
  14. 10 5月, 2017 1 次提交
    • N
      Ref #12, #17: Progress on chain configuration voting · 5e8b89bf
      Nathan Hourt 提交于
      Add support for producers specifying their votes on chain configuration
      values to CreateProducer and UpdateProducer.
      
      Add more tests around chain configuration, including a failing test case
      verifying that the blockchain itself handles configuration updates
      correctly. Presently this test fails because the chain does not yet
      attempt to keep track of rounds, thus it cannot update the configuration
      at the beginning of the round.
      5e8b89bf
  15. 05 5月, 2017 2 次提交
    • N
      Eliminate diamond inheritance · 74ff5713
      Nathan Hourt 提交于
      Remove chain::Transaction altogether, move its methods to
      chain::SignedTransaction, which solely inherits
      types::SignedTransaction, which solely inherits types::Transaction.
      Aside from having no diamonds, this also eliminates vtables in the
      Transaction types, which is necessary in order to store transactions in
      the database.
      74ff5713
    • N
      Unify types:: and chain:: types · b5b3dbb8
      Nathan Hourt 提交于
      We have a number of types defined in eos::chain like transaction,
      message, etc. which parallel autogenerated types in eos::types. They are
      identical in storage, but the chain types have various helper methods
      which the autogenerated types, of course, lack.
      
      I've unified these by letting the generated classes in types:: store the
      data, and having the chain:: types inherit these data stores and add
      functionality to them via methods.
      b5b3dbb8
  16. 04 5月, 2017 3 次提交
  17. 03 5月, 2017 1 次提交
    • N
      Improvements circa Types · 44548f35
      Nathan Hourt 提交于
      - Move types into eos::types namespace
      - Fix lots of bugs in types
      - Add tests of types (one still failing)
      44548f35
  18. 02 5月, 2017 2 次提交
    • N
      Cleanup/fixes · 5599ace3
      Nathan Hourt 提交于
      Break up files, fix a typo here and there... no interesting behavior
      changes.
      5599ace3
    • D
      Initial Support for Wren Scripts · fab7bd53
      Daniel Larimer 提交于
      - it is now possible to set an Apply Handler that can store/fetch data
      - TBD - actually reading the message being passed in and generating
      messages
      fab7bd53
  19. 01 5月, 2017 1 次提交
  20. 29 4月, 2017 1 次提交
  21. 28 4月, 2017 3 次提交
  22. 27 4月, 2017 4 次提交